openimis/openimis-be-api_fhir_py

View on GitHub
api_fhir/converters/policyEligibilityRequestConverter.py

Summary

Maintainability
A
1 hr
Test Coverage
from policy.services import ByInsureeRequest

from api_fhir.configurations import Stu3EligibilityConfiguration as Config
from api_fhir.converters import BaseFHIRConverter, PatientConverter, ContractConverter
from api_fhir.models import EligibilityResponse as FHIREligibilityResponse, InsuranceBenefitBalance, \
    EligibilityResponseInsurance, InsuranceBenefitBalanceFinancial, Money


class PolicyEligibilityRequestConverter(BaseFHIRConverter):

    @classmethod
    def to_fhir_obj(cls, eligibility_response):
        fhir_response = FHIREligibilityResponse()
        for item in eligibility_response.items:
            if item.status in Config.get_fhir_active_policy_status():
                cls.build_fhir_insurance(fhir_response, item)
        return fhir_response

    @classmethod
    def to_imis_obj(cls, fhir_eligibility_request, audit_user_id):
        uuid = cls.build_imis_uuid(fhir_eligibility_request)
        return ByInsureeRequest(uuid)

    @classmethod
    def build_fhir_insurance(cls, fhir_response, response):
        result = EligibilityResponseInsurance()
        cls.build_fhir_insurance_contract(result, response)
        cls.build_fhir_money_benefit(result, Config.get_fhir_balance_code(),
                                     response.ceiling,
                                     response.ded)
        fhir_response.insurance.append(result)

    @classmethod
    def build_fhir_insurance_contract(cls, insurance, contract):
        insurance.contract = ContractConverter.build_fhir_resource_reference(
            contract)

    @classmethod
    def build_fhir_money_benefit(cls, insurance, code, allowed_value, used_value):
        benefit_balance = cls.build_fhir_generic_benefit_balance(code)
        cls.build_fhir_money_benefit_balance_financial(
            benefit_balance, allowed_value, used_value)
        insurance.benefitBalance.append(benefit_balance)

    @classmethod
    def build_fhir_generic_benefit_balance(cls, code):
        benefit_balance = InsuranceBenefitBalance()
        benefit_balance.category = cls.build_simple_codeable_concept(
            Config.get_fhir_balance_default_category())
        return benefit_balance

    @classmethod
    def build_fhir_money_benefit_balance_financial(cls, benefit_balance, allowed_value, used_value):
        financial = cls.build_fhir_generic_benefit_balance_financial()
        allowed_money_value = Money()
        allowed_money_value.value = allowed_value or 0
        financial.allowedMoney = allowed_money_value
        used_money_value = Money()
        used_money_value.value = used_value or 0
        financial.usedMoney = used_money_value
        benefit_balance.financial.append(financial)

    @classmethod
    def build_fhir_generic_benefit_balance_financial(cls):
        financial = InsuranceBenefitBalanceFinancial()
        financial.type = cls.build_simple_codeable_concept(
            Config.get_fhir_financial_code())
        return financial

    @classmethod
    def build_imis_uuid(cls, fhir_eligibility_request):
        uuid = None
        patient_reference = fhir_eligibility_request.patient
        if patient_reference:
            uuid = PatientConverter.get_resource_id_from_reference(
                patient_reference)
        return uuid