Skip to content

onconova.interoperability.fhir.schemas.secondary_cancer_condition

SecondaryCancerConditionProfile

Bases: OnconovaFhirBaseSchema, OnconovaSecondaryCancerCondition

__model__ class-attribute instance-attribute

__schema__ class-attribute instance-attribute

fhir_to_onconova(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/secondary_cancer_condition.py
@classmethod
def fhir_to_onconova(
    cls, obj: fhir.OnconovaSecondaryCancerCondition
) -> schemas.NeoplasticEntityCreate:
    return schemas.NeoplasticEntityCreate(
        externalSource=None,
        externalSourceId=None,
        relationship=NeoplasticEntityRelationshipChoices.METASTATIC,
        caseId=obj.fhirpath_single(
            "Condition.subject.reference.getValue()"
        ).replace("Patient/", ""),
        topography=CodedConcept.model_validate(
            obj.fhirpath_single("Condition.bodySite.coding").model_dump()
        ),
        morphology=(
            CodedConcept.model_validate(
                obj.fhirpath_single(
                    "Condition.extension('http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-histology-morphology-behavior').valueCodeableConcept.coding"
                ).model_dump()
            )
        ),
        differentitation=(
            CodedConcept.model_validate(coding.model_dump())
            if (
                coding := obj.fhirpath_single(
                    "Condition.extension('http://onconova.github.io/fhir/StructureDefinition/onconova-ext-histological-differentiation').valueCodeableConcept.coding"
                )
            )
            else None
        ),
        relatedPrimaryId=obj.fhirpath_single(
            "Condition.extension('http://hl7.org/fhir/StructureDefinition/condition-related').valueReference.reference.getValue()"
        ).replace("Condition/", ""),
        laterality=(
            CodedConcept.model_validate(coding.model_dump())
            if (
                coding := obj.fhirpath_single(
                    "Condition.bodySite.extension('http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-laterality-qualifier').valueCodeableConcept.coding"
                )
            )
            else None
        ),
        assertionDate=obj.fhirpath_single(
            "Condition.extension('http://hl7.org/fhir/StructureDefinition/condition-assertedDate').valueDateTime.getValue()"
        ),
    )

onconova_to_fhir(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/secondary_cancer_condition.py
@classmethod
def onconova_to_fhir(
    cls, obj: schemas.NeoplasticEntity
) -> fhir.OnconovaSecondaryCancerCondition:
    if obj.relationship != NeoplasticEntityRelationshipChoices.METASTATIC:
        raise ValueError(
            "NeoplasticEntity relationship must be 'metastatic' for SecondaryCancerCondition"
        )
    resource: fhir.OnconovaSecondaryCancerCondition = (
        fhir.OnconovaSecondaryCancerCondition.model_construct()
    )
    resource.id = str(obj.id)
    resource.subject = Reference(
        reference=f"Patient/{obj.caseId}",
    )
    resource.text = Narrative(
        status="generated",
        div=f'<div xmlns="http://www.w3.org/1999/xhtml">{obj.description}</div>',
    )
    resource.bodySite = [
        fhir.OnconovaSecondaryCancerConditionBodySite(
            coding=construct_fhir_codeable_concept(obj.topography).coding,
            extension=(
                [
                    fhir.LateralityQualifier(
                        valueCodeableConcept=construct_fhir_codeable_concept(
                            obj.laterality
                        )
                    )
                ]
                if obj.laterality
                else None
            ),
        )
    ]
    resource.extension = [
        fhir.HistologyMorphologyBehavior(
            valueCodeableConcept=construct_fhir_codeable_concept(obj.morphology)
        ),
        fhir.AssertedDate(valueDateTime=obj.assertionDate.isoformat()),
    ]
    if obj.differentitation:
        resource.extension.append(
            fhir.HistologicalDifferentiation(
                valueCodeableConcept=construct_fhir_codeable_concept(
                    obj.differentitation
                )
            )
        )
    assert resource.extension is not None
    if obj.relatedPrimaryId:
        resource.extension.append(
            fhir.Related(
                valueReference=Reference(
                    reference=f"Condition/{obj.relatedPrimaryId}",
                )
            )
        )

    return resource
runner