private static DealCoverage GetDealCoverage(Deal deal, string coverageCode)
        {
            return deal.DealConditionGroups
                .SelectMany(dcg => dcg.InsuranceObjectConditions)
                .SelectMany(ioc => ioc.DealCoverages)
                .FirstOrDefault(dc => string.Equals(dc.ProductCoverage?.CoverageCode, coverageCode, StringComparison.OrdinalIgnoreCase));
        }

       /// <summary>
       /// Получить данные для отображения в блоке "Застрахованный риск" полиса Каско.
       /// </summary>
       /// <param name="params">Сделка Каско в качестве целевого параметра.</param>
       /// <returns>Список моделей с названием позиции, страховой суммой и страховой премией.</returns>
       public static List<PrntKaskoRiskViewModel> PrntGetKaskoRisks(MapperFunctionParams @params)
       {
           Deal deal = (Deal)@params.Target;
           List<PrntKaskoRiskViewModel> kaskoRisks = new List<PrntKaskoRiskViewModel>();

           var destributedCovers = ProportionalPremiumDistributor.GetDestributedCoveragePremimums(deal);

           var damageCoverage = GetDealCoverage(deal, CoverageCodes.DAMAGE);
           var totalRisk = deal.GetDealRisk(null, RiskCodes.TOTAL);
           var damageRisk = deal.GetDealRisk(null, RiskCodes.DAMAGE);

           if (ShouldPrintDamage(deal, damageRisk, totalRisk))
           {
               kaskoRisks.Add(new PrntKaskoRiskViewModel
               {
                   Name = "\"Ущерб\"",
                   Total = damageCoverage == null ? damageRisk.Sum.ToString() : damageCoverage.Sum.ToString(),
                   Bonus = ProportionalPremiumDistributor.GetDestributedPremimum(destributedCovers, CoverageCodes.DAMAGE).ToString()
               });
           }

           if (damageRisk == null && totalRisk != null)
           {
               kaskoRisks.Add(new PrntKaskoRiskViewModel
               {
                   Name = "\"Ущерб\" только на условиях \"Полная гибель\"",
                   Total = totalRisk.Sum.ToString(),
                   Bonus = ProportionalPremiumDistributor.GetDestributedPremimum(destributedCovers, CoverageCodes.DAMAGE).ToString()
               });
           }

           var destributedRisks = ProportionalPremiumDistributor.GetDestributedRiskPremimums(deal);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.TWOPARTICIPANTSCRASH, RiskCodes.DMGSECPART, "\"ДТП со вторым участником\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.AUTOKASKO, RiskCodes.DMGSECPART, "\"ДТП со вторым участником\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.DAMAGE, RiskCodes.DMGSECPART, "\"ДТП со вторым участником\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.CARJACKING, RiskCodes.CARJACKING, "\"Угон/Хищение\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.AUTOKASKO, RiskCodes.DAMAGE, "\"Страховая сумма по АвтоКаско\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, CoverageCodes.ADDEQUIPMENT, RiskCodes.ADDEQUIPMENT, "\"Дополнительное оборудование\"", destributedRisks);
           AddKaskoRiskViewModelByAllOptionsInCoverage(kaskoRisks, deal, CoverageCodes.ADDCOSTS, "\"Дополнительные расходы\"", destributedCovers);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, null, RiskCodes.CIVILLIABILITY, "\"Гражданская ответственность\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, null, RiskCodes.ACCIDENT, "\"Несчастный случай\" (на весь салон)\"", destributedRisks);
           AddKaskoRiskViewModelByCoverageAndRisk(kaskoRisks, deal, null, RiskCodes.GAP, "\"GAP страхование\"", destributedRisks);

           return kaskoRisks;
       }

        private static void AddKaskoRiskViewModelByCoverageAndRisk(List<PrntKaskoRiskViewModel> kaskoRisks, Deal deal, string coverageCode, string riskCode, string riskName, List<DealComponentCalculatedCost> destributedRisks)
        {
            var dealRisk = deal.GetDealRisk(coverageCode, riskCode);

            if (dealRisk != null)
            {
                kaskoRisks.Add(new PrntKaskoRiskViewModel()
                {
                    Name = riskName,
                    Total = dealRisk.Sum.ToString(),
                    Bonus = ProportionalPremiumDistributor.GetDestributedPremimum(destributedRisks, coverageCode, riskCode).ToString()
                });
            }
        }

Как работает этот код