/// <summary> /// Get suggested doses for a drug. /// </summary> /// <param name="drug">Drug model with data from the json input.</param> /// <returns>List of suggested doses.</returns> public static IList <SuggestedDose> GetSuggestedDoses(Drug drug) { IList <SuggestedDose> suggestedDoses = new List <SuggestedDose>(); SuggestedDose suggestedDose = new SuggestedDose(); foreach (IndicationAndDoseGroups indicationGroup in drug.IndicationsDose.IndicationAndDoseGroups) { suggestedDoses.Add(ProcessIndicationAndDoseGroup(indicationGroup)); } return(suggestedDoses); }
private static SuggestedDose ProcessIndicationAndDoseGroup(IndicationAndDoseGroups indicationGroup) { SuggestedDose dose = new SuggestedDose(); dose.Indications = indicationGroup.TherapeuticIndications.Select(x => x.Indication).ToList(); string[] routes = indicationGroup.RoutesAndPatientGroups.Select(x => x.RoutesOfAdministration.Select(y => y.Route).FirstOrDefault()).FirstOrDefault().Split(" "); string route = CapitalizeWord(routes[1]); string method = (routes.Length > 2) ? CapitalizeWord(routes[2]) : string.Empty; DoseAdministration doseAdministration = new DoseAdministration { Route = CapitalizeWord(routes[1]), Method = method }; RoutesAndPatientGroups routesAndPatientGroups = indicationGroup.RoutesAndPatientGroups.FirstOrDefault(); if (routesAndPatientGroups != null) { foreach (PatientGroup patientGroup in routesAndPatientGroups.PatientGroups) { DoseOutput output = new DoseOutput(); output.AgeBand = new AgeBand { AgeLow = new ValueObject { Value = patientGroup.Age.From, Unit = CheckYearFormat(patientGroup.Age.FromUnit) }, AgeHigh = new ValueObject { Value = patientGroup.Age.To, Unit = CheckYearFormat(patientGroup.Age.ToUnit) } }; output.Flags = new Flag { Frequency = CalculateFrequency(patientGroup.DoseStatement.DoseInstruction.FirstOrDefault()) }; output.Quantity = CalculateQuantity(patientGroup.DoseStatement.DoseInstruction.FirstOrDefault()); doseAdministration.Doses.Add(output); } } dose.DoseAdministrations = new List <DoseAdministration> { doseAdministration }; return(dose); }