def build_response_service(self, fhir_claim_response):
     service = ClaimResponseItem()
     service.sequenceLinkId = 2
     service_general_adjudication = ClaimResponseItemAdjudication()
     service_general_adjudication.category = ClaimResponseConverter.build_simple_codeable_concept(
         Stu3ClaimConfig.get_fhir_claim_item_general_adjudication_code())
     item_limitation = Money()
     item_limitation.value = self._TEST_SERVICE_LIMITATION_VALUE
     service_general_adjudication.amount = item_limitation
     service_general_adjudication.reason = ClaimResponseConverter \
         .build_codeable_concept(self._TEST_SERVICE_STATUS, Stu3ClaimConfig.get_fhir_claim_item_status_rejected_code())
     service_general_adjudication.value = self._TEST_SERVICE_QUANTITY_APPROVED
     service.adjudication.append(service_general_adjudication)
     item_rejection_adjudication = ClaimResponseItemAdjudication()
     item_rejection_adjudication.category = ClaimResponseConverter.build_simple_codeable_concept(
         Stu3ClaimConfig.
         get_fhir_claim_item_rejected_reason_adjudication_code())
     item_rejection_adjudication.reason = ClaimResponseConverter.build_codeable_concept(
         self._TEST_SERVICE_REJECTED_REASON)
     service.adjudication.append(item_rejection_adjudication)
     service.noteNumber = [2]
     fhir_claim_response.item.append(service)
     item_note = ClaimResponseProcessNote()
     item_note.number = 2
     item_note.text = self._TEST_SERVICE_JUSTIFICATION
     fhir_claim_response.processNote.append(item_note)
 def build_response_item(self, fhir_claim_response):
     item = ClaimResponseItem()
     item.sequenceLinkId = 1
     item_general_adjudication = ClaimResponseItemAdjudication()
     item_general_adjudication.category = ClaimResponseConverter.build_simple_codeable_concept(
         Stu3ClaimConfig.get_fhir_claim_item_general_adjudication_code())
     item_limitation = Money()
     item_limitation.value = self._TEST_ITEM_LIMITATION_VALUE
     item_general_adjudication.amount = item_limitation
     item_general_adjudication.reason = ClaimResponseConverter \
         .build_codeable_concept(self._TEST_ITEM_STATUS, Stu3ClaimConfig.get_fhir_claim_item_status_passed_code())
     item_general_adjudication.value = self._TEST_ITEM_QUANTITY_APPROVED
     item.adjudication.append(item_general_adjudication)
     item_rejection_adjudication = ClaimResponseItemAdjudication()
     item_rejection_adjudication.category = ClaimResponseConverter.build_simple_codeable_concept(
         Stu3ClaimConfig.
         get_fhir_claim_item_rejected_reason_adjudication_code())
     item_rejection_adjudication.reason = ClaimResponseConverter.build_codeable_concept(
         self._TEST_ITEM_REJECTED_REASON)
     item.adjudication.append(item_rejection_adjudication)
     item.noteNumber = [1]
     fhir_claim_response.item.append(item)
     item_note = ClaimResponseProcessNote()
     item_note.number = 1
     item_note.text = self._TEST_ITEM_JUSTIFICATION
     fhir_claim_response.processNote.append(item_note)
    def verify_fhir_instance(self, fhir_obj):
        self.assertIsNotNone(fhir_obj.patient.reference)
        self.assertEqual(str(self._TEST_UUID), fhir_obj.id)
        for identifier in fhir_obj.identifier:
            if identifier.type.coding[
                    0].code == Stu3IdentifierConfig.get_fhir_uuid_type_code():
                self.assertEqual(fhir_obj.id, identifier.value)
            elif identifier.type.coding[
                    0].code == Stu3IdentifierConfig.get_fhir_claim_code_type():
                self.assertEqual(self._TEST_CODE, identifier.value)

        self.assertEqual(self._TEST_DATE_FROM, fhir_obj.billablePeriod.start)
        self.assertEqual(self._TEST_DATE_TO, fhir_obj.billablePeriod.end)
        for diagnosis in fhir_obj.diagnosis:
            type = diagnosis.type[0].text
            code = diagnosis.diagnosisCodeableConcept.coding[0].code
            if type == ImisClaimIcdTypes.ICD_0.value:
                self.assertEqual(self._TEST_MAIN_ICD_CODE, code)

        self.assertEqual(self._TEST_CLAIMED, fhir_obj.total.value)
        self.assertEqual(self._TEST_DATE_CLAIMED, fhir_obj.created)
        self.assertIsNotNone(fhir_obj.facility.reference)
        for information in fhir_obj.information:
            if information.category.text == Stu3ClaimConfig.get_fhir_claim_information_explanation_code(
            ):
                self.assertEqual(self._TEST_EXPLANATION,
                                 information.valueString)
            elif information.category.text == Stu3ClaimConfig.get_fhir_claim_information_guarantee_id_code(
            ):
                self.assertEqual(self._TEST_GUARANTEE_ID,
                                 information.valueString)
        self.assertIsNotNone(fhir_obj.enterer.reference)
        self.assertEqual(self._TEST_VISIT_TYPE, fhir_obj.type.text)
        for item in fhir_obj.item:
            if item.category.text == Stu3ClaimConfig.get_fhir_claim_item_code(
            ):
                self.assertEqual(self._TEST_ITEM_CODE, item.service.text)
                self.assertEqual(self._TEST_ITEM_QUANTITY_PROVIDED,
                                 item.quantity.value)
                self.assertEqual(self._TEST_ITEM_PRICE_ASKED,
                                 item.unitPrice.value)
                self.assertEqual(
                    self._TEST_ITEM_EXPLANATION,
                    fhir_obj.information[item.informationLinkId[0] -
                                         1].valueString)
            elif item.category.text == Stu3ClaimConfig.get_fhir_claim_service_code(
            ):
                self.assertEqual(self._TEST_SERVICE_CODE, item.service.text)
                self.assertEqual(self._TEST_SERVICE_QUANTITY_PROVIDED,
                                 item.quantity.value)
                self.assertEqual(self._TEST_SERVICE_PRICE_ASKED,
                                 item.unitPrice.value)
                self.assertEqual(
                    self._TEST_SERVICE_EXPLANATION,
                    fhir_obj.information[item.informationLinkId[0] -
                                         1].valueString)
Exemple #4
0
 def build_fhir_adjudication_reason(cls, item):
     status = item.status
     text_code = None
     if status == 1:
         text_code = Stu3ClaimConfig.get_fhir_claim_item_status_passed_code(
         )
     elif status == 2:
         text_code = Stu3ClaimConfig.get_fhir_claim_item_status_rejected_code(
         )
     return cls.build_codeable_concept(status, text=text_code)
 def build_imis_information(cls, imis_claim, fhir_claim):
     if fhir_claim.information:
         for information in fhir_claim.information:
             category = information.category
             if category and category.text == Stu3ClaimConfig.get_fhir_claim_information_guarantee_id_code(
             ):
                 imis_claim.guarantee_id = information.valueString
             elif category and category.text == Stu3ClaimConfig.get_fhir_claim_information_explanation_code(
             ):
                 imis_claim.explanation = information.valueString
 def build_fhir_information(cls, fhir_claim, imis_claim):
     guarantee_id_code = Stu3ClaimConfig.get_fhir_claim_information_guarantee_id_code(
     )
     cls.build_fhir_string_information(fhir_claim.information,
                                       guarantee_id_code,
                                       imis_claim.guarantee_id)
     explanation_code = Stu3ClaimConfig.get_fhir_claim_information_explanation_code(
     )
     cls.build_fhir_string_information(fhir_claim.information,
                                       explanation_code,
                                       imis_claim.explanation)
Exemple #7
0
 def get_status_display_by_code(cls, code):
     display = None
     if code == 1:
         display = Stu3ClaimConfig.get_fhir_claim_status_rejected_code()
     elif code == 2:
         display = Stu3ClaimConfig.get_fhir_claim_status_entered_code()
     elif code == 4:
         display = Stu3ClaimConfig.get_fhir_claim_status_checked_code()
     elif code == 8:
         display = Stu3ClaimConfig.get_fhir_claim_status_processed_code()
     elif code == 16:
         display = Stu3ClaimConfig.get_fhir_claim_status_valuated_code()
     return display
 def build_imis_submit_items_and_services(cls, imis_claim, fhir_claim):
     imis_items = []
     imis_services = []
     if fhir_claim.item:
         for item in fhir_claim.item:
             if item.category:
                 if item.category.text == Stu3ClaimConfig.get_fhir_claim_item_code(
                 ):
                     cls.build_imis_submit_item(imis_items, item)
                 elif item.category.text == Stu3ClaimConfig.get_fhir_claim_service_code(
                 ):
                     cls.build_imis_submit_service(imis_services, item)
     # added additional attributes which will be used to create ClaimRequest in serializer
     imis_claim.submit_items = imis_items
     imis_claim.submit_services = imis_services
 def create_test_fhir_instance(self):
     fhir_claim = FHIRClaim()
     fhir_claim.id = self._TEST_CODE
     fhir_claim.patient = PatientConverter.build_fhir_resource_reference(
         self._TEST_INSUREE)
     claim_code = ClaimConverter.build_fhir_identifier(
         self._TEST_CODE,
         Stu3IdentifierConfig.get_fhir_identifier_type_system(),
         Stu3IdentifierConfig.get_fhir_claim_code_type())
     fhir_claim.identifier = [claim_code]
     billable_period = Period()
     billable_period.start = self._TEST_DATE_FROM
     billable_period.end = self._TEST_DATE_TO
     fhir_claim.billablePeriod = billable_period
     diagnoses = []
     ClaimConverter.build_fhir_diagnosis(diagnoses,
                                         self._TEST_DIAGNOSIS_CODE.code,
                                         ImisClaimIcdTypes.ICD_0.value)
     fhir_claim.diagnosis = diagnoses
     total = Money()
     total.value = self._TEST_CLAIMED
     fhir_claim.total = total
     fhir_claim.created = self._TEST_DATE_CLAIMED
     fhir_claim.facility = LocationConverter.build_fhir_resource_reference(
         self._TEST_HF)
     information = []
     guarantee_id_code = Stu3ClaimConfig.get_fhir_claim_information_guarantee_id_code(
     )
     ClaimConverter.build_fhir_string_information(information,
                                                  guarantee_id_code,
                                                  self._TEST_GUARANTEE_ID)
     explanation_code = Stu3ClaimConfig.get_fhir_claim_information_explanation_code(
     )
     ClaimConverter.build_fhir_string_information(information,
                                                  explanation_code,
                                                  self._TEST_EXPLANATION)
     fhir_claim.information = information
     fhir_claim.enterer = PractitionerConverter.build_fhir_resource_reference(
         self._TEST_CLAIM_ADMIN)
     fhir_claim.type = ClaimConverter.build_simple_codeable_concept(
         self._TEST_VISIT_TYPE)
     type = Stu3ClaimConfig.get_fhir_claim_item_code()
     ClaimConverter.build_fhir_item(fhir_claim, self._TEST_ITEM_CODE, type,
                                    self._TEST_ITEM)
     type = Stu3ClaimConfig.get_fhir_claim_service_code()
     ClaimConverter.build_fhir_item(fhir_claim, self._TEST_SERVICE_CODE,
                                    type, self._TEST_SERVICE)
     return fhir_claim
Exemple #10
0
 def build_fhir_item_rejected_reason_adjudication(cls, claim_response_item,
                                                  rejection_reason):
     item_adjudication = ClaimResponseItemAdjudication()
     item_adjudication.category = \
         cls.build_simple_codeable_concept(Stu3ClaimConfig.get_fhir_claim_item_rejected_reason_adjudication_code())
     item_adjudication.reason = cls.build_codeable_concept(rejection_reason)
     claim_response_item.adjudication.append(item_adjudication)
 def create_test_fhir_instance(self):
     fhir_claim_response = ClaimResponse()
     fhir_claim_response.id = self._TEST_CODE
     pk_id = ClaimResponseConverter.build_fhir_identifier(
         self._TEST_ID,
         Stu3IdentifierConfig.get_fhir_identifier_type_system(),
         Stu3IdentifierConfig.get_fhir_id_type_code())
     claim_code = ClaimResponseConverter.build_fhir_identifier(
         self._TEST_CODE,
         Stu3IdentifierConfig.get_fhir_identifier_type_system(),
         Stu3IdentifierConfig.get_fhir_claim_code_type())
     fhir_claim_response.identifier = [pk_id, claim_code]
     display = Stu3ClaimConfig.get_fhir_claim_status_rejected_code()
     fhir_claim_response.outcome = ClaimResponseConverter.build_codeable_concept(
         self._TEST_STATUS, system=None, text=display)
     fhir_payment = ClaimResponsePayment()
     fhir_payment.adjustmentReason = ClaimResponseConverter.build_simple_codeable_concept(
         self._TEST_ADJUSTMENT)
     fhir_payment.date = self._TEST_DATE_PROCESSED
     fhir_claim_response.payment = fhir_payment
     total_approved = Money()
     total_approved.value = self._TEST_APPROVED
     fhir_claim_response.totalBenefit = total_approved
     fhir_error = ClaimResponseError()
     fhir_error.code = ClaimResponseConverter.build_codeable_concept(
         self._TEST_REJECTION_REASON)
     fhir_claim_response.error = [fhir_error]
     feedback = Feedback()
     feedback.id = self._TEST_FEEDBACK_ID
     fhir_claim_response.communicationRequest = \
         [CommunicationRequestConverter.build_fhir_resource_reference(feedback)]
     self.build_response_item(fhir_claim_response)
     self.build_response_service(fhir_claim_response)
     return fhir_claim_response
Exemple #12
0
    def build_fhir_items(cls, fhir_claim_response, imis_claim):
        for claim_item in cls.generate_fhir_claim_items(imis_claim):
            type = claim_item.category.text
            code = claim_item.service.text

            if type == Stu3ClaimConfig.get_fhir_claim_item_code():
                serviced = cls.get_imis_claim_item_by_code(code, imis_claim.id)
            elif type == Stu3ClaimConfig.get_fhir_claim_service_code():
                serviced = cls.get_service_claim_item_by_code(
                    code, imis_claim.id)
            else:
                raise FHIRRequestProcessException([
                    'Could not assign category {} for claim_item: {}'.format(
                        type, claim_item)
                ])

            cls._build_response_items(fhir_claim_response, claim_item,
                                      serviced, serviced.rejection_reason)
Exemple #13
0
 def build_fhir_item_general_adjudication(cls, claim_response_item, item):
     item_adjudication = ClaimResponseItemAdjudication()
     item_adjudication.category = \
         cls.build_simple_codeable_concept(Stu3ClaimConfig.get_fhir_claim_item_general_adjudication_code())
     item_adjudication.reason = cls.build_fhir_adjudication_reason(item)
     item_adjudication.value = item.qty_approved
     limitation_value = Money()
     limitation_value.value = item.limitation_value
     item_adjudication.amount = limitation_value
     claim_response_item.adjudication.append(item_adjudication)
 def build_fhir_items(cls, fhir_claim_response, imis_claim):
     for claim_item in cls.generate_fhir_claim_items(imis_claim):
         type = claim_item.category.text
         code = claim_item.service.text
         if type == Stu3ClaimConfig.get_fhir_claim_item_code():
             imis_item = cls.get_imis_claim_item_by_code(
                 code, imis_claim.id)
             cls.build_fhir_item(fhir_claim_response,
                                 claim_item,
                                 imis_item,
                                 rejected_reason=imis_item.rejection_reason)
         elif type == Stu3ClaimConfig.get_fhir_claim_service_code():
             imis_service = cls.get_service_claim_item_by_code(
                 code, imis_claim.id)
             cls.build_fhir_item(
                 fhir_claim_response,
                 claim_item,
                 imis_service,
                 rejected_reason=imis_service.rejection_reason)
 def build_fhir_item(cls, fhir_claim, code, item_type, item):
     fhir_item = FHIRClaimItem()
     fhir_item.sequence = FhirUtils.get_next_array_sequential_id(
         fhir_claim.item)
     unit_price = Money()
     unit_price.value = item.price_asked
     fhir_item.unitPrice = unit_price
     fhir_quantity = Quantity()
     fhir_quantity.value = item.qty_provided
     fhir_item.quantity = fhir_quantity
     fhir_item.service = cls.build_simple_codeable_concept(code)
     fhir_item.category = cls.build_simple_codeable_concept(item_type)
     item_explanation_code = Stu3ClaimConfig.get_fhir_claim_item_explanation_code(
     )
     information = cls.build_fhir_string_information(
         fhir_claim.information, item_explanation_code, item.explanation)
     if information:
         fhir_item.informationLinkId = [information.sequence]
     fhir_claim.item.append(fhir_item)
 def build_items_for_imis_services(cls, fhir_claim, imis_claim):
     for service in cls.get_imis_services_for_claim(imis_claim):
         if service.service:
             type = Stu3ClaimConfig.get_fhir_claim_service_code()
             cls.build_fhir_item(fhir_claim, service.service.code, type,
                                 service)
 def build_items_for_imis_item(cls, fhir_claim, imis_claim):
     for item in cls.get_imis_items_for_claim(imis_claim):
         if item.item:
             type = Stu3ClaimConfig.get_fhir_claim_item_code()
             cls.build_fhir_item(fhir_claim, item.item.code, type, item)