def build_fhir_age(cls, imis_medication): adult = cls.build_fhir_adult(imis_medication) kid = cls.build_fhir_kid(imis_medication) if adult == "": adult = None if kid == "": kid = None extension = Extension() extension.url = "useContextAge" extension.valueUsageContext = UsageContext() extension.valueUsageContext.code = Coding() extension.valueUsageContext.code.code = "age" extension.valueUsageContext.valueCodeableConcept = CodeableConcept() if adult is not None: coding_adult = Coding() coding_adult.code = adult coding_adult.display = "Adult" extension.valueUsageContext.valueCodeableConcept.coding.append( coding_adult) if kid is not None: coding_kid = Coding() coding_kid.code = kid coding_kid.display = "Kid" extension.valueUsageContext.valueCodeableConcept.coding.append( coding_kid) extension.valueUsageContext.valueCodeableConcept.text = "Adult or Kid" return extension
def build_fhir_gender(cls, imis_medication): male = cls.build_fhir_male(imis_medication) female = cls.build_fhir_female(imis_medication) if male == "": male = None if female == "": female = None extension = Extension() extension.url = "useContextGender" extension.valueUsageContext = UsageContext() extension.valueUsageContext.code = Coding() extension.valueUsageContext.code.code = "gender" extension.valueUsageContext.valueCodeableConcept = CodeableConcept() if male is not None: coding_male = Coding() coding_male.code = male coding_male.display = "Male" extension.valueUsageContext.valueCodeableConcept.coding.append( coding_male) if female is not None: coding_female = Coding() coding_female.code = female coding_female.display = "Female" extension.valueUsageContext.valueCodeableConcept.coding.append( coding_female) extension.valueUsageContext.valueCodeableConcept.text = "Male or Female" return extension
def build_fhir_item_type_extension(cls, imis_medication): extension = Extension() extension.url = "topic" extension.valueCodeableConcept = cls.build_codeable_concept( "DefinitionTopic", "http://terminology.hl7.org/CodeSystem/definition-topic", text=imis_medication.type) return extension
def build_unit_price_extension(cls, value): extension = Extension() money = Money() extension.url = "unitPrice" extension.valueMoney = money extension.valueMoney.value = value if hasattr(core, 'currency'): extension.valueMoney.currency = core.currency return extension
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 if hasattr(core, 'currency'): unit_price.currency = core.currency fhir_item.unitPrice = unit_price fhir_quantity = Quantity() fhir_quantity.value = item.qty_provided fhir_item.quantity = fhir_quantity fhir_item.productOrService = cls.build_simple_codeable_concept(code) fhir_item.category = cls.build_simple_codeable_concept(item_type) item_explanation_code = R4ClaimConfig.get_fhir_claim_item_explanation_code( ) information = cls.build_fhir_string_information( fhir_claim.supportingInfo, item_explanation_code, item.explanation) if information: fhir_item.informationSequence = [information.sequence] extension = Extension() if fhir_item.category.text == "item": medication = cls.build_medication_extension(extension) fhir_item.extension.append(medication) elif fhir_item.category.text == "service": activity_definition = cls.build_activity_definition_extension( extension) fhir_item.extension.append(activity_definition) fhir_claim.item.append(fhir_item)
def build_fhir_venue(cls, imis_medication): display = "" if imis_medication.care_type == "O": display = "Out-patient" if imis_medication.care_type == "I": display = "In-patient" if imis_medication.care_type == "B": display = "Both" extension = Extension() if imis_medication.care_type is not None: extension.url = "useContextVenue" extension.valueUsageContext = UsageContext() extension.valueUsageContext.code = Coding() extension.valueUsageContext.code.code = "venue" extension.valueUsageContext.valueCodeableConcept = CodeableConcept( ) coding_venue = Coding() coding_venue.code = imis_medication.care_type coding_venue.display = display extension.valueUsageContext.valueCodeableConcept.coding.append( coding_venue) extension.valueUsageContext.valueCodeableConcept.text = "Clinical Venue" return extension
def build_fhir_item(cls, fhir_claim_response, claim_item, item, type, rejected_reason, imis_claim): claim_response_item = ClaimResponseItem() claim_response_item.itemSequence = claim_item.sequence adjudication = cls.build_fhir_item_adjudication( item, rejected_reason, imis_claim) claim_response_item.adjudication = adjudication extension = Extension() if type == "item": medication = cls.build_medication_extension(extension) claim_response_item.extension.append(medication) elif type == "service": activity_definition = cls.build_activity_definition_extension( extension) claim_response_item.extension.append(activity_definition) note = cls.build_process_note(fhir_claim_response, item.price_origin) if note: claim_response_item.noteNumber = [note.number] fhir_claim_response.item.append(claim_response_item)
def build_fhir_item_frequency_extension(cls, imis_medication): extension = Extension() extension.url = "frequency" extension.valueInteger = imis_medication.frequency return extension
def build_poverty_status_extension(cls, imis_insuree): extension = Extension() extension.url = "povertyStatus" extension.valueBoolean = imis_insuree.family.poverty return extension
def build_extension(fhir_patient, imis_insuree, value): extension = Extension() if value == "head": extension.url = "https://openimis.atlassian.net/wiki/spaces/OP/pages/960069653/FHIR+extension+isHead" extension.valueBoolean = imis_insuree.head elif value == "validity_from": extension.url = "https://openimis.atlassian.net/wiki/spaces/OP/pages/960331779/FHIR+extension+registrationDate" if imis_insuree.validity_from is None: extension.valueString = "" else: extension.valueString = imis_insuree.validity_from elif value == "family.location.code": extension.url = "https://openimis.atlassian.net/wiki/spaces/OP/pages/960495619/FHIR+extension+Location" if hasattr(imis_insuree, "family") and imis_insuree.family is not None: if imis_insuree.family.location.code is not None: extension.valueString = imis_insuree.family.location.code else: extension.valueString = "" else: extension.valueString = "" elif value == "education.education": extension.url = "https://openimis.atlassian.net/wiki/spaces/OP/pages/960331788/FHIR+extension+Education" if hasattr(imis_insuree, "education") and imis_insuree.education is not None: if imis_insuree.education.education is not None: extension.valueString = imis_insuree.education.education else: extension.valueString = "" else: extension.valueString = "" else: extension.url = "https://openimis.atlassian.net/wiki/spaces/OP/pages/960135203/FHIE+extension+Profession" if hasattr( imis_insuree, "profession") and imis_insuree.profession is not None: if imis_insuree.profession.profession is not None: extension.valueString = imis_insuree.profession.profession else: extension.valueString = "" else: extension.valueString = "" fhir_patient.extension.append(extension)
def __build_date_extension(cls, value, name): ext_date = Extension() ext_date.url = name ext_date.valueDate = value.isoformat() if value else None return ext_date