Example #1
0
        public async Task AddHealthMeasurementAsync(Guid patientId, HealthMeasurement <Guid, Guid> healthMeasurement)
        {
            var patient = await HealthContext
                          .Patients
                          .Include(pat => pat.HealthMeasurements)
                          .FirstAsync(pat => pat.Id.Equals(patientId));

            patient.HealthMeasurements.Add(healthMeasurement);
        }
        public async Task AddHealthMeasurementAsync(Guid patientId, HealthMeasurement <Guid, Guid> healthMeasurement, string token = null)
        {
            var patient = await _db.PatientRepository.RetrieveAsync(patientId);

            if (patient != null && healthMeasurement != null)
            {
                var lastMeasurementDatetime = await _db.PatientRepository.GetTimeOfLastPatientHealthMeasurementAsync(patientId);

                await _db.PatientRepository.AddHealthMeasurementAsync(patientId, healthMeasurement);

                if (lastMeasurementDatetime.Equals(DateTime.MinValue) || healthMeasurement.MeasurementTime > lastMeasurementDatetime)
                {
                    patient.IgnorableSignPair = new List <PatientSign <Guid, ushort> >(await _db.RetrieveIgnorableSignsAsync(patientId));
                    _analyzer.Analyze(healthMeasurement, patient);
                    var analysisResult = _analyzer.AnalysisResult;

                    if (analysisResult.Threats.Any() && patient.CurrentHealthState.GetType() != typeof(ThreateningHealthState))
                    {
                        patient.CurrentHealthState = ThreateningHealthState.GetInstance();
                    }
                    else if (patient.CurrentHealthState.GetType() != typeof(NormalHealthState))
                    {
                        patient.CurrentHealthState = NormalHealthState.GetInstance();
                    }
                }
                await _db.SaveAsync();
            }
            else if (patient == null)
            {
                throw new ArgumentException($"Didn't find patient with id {patientId}");
            }
            else
            {
                throw new ArgumentException("Health measurement can't be null");
            }
        }
Example #3
0
        public IAnalysisResult <Guid, Guid, Guid> Analyze <TPatientKey>(HealthMeasurement <Guid, Guid> healthState, Patient <TPatientKey> patient) where TPatientKey : IEquatable <TPatientKey>
        {
            AnalysisResult result = new AnalysisResult()
            {
                HealthState = healthState as HeartAndPressureHealthState
            };

            foreach (var sign in healthState.Signs)
            {
                if (IsIgnorableSign(patient, sign))
                {
                    continue;
                }

                var valueWithActivityRate = sign.Value * patient?.CurrentActivityState?.ChangeFactor ?? 1;

                //TODO: create property\entity\ repository which will store min max values (or create min max in signs again?)
                switch (sign.Type)
                {
                case "SYS":
                {
                    if (valueWithActivityRate < 95)
                    {
                        result.Notices.Add(new HealthNotice()
                            {
                                Sign = sign, Comment = "You have some small sys"
                            });
                    }
                    else if (valueWithActivityRate > 180)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"Call to your doctor, because u may get hypertensive crisis"
                            });
                    }
                    else if (valueWithActivityRate > 130)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"You have high blood pressure"
                            });
                    }
                    break;
                }

                case "DIA":
                {
                    if (valueWithActivityRate < 40)
                    {
                        result.Notices.Add(new HealthNotice()
                            {
                                Sign = sign, Comment = "You have some small sys"
                            });
                    }
                    else if (valueWithActivityRate > 120)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"Call to your doctor, because u may get hypertensive crisis"
                            });
                    }
                    else if (valueWithActivityRate > 80)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"You have high blood pressure"
                            });
                    }
                    break;
                }

                case "HeartRate":
                {
                    if (valueWithActivityRate < 60)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = "You have some small heart rate"
                            });
                    }
                    else if (valueWithActivityRate > 150)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"Call to your emergency, because u may get heart issue"
                            });
                    }
                    else if (valueWithActivityRate > 100)
                    {
                        result.Threats.Add(new HealthThreat()
                            {
                                Sign = sign, Comment = $"You have high heart rate"
                            });
                    }
                    break;
                }

                default:
                    throw new ArgumentException($"Unknown sign type: {sign.Type}");
                }
            }
            return(result);
        }
 public Task AddHealthMeasurementAsync(Guid patientId, HealthMeasurement <Guid, Guid> healthMeasurement, string token = null)
 {
     throw new NotImplementedException();
 }
Example #5
0
 public void Analyze <TPatientKey>(HealthMeasurement <Guid, Guid> healthState, Patient <TPatientKey> patient) where TPatientKey : IEquatable <TPatientKey>
 {
     AnalysisResult = AnalysisStrategy.Analyze <Guid>(healthState, patient as Patient <Guid>);
 }