public enum Department
{
    EmergencyDepartment,
    InternalMedicine,
    GeneralMedicine,
    Surgery,
    Icu,
    Nicu,
    MedSurg,
    OutpatientClinic,
    Pediatrics,
    ObstetricsGynecology,
    LaborAndDelivery,
    Cardiology,
    Orthopedics,
    Neurology,
    Oncology,
    Radiology,
    Laboratory,
    Psychiatry,
    PhysicalTherapy,
    Anesthesiology
}

public static class DepartmentExtensions
{
    public static string ToDbString(this Department d) => d switch
    {
        Department.EmergencyDepartment  => "Emergency Department",
        Department.InternalMedicine     => "Internal Medicine",
        Department.GeneralMedicine      => "General Medicine",
        Department.Surgery              => "Surgery",
        Department.Icu                  => "ICU",
        Department.Nicu                 => "NICU",
        Department.MedSurg              => "Medical-Surgical",
        Department.OutpatientClinic     => "Outpatient Clinic",
        Department.Pediatrics           => "Pediatrics",
        Department.ObstetricsGynecology => "Obstetrics & Gynecology",
        Department.LaborAndDelivery     => "Labor & Delivery",
        Department.Cardiology           => "Cardiology",
        Department.Orthopedics          => "Orthopedics",
        Department.Neurology            => "Neurology",
        Department.Oncology             => "Oncology",
        Department.Radiology            => "Radiology",
        Department.Laboratory           => "Laboratory",
        Department.Psychiatry           => "Psychiatry",
        Department.PhysicalTherapy      => "Physical Therapy",
        Department.Anesthesiology       => "Anesthesiology",
        _ => throw new ArgumentOutOfRangeException(nameof(d))
    };

    public static Department FromDbString(string v) => v switch
    {
        "Emergency Department"     => Department.EmergencyDepartment,
        "Internal Medicine"      => Department.InternalMedicine,
        "General Medicine"       => Department.GeneralMedicine,
        "Surgery"                => Department.Surgery,
        "ICU"                    => Department.Icu,
        "NICU"                   => Department.Nicu,
        "Medical-Surgical"       => Department.MedSurg,
        "Outpatient Clinic"      => Department.OutpatientClinic,
        "Pediatrics"             => Department.Pediatrics,
        "Obstetrics & Gynecology" => Department.ObstetricsGynecology,
        "Labor & Delivery"       => Department.LaborAndDelivery,
        "Cardiology"             => Department.Cardiology,
        "Orthopedics"            => Department.Orthopedics,
        "Neurology"              => Department.Neurology,
        "Oncology"               => Department.Oncology,
        "Radiology"              => Department.Radiology,
        "Laboratory"             => Department.Laboratory,
        "Psychiatry"             => Department.Psychiatry,
        "Physical Therapy"       => Department.PhysicalTherapy,
        "Anesthesiology"         => Department.Anesthesiology,
        _ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown department: '{v}'")
    };

    public static bool TryFromDbString(string? v, out Department result)
    {
        if (v is null) { result = default; return false; }
        try { result = FromDbString(v); return true; }
        catch (ArgumentOutOfRangeException) { result = default; return false; }
    }
}
