Загрузка данных
with year_table (year_name) as (
select extract (year
from generate_series(cast($P{bDate} as date), cast($P{eDate} as date), '1 year')) as year_name),
operations (id,ef_year, cred_mnemonics, deb_mnemonics, value,name,acc_name,type_movement) as (
select
o.id,
extract(year from o.effective_date),
cat.mnemonics as cred_mnemonics,
dat.mnemonics as deb_mnemonics,
t.value,
ot.name,
dat.name as acc_name,
ot.type_movement
from back_office.operation o
join back_office.transaction t on t.operation_id = o.id
join back_office.operation_type ot on ot.id = o.operation_type_id
left join back_office.account da on da.id = t.debit_account_id
left join back_office.account ca on ca.id = t.credit_account_id
left join back_office.account_type dat on dat.id = da.account_type_id
left join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date between cast($P{bDate} as date) and cast($P{eDate} as date)
and da.owner_sharer_id = $P{sharerId}
and da.owner_sharer_id <> coalesce(ca.owner_sharer_id, 0)
union all
select
o.id,
extract(year from o.effective_date),
cat.mnemonics,
dat.mnemonics,
t.value,
ot.name,
dat.name,
ot.type_movement
from back_office.operation o
join back_office.operation_type ot on ot.id = o.operation_type_id
join back_office.transaction t on t.operation_id = o.id
join back_office.account ca on ca.id = t.credit_account_id
left join back_office.account da on da.id = t.debit_account_id
left join back_office.account_type dat on dat.id = da.account_type_id
left join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date between cast($P{bDate} as date) and cast($P{eDate} as date)
and ca.owner_sharer_id = $P{sharerId}
union all
-- Возврат ОПС
select
o.id,
extract(year from o.effective_date),
cat.mnemonics,
dat.mnemonics,
t.value,
ot.name,
dat.name,
ot.type_movement
from back_office.operation o
join back_office.operation_type ot on ot.id = o.operation_type_id
join back_office.ops_payment_return r on r.id = o.ops_payment_return_id
join back_office.ops_payment_register_decision rd on rd.id = r.ops_payment_register_decision_id
join back_office.ops_payment_decision d on d.id = rd.ops_payment_decision_id
join ourpension.ops_pension_assignment_application a on a.id = d.ops_pension_assignment_application_id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date between cast($P{bDate} as date) and cast($P{eDate} as date)
and ca.owner_individual_id = rd.recipient_individual_id
and a.sharer_id = $P{sharerId}
union all
-- Возврат НПО
select
o.id,
extract(year from o.effective_date),
cat.mnemonics,
dat.mnemonics,
t.value,
ot.name,
dat.name,
ot.type_movement
from back_office.operation o
join back_office.operation_type ot on ot.id = o.operation_type_id
join back_office.payment_return pr on pr.id = o.payment_return_id
join back_office.payment p on p.id = pr.payment_id
join back_office.payment_register r on p.payment_register_id = r.id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date between cast($P{bDate} as date) and cast($P{eDate} as date)
and ca.owner_individual_id = p.recipient_individual_id
and p.sharer_id = $P{sharerId}
union all
-- Повторная выплата возврата
select
o.id,
extract(year from o.effective_date),
cat.mnemonics,
dat.mnemonics,
t.value,
ot.name,
dat.name,
ot.type_movement
from back_office.operation o
join back_office.operation_type ot on ot.id = o.operation_type_id
join back_office.ops_payment_register_decision rd on rd.ops_payment_register_id = o.ops_payment_register_id
join back_office.ops_payment_return r on r.id = rd.ops_payment_return_id
join back_office.ops_payment_decision d on d.id = rd.ops_payment_decision_id
join ourpension.ops_pension_assignment_application a on a.id = d.ops_pension_assignment_application_id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date between cast($P{bDate} as date) and cast($P{eDate} as date)
and ca.owner_individual_id = rd.recipient_individual_id
and a.sharer_id = $P{sharerId}
)
select cast(yt.year_name as varchar(4)) as year_name, count(o.value) as count_oper,
sum(o.value) as sum_value, sum(n.value) as sum_ndfl
from year_table yt
left join operations o on yt.year_name =o.ef_year
and o.deb_mnemonics not like '%CВ%'
and o.deb_mnemonics not like '%ПП%' and o.deb_mnemonics is not null
and o.name like '%Выплата%'
and coalesce(o.cred_mnemonics,'') not like '%НДФЛ%'
left join operations n on o.id = n.id and n.cred_mnemonics like '%НДФЛ%'
group by yt.year_name
order by yt.year_name