public void Create(PatientC patient) { var pt = _mapper.Map(patient); Patient p = pt.Item1; PatientDetail pd = pt.Item2; using (var _db = new PatientDBEntities()) { _db.PatientDetails.Add(pd); _db.SaveChanges(); p.ID = pd.ID; _db.Patients.Add(p); _db.SaveChanges(); } }
/// <summary> /// Get all patients of a given Practitioner /// </summary> /// <param name="practitionerId"></param> /// <returns> a list of Patients </returns> public static async Task <List <Models.Patient> > GetPatientsOfPractitioner(string practitionerId) { List <Models.Patient> patientList = new List <Models.Patient>(); SortedSet <string> patientIdList = new SortedSet <string>(); try { var encounterQuery = new SearchParams() .Where("participant.identifier=http://hl7.org/fhir/sid/us-npi|" + practitionerId) .Include("Encounter.participant.individual") .Include("Encounter.patient") .LimitTo(LIMIT_ENTRY); Bundle Result = await Client.SearchAsync <Encounter>(encounterQuery); // implement paging for HAPI FHIR API Bundle while (Result != null) { foreach (var Entry in Result.Entry) { // Get patient id and add to a list Encounter encounter = (Encounter)Entry.Resource; string patientRef = encounter.Subject.Reference; string patientId = patientRef.Split('/')[1]; patientIdList.Add(patientId); } Result = Client.Continue(Result, PageDirection.Next); } // fetch patient data from the list of patient ids foreach (var patientId in patientIdList) { Bundle PatientResult = await Client.SearchByIdAsync <Hl7.Fhir.Model.Patient>(patientId); if (PatientResult.Entry.Count > 0) { // Map the FHIR Patient object to App's Patient object Hl7.Fhir.Model.Patient fhirPatient = (Hl7.Fhir.Model.Patient)PatientResult.Entry[0].Resource; PatientMapper mapper = new PatientMapper(); Models.Patient patient = mapper.Map(fhirPatient); patientList.Add(patient); } } } 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(patientList); }
/// <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); }