/// <summary> /// Get Data for ML Task /// </summary> /// <returns>a list of patients contain observation data for ML task</returns> public static async Task <PatientsList> GetData() { int count = 0; bool stop = false; PatientsList data = new PatientsList(); try { var PatientQuery = new SearchParams() .OrderBy("birthdate") .LimitTo(LIMIT_ENTRY); Bundle PatientResult = await Client.SearchAsync <Hl7.Fhir.Model.Patient>(PatientQuery); // paging to search for all patient until reaching NUMBER_OF_DATA_RECORD value while (PatientResult != null) { if (stop) { break; } foreach (var Entry in PatientResult.Entry) { Hl7.Fhir.Model.Patient fhirPatient = (Hl7.Fhir.Model.Patient)Entry.Resource; PatientMapper mapper = new PatientMapper(); Models.Patient patient = mapper.Map(fhirPatient); if (!AppContext.AnalysisData.Contains(patient) && !data.Contains(patient)) { var CholesterolQuery = new SearchParams() .Where("patient=" + patient.Id) .Where("code=2093-3") .OrderBy("-date") .LimitTo(1); // Only GetData for patient that has Cholesterol value Bundle CholesterolResult = await Client.SearchAsync <Hl7.Fhir.Model.Observation>(CholesterolQuery); if (CholesterolResult.Entry.Count > 0) { data.AddPatient(await GetDataForAnalysis(patient)); count++; } } // Stop if count reachs NUMBER_OF_DATA_RECORD if (count == NUMBER_OF_DATA_RECORD) { stop = true; break; } } PatientResult = Client.Continue(PatientResult, PageDirection.Next); } } catch (FhirOperationException FhirException) { System.Diagnostics.Debug.WriteLine("Fhir error message: " + FhirException.Message); } catch (Exception GeneralException) { System.Diagnostics.Debug.WriteLine("General error message: " + GeneralException.Message); } return(data); }