示例#1
0
 def build_fhir_diagnosis(cls, diagnoses, icd_code, icd_type):
     if icd_code is None:
         raise FHIRRequestProcessException(['ICD code cannot be null'])
     if icd_type is None:
         raise FHIRRequestProcessException(['ICD Type cannot be null'])
     claim_diagnosis = ClaimDiagnosis()
     claim_diagnosis.sequence = FhirUtils.get_next_array_sequential_id(
         diagnoses)
     claim_diagnosis.diagnosisReference = ConditionConverter.build_fhir_resource_reference(
         icd_code)
     claim_diagnosis.type = [cls.build_codeable_concept(icd_type)]
     diagnoses.append(claim_diagnosis)
 def get_resource_id_from_reference(cls, reference):
     resource_id = None
     if reference:
         reference = reference.reference
         if isinstance(reference, str) and '/' in reference:
             path, resource_id = reference.rsplit('/', 1)
     if resource_id is None:
         raise FHIRRequestProcessException(
             ['Could not fetch id from reference: {}'])
     return resource_id
示例#3
0
 def build_fhir_names_for_person(cls, person_obj):
     if not hasattr(person_obj, 'last_name') and not hasattr(
             person_obj, 'other_names'):
         raise FHIRRequestProcessException([
             gettext(
                 'Missing `last_name` and `other_names` for IMIS object')
         ])
     name = HumanName()
     name.use = NameUse.USUAL.value
     name.family = person_obj.last_name
     name.given = [person_obj.other_names]
     return name
示例#4
0
 def build_activity_definition_extension(cls, extension):
     #extension = Extension()
     imis_service = ClaimService()
     reference = Reference()
     extension.valueReference = reference
     extension.url = "ActivityDefinition"
     imis_service.service = Service()
     if imis_service.service is None:
         raise FHIRRequestProcessException(
             ['Cannot construct activity on None (service) '])
     extension.valueReference = ActivityDefinitionConverter.build_fhir_resource_reference(
         imis_service.service)
     return extension
示例#5
0
 def build_medication_extension(cls, extension):
     #extension = Extension()
     imis_item = ClaimItem()
     reference = Reference()
     extension.valueReference = reference
     extension.url = "Medication"
     imis_item.item = Item()
     if imis_item.item is None:
         raise FHIRRequestProcessException(
             ['Cannot construct medication on  None (Item) '])
     extension.valueReference = MedicationConverter.build_fhir_resource_reference(
         imis_item.item)
     return extension
示例#6
0
 def build_fhir_uuid_identifier(cls, identifiers, imis_object):
     if hasattr(imis_object,'uuid') and imis_object.uuid is not None:
         identifier = cls.build_fhir_identifier(imis_object.uuid,
                                                R4IdentifierConfig.get_fhir_identifier_type_system(),
                                                R4IdentifierConfig.get_fhir_uuid_type_code())
         identifiers.append(identifier)
     elif hasattr(imis_object,'id') and imis_object.id is not None:
         identifier = cls.build_fhir_identifier(imis_object.id,
                                                R4IdentifierConfig.get_fhir_identifier_type_system(),
                                                R4IdentifierConfig.get_fhir_uuid_type_code())
         identifiers.append(identifier)
     else:
         raise FHIRRequestProcessException(['Cannot construct an identifier, the object has no uuid nor id: {}'])
 def create(self, validated_data):
     claim_admin_id = validated_data.get('id')
     claim_admin = None
     if claim_admin_id:
         claim_admin = ClaimAdmin.objects.get(pk=claim_admin_id)
     if not claim_admin:
         raise FHIRRequestProcessException([
             gettext('Missing Practitioner for id {}').format(
                 claim_admin_id)
         ])
     claim_admin.health_facility_id = validated_data.get(
         'health_facility_id', claim_admin.health_facility_id)
     claim_admin.save()
     return claim_admin
示例#8
0
 def to_fhir_obj(cls, imis_claim):
     fhir_claim = FHIRClaim()
     cls.build_fhir_pk(fhir_claim, imis_claim.uuid)
     fhir_claim.created = imis_claim.date_claimed.isoformat()
     if imis_claim.health_facility is None:
         raise FHIRRequestProcessException([
             'Cannot construct a %s claim if HF is None' % (imis_claim.uuid)
         ])
     fhir_claim.facility = HealthcareServiceConverter.build_fhir_resource_reference(
         imis_claim.health_facility, 'Location',
         imis_claim.health_facility.code)
     cls.build_fhir_identifiers(fhir_claim, imis_claim)
     if imis_claim.insuree is None:
         raise FHIRRequestProcessException([
             'Cannot construct a %s claim if Insuree is None' %
             (imis_claim.uuid)
         ])
     fhir_claim.patient = PatientConverter.build_fhir_resource_reference(
         imis_claim.insuree, 'Patient', imis_claim.insuree.chf_id)
     cls.build_fhir_billable_period(fhir_claim, imis_claim)
     cls.build_fhir_diagnoses(fhir_claim, imis_claim)
     cls.build_fhir_total(fhir_claim, imis_claim)
     if imis_claim.admin is not None:
         fhir_claim.enterer = PractitionerConverter.build_fhir_resource_reference(
             imis_claim.admin, 'Practitioner')
     #else:
     #    raise FHIRRequestProcessException(['Cannot construct a %s claim if claim admin is None' %(imis_claim.uuid)] )
     cls.build_fhir_type(fhir_claim, imis_claim)
     cls.build_fhir_supportingInfo(fhir_claim, imis_claim)
     cls.build_fhir_items(fhir_claim, imis_claim)
     cls.build_fhir_provider(fhir_claim, imis_claim)
     cls.build_fhir_use(fhir_claim)
     cls.build_fhir_priority(fhir_claim)
     cls.build_fhir_status(fhir_claim)
     cls.build_fhir_insurance(fhir_claim, imis_claim)
     return fhir_claim
示例#9
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.productOrService.text

            if type == R4ClaimConfig.get_fhir_claim_item_code():
                serviced = cls.get_imis_claim_item_by_code(code, imis_claim.id)
            elif type == R4ClaimConfig.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, type,
                                      serviced.rejection_reason, imis_claim)
 def build_fhir_resource_reference(cls, obj, type=None, display=None):
     if obj is None:
         raise FHIRRequestProcessException(
             ['Cannot construct a reference on none: {}'])
     reference = Reference()
     if type is None:
         resource_type = cls.__get_fhir_resource_type_as_string()
     else:
         resource_type = type
     resource_id = cls.__get_imis_object_id_as_string(obj)
     reference.type = resource_type
     if hasattr(obj, 'uuid'):
         reference.identifier = cls.build_fhir_identifier(
             obj.uuid, R4IdentifierConfig.get_fhir_identifier_type_system(),
             R4IdentifierConfig.get_fhir_uuid_type_code())
     else:
         reference.identifier = obj.id
     reference.reference = resource_type + '/' + resource_id
     if display is not None:
         reference.display = display
     return reference
示例#11
0
 def check_errors(cls, errors=None):  # pragma: no cover
     if errors is None:
         errors = []
     if len(errors) > 0:
         raise FHIRRequestProcessException(errors)
 def create_test_imis_instance(self):
     errors = []
     BaseFHIRConverter.valid_condition(self.__VALID_CONDITION,
                                       self.__ERROR_MESSAGE, errors)
     return FHIRRequestProcessException(errors)