openimis/openimis-be-api_fhir_py

View on GitHub
api_fhir/converters/__init__.py

Summary

Maintainability
A
2 hrs
Test Coverage
from abc import ABC

from api_fhir.configurations import Stu3IdentifierConfig
from api_fhir.exceptions import FHIRRequestProcessException
from api_fhir.models import CodeableConcept, ContactPoint, Address, Coding, Identifier, IdentifierUse


class BaseFHIRConverter(ABC):

    @classmethod
    def to_fhir_obj(cls, obj):
        raise NotImplementedError('`toFhirObj()` must be implemented.')  # pragma: no cover

    @classmethod
    def to_imis_obj(cls, data, audit_user_id):
        raise NotImplementedError('`toImisObj()` must be implemented.')  # pragma: no cover

    @classmethod
    def build_fhir_pk(cls, fhir_obj, resource_id):
        fhir_obj.id = resource_id

    @classmethod
    def valid_condition(cls, condition, error_message, errors=None):
        if errors is None:
            errors = []
        if condition:
            errors.append(error_message)
        return condition

    @classmethod
    def check_errors(cls, errors=None):  # pragma: no cover
        if errors is None:
            errors = []
        if len(errors) > 0:
            raise FHIRRequestProcessException(errors)

    @classmethod
    def build_simple_codeable_concept(cls, text):
        return cls.build_codeable_concept(None, None, text)

    @classmethod
    def build_codeable_concept(cls, code, system=None, text=None):
        codeable_concept = CodeableConcept()
        if code or system:
            coding = Coding()
            coding.system = system
            if not isinstance(code, str):
                code = str(code)
            coding.code = code
            codeable_concept.coding = [coding]
        codeable_concept.text = text
        return codeable_concept

    @classmethod
    def get_first_coding_from_codeable_concept(cls, codeable_concept):
        result = Coding()
        if codeable_concept:
            coding = codeable_concept.coding
            if coding and isinstance(coding, list) and len(coding) > 0:
                result = codeable_concept.coding[0]
        return result

    @classmethod
    def build_fhir_uuid_identifier(cls, identifiers, imis_object):
        if imis_object.uuid is not None:
            identifier = cls.build_fhir_identifier(imis_object.uuid,
                                                   Stu3IdentifierConfig.get_fhir_identifier_type_system(),
                                                   Stu3IdentifierConfig.get_fhir_uuid_type_code())
            identifiers.append(identifier)

    @classmethod
    def build_fhir_identifier(cls, value, type_system, type_code):
        identifier = Identifier()
        identifier.use = IdentifierUse.USUAL.value
        type = cls.build_codeable_concept(type_code, type_system)
        identifier.type = type
        identifier.value = value
        return identifier

    @classmethod
    def get_fhir_identifier_by_code(cls, identifiers, lookup_code):
        value = None
        for identifier in identifiers or []:
            first_coding = cls.get_first_coding_from_codeable_concept(identifier.type)
            if first_coding.system == Stu3IdentifierConfig.get_fhir_identifier_type_system() \
                    and first_coding.code == lookup_code:
                    value = identifier.value
                    break
        return value

    @classmethod
    def build_fhir_contact_point(cls, value, contact_point_system, contact_point_use):
        contact_point = ContactPoint()
        contact_point.system = contact_point_system
        contact_point.use = contact_point_use
        contact_point.value = value
        return contact_point

    @classmethod
    def build_fhir_address(cls, value, use, type):
        current_address = Address()
        current_address.text = value
        current_address.use = use
        current_address.type = type
        return current_address


from api_fhir.converters.personConverterMixin import PersonConverterMixin
from api_fhir.converters.referenceConverterMixin import ReferenceConverterMixin
from api_fhir.converters.contractConverter import ContractConverter
from api_fhir.converters.patientConverter import PatientConverter
from api_fhir.converters.locationConverter import LocationConverter
from api_fhir.converters.operationOutcomeConverter import OperationOutcomeConverter
from api_fhir.converters.practitionerConverter import PractitionerConverter
from api_fhir.converters.practitionerRoleConverter import PractitionerRoleConverter
from api_fhir.converters.eligibilityRequestConverter import EligibilityRequestConverter
from api_fhir.converters.policyEligibilityRequestConverter import PolicyEligibilityRequestConverter
from api_fhir.converters.communicationRequestConverter import CommunicationRequestConverter
from api_fhir.converters.claimResponseConverter import ClaimResponseConverter