/// <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);
        }
예제 #2
0
        /// <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));
        }
예제 #3
0
        /// <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);
            }
        }