You are a helpful assistant.
using System.Collections.Generic;
using System.Linq;
using iRIS.InsuranceCore.Entities;
using iRIS.KaskoLink2.Code.Constants;
using iRIS.KaskoLink2.Code.Interfaces.BankSettings;

namespace iRIS.KaskoLink2.Code.Implementations.BankSettings
{
    public class BankSettingsConditionChecker : IBankSettingsConditionChecker
    {
        private readonly IBankSettingsQueryInvoker _bankSettingsQueryInvoker;
        private readonly Dictionary<int, string> _structIdsToBankSettings = new Dictionary<int, string>
        {
            { StructIdsCodes.Avarcom2Par, "Avarkom1" },
            { StructIdsCodes.AvarcomAccident, "Avarkom2" },
            { StructIdsCodes.AvarcomAny, "Avarkom3" },
            { StructIdsCodes.AvarcomNote, "AvarkomSertificates" },
            { StructIdsCodes.Glass1T, "Mirrors1" },
            { StructIdsCodes.GlassMany, "Mirrors2" },
            { StructIdsCodes.Percent3, "Percent3" },
            { StructIdsCodes.Percent5, "Percent5" },
            { StructIdsCodes.Evacuation, "Evacuation" },
            { StructIdsCodes.TechHelp, "EmergencyRepair" },
            { StructIdsCodes.Taxi, "Taxi" },
            { StructIdsCodes.Rent, "CarRental" },
            { StructIdsCodes.Damage, "DmgEnabled" },
            { StructIdsCodes.CarjackingCode, "HJEnabled" },
            { StructIdsCodes.TotalLoss, "TotalEnabled" },
            { StructIdsCodes.Gap, "GAP" },
            { StructIdsCodes.Techcenter, "RepairStoaWithoutDealer" },
            { StructIdsCodes.DealerTechcenter, "RepairStoa" },
            { StructIdsCodes.InsurantTechcenter, "RepairStoaInsurant" },
            { StructIdsCodes.FranchiseCauser, "FranType" }, // Добавлено для учета франшиз
            { StructIdsCodes.FranchiseSecondIncEvent, "FranType" } // Добавлено для учета франшиз
        };

        public BankSettingsConditionChecker(IBankSettingsQueryInvoker bankSettingsQueryInvoker)
        {
            _bankSettingsQueryInvoker = bankSettingsQueryInvoker;
        }

        public bool CheckCondition(Deal deal, int structId, bool expectedValue)
        {
            var bank = deal.SuggestedBanks.FirstOrDefault();

            if (bank == null)
            {
                return false;
            }

            var bankSettings = _bankSettingsQueryInvoker.GetBankSettingsAsync(bank.BIK).GetAwaiter().GetResult();
            var setting = bankSettings.FirstOrDefault(x => x.DivisionID == deal.BranchCode) ?? bankSettings.FirstOrDefault(x => x.DivisionID == null);

            if (setting == null)
            {
                return false;
            }

            if (_structIdsToBankSettings.TryGetValue(structId, out var propertyName))
            {
                var propertyValue = setting.GetType().GetProperty(propertyName)?.GetValue(setting);

                if (propertyValue is int intValue && (propertyName == "FranType"))
                {
                    switch (intValue)
                    {
                        case 0:
                            return !expectedValue; // Франшизы недоступны
                        case 2:
                            return structId == StructIdsCodes.FranchiseSecondIncEvent && expectedValue; // Только 2INSEVENT
                        case 3:
                            return structId == StructIdsCodes.FranchiseCauser && expectedValue; // Только CAUSER
                        default:
                            return expectedValue; // Доступны все франшизы (для случая NULL или 1)
                    }
                }
                else if (propertyValue is bool boolValue)
                {
                    return boolValue == expectedValue;
                }
            }

            return false;
        }
    }
}


Я бы хотел избавиться от определения типа данных  propertyValue is int и использования switch/case и разделить _structIdsToBankSettings словарь на 2 это опции/риски и франшизы отдельно. Ну и использовать потом просто сначала один словарь а потом другой словарь с другим типом данных