Skip to content

onconova.interoperability.fhir.schemas.tumor_board_review

TumorBoardReviewProfile

Bases: OnconovaFhirBaseSchema, OnconovaTumorBoardReview

__model__ class-attribute instance-attribute

__schema__ class-attribute instance-attribute

discriminator(concept) classmethod

Source code in onconova/interoperability/fhir/schemas/tumor_board_review.py
@field_validator("code", mode="after", check_fields=False)
@classmethod
def discriminator(cls, concept: fhir.CodeableConcept) -> fhir.CodeableConcept:
    if not concept.fhirpath_single(
        "coding.code = 'C93304'"
    ) or concept.fhirpath_single(
        "extension('http://onconova.github.io/fhir/StructureDefinition/onconova-ext-tumor-board-specialization').exists()"
    ):
        assert concept.coding
        raise ValueError(
            f"The code {concept.coding[0].system}#{concept.coding[0].code} is not a valid unspecified tumor board code discriminator"
        )
    return concept

fhir_to_onconova(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/tumor_board_review.py
@classmethod
def fhir_to_onconova(
    cls, obj: fhir.OnconovaTumorBoardReview
) -> schemas.UnspecifiedTumorBoardCreate:
    return schemas.UnspecifiedTumorBoardCreate(
        externalSource=None,
        externalSourceId=None,
        caseId=obj.fhirpath_single(
            "Procedure.subject.reference.getValue()"
        ).replace("Patient/", ""),
        date=obj.fhirpath_single("Procedure.performedDateTime.getValue()"),
        recommendations=[
            CodedConcept.model_validate(coding.model_dump())
            for coding in obj.fhirpath_values("Procedure.followUp.coding")
        ],
        relatedEntitiesIds=obj.fhirpath_values(
            "Procedure.reasonReference.reference.getValue().replace('Condition/','')"
        ),
    )

onconova_to_fhir(obj) classmethod

Source code in onconova/interoperability/fhir/schemas/tumor_board_review.py
@classmethod
def onconova_to_fhir(
    cls, obj: schemas.UnspecifiedTumorBoard
) -> fhir.OnconovaTumorBoardReview:

    if obj.category != TumorBoardSpecialties.UNSPECIFIED:
        raise ValueError(
            "Only unspecified tumor boards are supported by this profile"
        )

    resource = fhir.OnconovaTumorBoardReview.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.performedDateTime = obj.date.isoformat()
    resource.subject = Reference(
        reference=f"Patient/{obj.caseId}",
    )
    resource.reasonReference = [
        Reference(
            reference=f"Condition/{conditionId}",
        )
        for conditionId in obj.relatedEntitiesIds or []
    ]
    resource.followUp = [
        construct_fhir_codeable_concept(recommendation)
        for recommendation in obj.recommendations or []
    ]
    return resource
runner