private IEnumerable <DecisionSupportResult> CheckMentalStatusOrPalpableSkullFracture(Patient patient, ICollection <DecisionSupportResult> results) { if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Yes || patient.Data.SignsOfPalpableSkullFracture == Trilean.Yes) { results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); } if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Unknown || patient.Data.SignsOfPalpableSkullFracture == Trilean.Unknown) { var dataNeeded = new List <string>(); if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SignsOfAlteredMentalStatus)); } if (patient.Data.SignsOfPalpableSkullFracture == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SignsOfPalpableSkullFracture)); } results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, dataNeeded)); return(results); } return(CheckHematomaLocSevereInjuryOrAbnormalBehavior(patient, results)); }
private IEnumerable <DecisionSupportResult> CheckHematomaLocSevereInjuryOrAbnormalBehavior(Patient patient, ICollection <DecisionSupportResult> results) { var findings = new List <bool> { patient.Data.OptScalpHematoma == Trilean.Yes, patient.Data.LossOfConsciousness == Trilean.Yes && patient.Data.LossOfConsciousnessTime.HasValue && patient.Data.LossOfConsciousnessTime.Value >= TimeSpan.FromSeconds(5), patient.Data.SevereMechanismOfInjury == Trilean.Yes, patient.Data.AbnormalBehaviorPerParentalAssessment == Trilean.Yes }; var findingCount = findings.Count(finding => finding); switch (findingCount) { case 0: if (patient.Data.OptScalpHematoma == Trilean.Unknown || patient.Data.LossOfConsciousness == Trilean.Unknown || (patient.Data.LossOfConsciousness == Trilean.Yes && patient.Data.LossOfConsciousnessTime == null) || patient.Data.SevereMechanismOfInjury == Trilean.Unknown || patient.Data.AbnormalBehaviorPerParentalAssessment == Trilean.Unknown) { var dataNeeded = new List <string>(); if (patient.Data.OptScalpHematoma == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.OptScalpHematoma)); } if (patient.Data.LossOfConsciousness == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.LossOfConsciousness)); } if (patient.Data.LossOfConsciousness == Trilean.Yes && patient.Data.LossOfConsciousnessTime == null) { dataNeeded.Add(nameof(patient.Data.LossOfConsciousnessTime)); } if (patient.Data.SevereMechanismOfInjury == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SevereMechanismOfInjury)); } if (patient.Data.AbnormalBehaviorPerParentalAssessment == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.AbnormalBehaviorPerParentalAssessment)); } results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, dataNeeded)); return(results); } results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtNotRecommended)); return(results); case 1: return(CheckWorseningSymptomsOrAge(patient, results)); default: results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); } }
private IEnumerable <DecisionSupportResult> CheckMentalStatusOrBasilarSkullFracture(Patient patient, ICollection <DecisionSupportResult> results) { if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Yes || patient.Data.SignsOfBasilarSkullFracture == Trilean.Yes) { results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); } if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Unknown || patient.Data.SignsOfBasilarSkullFracture == Trilean.Unknown) { var dataNeeded = new List <string>(); if (patient.Data.SignsOfAlteredMentalStatus == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SignsOfAlteredMentalStatus)); } if (patient.Data.SignsOfBasilarSkullFracture == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SignsOfBasilarSkullFracture)); } results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, dataNeeded)); return(results); } return(CheckLocVomitingSevereInjuryOrHeadache(patient, results)); }
public async Task <IEnumerable <DecisionSupportResult> > EvaluateAsync(Patient patient) { await Task.Delay(10); // TODO: remove this if other async methodology included var results = new List <DecisionSupportResult>(); if (patient.Data.CtImagingTaken == Trilean.Yes) { results.Add(DecisionSupportResult.NoAction(RuleLabel)); return(results); } switch (patient.Data.GlasgowComaScale) { case 15: // gcs is 15, so check age return(CheckAge(patient, results)); case var gcs when gcs == 13 || gcs == 14: results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); case null: results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, nameof(patient.Data.GlasgowComaScale))); return(results); default: results.Add(DecisionSupportResult.NoAction(RuleLabel)); return(results); } }
private IEnumerable <DecisionSupportResult> CheckWorseningSymptomsOrAge(Patient patient, ICollection <DecisionSupportResult> results) { if (patient.Data.WorseningSymptoms == Trilean.Yes || (!Equals(patient.Age, null) && patient.Age < ThreeMonthsOfAge)) { results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); } if (patient.Data.WorseningSymptoms == Trilean.Unknown || Equals(patient.Age, null)) { var dataNeeded = new List <string>(); if (patient.Data.WorseningSymptoms == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.WorseningSymptoms)); } if (Equals(patient.Age, null)) { dataNeeded.Add(nameof(patient.Age)); } results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, dataNeeded)); return(results); } results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, ObservationInHospital)); return(results); }
private static IEnumerable <DecisionSupportResult> MriRecommendedResults() { var results = new DecisionSupportResult[2]; results[0] = DecisionSupportResult.ActionRecommended(RuleLabel, MriRecommended); results[1] = DecisionSupportResult.NeedMoreData(RuleLabel, nameof(Observations.MriTaken)); return(results); }
private IEnumerable <DecisionSupportResult> CheckLocVomitingSevereInjuryOrHeadache(Patient patient, ICollection <DecisionSupportResult> results) { if (patient.Data.LossOfConsciousness == Trilean.Unknown || patient.Data.Vomiting == Trilean.Unknown || patient.Data.SevereMechanismOfInjury == Trilean.Unknown || patient.Data.SevereHeadache == Trilean.Unknown) { var dataNeeded = new List <string>(); if (patient.Data.LossOfConsciousness == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.LossOfConsciousness)); } if (patient.Data.Vomiting == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.Vomiting)); } if (patient.Data.SevereMechanismOfInjury == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SevereMechanismOfInjury)); } if (patient.Data.SevereHeadache == Trilean.Unknown) { dataNeeded.Add(nameof(patient.Data.SevereHeadache)); } results.Add(DecisionSupportResult.NeedMoreData(RuleLabel, dataNeeded)); return(results); } var findings = new List <Trilean> { patient.Data.LossOfConsciousness, patient.Data.Vomiting, patient.Data.SevereMechanismOfInjury, patient.Data.SevereHeadache }; var findingCount = findings.Count(finding => finding == Trilean.Yes); switch (findingCount) { case 0: results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtNotRecommended)); return(results); case 1: return(CheckWorseningSymptomsOrAge(patient, results)); default: results.Add(DecisionSupportResult.ActionRecommended(RuleLabel, CtRecommended)); return(results); } }
private static DecisionSupportResult DoNotHospitalize() { return(DecisionSupportResult.ActionRecommended(RuleLabel, HospitalizationUnnecessary)); }