public record BatchTypeFieldRequirements(
    bool ShowPatientDemographics,
    bool ShowEncounterContext,
    bool ShowEncounterSummaryFields,
    bool ShowObservations,
    bool ShowAllergies,
    bool ShowMedications
)
{
    public static BatchTypeFieldRequirements ForBatchType(BatchType batchType) => batchType switch
    {
        BatchType.PatientRegistration => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: false,
            ShowEncounterSummaryFields: false,
            ShowObservations: false,
            ShowAllergies: false,
            ShowMedications: false),

        BatchType.VitalsSheet => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: true,
            ShowEncounterSummaryFields: false,
            ShowObservations: true,
            ShowAllergies: false,
            ShowMedications: false),

        BatchType.LabResults => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: true,
            ShowEncounterSummaryFields: false,
            ShowObservations: true,
            ShowAllergies: false,
            ShowMedications: false),

        BatchType.AllergyUpdate => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: false,
            ShowEncounterSummaryFields: false,
            ShowObservations: false,
            ShowAllergies: true,
            ShowMedications: false),

        BatchType.EncounterSummary => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: true,
            ShowEncounterSummaryFields: true,
            ShowObservations: false,
            ShowAllergies: false,
            ShowMedications: false),

        BatchType.MedicationList => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: false,
            ShowEncounterSummaryFields: false,
            ShowObservations: false,
            ShowAllergies: false,
            ShowMedications: true),

        BatchType.Mixed => new(
            ShowPatientDemographics: true,
            ShowEncounterContext: true,
            ShowEncounterSummaryFields: true,
            ShowObservations: true,
            ShowAllergies: true,
            ShowMedications: true),

        _ => throw new ArgumentOutOfRangeException(nameof(batchType))
    };
}