# This file was auto-generated by Fern from our API Definition.

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ReportTypeCode(str, enum.Enum):
    C_03 = "03"
    """
    Report Justifying Treatment Beyond Utilization Guidelines
    """

    C_04 = "04"
    """
    Drugs Administered
    """

    C_05 = "05"
    """
    Treatment Diagnosis
    """

    C_06 = "06"
    """
    Initial Assessment
    """

    C_07 = "07"
    """
    Functional Goals
    """

    C_08 = "08"
    """
    Plan of Treatment
    """

    C_09 = "09"
    """
    Progress Report
    """

    C_10 = "10"
    """
    Continued Treatment
    """

    C_11 = "11"
    """
    Chemical Analysis
    """

    C_13 = "13"
    """
    Certified Test Report
    """

    C_15 = "15"
    """
    Justification for Admission
    """

    C_21 = "21"
    """
    Recovery Plan
    """

    CA_3 = "A3"
    """
    Allergies/Sensitivities Document
    """

    CA_4 = "A4"
    """
    Autopsy Report
    """

    CAM = "AM"
    """
    Ambulance Certification
    """

    CAS = "AS"
    """
    Admission Summary
    """

    CB_2 = "B2"
    """
    Prescription
    """

    CB_3 = "B3"
    """
    Physician Order
    """

    CB_4 = "B4"
    """
    Referral Form
    """

    CBR = "BR"
    """
    Benchmark Testing Results
    """

    CBS = "BS"
    """
    Baseline
    """

    CBT = "BT"
    """
    Blanket Test Results
    """

    CCB = "CB"
    """
    Chiropractic Justification
    """

    CCK = "CK"
    """
    Consent Form(s)
    """

    CCT = "CT"
    """
    Certification
    """

    CD_2 = "D2"
    """
    Drug Profile Document
    """

    CDA = "DA"
    """
    Dental Models
    """

    CDB = "DB"
    """
    Durable Medical Equipment Prescription
    """

    CDG = "DG"
    """
    Diagnostic Report
    """

    CDJ = "DJ"
    """
    Discharge Monitoring Report
    """

    CDS = "DS"
    """
    Discharge Summary
    """

    CEB = "EB"
    """
    Explanation of Benefits (Coordination of Benefits or Medicare Secondary Payor)
    """

    CHC = "HC"
    """
    Health Certificate
    """

    CHR = "HR"
    """
    Health Clinic Records
    """

    CI_5 = "I5"
    """
    Immunization Record
    """

    CIR = "IR"
    """
    State School Immunization Records
    """

    CLA = "LA"
    """
    Laboratory Results
    """

    CM_1 = "M1"
    """
    Medical Record Attachment
    """

    CMT = "MT"
    """
    Models
    """

    CNN = "NN"
    """
    Nursing Notes
    """

    COB = "OB"
    """
    Operative Note
    """

    COC = "OC"
    """
    Oxygen Content Averaging Report
    """

    COD = "OD"
    """
    Orders and Treatments Document
    """

    COE = "OE"
    """
    Objective Physical Examination (including vital signs) Document
    """

    COX = "OX"
    """
    Oxygen Therapy Certification
    """

    COZ = "OZ"
    """
    Support Data for Claim
    """

    CP_4 = "P4"
    """
    Pathology Report
    """

    CP_5 = "P5"
    """
    Patient Medical History Document
    """

    CPE = "PE"
    """
    Parenteral or Enteral Certification
    """

    CPN = "PN"
    """
    Physical Therapy Notes
    """

    CPO = "PO"
    """
    Prosthetics or Orthotic Certification
    """

    CPQ = "PQ"
    """
    Paramedical Results
    """

    CPY = "PY"
    """
    Physician's Report
    """

    CPZ = "PZ"
    """
    Physical Therapy Certification
    """

    CRB = "RB"
    """
    Radiology Films
    """

    CRR = "RR"
    """
    Radiology Reports
    """

    CRT = "RT"
    """
    Report of Tests and Analysis Report
    """

    CRX = "RX"
    """
    Renewable Oxygen Content Averaging Report
    """

    CSG = "SG"
    """
    Symptoms Document
    """

    CV_5 = "V5"
    """
    Death Notification
    """

    CXP = "XP"
    """
    Photographs
    """

    _UNKNOWN = "__REPORTTYPECODE_UNKNOWN__"
    """
    This member is used for forward compatibility. If the value is not recognized by the enum, it will be stored here, and the raw value is accessible through `.value`.
    """

    @classmethod
    def _missing_(cls, value: typing.Any) -> "ReportTypeCode":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        c_03: typing.Callable[[], T_Result],
        c_04: typing.Callable[[], T_Result],
        c_05: typing.Callable[[], T_Result],
        c_06: typing.Callable[[], T_Result],
        c_07: typing.Callable[[], T_Result],
        c_08: typing.Callable[[], T_Result],
        c_09: typing.Callable[[], T_Result],
        c_10: typing.Callable[[], T_Result],
        c_11: typing.Callable[[], T_Result],
        c_13: typing.Callable[[], T_Result],
        c_15: typing.Callable[[], T_Result],
        c_21: typing.Callable[[], T_Result],
        ca_3: typing.Callable[[], T_Result],
        ca_4: typing.Callable[[], T_Result],
        cam: typing.Callable[[], T_Result],
        cas: typing.Callable[[], T_Result],
        cb_2: typing.Callable[[], T_Result],
        cb_3: typing.Callable[[], T_Result],
        cb_4: typing.Callable[[], T_Result],
        cbr: typing.Callable[[], T_Result],
        cbs: typing.Callable[[], T_Result],
        cbt: typing.Callable[[], T_Result],
        ccb: typing.Callable[[], T_Result],
        cck: typing.Callable[[], T_Result],
        cct: typing.Callable[[], T_Result],
        cd_2: typing.Callable[[], T_Result],
        cda: typing.Callable[[], T_Result],
        cdb: typing.Callable[[], T_Result],
        cdg: typing.Callable[[], T_Result],
        cdj: typing.Callable[[], T_Result],
        cds: typing.Callable[[], T_Result],
        ceb: typing.Callable[[], T_Result],
        chc: typing.Callable[[], T_Result],
        chr: typing.Callable[[], T_Result],
        ci_5: typing.Callable[[], T_Result],
        cir: typing.Callable[[], T_Result],
        cla: typing.Callable[[], T_Result],
        cm_1: typing.Callable[[], T_Result],
        cmt: typing.Callable[[], T_Result],
        cnn: typing.Callable[[], T_Result],
        cob: typing.Callable[[], T_Result],
        coc: typing.Callable[[], T_Result],
        cod: typing.Callable[[], T_Result],
        coe: typing.Callable[[], T_Result],
        cox: typing.Callable[[], T_Result],
        coz: typing.Callable[[], T_Result],
        cp_4: typing.Callable[[], T_Result],
        cp_5: typing.Callable[[], T_Result],
        cpe: typing.Callable[[], T_Result],
        cpn: typing.Callable[[], T_Result],
        cpo: typing.Callable[[], T_Result],
        cpq: typing.Callable[[], T_Result],
        cpy: typing.Callable[[], T_Result],
        cpz: typing.Callable[[], T_Result],
        crb: typing.Callable[[], T_Result],
        crr: typing.Callable[[], T_Result],
        crt: typing.Callable[[], T_Result],
        crx: typing.Callable[[], T_Result],
        csg: typing.Callable[[], T_Result],
        cv_5: typing.Callable[[], T_Result],
        cxp: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is ReportTypeCode.C_03:
            return c_03()
        if self is ReportTypeCode.C_04:
            return c_04()
        if self is ReportTypeCode.C_05:
            return c_05()
        if self is ReportTypeCode.C_06:
            return c_06()
        if self is ReportTypeCode.C_07:
            return c_07()
        if self is ReportTypeCode.C_08:
            return c_08()
        if self is ReportTypeCode.C_09:
            return c_09()
        if self is ReportTypeCode.C_10:
            return c_10()
        if self is ReportTypeCode.C_11:
            return c_11()
        if self is ReportTypeCode.C_13:
            return c_13()
        if self is ReportTypeCode.C_15:
            return c_15()
        if self is ReportTypeCode.C_21:
            return c_21()
        if self is ReportTypeCode.CA_3:
            return ca_3()
        if self is ReportTypeCode.CA_4:
            return ca_4()
        if self is ReportTypeCode.CAM:
            return cam()
        if self is ReportTypeCode.CAS:
            return cas()
        if self is ReportTypeCode.CB_2:
            return cb_2()
        if self is ReportTypeCode.CB_3:
            return cb_3()
        if self is ReportTypeCode.CB_4:
            return cb_4()
        if self is ReportTypeCode.CBR:
            return cbr()
        if self is ReportTypeCode.CBS:
            return cbs()
        if self is ReportTypeCode.CBT:
            return cbt()
        if self is ReportTypeCode.CCB:
            return ccb()
        if self is ReportTypeCode.CCK:
            return cck()
        if self is ReportTypeCode.CCT:
            return cct()
        if self is ReportTypeCode.CD_2:
            return cd_2()
        if self is ReportTypeCode.CDA:
            return cda()
        if self is ReportTypeCode.CDB:
            return cdb()
        if self is ReportTypeCode.CDG:
            return cdg()
        if self is ReportTypeCode.CDJ:
            return cdj()
        if self is ReportTypeCode.CDS:
            return cds()
        if self is ReportTypeCode.CEB:
            return ceb()
        if self is ReportTypeCode.CHC:
            return chc()
        if self is ReportTypeCode.CHR:
            return chr()
        if self is ReportTypeCode.CI_5:
            return ci_5()
        if self is ReportTypeCode.CIR:
            return cir()
        if self is ReportTypeCode.CLA:
            return cla()
        if self is ReportTypeCode.CM_1:
            return cm_1()
        if self is ReportTypeCode.CMT:
            return cmt()
        if self is ReportTypeCode.CNN:
            return cnn()
        if self is ReportTypeCode.COB:
            return cob()
        if self is ReportTypeCode.COC:
            return coc()
        if self is ReportTypeCode.COD:
            return cod()
        if self is ReportTypeCode.COE:
            return coe()
        if self is ReportTypeCode.COX:
            return cox()
        if self is ReportTypeCode.COZ:
            return coz()
        if self is ReportTypeCode.CP_4:
            return cp_4()
        if self is ReportTypeCode.CP_5:
            return cp_5()
        if self is ReportTypeCode.CPE:
            return cpe()
        if self is ReportTypeCode.CPN:
            return cpn()
        if self is ReportTypeCode.CPO:
            return cpo()
        if self is ReportTypeCode.CPQ:
            return cpq()
        if self is ReportTypeCode.CPY:
            return cpy()
        if self is ReportTypeCode.CPZ:
            return cpz()
        if self is ReportTypeCode.CRB:
            return crb()
        if self is ReportTypeCode.CRR:
            return crr()
        if self is ReportTypeCode.CRT:
            return crt()
        if self is ReportTypeCode.CRX:
            return crx()
        if self is ReportTypeCode.CSG:
            return csg()
        if self is ReportTypeCode.CV_5:
            return cv_5()
        if self is ReportTypeCode.CXP:
            return cxp()
        return _unknown_member(self._value_)
