/// <inheritdoc/> public async Task <RequestResult <IEnumerable <ImmunizationView> > > GetImmunizations(string hdid) { this.logger.LogDebug($"Getting immunization from Immunization Service... {hdid}"); RequestResult <IEnumerable <ImmunizationView> > result = new RequestResult <IEnumerable <ImmunizationView> >(); string jwtString = this.httpContextAccessor.HttpContext.Request.Headers["Authorization"][0]; RequestResult <Patient> patientResult = this.patientDelegate.GetPatient(hdid, jwtString); if (patientResult.ResultStatus == ResultType.Success && patientResult.ResourcePayload != null) { ImmunizationRequest request = new ImmunizationRequest() { PersonalHealthNumber = patientResult.ResourcePayload.PersonalHealthNumber, DateOfBirth = patientResult.ResourcePayload.Birthdate, }; Hl7.Fhir.Model.Bundle fhirBundle = await this.immunizationDelegate.GetImmunizationBundle(request).ConfigureAwait(true); IEnumerable <Hl7.Fhir.Model.Immunization> immmsLiist = fhirBundle.Entry .Where(r => r.Resource is Hl7.Fhir.Model.Immunization) .Select(f => (Hl7.Fhir.Model.Immunization)f.Resource); List <ImmunizationView> immunizations = new List <ImmunizationView>(); foreach (Hl7.Fhir.Model.Immunization entry in immmsLiist) { ImmunizationView immunizationView = new ImmunizationView { Id = entry.Id, Name = entry.VaccineCode.Text, Status = entry.Status.ToString() !, OccurrenceDateTime = System.DateTime.Parse(entry.Occurrence.ToString() !, CultureInfo.InvariantCulture), }; foreach (Hl7.Fhir.Model.Coding code in entry.VaccineCode.Coding) { ImmunizationAgent immunizationAgent = new ImmunizationAgent { Code = code.Code, Name = code.Display, }; immunizationView.ImmunizationAgents.Add(immunizationAgent); } immunizations.Add(immunizationView); } result.ResultStatus = ResultType.Success; result.PageIndex = 0; result.PageSize = immunizations.Count; result.TotalResultCount = immunizations.Count; result.ResourcePayload = immunizations; } else { result.ResultError = patientResult.ResultError; } this.logger.LogDebug($"Finished getting immunization records {result.TotalResultCount}"); return(result); }
/// <inheritdoc/> public async Task <Bundle> GetImmunizationBundle(ImmunizationRequest request) { string filename = @"MockImmunizationResponse.json"; string msg = File.ReadAllText(filename); FhirJsonParser parser = new FhirJsonParser(); return(await System.Threading.Tasks.Task.Run(() => parser.Parse <Bundle>(msg)).ConfigureAwait(true)); }
/// <inheritdoc/> public async Task <Bundle> GetImmunizationBundle(ImmunizationRequest request) { Bundle responseMessage = new Bundle(); string requestJson = JsonSerializer.Serialize(request); Stopwatch timer = new Stopwatch(); timer.Start(); this.logger.LogDebug($"Getting immunization summary... {requestJson}"); using (HttpClient client = this.httpClientService.CreateUntrustedHttpClient()) { client.DefaultRequestHeaders.Accept.Clear(); // client.DefaultRequestHeaders.Add("Authorization", authorization); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json)); client.BaseAddress = new Uri(this.configuration.GetSection("Panorama").GetValue <string>("Url")); using (StringContent httpContent = new StringContent(requestJson, Encoding.UTF8, MediaTypeNames.Application.Json)) { httpContent.Headers.Add("X-API-Key", this.configuration.GetSection("Panorama").GetValue <string>("ApiKey")); httpContent.Headers.Add("X-PHN", requestJson); using (HttpResponseMessage response = await client.PostAsync(new Uri("api/ImmsSummary", UriKind.Relative), httpContent).ConfigureAwait(true)) { string payload = await response.Content.ReadAsStringAsync().ConfigureAwait(true); this.logger.LogDebug($"FHIR Payload: {payload}"); if (response.IsSuccessStatusCode) { FhirJsonParser parser = new FhirJsonParser(); responseMessage = parser.Parse <Bundle>(payload); this.logger.LogDebug($"FHIR Parsed. {responseMessage}"); } else { this.logger.LogError($"Error getting immunization summary. {requestJson}, {payload}"); throw new HttpRequestException($"Unable to connect to Panorama: ${response.StatusCode}"); } } } timer.Stop(); this.logger.LogDebug($"Finished getting immunization summary. {requestJson}, Time Elapsed: {timer.Elapsed}"); return(responseMessage); } }