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"); } }
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(); }
public void Analyze <TPatientKey>(HealthMeasurement <Guid, Guid> healthState, Patient <TPatientKey> patient) where TPatientKey : IEquatable <TPatientKey> { AnalysisResult = AnalysisStrategy.Analyze <Guid>(healthState, patient as Patient <Guid>); }