コード例 #1
0
            /// <summary>
            /// Handle
            /// </summary>
            /// <param name="request"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public override async Task <bool> Handle(RegisterQuickTestRequest request, CancellationToken cancellationToken)
            {
                Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false);

                ResultadoTestMedico test = new ResultadoTestMedico()
                {
                    FechaTest     = request.FechaTest.HasValue ? request.FechaTest.Value : DateTime.UtcNow,
                    Control       = request.Control,
                    Igg           = request.Igg,
                    Igm           = request.Igm,
                    IdFichaMedica = empleado.IdFichaMedica.Value
                };

                repository.Add(test);
                await repository.SaveChangesAsync().ConfigureAwait(false);

                return(true);
            }
コード例 #2
0
            /// <summary>
            /// Handle
            /// </summary>
            /// <param name="request"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public async override Task <bool> Handle(RegisterTemperatureMeditionSecurityRequest request, CancellationToken cancellationToken)
            {
                idEmpleado = request.IdEmployee;
                Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false);

                ParametroMedico paramTempe = await repositoryParametroMedico.GetAll().FirstOrDefaultAsync(c => c.Nombre == ParametroMedico.ParameterTypes.TemperaturaAlta.ToString()).ConfigureAwait(false);

                SeguimientoMedico seguimiento = new SeguimientoMedico()
                {
                    IdFichaMedica    = empleado.IdFichaMedica.Value,
                    Comentarios      = "Security Scan Temperature Medition",
                    Activo           = true,
                    FechaSeguimiento = request.MeditionDateTime.HasValue ? request.MeditionDateTime.Value : DateTimeOffset.Now
                };

                seguimiento.ValoracionParametroMedico = new List <ValoracionParametroMedico>()
                {
                    new ValoracionParametroMedico()
                    {
                        Valor = request.IsTemperatureOverThreshold,
                        IdParametroMedicoNavigation = paramTempe,
                    }
                };

                List <SeguimientoMedico> oldSeguimentos = await repositorySeguimientos.GetBy(c => c.IdFichaMedica == empleado.IdFichaMedica.Value &&
                                                                                             c.ValoracionParametroMedico.Select(d => d.IdParametroMedico).Any(e => e == paramTempe.Id))
                                                          .ToListAsync().ConfigureAwait(false);

                foreach (var item in oldSeguimentos)
                {
                    item.Activo = false;
                }

                repositorySeguimientos.UpdateRange(oldSeguimentos);


                repositorySeguimientos.Add(seguimiento);
                await this.repositorySeguimientos.SaveChangesAsync().ConfigureAwait(false);

                // creamos un nuevo pasaporte en base a la nueva info proporcionada
                var estados = await repositoryEstados.GetAll()
                              .Include(c => c.IdTipoEstadoNavigation)
                              .Include(c => c.IdColorEstadoNavigation)
                              .ToDictionaryAsync(e => e.Nombre);

                //-------------------------------------------------------------------------------------------

                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 = seguimiento.ValoracionParametroMedico.FirstOrDefault();
                var ultimosResul = await GetLastResultadoEncuestaAsync(empleado.IdFichaMedica.Value).ConfigureAwait(false);

                createPassportService.CreateWithStatedCalculated(empleado, request.MeditionDateTime ?? DateTimeOffset.UtcNow, estados,
                                                                 currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, ultimosResul.Fiebre,
                                                                 ultimosResul.Otros, ultimosResul.Contacto);

                //-------------------------------------------------------------------------------------------

                repositoryEmpleado.Update(empleado);
                await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false);

                return(true);
            }
コード例 #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);
            }
コード例 #4
0
            /// <summary>
            /// Handle
            /// </summary>
            /// <param name="request"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public async override Task <bool> Handle(RegisterGenerationManualRequest request, CancellationToken cancellationToken)
            {
                idEmpleado = request.IdEmployee;
                Empleado empleado = await ValidacionEmpleado(request.IdEmployee).ConfigureAwait(false);

                var oldState = empleado.Pasaporte
                               .SingleOrDefault(p => p.Activo == true)?.IdEstadoPasaporteNavigation;

                var newState = await repositoryEstados
                               .GetAll()
                               .Include(e => e.IdTipoEstadoNavigation)
                               .Include(e => e.IdColorEstadoNavigation)
                               .FirstOrDefaultAsync(s => s.EstadoId == (request.IsGreenPaper ? (int)EstadoPasaporte.PapertStatesId.NoSintomaticoPaper : (int)EstadoPasaporte.PapertStatesId.SintomaticoPaper)).ConfigureAwait(false);

                // Inicio de transacción
                //repositoryEstados.UnitOfWork.BeginTransaction();

                createPassportService.CreateFromChoosenState(empleado, request.RegistrationDateTime.HasValue ? request.RegistrationDateTime.Value : DateTimeOffset.Now, newState, true);

                //Si el pasaporte papel es verde calculamos el pasaporte
                if (request.IsGreenPaper)
                {
                    Guid guid = Guid.NewGuid();
                    List <ResultadoEncuestaSintomas> newResultadoEncuestaSintomas = (await repositoryTipoSintoma
                                                                                     .GetAll()
                                                                                     .ToListAsync().ConfigureAwait(false))
                                                                                    .Select(ts => new ResultadoEncuestaSintomas
                    {
                        IdTipoSintomaNavigation = ts,
                        Valor           = false,
                        GrupoRespuestas = guid,
                    }).ToList();

                    foreach (ResultadoEncuestaSintomas res in newResultadoEncuestaSintomas)
                    {
                        empleado.IdFichaMedicaNavigation.ResultadoEncuestaSintomas.Add(res);
                    }

                    //repositoryEmpleado.Update(empleado);
                    //await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false);

                    var estados = await repositoryEstados.GetAll()
                                  .Include(c => c.IdTipoEstadoNavigation)
                                  .Include(c => c.IdColorEstadoNavigation)
                                  .ToDictionaryAsync(e => e.Nombre);

                    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);

                    var ultimosResul = GetLastResultadoEncuesta(newResultadoEncuestaSintomas);


                    createPassportService.CreateWithStatedCalculated(empleado, request.RegistrationDateTime ?? DateTimeOffset.UtcNow, estados,
                                                                     currentPassport?.IdEstadoPasaporteNavigation, pcrList, lastAnalitIgG, lastAnalitIgM, lastTestRapido, lastFiebre, ultimosResul.Fiebre,
                                                                     ultimosResul.Otros, ultimosResul.Contacto);
                }

                repositoryEmpleado.Update(empleado);
                await repositoryEmpleado.SaveChangesAsync().ConfigureAwait(false);

                // commit de la transacción
                //repositoryEmpleado.UnitOfWork.Commit();

                return(true);
            }
コード例 #5
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());
        }