Skip to content

onconova.interoperability.fhir.schemas.cancer_family_member_history

CancerFamilyMemberHistoryProfile

Bases: OnconovaFhirBaseSchema, OnconovaCancerFamilyMemberHistory

__model__ class-attribute instance-attribute

__schema__ class-attribute instance-attribute

fhir_to_onconova(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/cancer_family_member_history.py
@classmethod
def fhir_to_onconova(
    cls, obj: fhir.OnconovaCancerFamilyMemberHistory
) -> schemas.FamilyHistoryCreate:
    condition: fhir.OnconovaCancerFamilyMemberHistoryCancerCondition | None = (
        obj.fhirpath_single(
            "FamilyMemberHistory.condition.where(code.coding.code='363346000')"
        )
    )
    return schemas.FamilyHistoryCreate(
        caseId=obj.fhirpath_single(
            "FamilyMemberHistory.patient.reference.getValue()"
        ).replace("Patient/", ""),
        date=obj.fhirpath_single("FamilyMemberHistory.date.getValue()"),
        isDeceased=obj.fhirpath_single(
            "FamilyMemberHistory.deceasedBoolean.getValue()"
        ),
        relationship=CodedConcept.model_validate(
            obj.fhirpath_single(
                "FamilyMemberHistory.relationship.coding"
            ).model_dump()
        ),
        hadCancer=condition is not None,
        onsetAge=(
            condition.fhirpath_single("onsetAge.value.getValue()")
            if condition
            else None
        ),
        contributedToDeath=(
            condition.fhirpath_single(
                "extension('http://onconova.github.io/fhir/StructureDefinition/onconova-ext-family-member-condition-contributed-to-death').valueBoolean.getValue()"
            )
            if condition
            else None
        ),
        morphology=(
            CodedConcept.model_validate(coding.model_dump())
            if condition
            and (
                coding := condition.fhirpath_single(
                    "extension('http://onconova.github.io/fhir/StructureDefinition/onconova-ext-family-history-member-cancer-morphology').valueCodeableConcept.coding"
                )
            )
            else None
        ),
        topography=(
            CodedConcept.model_validate(coding.model_dump())
            if condition
            and (
                coding := condition.fhirpath_single(
                    "extension('http://onconova.github.io/fhir/StructureDefinition/onconova-ext-family-history-member-cancer-topography').valueCodeableConcept.coding"
                )
            )
            else None
        ),
    )

onconova_to_fhir(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/cancer_family_member_history.py
@classmethod
def onconova_to_fhir(
    cls, obj: schemas.FamilyHistory
) -> fhir.OnconovaCancerFamilyMemberHistory:
    resource = fhir.OnconovaCancerFamilyMemberHistory.model_construct()
    resource.id = str(obj.id)
    resource.text = Narrative(
        status="generated",
        div=f'<div xmlns="http://www.w3.org/1999/xhtml">{obj.description}</div>',
    )
    resource.date = obj.date.isoformat()
    resource.patient = Reference(
        reference=f"Patient/{obj.caseId}",
    )
    resource.deceasedBoolean = obj.isDeceased

    resource.relationship = construct_fhir_codeable_concept(obj.relationship)
    if obj.hadCancer:
        condition = fhir.OnconovaCancerFamilyMemberHistoryCancerCondition(
            onsetAge=(
                fhir.OnconovaCancerFamilyMemberHistoryOnsetAge(
                    value=obj.onsetAge, system="http://unitsofmeasure.org", code="a"
                )
                if obj.onsetAge is not None
                else None
            )
        )
        condition.extension = []
        if obj.contributedToDeath is not None:
            condition.extension.append(
                fhir.FamilyMemberConditionContributedToDeath(
                    valueBoolean=obj.contributedToDeath
                )
            )
        if obj.topography:
            condition.extension.append(
                fhir.FamilyMemberHistoryCancerTopography(
                    valueCodeableConcept=construct_fhir_codeable_concept(
                        obj.topography
                    )
                )
            )
        if obj.morphology:
            condition.extension.append(
                fhir.FamilyMemberHistoryCancerMorphology(
                    valueCodeableConcept=construct_fhir_codeable_concept(
                        obj.morphology
                    )
                )
            )
        resource.condition = [condition]

    return resource
runner