Загрузка данных


WITH cte_pens_product AS MATERIALIZED
(   -- Продукт - последнее значение
    SELECT 
        products.id, 
        products."name",
        products.pens_scheme_accum_stage_id as scheme_id
    FROM ourpension.contract_product_history history
        INNER JOIN prod_line.pens_product products 
        ON products.id = history.pens_product_id
    WHERE history.contract_id = :id
        AND CURRENT_TIMESTAMP BETWEEN 
            history.begin_date AND COALESCE( history.end_date, 'infinity' )
    LIMIT 1
), cte_param_pl AS MATERIALIZED 
(   -- Параметры из продуктовой линейки
    SELECT 
        pp2.brief, 
        prod_line.get_value_link_param
            (   CAST( pp2.id AS integer ), 
                CAST( pppp.value_ref AS integer ) 
            ) as param_value
    FROM cte_pens_product cpp
        INNER JOIN prod_line.pens_product pens_p 
        ON pens_p.id = cpp.id
        INNER JOIN prod_line.pens_product_param_pl pppp
        ON pppp.pens_product_id = pens_p.id
        INNER JOIN prod_line.param_pl pp2 
        ON pp2.id = pppp.param_pl_id     
)
SELECT 
    c.id,                                                           --  ИД договора
    (   SELECT param.param_value
        FROM cte_param_pl param
        WHERE param.brief = 'ФормаДоговора'
    ) AS contract_form,                                             --  Форма договора
    sct."name" AS sales_channel,                                    --  Канал продаж
    sct.brief AS cfo,                                               --  ЦФО
    e.short_name AS employer,                                       --  Работодатель
    pp."name" AS product_name,                                      --  Наименование продукта
    pp.id AS product_id,                                            --  ИД продукта
    tv.amount_type,                                                 --  Тип суммы
    tv.month_since_open AS transfer_term_in_months,                 --  Срок перевода в месяцах с момента открытия ПС
    pr.edition_number AS pension_rules_edition,                     --  Редакция пенсионных правил
    to_json( COALESCE( tl.tariff_name, '' ) ) AS tariff,            --  Тариф (оборачиваем в to_json, чтобы отсечь мусор в строке из-за миграции)
    cp.tariff_id,                                                   --  ID тарифа
    cp.min_annual_income_period AS mgd_accumulation_period,         --  МГД в периоде накопления
    cp.min_annual_savings_income AS mgd_payment_period,             --  МГД в периоды выплат
    (   SELECT param.param_value
        FROM cte_param_pl param
        WHERE param.brief = 'СрокОжиданияПервогоВзносаКоличДней'
    ) AS first_contribution_wait_period,                            --  Срок ожидания первого взноса
    cp.current_payment AS current_contribution,                     --  Текущий взнос
    (   SELECT mpf."name"
        FROM prod_line.hb_param_pl_multiselect mpf
        WHERE mpf.id = cp.payment_frequency
    ) AS contribution_frequency,                                    --  Периодичность взносов
    cp.contribution_ss AS ss_deduction_rate,                        --  Размер отчислений в СС
    cp.contribution_sr AS sr_deduction_rate,                        --  Размер отчислений в СР
    (   SELECT vst."label"
        FROM ourpension.voc_sharer_types vst
        WHERE vst."code" = cp.contribution_account
    ) AS contribution_account,                                      --  Счет учета взносов
    (   SELECT param.param_value
        FROM cte_param_pl param
        WHERE param.brief = 'ТипВыплаты'
    ) AS payment_type,                                              --  Тип выплаты
    cp.minimal_payment_amount AS min_payment_amount,                --  Минимальный размер выплаты
    cp.payment_term,                                                --  Срок выплаты
    cp.min_payment_term,                                            --  Минимальный срок выплаты
    (   SELECT param.param_value
        FROM cte_param_pl param
        WHERE param.brief = 'ПоэтапныйВестингПарамРасчетаСрока'
    ) AS term_calculation_parametr,                                 --  Параметр расчета срока
    (   SELECT param.param_value
        FROM cte_param_pl param
        WHERE param.brief = 'ПериодПредостПравТреб'
    ) AS choice_right_provision_parameter,                          --  Период предоставления права требования
    cp.initial_payment,                                             --  Первоначальный взнос
    cp.min_actuarial_yield,
    cp.indexing_value,                                              -- Величина прироста размера пенсии
    pp.scheme_id,                                                   -- Пенсионная схема (ИД)
		ps.brief as scheme_number                                       -- Пенсионная схема (название)
FROM ourpension.contract c
    LEFT JOIN ourpension.pension_rule pr ON pr.id = c.pension_rule_id
    LEFT JOIN ourpension.contract_params cp ON cp.contract_id = c.id
    LEFT JOIN ourpension.entity e ON e.id = c.entity_id
    LEFT JOIN ourpension.fund f ON f.id = c.fund_id
    LEFT JOIN actuary.tariff_list tl ON tl.id = cp.tariff_id
    LEFT JOIN ourpension.sale_channel sc ON sc.id = c.sale_channel_id
    LEFT JOIN prod_line.sale_channel_type sct ON sct.id = sc.type_sale_channel_id
    CROSS JOIN cte_pens_product pp
    LEFT JOIN prod_line.pens_scheme ps
    ON ps.id = pp.scheme_id
    LEFT JOIN prod_line.table_vesting tv ON tv.product_id = pp.id
WHERE c.id = :id


ШАБЛОН
#set ( $s = $db.findOne($search_brief_multiselect_sql) )
#if ($s)
{
	amountType:											'$s.amount_type',
	cfo: 														'$s.cfo',
  choiceRightProvisionParameter:	'$s.choice_right_provision_parameter',
	contractForm: 									'$s.contract_form',
	contributionAccount:						'$s.contribution_account',
	contributionFrequency:					'$s.contribution_frequency',
	currentContribution:						'$s.current_contribution',
	employer: 											'$s.employer',
	firstContributionWaitPeriod:		'$s.first_contribution_wait_period',
	id:															'$s.id',
	indexingValue:  								'$s.indexing_value',
	initialPayment: 								'$s.initial_payment',
	mgdAccumulationPeriod:					'$s.mgd_accumulation_period',
	mgdPaymentPeriod:              	'$s.mgd_payment_period',
	minActuarialYield:							'$s.min_actuarial_yield',
	minPaymentAmount:								'$s.min_payment_amount',
	minPaymentTerm:									'$s.min_payment_term',
	paymentTerm:										'$s.payment_term',
	paymentType:										'$s.payment_type',
	pensionRulesEdition:						'$s.pension_rules_edition',
	productId:										  '$s.product_id',
	productName:										'$s.product_name',
	salesChannel: 									'$s.sales_channel',
	schemeId:											 	'$s.scheme_id',	
	schemeNumber:										'$s.scheme_number',
	ssDeductionRate:								'$s.ss_deduction_rate',
	srDeductionRate:								'$s.sr_deduction_rate',
	tariff:													$s.tariff,
	tariff_id:											'$s.tariff_id',
	termCalculationParametr:				'$s.term_calculation_parametr',
	transferTermInMonths:						'$s.transfer_term_in_months'
}
#else {}
#end