public static MedicalEditsRequestModel GetMedicalEditsClientRequest()
        {
            var medicalEditsRequestModel = new MedicalEditsRequestModel
            {
                username      = "",
                password      = "",
                services      = "1",
                isStrictCheck = "0",
                claims        = new List <Claim>
                {
                    new Claim
                    {
                        claimID = "DHA-F-0045687-TPA333-201910152304421-143",
                        claimSubmissionActivityList = new List <ClaimSubmissionActivity>
                        {
                            new ClaimSubmissionActivity
                            {
                                activityCode   = "0043-197703-0511",
                                activityId     = "1",
                                activitySource = "CURRENT",
                                activityStart  = "15/10/2019",
                                activityType   = "5",
                                duration       = "10",
                                quantity       = "5"
                            }
                        },
                        claimSubmissionDiagnosisList = new List <ClaimSubmissionDiagnosis>
                        {
                            new ClaimSubmissionDiagnosis
                            {
                                diagnosisCode   = "R25.0",
                                diagnosisSource = "CURRENT",
                                diagnosisType   = "Principal"
                            }
                        },
                        claimSubmissionPerson = new ClaimSubmissionPerson
                        {
                            dateOfBirth = "22/01/2018",
                            gender      = "M",
                            height      = 80,
                            nationalId  = "2291987021",
                            patientId   = "39",
                            weight      = 20
                        },
                        payerId    = "INS004",
                        providerId = "DHA-F-0045687"
                    }
                }
            };

            return(medicalEditsRequestModel);
        }
        private MedicalEditsRequestModel ToMedicalEditsRequestModel(MedicalEditsViewModel request)
        {
            try
            {
                //set medical Service setting data
                var medicalEditsRequest = new MedicalEditsRequestModel
                {
                    password      = medicalEditsSetting.Password,
                    username      = medicalEditsSetting.UserName,
                    services      = string.Join(',', medicalEditsSetting.Services),
                    isStrictCheck = medicalEditsSetting.IsStrictCheck
                };

                // prepare claim data
                var claim = new Claim
                {
                    claimID    = request.ClaimId,
                    providerId = request.ProviderId,
                    payerId    = request.PayerId
                };

                // set claim activities
                claim.claimSubmissionActivityList = request.ActivityList?.Select(activity => new ClaimSubmissionActivity
                {
                    activityCode      = activity.ActivityCode,
                    activityId        = activity.Id.ToString(),
                    activitySource    = activity.ActivitySource,
                    activityStart     = activity.StartDate.ToLocalTime().ToString("dd/MM/yyyy"),
                    activityType      = activity.ActivityType,
                    clinician         = activity.Clinician,
                    orderingClinician = activity.OrderingClinician,
                    duration          = activity.Duration,
                    quantity          = activity.Quantity,
                    unit = activity.Unit,
                    claimSubmissionObservationList = activity.ObservationList != null
                            ? activity.ObservationList.Select(obs => new ClaimSubmissionObservation
                    {
                        observationCode      = obs.Code,
                        observationValue     = obs.Value,
                        observationValueType = obs.ValueType,
                        observationType      = obs.Type,
                    }).ToList()
                            : null
                }).ToList();

                // add ActiveDrugs as history for the patient
                if (request.ActiveDrugs?.Count > 0)
                {
                    var i = 1;
                    claim.claimSubmissionActivityList.AddRange(request.ActiveDrugs.Select(activity => new ClaimSubmissionActivity
                    {
                        activityCode      = activity.ActivityCode,
                        activityId        = $"ActiveDrug-{i++}",
                        activitySource    = "HISTORY",
                        activityStart     = activity.StartDate.ToLocalTime().ToString("dd/MM/yyyy"),
                        activityType      = activity.ActivityType,
                        clinician         = activity.Clinician,
                        orderingClinician = activity.OrderingClinician,
                        duration          = activity.Duration,
                        quantity          = activity.Quantity,
                        unit = activity.Unit,
                        claimSubmissionObservationList = activity.ObservationList != null
                                ? activity.ObservationList.Select(obs => new ClaimSubmissionObservation
                        {
                            observationCode      = obs.Code,
                            observationValue     = obs.Value,
                            observationValueType = obs.ValueType,
                            observationType      = obs.Type,
                        }).ToList()
                                : null
                    }));
                }

                // set claim diagnosis
                claim.claimSubmissionDiagnosisList = request.DiagnosisList != null
                    ? request.DiagnosisList.Select(x => new ClaimSubmissionDiagnosis()
                {
                    diagnosisCode   = x.Code,
                    diagnosisSource = x.Source,
                    diagnosisType   = x.Type
                }).ToList()
                    : null;

                // add ChronicDiseases as dignosis history for the patient
                if (request.ChronicDiseases?.Count > 0)
                {
                    var filteredChronicDiseases = request.ChronicDiseases.Where(a => !
                                                                                claim.claimSubmissionDiagnosisList.Select(c => c.diagnosisCode).Contains(a.Code))?.Select(c => new ClaimSubmissionDiagnosis
                    {
                        diagnosisCode   = c.Code,
                        diagnosisType   = "Secondary",       // set the type of dignosis as Secondary for ChronicDiseases
                        diagnosisSource = "HISTORY",
                    })
                                                  .ToList();

                    if (filteredChronicDiseases?.Count > 0)
                    {
                        claim.claimSubmissionDiagnosisList.AddRange(filteredChronicDiseases);
                    }
                }

                // set ClaimSubmissionPerson
                var patient = _repository.Find <Patient>(
                    p => p.Id == request.PatientId && !p.IsDeleted && p.DateOfBirth > DateTimeOffset.MinValue);

                if (patient != null)
                {
                    claim.claimSubmissionPerson = new ClaimSubmissionPerson
                    {
                        dateOfBirth = patient.DateOfBirth.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture),
                        nationalId  = patient.NationalId,
                        patientId   = patient.Code,
                        weight      = request.Weight,
                        height      = request.height
                    };
                }

                // set ClaimSubmissionAllergy
                if (request.AllergiesList != null && request.AllergiesList.Count != 0)
                {
                    claim.claimSubmissionAllergyList = request.AllergiesList.Select(p => new ClaimSubmissionAllergy()
                    {
                        allergyCode = p.Code,
                        allergyId   = p.Code
                    }).ToList();
                }

                medicalEditsRequest.claims = new List <Claim>();
                medicalEditsRequest.claims.Add(claim);

                return(medicalEditsRequest);
            }
            catch
            {
                return(null);
            }
        }
Beispiel #3
0
 public MedicalEditsClientTest()
 {
     _medicalEditsClientRequest = MedicalEditsDataProvider.GetMedicalEditsClientRequest();
 }
        /// <summary>
        ///  Medical Service API to Get Medical Edits
        /// </summary>
        /// <param name="medicalEditsRequest"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ClaimEditResponse> GetClaimsEditsAsync(MedicalEditsRequestModel medicalEditsRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            var client_     = _httpClient;
            var urlBuilder_ = new StringBuilder();

            //set the url of medical edit service
            urlBuilder_.Append(client_?.BaseAddress != null ? client_.BaseAddress?.OriginalString?.TrimEnd('/') : "").Append("/getClaimsEdits");

            try
            {
                using (var request_ = new HttpRequestMessage())
                {
                    var content_ = new StringContent(JsonConvert.SerializeObject(medicalEditsRequest, _settings.Value));
                    content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
                    request_.Content             = content_;
                    request_.Method = new HttpMethod("POST");
                    request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
                    var url_ = urlBuilder_.ToString();
                    request_.RequestUri = new System.Uri(url_, UriKind.Absolute);
                    var response_ = await client_.SendAsync(request_, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

                    try
                    {
                        var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
                        if (response_.Content != null && response_.Content.Headers != null)
                        {
                            foreach (var item_ in response_.Content.Headers)
                            {
                                headers_[item_.Key] = item_.Value;
                            }
                        }

                        var status_ = ((int)response_.StatusCode).ToString();
                        // check the status code returned from the response
                        // getClaimsEdits API return 200 status code, the sucess field returned in response indicates Whether the service call is successful or not
                        if (status_ == "200")
                        {
                            var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);

                            var result_ = default(ClaimEditResponse);
                            try
                            {
                                result_ = JsonConvert.DeserializeObject <ClaimEditResponse>(responseData_, _settings.Value);
                                return(result_);
                            }
                            catch (Exception exception_)
                            {
                                throw new MedicalEditsAPIException("Could not deserialize the response body.", (int)response_.StatusCode, responseData_, headers_, exception_);
                            }
                        }
                        else
                        {
                            var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);

                            throw new MedicalEditsAPIException("The HTTP status code of the response was not expected (" + (int)response_.StatusCode + ").", (int)response_.StatusCode, responseData_, headers_, null);
                        }
                    }
                    finally
                    {
                        if (response_ != null)
                        {
                            response_.Dispose();
                        }
                    }
                }
            }
            finally
            {
            }
        }