Breast Cancer Decision Protocol

Decision Logic Module

dlm guideline Oncology_breast_cancer.v0.5.0

input -- Historical state

    has_heart_failure_class_II: Boolean

    has_heart_failure_class_III: Boolean

    has_heart_failure_class_IV: Boolean

    has_allergy_to_taxanes: Boolean

input -- Tracked State

    tnm_t: String
        currency = 60 days

    tnm_n: String
        currency = 60 days

    tnm_m: String
        currency = 60 days

    tnm_g: String
        currency = 60 days

    estrogen_receptor: Terminology_term «pos_neg»
        currency = 60 days

    progesterone_receptor:  Terminology_term «pos_neg»
        currency = 60 days

    her2_expression: Terminology_term «pos_neg»
        currency = 60 days

    ki67: Quantity
        currency = 60 days
        ranges["%"] =
            ------------------
            |≥ 14|:   #high,
            |< 14|:   #normal
            ------------------
        ;

    ejection_fraction: Quantity
        currency = 60 days
        ranges["%"] =
            -------------------
            |≥ 40|:   #normal,
            |< 40|:   #low
            -------------------
        ;

rules -- Conditions

    er_negative:
        Result := estrogen_receptor = #negative

    er_positive:
        Result := estrogen_receptor = #positive

    pr_negative:
        Result := progesterone_receptor = #negative

    pr_positive:
        Result := progesterone_receptor = #positive

    her2_negative:
        Result := her2_expression = #negative

    her2_positive:
        Result := her2_expression = #positive

    has_non_class_I_heart_failure:
        Result := has_heart_failure_class_II
                  or has_heart_failure_class_III
                  or has_heart_failure_class_IV

    anthracyclines_contraindicated:
        Result := has_transmural_MI
            or ejection_fraction.in_range (#low)
            or has_non_class_I_heart_failure

    taxanes_contraindicated:
        Result := is_type1_diabetic
            or has_allergy_to_taxanes
            or has_intolerance (#taxanes)

rules -- Main

    molecular_subtype: Terminology_term
        Result :=
            choice of
                =========================================================
                er_positive and
                her2_negative and
                not ki67.in_range (#high):    #luminal_A,
                ---------------------------------------------------------
                er_positive and
                her2_negative and
                ki67.in_range (#high):        #luminal_B_HER2_negative,
                ---------------------------------------------------------
                er_positive and
                her2_positive:                 #luminal_B_HER2_positive,
                ---------------------------------------------------------
                er_negative and
                pr_negative and
                her2_positive and
                ki67.in_range (#high):        #HER2,
                ---------------------------------------------------------
                er_negative and
                pr_negative and
                her2_negative and
                ki67.in_range (#high):        #triple_negative,
                ---------------------------------------------------------
                *:                             #none;
                =========================================================
            ;

rules -- Output

    chemotherapy_regime: Terminology_term
        Result :=
            choice of
                ================================================================================
                not metastatic:
                    choice of
                        ========================================================================
                        molecular_subtype in
                            {#luminal_B_HER2_negative,
                             #triple_negative} and
                        (tnm_t > '1a' or tnm_n > '0'):                   #taxanes,
                        ------------------------------------------------------------------------
                        molecular_subtype = #luminal_A and
                        (tnm_t ≥ '3' or tnm_n ≥ '2' or tnm_g ≥ '3'):  #anthracyclines,
                        ------------------------------------------------------------------------
                        molecular_subtype = #luminal_B_HER2_positive and
                        (tnm_t = '1b' or tnm_t = '1c' and tnm_n = '0') or
                        molecular_subtype = #HER2_positive and
                        (tnm_t = '1b' and tnm_n = '0'):                  #paditaxel_trastuzumab
                        ========================================================================
                    ;,
                --------------------------------------------------------------------------------
                *:
                    choice of
                        =====================
                        yyy:        aaa,
                        ---------------------
                        xxx:        bbb,
                        ---------------------
                        *:          ccc
                        =====================
                    ;
                =================================================================================
            ;

definitions -- Terminology

    terminology = {
        term_definitions: {
            "en" : {
                "luminal_A" : {
                    text: "luminal A"
                },
                "luminal_B_HER2_positive" : {
                    text: "luminal B HER2-positive"
                },
                "luminal_B_HER2_negative" : {
                    text: "luminal B HER2-negative"
                },
                "HER2_positive" : {
                    text: "HER2-positive"
                },
                "HER2_negative" : {
                    text: "HER2-negative"
                },
                "triple_negative" : {
                    text: "triple-negative"
                },
                "negative" : {
                    text: "negative presence of gene"
                },
                "positive" : {
                    text: "positive presence of gene"
                }
            }
        },
        value_sets = {
            "pos_neg" : {
                id: "pos_neg",
                members: ["positive", "negative"]
            }
        }
    }
    ;