1798 lines
112 KiB
PL/PgSQL
1798 lines
112 KiB
PL/PgSQL
-- =============================================================================
|
||
-- МИГРАЦИЯ: итоговые своды (зеркала листов «смета»/«свод» исходных форм)
|
||
-- Источник требований: «Свод 1 - АВРОРА - СУЖЦ ПО Confluence», раздел 10.3.
|
||
--
|
||
-- * 1форм_ССП — форма «Смета ГО» (FORM_1): функция v_1form_ssp(p_year, p_org_unit_ids) + view v_1form_ssp
|
||
-- * 2форм_РФ_П — форма «РФ Поддержка» (FORM_2): функция v_2form_rf_p(p_year, p_org_unit_ids) + view v_2form_rf_p (только Поддержка)
|
||
-- * 3форм_РФ_Р — форма «Отчёт РФ развитие» (FORM_3): функция v_3form_rf_r(p_year, p_org_unit_ids) + view v_3form_rf_r (только Развитие)
|
||
-- * 4форм_ПРОЕКТ — форма «Проектная деятельность» (FORM_4): функция v_4form_project(p_year, p_org_unit_ids) + view v_4form_project (только Развитие)
|
||
-- * main_format — консолидированный свод: функция v_main_format(p_year, p_org_unit_ids) + view v_main_format
|
||
-- * v_summary_view — API-диспетчер по листам свода (sheet: FORM_1/FORM_2/FORM_3/FORM_4/MAIN)
|
||
-- =============================================================================
|
||
|
||
-- =============================================================================
|
||
-- 1форм_ССП — ФУНКЦИЯ
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_1form_ssp(integer);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_1form_ssp(p_year integer, p_org_unit_ids integer[] DEFAULT NULL)
|
||
RETURNS TABLE(
|
||
section_code character varying,
|
||
name character varying,
|
||
plan_support_q1 numeric,
|
||
plan_support_q2 numeric,
|
||
plan_support_q3 numeric,
|
||
plan_support_q4 numeric,
|
||
plan_support_year numeric,
|
||
plan_development_q1 numeric,
|
||
plan_development_q2 numeric,
|
||
plan_development_q3 numeric,
|
||
plan_development_q4 numeric,
|
||
plan_development_year numeric,
|
||
plan_total_year numeric,
|
||
approved_support_q1 numeric,
|
||
approved_support_q2 numeric,
|
||
approved_support_q3 numeric,
|
||
approved_support_q4 numeric,
|
||
approved_support_year numeric,
|
||
approved_development_q1 numeric,
|
||
approved_development_q2 numeric,
|
||
approved_development_q3 numeric,
|
||
approved_development_q4 numeric,
|
||
approved_development_year numeric,
|
||
approved_total_year numeric,
|
||
fact_support_q1 numeric,
|
||
fact_support_q2 numeric,
|
||
fact_support_q3 numeric,
|
||
fact_support_q4 numeric,
|
||
fact_support_year numeric,
|
||
fact_development_q1 numeric,
|
||
fact_development_q2 numeric,
|
||
fact_development_q3 numeric,
|
||
fact_development_q4 numeric,
|
||
fact_development_year numeric,
|
||
fact_total_year numeric,
|
||
corrected_support_q2 numeric,
|
||
corrected_support_q3 numeric,
|
||
corrected_support_q4 numeric,
|
||
corrected_development_q2 numeric,
|
||
corrected_development_q3 numeric,
|
||
corrected_development_q4 numeric
|
||
)
|
||
LANGUAGE sql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
WITH
|
||
form_lines AS (
|
||
SELECT
|
||
bl.id AS line_id,
|
||
bl.expense_item_id AS eid,
|
||
CASE WHEN bl.direction = 'Development' THEN 'Development' ELSE 'Support' END AS bucket
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_1'
|
||
AND bf.year = p_year
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
AND (p_org_unit_ids IS NULL OR cardinality(p_org_unit_ids) = 0 OR bf.org_unit_id = ANY(p_org_unit_ids))
|
||
),
|
||
-- Квартальные данные, свёрнутые по строке (избегаем размножения при JOIN)
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
-- Агрегаты уровня «статья × направление»
|
||
line_agg AS (
|
||
SELECT
|
||
fl.eid,
|
||
fl.bucket,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.eid, fl.bucket
|
||
),
|
||
-- Узлы дерева, отображаемые на листе «смета» (ROOT/GROUP/ITEM)
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_1'
|
||
WHERE t.depth < 3
|
||
),
|
||
-- Свёртка по иерархии: узел = сумма по всем потомкам
|
||
rolled AS (
|
||
SELECT
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) FILTER (WHERE a.bucket = 'Support') AS s_pq1,
|
||
SUM(a.pq2) FILTER (WHERE a.bucket = 'Support') AS s_pq2,
|
||
SUM(a.pq3) FILTER (WHERE a.bucket = 'Support') AS s_pq3,
|
||
SUM(a.pq4) FILTER (WHERE a.bucket = 'Support') AS s_pq4,
|
||
SUM(a.sd1) FILTER (WHERE a.bucket = 'Support') AS s_sd1,
|
||
SUM(a.sd2) FILTER (WHERE a.bucket = 'Support') AS s_sd2,
|
||
SUM(a.sd3) FILTER (WHERE a.bucket = 'Support') AS s_sd3,
|
||
SUM(a.sd4) FILTER (WHERE a.bucket = 'Support') AS s_sd4,
|
||
SUM(a.rq1) FILTER (WHERE a.bucket = 'Support') AS s_rq1,
|
||
SUM(a.rq2) FILTER (WHERE a.bucket = 'Support') AS s_rq2,
|
||
SUM(a.rq3) FILTER (WHERE a.bucket = 'Support') AS s_rq3,
|
||
SUM(a.rq4) FILTER (WHERE a.bucket = 'Support') AS s_rq4,
|
||
SUM(a.fq1) FILTER (WHERE a.bucket = 'Support') AS s_fq1,
|
||
SUM(a.fq2) FILTER (WHERE a.bucket = 'Support') AS s_fq2,
|
||
SUM(a.fq3) FILTER (WHERE a.bucket = 'Support') AS s_fq3,
|
||
SUM(a.fq4) FILTER (WHERE a.bucket = 'Support') AS s_fq4,
|
||
SUM(a.t1q2) FILTER (WHERE a.bucket = 'Support') AS s_t1q2,
|
||
SUM(a.t1q3) FILTER (WHERE a.bucket = 'Support') AS s_t1q3,
|
||
SUM(a.t1q4) FILTER (WHERE a.bucket = 'Support') AS s_t1q4,
|
||
SUM(a.t2q3) FILTER (WHERE a.bucket = 'Support') AS s_t2q3,
|
||
SUM(a.t2q4) FILTER (WHERE a.bucket = 'Support') AS s_t2q4,
|
||
SUM(a.t3q4) FILTER (WHERE a.bucket = 'Support') AS s_t3q4,
|
||
SUM(a.rev2) FILTER (WHERE a.bucket = 'Support') AS s_rev2,
|
||
SUM(a.rev3) FILTER (WHERE a.bucket = 'Support') AS s_rev3,
|
||
SUM(a.rev4) FILTER (WHERE a.bucket = 'Support') AS s_rev4,
|
||
SUM(a.pq1) FILTER (WHERE a.bucket = 'Development') AS d_pq1,
|
||
SUM(a.pq2) FILTER (WHERE a.bucket = 'Development') AS d_pq2,
|
||
SUM(a.pq3) FILTER (WHERE a.bucket = 'Development') AS d_pq3,
|
||
SUM(a.pq4) FILTER (WHERE a.bucket = 'Development') AS d_pq4,
|
||
SUM(a.sd1) FILTER (WHERE a.bucket = 'Development') AS d_sd1,
|
||
SUM(a.sd2) FILTER (WHERE a.bucket = 'Development') AS d_sd2,
|
||
SUM(a.sd3) FILTER (WHERE a.bucket = 'Development') AS d_sd3,
|
||
SUM(a.sd4) FILTER (WHERE a.bucket = 'Development') AS d_sd4,
|
||
SUM(a.rq1) FILTER (WHERE a.bucket = 'Development') AS d_rq1,
|
||
SUM(a.rq2) FILTER (WHERE a.bucket = 'Development') AS d_rq2,
|
||
SUM(a.rq3) FILTER (WHERE a.bucket = 'Development') AS d_rq3,
|
||
SUM(a.rq4) FILTER (WHERE a.bucket = 'Development') AS d_rq4,
|
||
SUM(a.fq1) FILTER (WHERE a.bucket = 'Development') AS d_fq1,
|
||
SUM(a.fq2) FILTER (WHERE a.bucket = 'Development') AS d_fq2,
|
||
SUM(a.fq3) FILTER (WHERE a.bucket = 'Development') AS d_fq3,
|
||
SUM(a.fq4) FILTER (WHERE a.bucket = 'Development') AS d_fq4,
|
||
SUM(a.t1q2) FILTER (WHERE a.bucket = 'Development') AS d_t1q2,
|
||
SUM(a.t1q3) FILTER (WHERE a.bucket = 'Development') AS d_t1q3,
|
||
SUM(a.t1q4) FILTER (WHERE a.bucket = 'Development') AS d_t1q4,
|
||
SUM(a.t2q3) FILTER (WHERE a.bucket = 'Development') AS d_t2q3,
|
||
SUM(a.t2q4) FILTER (WHERE a.bucket = 'Development') AS d_t2q4,
|
||
SUM(a.t3q4) FILTER (WHERE a.bucket = 'Development') AS d_t3q4,
|
||
SUM(a.rev2) FILTER (WHERE a.bucket = 'Development') AS d_rev2,
|
||
SUM(a.rev3) FILTER (WHERE a.bucket = 'Development') AS d_rev3,
|
||
SUM(a.rev4) FILTER (WHERE a.bucket = 'Development') AS d_rev4
|
||
FROM tree_nodes AS tn
|
||
LEFT JOIN line_agg AS a ON a.eid = ANY (tn.desc_ids)
|
||
GROUP BY tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.item_id AS section_code,
|
||
r.name,
|
||
COALESCE(r.s_pq1, 0) AS plan_support_q1,
|
||
COALESCE(r.s_pq2, 0) AS plan_support_q2,
|
||
COALESCE(r.s_pq3, 0) AS plan_support_q3,
|
||
COALESCE(r.s_pq4, 0) AS plan_support_q4,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_pq2, 0) + COALESCE(r.s_pq3, 0) + COALESCE(r.s_pq4, 0) AS plan_support_year,
|
||
COALESCE(r.d_pq1, 0) AS plan_development_q1,
|
||
COALESCE(r.d_pq2, 0) AS plan_development_q2,
|
||
COALESCE(r.d_pq3, 0) AS plan_development_q3,
|
||
COALESCE(r.d_pq4, 0) AS plan_development_q4,
|
||
COALESCE(r.d_pq1, 0) + COALESCE(r.d_pq2, 0) + COALESCE(r.d_pq3, 0) + COALESCE(r.d_pq4, 0) AS plan_development_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_pq2, 0) + COALESCE(r.s_pq3, 0) + COALESCE(r.s_pq4, 0)
|
||
+ COALESCE(r.d_pq1, 0) + COALESCE(r.d_pq2, 0) + COALESCE(r.d_pq3, 0) + COALESCE(r.d_pq4, 0) AS plan_total_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0) AS approved_support_q1,
|
||
COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0) AS approved_support_q2,
|
||
COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0) AS approved_support_q3,
|
||
COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0) AS approved_support_q4,
|
||
(COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0))
|
||
+ (COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0))
|
||
+ (COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0))
|
||
+ (COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)) AS approved_support_year,
|
||
COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0) AS approved_development_q1,
|
||
COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0) AS approved_development_q2,
|
||
COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0) AS approved_development_q3,
|
||
COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0) AS approved_development_q4,
|
||
(COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0))
|
||
+ (COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0))
|
||
+ (COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0))
|
||
+ (COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0)) AS approved_development_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0)
|
||
+ COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0)
|
||
+ COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0)
|
||
+ COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)
|
||
+ COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0)
|
||
+ COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0)
|
||
+ COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0)
|
||
+ COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0) AS approved_total_year,
|
||
COALESCE(r.s_fq1, 0) AS fact_support_q1,
|
||
COALESCE(r.s_fq2, 0) AS fact_support_q2,
|
||
COALESCE(r.s_fq3, 0) AS fact_support_q3,
|
||
COALESCE(r.s_fq4, 0) AS fact_support_q4,
|
||
COALESCE(r.s_fq1, 0) + COALESCE(r.s_fq2, 0) + COALESCE(r.s_fq3, 0) + COALESCE(r.s_fq4, 0) AS fact_support_year,
|
||
COALESCE(r.d_fq1, 0) AS fact_development_q1,
|
||
COALESCE(r.d_fq2, 0) AS fact_development_q2,
|
||
COALESCE(r.d_fq3, 0) AS fact_development_q3,
|
||
COALESCE(r.d_fq4, 0) AS fact_development_q4,
|
||
COALESCE(r.d_fq1, 0) + COALESCE(r.d_fq2, 0) + COALESCE(r.d_fq3, 0) + COALESCE(r.d_fq4, 0) AS fact_development_year,
|
||
COALESCE(r.s_fq1, 0) + COALESCE(r.s_fq2, 0) + COALESCE(r.s_fq3, 0) + COALESCE(r.s_fq4, 0)
|
||
+ COALESCE(r.d_fq1, 0) + COALESCE(r.d_fq2, 0) + COALESCE(r.d_fq3, 0) + COALESCE(r.d_fq4, 0) AS fact_total_year,
|
||
COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0)
|
||
+ COALESCE(r.s_t1q2, 0) + COALESCE(r.s_rev2, 0) AS corrected_support_q2,
|
||
COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0)
|
||
+ COALESCE(r.s_t1q3, 0) + COALESCE(r.s_t2q3, 0) + COALESCE(r.s_rev3, 0) AS corrected_support_q3,
|
||
COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)
|
||
+ COALESCE(r.s_t1q4, 0) + COALESCE(r.s_t2q4, 0) + COALESCE(r.s_t3q4, 0) + COALESCE(r.s_rev4, 0) AS corrected_support_q4,
|
||
COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0)
|
||
+ COALESCE(r.d_t1q2, 0) + COALESCE(r.d_rev2, 0) AS corrected_development_q2,
|
||
COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0)
|
||
+ COALESCE(r.d_t1q3, 0) + COALESCE(r.d_t2q3, 0) + COALESCE(r.d_rev3, 0) AS corrected_development_q3,
|
||
COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0)
|
||
+ COALESCE(r.d_t1q4, 0) + COALESCE(r.d_t2q4, 0) + COALESCE(r.d_t3q4, 0) + COALESCE(r.d_rev4, 0) AS corrected_development_q4
|
||
FROM rolled AS r;
|
||
$function$;
|
||
|
||
-- =============================================================================
|
||
-- 1форм_ССП — VIEW
|
||
-- =============================================================================
|
||
|
||
-- DROP VIEW IF EXISTS v3.v_1form_ssp;
|
||
|
||
CREATE OR REPLACE VIEW v3.v_1form_ssp AS
|
||
WITH
|
||
form_lines AS (
|
||
SELECT
|
||
bf.year,
|
||
bl.id AS line_id,
|
||
bl.expense_item_id AS eid,
|
||
CASE WHEN bl.direction = 'Development' THEN 'Development' ELSE 'Support' END AS bucket
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_1'
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
),
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
line_agg AS (
|
||
SELECT
|
||
fl.year,
|
||
fl.eid,
|
||
fl.bucket,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.year, fl.eid, fl.bucket
|
||
),
|
||
years AS (
|
||
SELECT DISTINCT bf.year
|
||
FROM v3.budget_form AS bf
|
||
WHERE bf.form_type_code = 'FORM_1'
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_1'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
y.year,
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) FILTER (WHERE a.bucket = 'Support') AS s_pq1,
|
||
SUM(a.pq2) FILTER (WHERE a.bucket = 'Support') AS s_pq2,
|
||
SUM(a.pq3) FILTER (WHERE a.bucket = 'Support') AS s_pq3,
|
||
SUM(a.pq4) FILTER (WHERE a.bucket = 'Support') AS s_pq4,
|
||
SUM(a.sd1) FILTER (WHERE a.bucket = 'Support') AS s_sd1,
|
||
SUM(a.sd2) FILTER (WHERE a.bucket = 'Support') AS s_sd2,
|
||
SUM(a.sd3) FILTER (WHERE a.bucket = 'Support') AS s_sd3,
|
||
SUM(a.sd4) FILTER (WHERE a.bucket = 'Support') AS s_sd4,
|
||
SUM(a.rq1) FILTER (WHERE a.bucket = 'Support') AS s_rq1,
|
||
SUM(a.rq2) FILTER (WHERE a.bucket = 'Support') AS s_rq2,
|
||
SUM(a.rq3) FILTER (WHERE a.bucket = 'Support') AS s_rq3,
|
||
SUM(a.rq4) FILTER (WHERE a.bucket = 'Support') AS s_rq4,
|
||
SUM(a.fq1) FILTER (WHERE a.bucket = 'Support') AS s_fq1,
|
||
SUM(a.fq2) FILTER (WHERE a.bucket = 'Support') AS s_fq2,
|
||
SUM(a.fq3) FILTER (WHERE a.bucket = 'Support') AS s_fq3,
|
||
SUM(a.fq4) FILTER (WHERE a.bucket = 'Support') AS s_fq4,
|
||
SUM(a.t1q2) FILTER (WHERE a.bucket = 'Support') AS s_t1q2,
|
||
SUM(a.t1q3) FILTER (WHERE a.bucket = 'Support') AS s_t1q3,
|
||
SUM(a.t1q4) FILTER (WHERE a.bucket = 'Support') AS s_t1q4,
|
||
SUM(a.t2q3) FILTER (WHERE a.bucket = 'Support') AS s_t2q3,
|
||
SUM(a.t2q4) FILTER (WHERE a.bucket = 'Support') AS s_t2q4,
|
||
SUM(a.t3q4) FILTER (WHERE a.bucket = 'Support') AS s_t3q4,
|
||
SUM(a.rev2) FILTER (WHERE a.bucket = 'Support') AS s_rev2,
|
||
SUM(a.rev3) FILTER (WHERE a.bucket = 'Support') AS s_rev3,
|
||
SUM(a.rev4) FILTER (WHERE a.bucket = 'Support') AS s_rev4,
|
||
SUM(a.pq1) FILTER (WHERE a.bucket = 'Development') AS d_pq1,
|
||
SUM(a.pq2) FILTER (WHERE a.bucket = 'Development') AS d_pq2,
|
||
SUM(a.pq3) FILTER (WHERE a.bucket = 'Development') AS d_pq3,
|
||
SUM(a.pq4) FILTER (WHERE a.bucket = 'Development') AS d_pq4,
|
||
SUM(a.sd1) FILTER (WHERE a.bucket = 'Development') AS d_sd1,
|
||
SUM(a.sd2) FILTER (WHERE a.bucket = 'Development') AS d_sd2,
|
||
SUM(a.sd3) FILTER (WHERE a.bucket = 'Development') AS d_sd3,
|
||
SUM(a.sd4) FILTER (WHERE a.bucket = 'Development') AS d_sd4,
|
||
SUM(a.rq1) FILTER (WHERE a.bucket = 'Development') AS d_rq1,
|
||
SUM(a.rq2) FILTER (WHERE a.bucket = 'Development') AS d_rq2,
|
||
SUM(a.rq3) FILTER (WHERE a.bucket = 'Development') AS d_rq3,
|
||
SUM(a.rq4) FILTER (WHERE a.bucket = 'Development') AS d_rq4,
|
||
SUM(a.fq1) FILTER (WHERE a.bucket = 'Development') AS d_fq1,
|
||
SUM(a.fq2) FILTER (WHERE a.bucket = 'Development') AS d_fq2,
|
||
SUM(a.fq3) FILTER (WHERE a.bucket = 'Development') AS d_fq3,
|
||
SUM(a.fq4) FILTER (WHERE a.bucket = 'Development') AS d_fq4,
|
||
SUM(a.t1q2) FILTER (WHERE a.bucket = 'Development') AS d_t1q2,
|
||
SUM(a.t1q3) FILTER (WHERE a.bucket = 'Development') AS d_t1q3,
|
||
SUM(a.t1q4) FILTER (WHERE a.bucket = 'Development') AS d_t1q4,
|
||
SUM(a.t2q3) FILTER (WHERE a.bucket = 'Development') AS d_t2q3,
|
||
SUM(a.t2q4) FILTER (WHERE a.bucket = 'Development') AS d_t2q4,
|
||
SUM(a.t3q4) FILTER (WHERE a.bucket = 'Development') AS d_t3q4,
|
||
SUM(a.rev2) FILTER (WHERE a.bucket = 'Development') AS d_rev2,
|
||
SUM(a.rev3) FILTER (WHERE a.bucket = 'Development') AS d_rev3,
|
||
SUM(a.rev4) FILTER (WHERE a.bucket = 'Development') AS d_rev4
|
||
FROM tree_nodes AS tn
|
||
CROSS JOIN years AS y
|
||
LEFT JOIN line_agg AS a
|
||
ON a.eid = ANY (tn.desc_ids)
|
||
AND a.year = y.year
|
||
GROUP BY y.year, tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.year,
|
||
r.item_id AS section_code,
|
||
r.name,
|
||
COALESCE(r.s_pq1, 0) AS plan_support_q1,
|
||
COALESCE(r.s_pq2, 0) AS plan_support_q2,
|
||
COALESCE(r.s_pq3, 0) AS plan_support_q3,
|
||
COALESCE(r.s_pq4, 0) AS plan_support_q4,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_pq2, 0) + COALESCE(r.s_pq3, 0) + COALESCE(r.s_pq4, 0) AS plan_support_year,
|
||
COALESCE(r.d_pq1, 0) AS plan_development_q1,
|
||
COALESCE(r.d_pq2, 0) AS plan_development_q2,
|
||
COALESCE(r.d_pq3, 0) AS plan_development_q3,
|
||
COALESCE(r.d_pq4, 0) AS plan_development_q4,
|
||
COALESCE(r.d_pq1, 0) + COALESCE(r.d_pq2, 0) + COALESCE(r.d_pq3, 0) + COALESCE(r.d_pq4, 0) AS plan_development_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_pq2, 0) + COALESCE(r.s_pq3, 0) + COALESCE(r.s_pq4, 0)
|
||
+ COALESCE(r.d_pq1, 0) + COALESCE(r.d_pq2, 0) + COALESCE(r.d_pq3, 0) + COALESCE(r.d_pq4, 0) AS plan_total_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0) AS approved_support_q1,
|
||
COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0) AS approved_support_q2,
|
||
COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0) AS approved_support_q3,
|
||
COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0) AS approved_support_q4,
|
||
(COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0))
|
||
+ (COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0))
|
||
+ (COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0))
|
||
+ (COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)) AS approved_support_year,
|
||
COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0) AS approved_development_q1,
|
||
COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0) AS approved_development_q2,
|
||
COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0) AS approved_development_q3,
|
||
COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0) AS approved_development_q4,
|
||
(COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0))
|
||
+ (COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0))
|
||
+ (COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0))
|
||
+ (COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0)) AS approved_development_year,
|
||
COALESCE(r.s_pq1, 0) + COALESCE(r.s_sd1, 0) + COALESCE(r.s_rq1, 0)
|
||
+ COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0)
|
||
+ COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0)
|
||
+ COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)
|
||
+ COALESCE(r.d_pq1, 0) + COALESCE(r.d_sd1, 0) + COALESCE(r.d_rq1, 0)
|
||
+ COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0)
|
||
+ COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0)
|
||
+ COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0) AS approved_total_year,
|
||
COALESCE(r.s_fq1, 0) AS fact_support_q1,
|
||
COALESCE(r.s_fq2, 0) AS fact_support_q2,
|
||
COALESCE(r.s_fq3, 0) AS fact_support_q3,
|
||
COALESCE(r.s_fq4, 0) AS fact_support_q4,
|
||
COALESCE(r.s_fq1, 0) + COALESCE(r.s_fq2, 0) + COALESCE(r.s_fq3, 0) + COALESCE(r.s_fq4, 0) AS fact_support_year,
|
||
COALESCE(r.d_fq1, 0) AS fact_development_q1,
|
||
COALESCE(r.d_fq2, 0) AS fact_development_q2,
|
||
COALESCE(r.d_fq3, 0) AS fact_development_q3,
|
||
COALESCE(r.d_fq4, 0) AS fact_development_q4,
|
||
COALESCE(r.d_fq1, 0) + COALESCE(r.d_fq2, 0) + COALESCE(r.d_fq3, 0) + COALESCE(r.d_fq4, 0) AS fact_development_year,
|
||
COALESCE(r.s_fq1, 0) + COALESCE(r.s_fq2, 0) + COALESCE(r.s_fq3, 0) + COALESCE(r.s_fq4, 0)
|
||
+ COALESCE(r.d_fq1, 0) + COALESCE(r.d_fq2, 0) + COALESCE(r.d_fq3, 0) + COALESCE(r.d_fq4, 0) AS fact_total_year,
|
||
COALESCE(r.s_pq2, 0) + COALESCE(r.s_sd2, 0) + COALESCE(r.s_rq2, 0)
|
||
+ COALESCE(r.s_t1q2, 0) + COALESCE(r.s_rev2, 0) AS corrected_support_q2,
|
||
COALESCE(r.s_pq3, 0) + COALESCE(r.s_sd3, 0) + COALESCE(r.s_rq3, 0)
|
||
+ COALESCE(r.s_t1q3, 0) + COALESCE(r.s_t2q3, 0) + COALESCE(r.s_rev3, 0) AS corrected_support_q3,
|
||
COALESCE(r.s_pq4, 0) + COALESCE(r.s_sd4, 0) + COALESCE(r.s_rq4, 0)
|
||
+ COALESCE(r.s_t1q4, 0) + COALESCE(r.s_t2q4, 0) + COALESCE(r.s_t3q4, 0) + COALESCE(r.s_rev4, 0) AS corrected_support_q4,
|
||
COALESCE(r.d_pq2, 0) + COALESCE(r.d_sd2, 0) + COALESCE(r.d_rq2, 0)
|
||
+ COALESCE(r.d_t1q2, 0) + COALESCE(r.d_rev2, 0) AS corrected_development_q2,
|
||
COALESCE(r.d_pq3, 0) + COALESCE(r.d_sd3, 0) + COALESCE(r.d_rq3, 0)
|
||
+ COALESCE(r.d_t1q3, 0) + COALESCE(r.d_t2q3, 0) + COALESCE(r.d_rev3, 0) AS corrected_development_q3,
|
||
COALESCE(r.d_pq4, 0) + COALESCE(r.d_sd4, 0) + COALESCE(r.d_rq4, 0)
|
||
+ COALESCE(r.d_t1q4, 0) + COALESCE(r.d_t2q4, 0) + COALESCE(r.d_t3q4, 0) + COALESCE(r.d_rev4, 0) AS corrected_development_q4
|
||
FROM rolled AS r;
|
||
|
||
-- =============================================================================
|
||
-- 2форм_РФ_П — ФУНКЦИЯ
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_2form_rf_p(integer);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_2form_rf_p(p_year integer, p_org_unit_ids integer[] DEFAULT NULL)
|
||
RETURNS TABLE(
|
||
section_code character varying,
|
||
name character varying,
|
||
plan_support_q1 numeric,
|
||
plan_support_q2 numeric,
|
||
plan_support_q3 numeric,
|
||
plan_support_q4 numeric,
|
||
plan_support_year numeric,
|
||
approved_support_q1 numeric,
|
||
approved_support_q2 numeric,
|
||
approved_support_q3 numeric,
|
||
approved_support_q4 numeric,
|
||
approved_support_year numeric,
|
||
fact_support_q1 numeric,
|
||
fact_support_q2 numeric,
|
||
fact_support_q3 numeric,
|
||
fact_support_q4 numeric,
|
||
fact_support_year numeric,
|
||
corrected_support_q2 numeric,
|
||
corrected_support_q3 numeric,
|
||
corrected_support_q4 numeric
|
||
)
|
||
LANGUAGE sql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
WITH
|
||
form_lines AS (
|
||
SELECT bl.id AS line_id, bl.expense_item_id AS eid
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_2'
|
||
AND bf.year = p_year
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
AND (p_org_unit_ids IS NULL OR cardinality(p_org_unit_ids) = 0 OR bf.org_unit_id = ANY(p_org_unit_ids))
|
||
),
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
line_agg AS (
|
||
SELECT
|
||
fl.eid,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(sg.adj_q1) AS sg1, SUM(sg.adj_q2) AS sg2, SUM(sg.adj_q3) AS sg3, SUM(sg.adj_q4) AS sg4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.adj1) AS adj1, SUM(qp.adj2) AS adj2, SUM(qp.adj3) AS adj3, SUM(qp.adj4) AS adj4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.sequestration AS sg ON sg.line_id = fl.line_id AND sg.actor = 'SSP_GO'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.eid
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_2'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) AS pq1, SUM(a.pq2) AS pq2, SUM(a.pq3) AS pq3, SUM(a.pq4) AS pq4,
|
||
SUM(a.sd1) AS sd1, SUM(a.sd2) AS sd2, SUM(a.sd3) AS sd3, SUM(a.sd4) AS sd4,
|
||
SUM(a.sg1) AS sg1, SUM(a.sg2) AS sg2, SUM(a.sg3) AS sg3, SUM(a.sg4) AS sg4,
|
||
SUM(a.rq1) AS rq1, SUM(a.rq2) AS rq2, SUM(a.rq3) AS rq3, SUM(a.rq4) AS rq4,
|
||
SUM(a.fq1) AS fq1, SUM(a.fq2) AS fq2, SUM(a.fq3) AS fq3, SUM(a.fq4) AS fq4,
|
||
SUM(a.t1q2) AS t1q2, SUM(a.t1q3) AS t1q3, SUM(a.t1q4) AS t1q4,
|
||
SUM(a.t2q3) AS t2q3, SUM(a.t2q4) AS t2q4, SUM(a.t3q4) AS t3q4,
|
||
SUM(a.adj1) AS adj1, SUM(a.adj2) AS adj2, SUM(a.adj3) AS adj3, SUM(a.adj4) AS adj4,
|
||
SUM(a.rev2) AS rev2, SUM(a.rev3) AS rev3, SUM(a.rev4) AS rev4
|
||
FROM tree_nodes AS tn
|
||
LEFT JOIN line_agg AS a ON a.eid = ANY (tn.desc_ids)
|
||
GROUP BY tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.item_id AS section_code, r.name,
|
||
COALESCE(r.pq1, 0) AS plan_support_q1, COALESCE(r.pq2, 0) AS plan_support_q2, COALESCE(r.pq3, 0) AS plan_support_q3, COALESCE(r.pq4, 0) AS plan_support_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0) AS plan_support_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0) AS approved_support_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0) AS approved_support_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0) AS approved_support_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0) AS approved_support_q4,
|
||
(COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0))
|
||
+ (COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0))
|
||
+ (COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0))
|
||
+ (COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)) AS approved_support_year,
|
||
COALESCE(r.fq1, 0) AS fact_support_q1, COALESCE(r.fq2, 0) AS fact_support_q2, COALESCE(r.fq3, 0) AS fact_support_q3, COALESCE(r.fq4, 0) AS fact_support_q4,
|
||
COALESCE(r.fq1, 0) + COALESCE(r.fq2, 0) + COALESCE(r.fq3, 0) + COALESCE(r.fq4, 0) AS fact_support_year,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0)
|
||
+ COALESCE(r.t1q2, 0) + COALESCE(r.rev2, 0) + COALESCE(r.adj2, 0) AS corrected_support_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0)
|
||
+ COALESCE(r.t1q3, 0) + COALESCE(r.t2q3, 0) + COALESCE(r.rev3, 0) + COALESCE(r.adj3, 0) AS corrected_support_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.t1q4, 0) + COALESCE(r.t2q4, 0) + COALESCE(r.t3q4, 0) + COALESCE(r.rev4, 0) + COALESCE(r.adj4, 0) AS corrected_support_q4
|
||
FROM rolled AS r;
|
||
$function$;
|
||
|
||
-- =============================================================================
|
||
-- 2форм_РФ_П — VIEW
|
||
-- =============================================================================
|
||
|
||
DROP VIEW IF EXISTS v3.v_2form_rf_p CASCADE;
|
||
|
||
CREATE OR REPLACE VIEW v3.v_2form_rf_p AS
|
||
WITH
|
||
form_lines AS (
|
||
SELECT bf.year, bl.id AS line_id, bl.expense_item_id AS eid
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_2'
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
),
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_eco_change, 0) + COALESCE(plan_revision_item_adj, 0) + COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
line_agg AS (
|
||
SELECT
|
||
fl.year,
|
||
fl.eid,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(sg.adj_q1) AS sg1, SUM(sg.adj_q2) AS sg2, SUM(sg.adj_q3) AS sg3, SUM(sg.adj_q4) AS sg4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.adj1) AS adj1, SUM(qp.adj2) AS adj2, SUM(qp.adj3) AS adj3, SUM(qp.adj4) AS adj4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.sequestration AS sg ON sg.line_id = fl.line_id AND sg.actor = 'SSP_GO'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.year, fl.eid
|
||
),
|
||
years AS (
|
||
SELECT DISTINCT bf.year
|
||
FROM v3.budget_form AS bf
|
||
WHERE bf.form_type_code = 'FORM_2'
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_2'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
y.year,
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) AS pq1, SUM(a.pq2) AS pq2, SUM(a.pq3) AS pq3, SUM(a.pq4) AS pq4,
|
||
SUM(a.sd1) AS sd1, SUM(a.sd2) AS sd2, SUM(a.sd3) AS sd3, SUM(a.sd4) AS sd4,
|
||
SUM(a.sg1) AS sg1, SUM(a.sg2) AS sg2, SUM(a.sg3) AS sg3, SUM(a.sg4) AS sg4,
|
||
SUM(a.rq1) AS rq1, SUM(a.rq2) AS rq2, SUM(a.rq3) AS rq3, SUM(a.rq4) AS rq4,
|
||
SUM(a.fq1) AS fq1, SUM(a.fq2) AS fq2, SUM(a.fq3) AS fq3, SUM(a.fq4) AS fq4,
|
||
SUM(a.t1q2) AS t1q2, SUM(a.t1q3) AS t1q3, SUM(a.t1q4) AS t1q4,
|
||
SUM(a.t2q3) AS t2q3, SUM(a.t2q4) AS t2q4, SUM(a.t3q4) AS t3q4,
|
||
SUM(a.adj1) AS adj1, SUM(a.adj2) AS adj2, SUM(a.adj3) AS adj3, SUM(a.adj4) AS adj4,
|
||
SUM(a.rev2) AS rev2, SUM(a.rev3) AS rev3, SUM(a.rev4) AS rev4
|
||
FROM tree_nodes AS tn
|
||
CROSS JOIN years AS y
|
||
LEFT JOIN line_agg AS a ON a.eid = ANY (tn.desc_ids) AND a.year = y.year
|
||
GROUP BY y.year, tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.year, r.item_id AS section_code, r.name,
|
||
COALESCE(r.pq1, 0) AS plan_support_q1, COALESCE(r.pq2, 0) AS plan_support_q2, COALESCE(r.pq3, 0) AS plan_support_q3, COALESCE(r.pq4, 0) AS plan_support_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0) AS plan_support_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0) AS approved_support_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0) AS approved_support_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0) AS approved_support_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0) AS approved_support_q4,
|
||
(COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0))
|
||
+ (COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0))
|
||
+ (COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0))
|
||
+ (COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)) AS approved_support_year,
|
||
COALESCE(r.fq1, 0) AS fact_support_q1, COALESCE(r.fq2, 0) AS fact_support_q2, COALESCE(r.fq3, 0) AS fact_support_q3, COALESCE(r.fq4, 0) AS fact_support_q4,
|
||
COALESCE(r.fq1, 0) + COALESCE(r.fq2, 0) + COALESCE(r.fq3, 0) + COALESCE(r.fq4, 0) AS fact_support_year,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0)
|
||
+ COALESCE(r.t1q2, 0) + COALESCE(r.rev2, 0) + COALESCE(r.adj2, 0) AS corrected_support_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0)
|
||
+ COALESCE(r.t1q3, 0) + COALESCE(r.t2q3, 0) + COALESCE(r.rev3, 0) + COALESCE(r.adj3, 0) AS corrected_support_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.t1q4, 0) + COALESCE(r.t2q4, 0) + COALESCE(r.t3q4, 0) + COALESCE(r.rev4, 0) + COALESCE(r.adj4, 0) AS corrected_support_q4
|
||
FROM rolled AS r;
|
||
|
||
-- =============================================================================
|
||
-- 3форм_РФ_Р — ФУНКЦИЯ
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_3form_rf_r(integer);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_3form_rf_r(p_year integer, p_org_unit_ids integer[] DEFAULT NULL)
|
||
RETURNS TABLE(
|
||
section_code character varying,
|
||
name character varying,
|
||
plan_development_q1 numeric,
|
||
plan_development_q2 numeric,
|
||
plan_development_q3 numeric,
|
||
plan_development_q4 numeric,
|
||
plan_development_year numeric,
|
||
approved_development_q1 numeric,
|
||
approved_development_q2 numeric,
|
||
approved_development_q3 numeric,
|
||
approved_development_q4 numeric,
|
||
approved_development_year numeric,
|
||
fact_development_q1 numeric,
|
||
fact_development_q2 numeric,
|
||
fact_development_q3 numeric,
|
||
fact_development_q4 numeric,
|
||
fact_development_year numeric,
|
||
corrected_development_q2 numeric,
|
||
corrected_development_q3 numeric,
|
||
corrected_development_q4 numeric
|
||
)
|
||
LANGUAGE sql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
WITH
|
||
-- Источник данных: отчёт РФ развитие (FORM_3). Направление всегда «Развитие».
|
||
-- Маппинг на структуру листа «2форм_РФ_П»:
|
||
-- план = base_plan
|
||
-- утверждено = base_plan + adj_by_items + adj_increase
|
||
-- факт = actual_m1 + actual_m2 + actual_m3 (+ actual_spod в Q4)
|
||
-- скорректировано = corrected_plan (II–IV квартал)
|
||
report_lines AS (
|
||
SELECT
|
||
l.expense_item_id AS eid,
|
||
q.quarter,
|
||
q.base_plan,
|
||
q.adj_by_items,
|
||
q.adj_increase,
|
||
q.actual_m1,
|
||
q.actual_m2,
|
||
q.actual_m3,
|
||
q.actual_spod,
|
||
q.corrected_plan
|
||
FROM v3.rf_project_report AS r
|
||
JOIN v3.rf_project_year AS rpry ON rpry.id = r.rf_project_year_id
|
||
JOIN v3.project AS p ON p.id = r.project_id
|
||
JOIN v3.rf_project_report_line AS l ON l.rf_project_report_id = r.id
|
||
JOIN v3.rf_project_report_quarter AS q ON q.rf_project_report_line_id = l.id
|
||
WHERE rpry.year = p_year
|
||
AND (p_org_unit_ids IS NULL OR cardinality(p_org_unit_ids) = 0 OR p.org_unit_id = ANY(p_org_unit_ids))
|
||
),
|
||
agg AS (
|
||
SELECT
|
||
eid,
|
||
SUM(CASE WHEN quarter = 1 THEN base_plan END) AS bp1,
|
||
SUM(CASE WHEN quarter = 2 THEN base_plan END) AS bp2,
|
||
SUM(CASE WHEN quarter = 3 THEN base_plan END) AS bp3,
|
||
SUM(CASE WHEN quarter = 4 THEN base_plan END) AS bp4,
|
||
SUM(CASE WHEN quarter = 1 THEN adj_by_items END) AS abi1,
|
||
SUM(CASE WHEN quarter = 2 THEN adj_by_items END) AS abi2,
|
||
SUM(CASE WHEN quarter = 3 THEN adj_by_items END) AS abi3,
|
||
SUM(CASE WHEN quarter = 4 THEN adj_by_items END) AS abi4,
|
||
SUM(CASE WHEN quarter = 1 THEN adj_increase END) AS ai1,
|
||
SUM(CASE WHEN quarter = 2 THEN adj_increase END) AS ai2,
|
||
SUM(CASE WHEN quarter = 3 THEN adj_increase END) AS ai3,
|
||
SUM(CASE WHEN quarter = 4 THEN adj_increase END) AS ai4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m1 END) AS m1_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m1 END) AS m1_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m1 END) AS m1_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m1 END) AS m1_4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m2 END) AS m2_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m2 END) AS m2_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m2 END) AS m2_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m2 END) AS m2_4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m3 END) AS m3_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m3 END) AS m3_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m3 END) AS m3_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m3 END) AS m3_4,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_spod END) AS spod4,
|
||
SUM(CASE WHEN quarter = 2 THEN corrected_plan END) AS cp2,
|
||
SUM(CASE WHEN quarter = 3 THEN corrected_plan END) AS cp3,
|
||
SUM(CASE WHEN quarter = 4 THEN corrected_plan END) AS cp4
|
||
FROM report_lines
|
||
GROUP BY eid
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_3'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.bp1) AS bp1, SUM(a.bp2) AS bp2, SUM(a.bp3) AS bp3, SUM(a.bp4) AS bp4,
|
||
SUM(a.abi1) AS abi1, SUM(a.abi2) AS abi2, SUM(a.abi3) AS abi3, SUM(a.abi4) AS abi4,
|
||
SUM(a.ai1) AS ai1, SUM(a.ai2) AS ai2, SUM(a.ai3) AS ai3, SUM(a.ai4) AS ai4,
|
||
SUM(a.m1_1) AS m1_1, SUM(a.m1_2) AS m1_2, SUM(a.m1_3) AS m1_3, SUM(a.m1_4) AS m1_4,
|
||
SUM(a.m2_1) AS m2_1, SUM(a.m2_2) AS m2_2, SUM(a.m2_3) AS m2_3, SUM(a.m2_4) AS m2_4,
|
||
SUM(a.m3_1) AS m3_1, SUM(a.m3_2) AS m3_2, SUM(a.m3_3) AS m3_3, SUM(a.m3_4) AS m3_4,
|
||
SUM(a.spod4) AS spod4,
|
||
SUM(a.cp2) AS cp2, SUM(a.cp3) AS cp3, SUM(a.cp4) AS cp4
|
||
FROM tree_nodes AS tn
|
||
LEFT JOIN agg AS a ON a.eid = ANY (tn.desc_ids)
|
||
GROUP BY tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.item_id AS section_code,
|
||
r.name,
|
||
COALESCE(r.bp1, 0) AS plan_development_q1,
|
||
COALESCE(r.bp2, 0) AS plan_development_q2,
|
||
COALESCE(r.bp3, 0) AS plan_development_q3,
|
||
COALESCE(r.bp4, 0) AS plan_development_q4,
|
||
COALESCE(r.bp1, 0) + COALESCE(r.bp2, 0) + COALESCE(r.bp3, 0) + COALESCE(r.bp4, 0) AS plan_development_year,
|
||
COALESCE(r.bp1, 0) + COALESCE(r.abi1, 0) + COALESCE(r.ai1, 0) AS approved_development_q1,
|
||
COALESCE(r.bp2, 0) + COALESCE(r.abi2, 0) + COALESCE(r.ai2, 0) AS approved_development_q2,
|
||
COALESCE(r.bp3, 0) + COALESCE(r.abi3, 0) + COALESCE(r.ai3, 0) AS approved_development_q3,
|
||
COALESCE(r.bp4, 0) + COALESCE(r.abi4, 0) + COALESCE(r.ai4, 0) AS approved_development_q4,
|
||
(COALESCE(r.bp1, 0) + COALESCE(r.abi1, 0) + COALESCE(r.ai1, 0))
|
||
+ (COALESCE(r.bp2, 0) + COALESCE(r.abi2, 0) + COALESCE(r.ai2, 0))
|
||
+ (COALESCE(r.bp3, 0) + COALESCE(r.abi3, 0) + COALESCE(r.ai3, 0))
|
||
+ (COALESCE(r.bp4, 0) + COALESCE(r.abi4, 0) + COALESCE(r.ai4, 0)) AS approved_development_year,
|
||
COALESCE(r.m1_1, 0) + COALESCE(r.m2_1, 0) + COALESCE(r.m3_1, 0) AS fact_development_q1,
|
||
COALESCE(r.m1_2, 0) + COALESCE(r.m2_2, 0) + COALESCE(r.m3_2, 0) AS fact_development_q2,
|
||
COALESCE(r.m1_3, 0) + COALESCE(r.m2_3, 0) + COALESCE(r.m3_3, 0) AS fact_development_q3,
|
||
COALESCE(r.m1_4, 0) + COALESCE(r.m2_4, 0) + COALESCE(r.m3_4, 0) + COALESCE(r.spod4, 0) AS fact_development_q4,
|
||
COALESCE(r.m1_1, 0) + COALESCE(r.m2_1, 0) + COALESCE(r.m3_1, 0)
|
||
+ COALESCE(r.m1_2, 0) + COALESCE(r.m2_2, 0) + COALESCE(r.m3_2, 0)
|
||
+ COALESCE(r.m1_3, 0) + COALESCE(r.m2_3, 0) + COALESCE(r.m3_3, 0)
|
||
+ COALESCE(r.m1_4, 0) + COALESCE(r.m2_4, 0) + COALESCE(r.m3_4, 0) + COALESCE(r.spod4, 0) AS fact_development_year,
|
||
COALESCE(r.cp2, 0) AS corrected_development_q2,
|
||
COALESCE(r.cp3, 0) AS corrected_development_q3,
|
||
COALESCE(r.cp4, 0) AS corrected_development_q4
|
||
FROM rolled AS r;
|
||
$function$;
|
||
|
||
-- =============================================================================
|
||
-- 3форм_РФ_Р — VIEW
|
||
-- =============================================================================
|
||
|
||
DROP VIEW IF EXISTS v3.v_3form_rf_r CASCADE;
|
||
|
||
CREATE OR REPLACE VIEW v3.v_3form_rf_r AS
|
||
WITH
|
||
report_lines AS (
|
||
SELECT
|
||
rpry.year,
|
||
l.expense_item_id AS eid,
|
||
q.quarter,
|
||
q.base_plan,
|
||
q.adj_by_items,
|
||
q.adj_increase,
|
||
q.actual_m1,
|
||
q.actual_m2,
|
||
q.actual_m3,
|
||
q.actual_spod,
|
||
q.corrected_plan
|
||
FROM v3.rf_project_report AS r
|
||
JOIN v3.rf_project_year AS rpry ON rpry.id = r.rf_project_year_id
|
||
JOIN v3.rf_project_report_line AS l ON l.rf_project_report_id = r.id
|
||
JOIN v3.rf_project_report_quarter AS q ON q.rf_project_report_line_id = l.id
|
||
),
|
||
agg AS (
|
||
SELECT
|
||
year,
|
||
eid,
|
||
SUM(CASE WHEN quarter = 1 THEN base_plan END) AS bp1,
|
||
SUM(CASE WHEN quarter = 2 THEN base_plan END) AS bp2,
|
||
SUM(CASE WHEN quarter = 3 THEN base_plan END) AS bp3,
|
||
SUM(CASE WHEN quarter = 4 THEN base_plan END) AS bp4,
|
||
SUM(CASE WHEN quarter = 1 THEN adj_by_items END) AS abi1,
|
||
SUM(CASE WHEN quarter = 2 THEN adj_by_items END) AS abi2,
|
||
SUM(CASE WHEN quarter = 3 THEN adj_by_items END) AS abi3,
|
||
SUM(CASE WHEN quarter = 4 THEN adj_by_items END) AS abi4,
|
||
SUM(CASE WHEN quarter = 1 THEN adj_increase END) AS ai1,
|
||
SUM(CASE WHEN quarter = 2 THEN adj_increase END) AS ai2,
|
||
SUM(CASE WHEN quarter = 3 THEN adj_increase END) AS ai3,
|
||
SUM(CASE WHEN quarter = 4 THEN adj_increase END) AS ai4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m1 END) AS m1_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m1 END) AS m1_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m1 END) AS m1_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m1 END) AS m1_4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m2 END) AS m2_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m2 END) AS m2_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m2 END) AS m2_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m2 END) AS m2_4,
|
||
SUM(CASE WHEN quarter = 1 THEN actual_m3 END) AS m3_1,
|
||
SUM(CASE WHEN quarter = 2 THEN actual_m3 END) AS m3_2,
|
||
SUM(CASE WHEN quarter = 3 THEN actual_m3 END) AS m3_3,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_m3 END) AS m3_4,
|
||
SUM(CASE WHEN quarter = 4 THEN actual_spod END) AS spod4,
|
||
SUM(CASE WHEN quarter = 2 THEN corrected_plan END) AS cp2,
|
||
SUM(CASE WHEN quarter = 3 THEN corrected_plan END) AS cp3,
|
||
SUM(CASE WHEN quarter = 4 THEN corrected_plan END) AS cp4
|
||
FROM report_lines
|
||
GROUP BY year, eid
|
||
),
|
||
years AS (
|
||
SELECT DISTINCT rpry.year
|
||
FROM v3.rf_project_report AS r
|
||
JOIN v3.rf_project_year AS rpry ON rpry.id = r.rf_project_year_id
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_3'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
y.year,
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.bp1) AS bp1, SUM(a.bp2) AS bp2, SUM(a.bp3) AS bp3, SUM(a.bp4) AS bp4,
|
||
SUM(a.abi1) AS abi1, SUM(a.abi2) AS abi2, SUM(a.abi3) AS abi3, SUM(a.abi4) AS abi4,
|
||
SUM(a.ai1) AS ai1, SUM(a.ai2) AS ai2, SUM(a.ai3) AS ai3, SUM(a.ai4) AS ai4,
|
||
SUM(a.m1_1) AS m1_1, SUM(a.m1_2) AS m1_2, SUM(a.m1_3) AS m1_3, SUM(a.m1_4) AS m1_4,
|
||
SUM(a.m2_1) AS m2_1, SUM(a.m2_2) AS m2_2, SUM(a.m2_3) AS m2_3, SUM(a.m2_4) AS m2_4,
|
||
SUM(a.m3_1) AS m3_1, SUM(a.m3_2) AS m3_2, SUM(a.m3_3) AS m3_3, SUM(a.m3_4) AS m3_4,
|
||
SUM(a.spod4) AS spod4,
|
||
SUM(a.cp2) AS cp2, SUM(a.cp3) AS cp3, SUM(a.cp4) AS cp4
|
||
FROM tree_nodes AS tn
|
||
CROSS JOIN years AS y
|
||
LEFT JOIN agg AS a
|
||
ON a.eid = ANY (tn.desc_ids)
|
||
AND a.year = y.year
|
||
GROUP BY y.year, tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.year,
|
||
r.item_id AS section_code,
|
||
r.name,
|
||
COALESCE(r.bp1, 0) AS plan_development_q1,
|
||
COALESCE(r.bp2, 0) AS plan_development_q2,
|
||
COALESCE(r.bp3, 0) AS plan_development_q3,
|
||
COALESCE(r.bp4, 0) AS plan_development_q4,
|
||
COALESCE(r.bp1, 0) + COALESCE(r.bp2, 0) + COALESCE(r.bp3, 0) + COALESCE(r.bp4, 0) AS plan_development_year,
|
||
COALESCE(r.bp1, 0) + COALESCE(r.abi1, 0) + COALESCE(r.ai1, 0) AS approved_development_q1,
|
||
COALESCE(r.bp2, 0) + COALESCE(r.abi2, 0) + COALESCE(r.ai2, 0) AS approved_development_q2,
|
||
COALESCE(r.bp3, 0) + COALESCE(r.abi3, 0) + COALESCE(r.ai3, 0) AS approved_development_q3,
|
||
COALESCE(r.bp4, 0) + COALESCE(r.abi4, 0) + COALESCE(r.ai4, 0) AS approved_development_q4,
|
||
(COALESCE(r.bp1, 0) + COALESCE(r.abi1, 0) + COALESCE(r.ai1, 0))
|
||
+ (COALESCE(r.bp2, 0) + COALESCE(r.abi2, 0) + COALESCE(r.ai2, 0))
|
||
+ (COALESCE(r.bp3, 0) + COALESCE(r.abi3, 0) + COALESCE(r.ai3, 0))
|
||
+ (COALESCE(r.bp4, 0) + COALESCE(r.abi4, 0) + COALESCE(r.ai4, 0)) AS approved_development_year,
|
||
COALESCE(r.m1_1, 0) + COALESCE(r.m2_1, 0) + COALESCE(r.m3_1, 0) AS fact_development_q1,
|
||
COALESCE(r.m1_2, 0) + COALESCE(r.m2_2, 0) + COALESCE(r.m3_2, 0) AS fact_development_q2,
|
||
COALESCE(r.m1_3, 0) + COALESCE(r.m2_3, 0) + COALESCE(r.m3_3, 0) AS fact_development_q3,
|
||
COALESCE(r.m1_4, 0) + COALESCE(r.m2_4, 0) + COALESCE(r.m3_4, 0) + COALESCE(r.spod4, 0) AS fact_development_q4,
|
||
COALESCE(r.m1_1, 0) + COALESCE(r.m2_1, 0) + COALESCE(r.m3_1, 0)
|
||
+ COALESCE(r.m1_2, 0) + COALESCE(r.m2_2, 0) + COALESCE(r.m3_2, 0)
|
||
+ COALESCE(r.m1_3, 0) + COALESCE(r.m2_3, 0) + COALESCE(r.m3_3, 0)
|
||
+ COALESCE(r.m1_4, 0) + COALESCE(r.m2_4, 0) + COALESCE(r.m3_4, 0) + COALESCE(r.spod4, 0) AS fact_development_year,
|
||
COALESCE(r.cp2, 0) AS corrected_development_q2,
|
||
COALESCE(r.cp3, 0) AS corrected_development_q3,
|
||
COALESCE(r.cp4, 0) AS corrected_development_q4
|
||
FROM rolled AS r;
|
||
|
||
-- =============================================================================
|
||
-- 4форм_ПРОЕКТ — ФУНКЦИЯ
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_4form_project(integer);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_4form_project(p_year integer, p_org_unit_ids integer[] DEFAULT NULL)
|
||
RETURNS TABLE(
|
||
section_code character varying,
|
||
name character varying,
|
||
plan_development_q1 numeric,
|
||
plan_development_q2 numeric,
|
||
plan_development_q3 numeric,
|
||
plan_development_q4 numeric,
|
||
plan_development_year numeric,
|
||
approved_development_q1 numeric,
|
||
approved_development_q2 numeric,
|
||
approved_development_q3 numeric,
|
||
approved_development_q4 numeric,
|
||
approved_development_year numeric,
|
||
fact_development_q1 numeric,
|
||
fact_development_q2 numeric,
|
||
fact_development_q3 numeric,
|
||
fact_development_q4 numeric,
|
||
fact_development_year numeric,
|
||
corrected_development_q1 numeric,
|
||
corrected_development_q2 numeric,
|
||
corrected_development_q3 numeric,
|
||
corrected_development_q4 numeric,
|
||
corrected_development_year numeric
|
||
)
|
||
LANGUAGE sql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
WITH
|
||
form_lines AS (
|
||
SELECT bl.id AS line_id, bl.expense_item_id AS eid
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_4'
|
||
AND bf.year = p_year
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
AND (p_org_unit_ids IS NULL OR cardinality(p_org_unit_ids) = 0 OR bf.org_unit_id = ANY(p_org_unit_ids))
|
||
),
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
line_agg AS (
|
||
SELECT
|
||
fl.eid,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(sg.adj_q1) AS sg1, SUM(sg.adj_q2) AS sg2, SUM(sg.adj_q3) AS sg3, SUM(sg.adj_q4) AS sg4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.adj1) AS adj1, SUM(qp.adj2) AS adj2, SUM(qp.adj3) AS adj3, SUM(qp.adj4) AS adj4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.sequestration AS sg ON sg.line_id = fl.line_id AND sg.actor = 'SSP_GO'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.eid
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_4'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) AS pq1, SUM(a.pq2) AS pq2, SUM(a.pq3) AS pq3, SUM(a.pq4) AS pq4,
|
||
SUM(a.sd1) AS sd1, SUM(a.sd2) AS sd2, SUM(a.sd3) AS sd3, SUM(a.sd4) AS sd4,
|
||
SUM(a.sg1) AS sg1, SUM(a.sg2) AS sg2, SUM(a.sg3) AS sg3, SUM(a.sg4) AS sg4,
|
||
SUM(a.rq1) AS rq1, SUM(a.rq2) AS rq2, SUM(a.rq3) AS rq3, SUM(a.rq4) AS rq4,
|
||
SUM(a.fq1) AS fq1, SUM(a.fq2) AS fq2, SUM(a.fq3) AS fq3, SUM(a.fq4) AS fq4,
|
||
SUM(a.t1q2) AS t1q2, SUM(a.t1q3) AS t1q3, SUM(a.t1q4) AS t1q4,
|
||
SUM(a.t2q3) AS t2q3, SUM(a.t2q4) AS t2q4, SUM(a.t3q4) AS t3q4,
|
||
SUM(a.adj1) AS adj1, SUM(a.adj2) AS adj2, SUM(a.adj3) AS adj3, SUM(a.adj4) AS adj4,
|
||
SUM(a.rev2) AS rev2, SUM(a.rev3) AS rev3, SUM(a.rev4) AS rev4
|
||
FROM tree_nodes AS tn
|
||
LEFT JOIN line_agg AS a ON a.eid = ANY (tn.desc_ids)
|
||
GROUP BY tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.item_id AS section_code, r.name,
|
||
COALESCE(r.pq1, 0) AS plan_development_q1, COALESCE(r.pq2, 0) AS plan_development_q2, COALESCE(r.pq3, 0) AS plan_development_q3, COALESCE(r.pq4, 0) AS plan_development_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0) AS plan_development_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0) AS approved_development_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0) AS approved_development_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0) AS approved_development_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0) AS approved_development_q4,
|
||
(COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0))
|
||
+ (COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0))
|
||
+ (COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0))
|
||
+ (COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)) AS approved_development_year,
|
||
COALESCE(r.fq1, 0) AS fact_development_q1, COALESCE(r.fq2, 0) AS fact_development_q2, COALESCE(r.fq3, 0) AS fact_development_q3, COALESCE(r.fq4, 0) AS fact_development_q4,
|
||
COALESCE(r.fq1, 0) + COALESCE(r.fq2, 0) + COALESCE(r.fq3, 0) + COALESCE(r.fq4, 0) AS fact_development_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0)
|
||
+ COALESCE(r.adj1, 0) AS corrected_development_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0)
|
||
+ COALESCE(r.t1q2, 0) + COALESCE(r.rev2, 0) + COALESCE(r.adj2, 0) AS corrected_development_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0)
|
||
+ COALESCE(r.t1q3, 0) + COALESCE(r.t2q3, 0) + COALESCE(r.rev3, 0) + COALESCE(r.adj3, 0) AS corrected_development_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.t1q4, 0) + COALESCE(r.t2q4, 0) + COALESCE(r.t3q4, 0) + COALESCE(r.rev4, 0) + COALESCE(r.adj4, 0) AS corrected_development_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0)
|
||
+ COALESCE(r.sd1, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sd4, 0)
|
||
+ COALESCE(r.sg1, 0) + COALESCE(r.sg2, 0) + COALESCE(r.sg3, 0) + COALESCE(r.sg4, 0)
|
||
+ COALESCE(r.rq1, 0) + COALESCE(r.rq2, 0) + COALESCE(r.rq3, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.adj1, 0) + COALESCE(r.adj2, 0) + COALESCE(r.adj3, 0) + COALESCE(r.adj4, 0)
|
||
+ COALESCE(r.rev2, 0) + COALESCE(r.rev3, 0) + COALESCE(r.rev4, 0) AS corrected_development_year
|
||
FROM rolled AS r;
|
||
$function$;
|
||
|
||
-- =============================================================================
|
||
-- 4форм_ПРОЕКТ — VIEW
|
||
-- =============================================================================
|
||
|
||
DROP VIEW IF EXISTS v3.v_4form_project CASCADE;
|
||
|
||
CREATE OR REPLACE VIEW v3.v_4form_project AS
|
||
WITH
|
||
form_lines AS (
|
||
SELECT bf.year, bl.id AS line_id, bl.expense_item_id AS eid
|
||
FROM v3.budget_line AS bl
|
||
JOIN v3.budget_form AS bf ON bf.id = bl.budget_form_id
|
||
JOIN v3.expense_item AS ei ON ei.id = bl.expense_item_id
|
||
WHERE bf.form_type_code = 'FORM_4'
|
||
AND ei.sheet IN ('AHR', 'CAP', 'OPER')
|
||
),
|
||
q_per_line AS (
|
||
SELECT line_id,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) END) AS fq3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(actual_m1, 0) + COALESCE(actual_m2, 0) + COALESCE(actual_m3, 0) + COALESCE(actual_spod, 0) END) AS fq4,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q2 END) AS t1q2,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q3 END) AS t1q3,
|
||
SUM(CASE WHEN quarter = 1 THEN transfer_to_q4 END) AS t1q4,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q3 END) AS t2q3,
|
||
SUM(CASE WHEN quarter = 2 THEN transfer_to_q4 END) AS t2q4,
|
||
SUM(CASE WHEN quarter = 3 THEN transfer_to_q4 END) AS t3q4,
|
||
SUM(CASE WHEN quarter = 1 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj1,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(adj_current, 0) + COALESCE(adj_ssp, 0) + COALESCE(adj_reserve, 0) END) AS adj4,
|
||
SUM(CASE WHEN quarter = 2 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev2,
|
||
SUM(CASE WHEN quarter = 3 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev3,
|
||
SUM(CASE WHEN quarter = 4 THEN COALESCE(plan_revision_increase, 0) + COALESCE(plan_revision_sequester, 0) + COALESCE(target_change, 0) + COALESCE(base_plan_correction, 0) END) AS rev4
|
||
FROM v3.budget_line_quarter
|
||
GROUP BY line_id
|
||
),
|
||
line_agg AS (
|
||
SELECT
|
||
fl.year,
|
||
fl.eid,
|
||
SUM(p.plan_q1) AS pq1, SUM(p.plan_q2) AS pq2, SUM(p.plan_q3) AS pq3, SUM(p.plan_q4) AS pq4,
|
||
SUM(sd.adj_q1) AS sd1, SUM(sd.adj_q2) AS sd2, SUM(sd.adj_q3) AS sd3, SUM(sd.adj_q4) AS sd4,
|
||
SUM(sg.adj_q1) AS sg1, SUM(sg.adj_q2) AS sg2, SUM(sg.adj_q3) AS sg3, SUM(sg.adj_q4) AS sg4,
|
||
SUM(r.amount_q1) AS rq1, SUM(r.amount_q2) AS rq2, SUM(r.amount_q3) AS rq3, SUM(r.amount_q4) AS rq4,
|
||
SUM(qp.fq1) AS fq1, SUM(qp.fq2) AS fq2, SUM(qp.fq3) AS fq3, SUM(qp.fq4) AS fq4,
|
||
SUM(qp.t1q2) AS t1q2, SUM(qp.t1q3) AS t1q3, SUM(qp.t1q4) AS t1q4,
|
||
SUM(qp.t2q3) AS t2q3, SUM(qp.t2q4) AS t2q4, SUM(qp.t3q4) AS t3q4,
|
||
SUM(qp.adj1) AS adj1, SUM(qp.adj2) AS adj2, SUM(qp.adj3) AS adj3, SUM(qp.adj4) AS adj4,
|
||
SUM(qp.rev2) AS rev2, SUM(qp.rev3) AS rev3, SUM(qp.rev4) AS rev4
|
||
FROM form_lines AS fl
|
||
LEFT JOIN v3.plan AS p ON p.line_id = fl.line_id
|
||
LEFT JOIN v3.sequestration AS sd ON sd.line_id = fl.line_id AND sd.actor = 'DFIP'
|
||
LEFT JOIN v3.sequestration AS sg ON sg.line_id = fl.line_id AND sg.actor = 'SSP_GO'
|
||
LEFT JOIN v3.reserve AS r ON r.line_id = fl.line_id
|
||
LEFT JOIN q_per_line AS qp ON qp.line_id = fl.line_id
|
||
GROUP BY fl.year, fl.eid
|
||
),
|
||
years AS (
|
||
SELECT DISTINCT bf.year
|
||
FROM v3.budget_form AS bf
|
||
WHERE bf.form_type_code = 'FORM_4'
|
||
),
|
||
tree_nodes AS (
|
||
SELECT t.id, t.item_id, t.name, t.desc_ids
|
||
FROM v3.mv_expense_item_tree AS t
|
||
JOIN v3.expense_item_form_type AS eft
|
||
ON eft.expense_item_id = t.id
|
||
AND eft.form_type_code = 'FORM_4'
|
||
WHERE t.depth < 3
|
||
),
|
||
rolled AS (
|
||
SELECT
|
||
y.year,
|
||
tn.item_id,
|
||
tn.name,
|
||
SUM(a.pq1) AS pq1, SUM(a.pq2) AS pq2, SUM(a.pq3) AS pq3, SUM(a.pq4) AS pq4,
|
||
SUM(a.sd1) AS sd1, SUM(a.sd2) AS sd2, SUM(a.sd3) AS sd3, SUM(a.sd4) AS sd4,
|
||
SUM(a.sg1) AS sg1, SUM(a.sg2) AS sg2, SUM(a.sg3) AS sg3, SUM(a.sg4) AS sg4,
|
||
SUM(a.rq1) AS rq1, SUM(a.rq2) AS rq2, SUM(a.rq3) AS rq3, SUM(a.rq4) AS rq4,
|
||
SUM(a.fq1) AS fq1, SUM(a.fq2) AS fq2, SUM(a.fq3) AS fq3, SUM(a.fq4) AS fq4,
|
||
SUM(a.t1q2) AS t1q2, SUM(a.t1q3) AS t1q3, SUM(a.t1q4) AS t1q4,
|
||
SUM(a.t2q3) AS t2q3, SUM(a.t2q4) AS t2q4, SUM(a.t3q4) AS t3q4,
|
||
SUM(a.adj1) AS adj1, SUM(a.adj2) AS adj2, SUM(a.adj3) AS adj3, SUM(a.adj4) AS adj4,
|
||
SUM(a.rev2) AS rev2, SUM(a.rev3) AS rev3, SUM(a.rev4) AS rev4
|
||
FROM tree_nodes AS tn
|
||
CROSS JOIN years AS y
|
||
LEFT JOIN line_agg AS a ON a.eid = ANY (tn.desc_ids) AND a.year = y.year
|
||
GROUP BY y.year, tn.item_id, tn.name
|
||
)
|
||
SELECT
|
||
r.year, r.item_id AS section_code, r.name,
|
||
COALESCE(r.pq1, 0) AS plan_development_q1, COALESCE(r.pq2, 0) AS plan_development_q2, COALESCE(r.pq3, 0) AS plan_development_q3, COALESCE(r.pq4, 0) AS plan_development_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0) AS plan_development_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0) AS approved_development_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0) AS approved_development_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0) AS approved_development_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0) AS approved_development_q4,
|
||
(COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0))
|
||
+ (COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0))
|
||
+ (COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0))
|
||
+ (COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)) AS approved_development_year,
|
||
COALESCE(r.fq1, 0) AS fact_development_q1, COALESCE(r.fq2, 0) AS fact_development_q2, COALESCE(r.fq3, 0) AS fact_development_q3, COALESCE(r.fq4, 0) AS fact_development_q4,
|
||
COALESCE(r.fq1, 0) + COALESCE(r.fq2, 0) + COALESCE(r.fq3, 0) + COALESCE(r.fq4, 0) AS fact_development_year,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.sd1, 0) + COALESCE(r.sg1, 0) + COALESCE(r.rq1, 0)
|
||
+ COALESCE(r.adj1, 0) AS corrected_development_q1,
|
||
COALESCE(r.pq2, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sg2, 0) + COALESCE(r.rq2, 0)
|
||
+ COALESCE(r.t1q2, 0) + COALESCE(r.rev2, 0) + COALESCE(r.adj2, 0) AS corrected_development_q2,
|
||
COALESCE(r.pq3, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sg3, 0) + COALESCE(r.rq3, 0)
|
||
+ COALESCE(r.t1q3, 0) + COALESCE(r.t2q3, 0) + COALESCE(r.rev3, 0) + COALESCE(r.adj3, 0) AS corrected_development_q3,
|
||
COALESCE(r.pq4, 0) + COALESCE(r.sd4, 0) + COALESCE(r.sg4, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.t1q4, 0) + COALESCE(r.t2q4, 0) + COALESCE(r.t3q4, 0) + COALESCE(r.rev4, 0) + COALESCE(r.adj4, 0) AS corrected_development_q4,
|
||
COALESCE(r.pq1, 0) + COALESCE(r.pq2, 0) + COALESCE(r.pq3, 0) + COALESCE(r.pq4, 0)
|
||
+ COALESCE(r.sd1, 0) + COALESCE(r.sd2, 0) + COALESCE(r.sd3, 0) + COALESCE(r.sd4, 0)
|
||
+ COALESCE(r.sg1, 0) + COALESCE(r.sg2, 0) + COALESCE(r.sg3, 0) + COALESCE(r.sg4, 0)
|
||
+ COALESCE(r.rq1, 0) + COALESCE(r.rq2, 0) + COALESCE(r.rq3, 0) + COALESCE(r.rq4, 0)
|
||
+ COALESCE(r.adj1, 0) + COALESCE(r.adj2, 0) + COALESCE(r.adj3, 0) + COALESCE(r.adj4, 0)
|
||
+ COALESCE(r.rev2, 0) + COALESCE(r.rev3, 0) + COALESCE(r.rev4, 0) AS corrected_development_year
|
||
FROM rolled AS r;
|
||
|
||
-- =============================================================================
|
||
-- main_format — ФУНКЦИЯ
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_main_format(integer);
|
||
|
||
-- DROP FUNCTION v3.v_main_format(int4, _int4);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_main_format(p_year integer, p_org_unit_ids integer[] DEFAULT NULL::integer[])
|
||
RETURNS TABLE(section_code character varying, name character varying, plan_support_q1 numeric, plan_support_q2 numeric, plan_support_q3 numeric, plan_support_q4 numeric, plan_support_year numeric, plan_development_q1 numeric, plan_development_q2 numeric, plan_development_q3 numeric, plan_development_q4 numeric, plan_development_year numeric, plan_total_year numeric, approved_support_q1 numeric, approved_support_q2 numeric, approved_support_q3 numeric, approved_support_q4 numeric, approved_support_year numeric, approved_development_q1 numeric, approved_development_q2 numeric, approved_development_q3 numeric, approved_development_q4 numeric, approved_development_year numeric, approved_total_year numeric, fact_support_q1 numeric, fact_support_q2 numeric, fact_support_q3 numeric, fact_support_q4 numeric, fact_support_year numeric, fact_development_q1 numeric, fact_development_q2 numeric, fact_development_q3 numeric, fact_development_q4 numeric, fact_development_year numeric, fact_total_year numeric, corrected_support_q2 numeric, corrected_support_q3 numeric, corrected_support_q4 numeric, corrected_development_q2 numeric, corrected_development_q3 numeric, corrected_development_q4 numeric)
|
||
LANGUAGE sql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
WITH unioned AS (
|
||
( SELECT f.section_code, f.name, f.plan_support_q1, f.plan_support_q2, f.plan_support_q3, f.plan_support_q4, f.plan_support_year, f.approved_support_q1, f.approved_support_q2, f.approved_support_q3, f.approved_support_q4, f.approved_support_year, f.fact_support_q1, f.fact_support_q2, f.fact_support_q3, f.fact_support_q4, f.fact_support_year, f.corrected_support_q2, f.corrected_support_q3, f.corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_1form_ssp(p_year, p_org_unit_ids) AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.section_code, f.name, f.plan_support_q1, f.plan_support_q2, f.plan_support_q3, f.plan_support_q4, f.plan_support_year, f.approved_support_q1, f.approved_support_q2, f.approved_support_q3, f.approved_support_q4, f.approved_support_year, f.fact_support_q1, f.fact_support_q2, f.fact_support_q3, f.fact_support_q4, f.fact_support_year, f.corrected_support_q2, f.corrected_support_q3, f.corrected_support_q4, 0 AS plan_development_q1, 0 AS plan_development_q2, 0 AS plan_development_q3, 0 AS plan_development_q4, 0 AS plan_development_year, 0 AS approved_development_q1, 0 AS approved_development_q2, 0 AS approved_development_q3, 0 AS approved_development_q4, 0 AS approved_development_year, 0 AS fact_development_q1, 0 AS fact_development_q2, 0 AS fact_development_q3, 0 AS fact_development_q4, 0 AS fact_development_year, 0 AS corrected_development_q2, 0 AS corrected_development_q3, 0 AS corrected_development_q4
|
||
FROM v3.v_2form_rf_p(p_year, p_org_unit_ids) AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.section_code, f.name, 0 AS plan_support_q1, 0 AS plan_support_q2, 0 AS plan_support_q3, 0 AS plan_support_q4, 0 AS plan_support_year, 0 AS approved_support_q1, 0 AS approved_support_q2, 0 AS approved_support_q3, 0 AS approved_support_q4, 0 AS approved_support_year, 0 AS fact_support_q1, 0 AS fact_support_q2, 0 AS fact_support_q3, 0 AS fact_support_q4, 0 AS fact_support_year, 0 AS corrected_support_q2, 0 AS corrected_support_q3, 0 AS corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_3form_rf_r(p_year, p_org_unit_ids) AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.section_code, f.name, 0 AS plan_support_q1, 0 AS plan_support_q2, 0 AS plan_support_q3, 0 AS plan_support_q4, 0 AS plan_support_year, 0 AS approved_support_q1, 0 AS approved_support_q2, 0 AS approved_support_q3, 0 AS approved_support_q4, 0 AS approved_support_year, 0 AS fact_support_q1, 0 AS fact_support_q2, 0 AS fact_support_q3, 0 AS fact_support_q4, 0 AS fact_support_year, 0 AS corrected_support_q2, 0 AS corrected_support_q3, 0 AS corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_4form_project(p_year, p_org_unit_ids) AS f)
|
||
),
|
||
summed AS (
|
||
SELECT
|
||
u.section_code, u.name,
|
||
SUM(u.plan_support_q1) AS plan_support_q1,
|
||
SUM(u.plan_support_q2) AS plan_support_q2,
|
||
SUM(u.plan_support_q3) AS plan_support_q3,
|
||
SUM(u.plan_support_q4) AS plan_support_q4,
|
||
SUM(u.plan_support_year) AS plan_support_year,
|
||
SUM(u.approved_support_q1) AS approved_support_q1,
|
||
SUM(u.approved_support_q2) AS approved_support_q2,
|
||
SUM(u.approved_support_q3) AS approved_support_q3,
|
||
SUM(u.approved_support_q4) AS approved_support_q4,
|
||
SUM(u.approved_support_year) AS approved_support_year,
|
||
SUM(u.fact_support_q1) AS fact_support_q1,
|
||
SUM(u.fact_support_q2) AS fact_support_q2,
|
||
SUM(u.fact_support_q3) AS fact_support_q3,
|
||
SUM(u.fact_support_q4) AS fact_support_q4,
|
||
SUM(u.fact_support_year) AS fact_support_year,
|
||
SUM(u.corrected_support_q2) AS corrected_support_q2,
|
||
SUM(u.corrected_support_q3) AS corrected_support_q3,
|
||
SUM(u.corrected_support_q4) AS corrected_support_q4,
|
||
SUM(u.plan_development_q1) AS plan_development_q1,
|
||
SUM(u.plan_development_q2) AS plan_development_q2,
|
||
SUM(u.plan_development_q3) AS plan_development_q3,
|
||
SUM(u.plan_development_q4) AS plan_development_q4,
|
||
SUM(u.plan_development_year) AS plan_development_year,
|
||
SUM(u.approved_development_q1) AS approved_development_q1,
|
||
SUM(u.approved_development_q2) AS approved_development_q2,
|
||
SUM(u.approved_development_q3) AS approved_development_q3,
|
||
SUM(u.approved_development_q4) AS approved_development_q4,
|
||
SUM(u.approved_development_year) AS approved_development_year,
|
||
SUM(u.fact_development_q1) AS fact_development_q1,
|
||
SUM(u.fact_development_q2) AS fact_development_q2,
|
||
SUM(u.fact_development_q3) AS fact_development_q3,
|
||
SUM(u.fact_development_q4) AS fact_development_q4,
|
||
SUM(u.fact_development_year) AS fact_development_year,
|
||
SUM(u.corrected_development_q2) AS corrected_development_q2,
|
||
SUM(u.corrected_development_q3) AS corrected_development_q3,
|
||
SUM(u.corrected_development_q4) AS corrected_development_q4
|
||
FROM unioned AS u
|
||
GROUP BY u.section_code, u.name
|
||
)
|
||
SELECT
|
||
s.section_code, s.name,
|
||
s.plan_support_q1, s.plan_support_q2, s.plan_support_q3, s.plan_support_q4, s.plan_support_year,
|
||
s.plan_development_q1, s.plan_development_q2, s.plan_development_q3, s.plan_development_q4, s.plan_development_year,
|
||
s.plan_support_year + s.plan_development_year AS plan_total_year,
|
||
s.approved_support_q1, s.approved_support_q2, s.approved_support_q3, s.approved_support_q4, s.approved_support_year,
|
||
s.approved_development_q1, s.approved_development_q2, s.approved_development_q3, s.approved_development_q4, s.approved_development_year,
|
||
s.approved_support_year + s.approved_development_year AS approved_total_year,
|
||
|
||
s.fact_support_q1, s.fact_support_q2, s.fact_support_q3, s.fact_support_q4, s.fact_support_year,
|
||
s.fact_development_q1, s.fact_development_q2, s.fact_development_q3, s.fact_development_q4, s.fact_development_year,
|
||
s.fact_support_year + s.fact_development_year AS fact_total_year,
|
||
|
||
s.corrected_support_q2, s.corrected_support_q3, s.corrected_support_q4,
|
||
s.corrected_development_q2, s.corrected_development_q3, s.corrected_development_q4
|
||
FROM summed AS s;
|
||
$function$
|
||
;
|
||
|
||
|
||
-- =============================================================================
|
||
-- main_format — VIEW
|
||
-- =============================================================================
|
||
|
||
DROP VIEW IF EXISTS v3.v_main_format;
|
||
|
||
CREATE OR REPLACE VIEW v3.v_main_format AS
|
||
WITH unioned AS (
|
||
( SELECT f.year, f.section_code, f.name, f.plan_support_q1, f.plan_support_q2, f.plan_support_q3, f.plan_support_q4, f.plan_support_year, f.approved_support_q1, f.approved_support_q2, f.approved_support_q3, f.approved_support_q4, f.approved_support_year, f.fact_support_q1, f.fact_support_q2, f.fact_support_q3, f.fact_support_q4, f.fact_support_year, f.corrected_support_q2, f.corrected_support_q3, f.corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_1form_ssp AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.year, f.section_code, f.name, f.plan_support_q1, f.plan_support_q2, f.plan_support_q3, f.plan_support_q4, f.plan_support_year, f.approved_support_q1, f.approved_support_q2, f.approved_support_q3, f.approved_support_q4, f.approved_support_year, f.fact_support_q1, f.fact_support_q2, f.fact_support_q3, f.fact_support_q4, f.fact_support_year, f.corrected_support_q2, f.corrected_support_q3, f.corrected_support_q4, 0 AS plan_development_q1, 0 AS plan_development_q2, 0 AS plan_development_q3, 0 AS plan_development_q4, 0 AS plan_development_year, 0 AS approved_development_q1, 0 AS approved_development_q2, 0 AS approved_development_q3, 0 AS approved_development_q4, 0 AS approved_development_year, 0 AS fact_development_q1, 0 AS fact_development_q2, 0 AS fact_development_q3, 0 AS fact_development_q4, 0 AS fact_development_year, 0 AS corrected_development_q2, 0 AS corrected_development_q3, 0 AS corrected_development_q4
|
||
FROM v3.v_2form_rf_p AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.year, f.section_code, f.name, 0 AS plan_support_q1, 0 AS plan_support_q2, 0 AS plan_support_q3, 0 AS plan_support_q4, 0 AS plan_support_year, 0 AS approved_support_q1, 0 AS approved_support_q2, 0 AS approved_support_q3, 0 AS approved_support_q4, 0 AS approved_support_year, 0 AS fact_support_q1, 0 AS fact_support_q2, 0 AS fact_support_q3, 0 AS fact_support_q4, 0 AS fact_support_year, 0 AS corrected_support_q2, 0 AS corrected_support_q3, 0 AS corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_3form_rf_r AS f)
|
||
|
||
UNION ALL
|
||
|
||
( SELECT f.year, f.section_code, f.name, 0 AS plan_support_q1, 0 AS plan_support_q2, 0 AS plan_support_q3, 0 AS plan_support_q4, 0 AS plan_support_year, 0 AS approved_support_q1, 0 AS approved_support_q2, 0 AS approved_support_q3, 0 AS approved_support_q4, 0 AS approved_support_year, 0 AS fact_support_q1, 0 AS fact_support_q2, 0 AS fact_support_q3, 0 AS fact_support_q4, 0 AS fact_support_year, 0 AS corrected_support_q2, 0 AS corrected_support_q3, 0 AS corrected_support_q4, f.plan_development_q1, f.plan_development_q2, f.plan_development_q3, f.plan_development_q4, f.plan_development_year, f.approved_development_q1, f.approved_development_q2, f.approved_development_q3, f.approved_development_q4, f.approved_development_year, f.fact_development_q1, f.fact_development_q2, f.fact_development_q3, f.fact_development_q4, f.fact_development_year, f.corrected_development_q2, f.corrected_development_q3, f.corrected_development_q4
|
||
FROM v3.v_4form_project AS f)
|
||
),
|
||
summed AS (
|
||
SELECT
|
||
u.year, u.section_code, u.name,
|
||
SUM(u.plan_support_q1) AS plan_support_q1,
|
||
SUM(u.plan_support_q2) AS plan_support_q2,
|
||
SUM(u.plan_support_q3) AS plan_support_q3,
|
||
SUM(u.plan_support_q4) AS plan_support_q4,
|
||
SUM(u.plan_support_year) AS plan_support_year,
|
||
SUM(u.approved_support_q1) AS approved_support_q1,
|
||
SUM(u.approved_support_q2) AS approved_support_q2,
|
||
SUM(u.approved_support_q3) AS approved_support_q3,
|
||
SUM(u.approved_support_q4) AS approved_support_q4,
|
||
SUM(u.approved_support_year) AS approved_support_year,
|
||
SUM(u.fact_support_q1) AS fact_support_q1,
|
||
SUM(u.fact_support_q2) AS fact_support_q2,
|
||
SUM(u.fact_support_q3) AS fact_support_q3,
|
||
SUM(u.fact_support_q4) AS fact_support_q4,
|
||
SUM(u.fact_support_year) AS fact_support_year,
|
||
SUM(u.corrected_support_q2) AS corrected_support_q2,
|
||
SUM(u.corrected_support_q3) AS corrected_support_q3,
|
||
SUM(u.corrected_support_q4) AS corrected_support_q4,
|
||
SUM(u.plan_development_q1) AS plan_development_q1,
|
||
SUM(u.plan_development_q2) AS plan_development_q2,
|
||
SUM(u.plan_development_q3) AS plan_development_q3,
|
||
SUM(u.plan_development_q4) AS plan_development_q4,
|
||
SUM(u.plan_development_year) AS plan_development_year,
|
||
SUM(u.approved_development_q1) AS approved_development_q1,
|
||
SUM(u.approved_development_q2) AS approved_development_q2,
|
||
SUM(u.approved_development_q3) AS approved_development_q3,
|
||
SUM(u.approved_development_q4) AS approved_development_q4,
|
||
SUM(u.approved_development_year) AS approved_development_year,
|
||
SUM(u.fact_development_q1) AS fact_development_q1,
|
||
SUM(u.fact_development_q2) AS fact_development_q2,
|
||
SUM(u.fact_development_q3) AS fact_development_q3,
|
||
SUM(u.fact_development_q4) AS fact_development_q4,
|
||
SUM(u.fact_development_year) AS fact_development_year,
|
||
SUM(u.corrected_development_q2) AS corrected_development_q2,
|
||
SUM(u.corrected_development_q3) AS corrected_development_q3,
|
||
SUM(u.corrected_development_q4) AS corrected_development_q4
|
||
FROM unioned AS u
|
||
GROUP BY u.year, u.section_code, u.name
|
||
)
|
||
SELECT
|
||
r.year, r.section_code, r.name,
|
||
r.plan_support_q1, r.plan_support_q2, r.plan_support_q3, r.plan_support_q4, r.plan_support_year,
|
||
r.approved_support_q1, r.approved_support_q2, r.approved_support_q3, r.approved_support_q4, r.approved_support_year,
|
||
r.plan_support_year + r.plan_development_year AS plan_total_year,
|
||
r.fact_support_q1, r.fact_support_q2, r.fact_support_q3, r.fact_support_q4, r.fact_support_year,
|
||
r.corrected_support_q2, r.corrected_support_q3, r.corrected_support_q4, r.plan_development_q1, r.plan_development_q2,
|
||
r.approved_support_year + r.approved_development_year AS approved_total_year,
|
||
r.plan_development_q3, r.plan_development_q4, r.plan_development_year, r.approved_development_q1, r.approved_development_q2,
|
||
r.approved_development_q3, r.approved_development_q4, r.approved_development_year, r.fact_development_q1, r.fact_development_q2,
|
||
r.fact_support_year + r.fact_development_year AS fact_total_year,
|
||
r.fact_development_q3, r.fact_development_q4, r.fact_development_year,
|
||
r.corrected_development_q2, r.corrected_development_q3, r.corrected_development_q4
|
||
FROM summed AS r;
|
||
|
||
|
||
|
||
-- =============================================================================
|
||
-- СВОДНЫЙ VIEW ДЛЯ API — диспетчер по листам свода (аналог v_form_view)
|
||
-- Возвращает данные в том же виде, что и лист «смета» формы:
|
||
-- (row_type, depth, sort_order, data jsonb)
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_summary_view(integer, character varying, integer[]);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_summary_view(
|
||
p_year integer,
|
||
p_sheet character varying,
|
||
p_org_unit_ids integer[] DEFAULT NULL
|
||
)
|
||
RETURNS TABLE(row_type character varying, depth integer, sort_order bigint, data jsonb)
|
||
LANGUAGE plpgsql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
BEGIN
|
||
|
||
-- ── 1форм_ССП (FORM_1) ──────────────────────────────────────────────────
|
||
IF p_sheet = 'FORM_1' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year),
|
||
'total_year', s.plan_total_year
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year),
|
||
'total_year', s.approved_total_year
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year),
|
||
'total_year', s.fact_total_year
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_1form_ssp(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 2форм_РФ_П (FORM_2, только Поддержка) ──────────────────────────────
|
||
IF p_sheet = 'FORM_2' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', NULL
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', NULL
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', NULL
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', NULL
|
||
)
|
||
)
|
||
FROM v3.v_2form_rf_p(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 3форм_РФ_Р (FORM_3, только Развитие) ───────────────────────────────
|
||
IF p_sheet = 'FORM_3' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year)
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year)
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year)
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_3form_rf_r(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 4форм_ПРОЕКТ (FORM_4, только Развитие) ─────────────────────────────
|
||
IF p_sheet = 'FORM_4' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year)
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year)
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year)
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.corrected_development_q1, 'q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4, 'year', s.corrected_development_year)
|
||
)
|
||
)
|
||
FROM v3.v_4form_project(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── main_format (консолидированный свод) ───────────────────────────────
|
||
IF p_sheet = 'MAIN' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year),
|
||
'total_year', s.plan_total_year
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year),
|
||
'total_year', s.approved_total_year
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year),
|
||
'total_year', s.fact_total_year
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_main_format(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
RAISE EXCEPTION 'Unknown summary sheet: %', p_sheet
|
||
USING HINT = 'Use FORM_1 / FORM_2 / FORM_3 / FORM_4 / MAIN';
|
||
|
||
END;
|
||
$function$;
|
||
|
||
-- =============================================================================
|
||
-- СВОДНЫЙ VIEW ДЛЯ API — диспетчер по листам свода (аналог v_form_view)
|
||
-- Возвращает данные в том же виде, что и лист «смета» формы:
|
||
-- (row_type, depth, sort_order, data jsonb)
|
||
-- =============================================================================
|
||
|
||
DROP FUNCTION IF EXISTS v3.v_summary_view(integer, character varying, integer[]);
|
||
|
||
CREATE OR REPLACE FUNCTION v3.v_summary_view(
|
||
p_year integer,
|
||
p_sheet character varying,
|
||
p_org_unit_ids integer[] DEFAULT NULL
|
||
)
|
||
RETURNS TABLE(row_type character varying, depth integer, sort_order bigint, data jsonb)
|
||
LANGUAGE plpgsql
|
||
STABLE
|
||
SET search_path TO 'v3', 'pg_catalog'
|
||
AS $function$
|
||
BEGIN
|
||
|
||
-- ── 1форм_ССП (FORM_1) ──────────────────────────────────────────────────
|
||
IF p_sheet = 'FORM_1' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year),
|
||
'total_year', s.plan_total_year
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year),
|
||
'total_year', s.approved_total_year
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year),
|
||
'total_year', s.fact_total_year
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_1form_ssp(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 2форм_РФ_П (FORM_2, только Поддержка) ──────────────────────────────
|
||
IF p_sheet = 'FORM_2' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', NULL
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', NULL
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', NULL
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', NULL
|
||
)
|
||
)
|
||
FROM v3.v_2form_rf_p(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 3форм_РФ_Р (FORM_3, только Развитие) ───────────────────────────────
|
||
IF p_sheet = 'FORM_3' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year)
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year)
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year)
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_3form_rf_r(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── 4форм_ПРОЕКТ (FORM_4, только Развитие) ─────────────────────────────
|
||
IF p_sheet = 'FORM_4' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year)
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year)
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year)
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', NULL,
|
||
'development', jsonb_build_object('q1', s.corrected_development_q1, 'q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4, 'year', s.corrected_development_year)
|
||
)
|
||
)
|
||
FROM v3.v_4form_project(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- ── main_format (консолидированный свод) ───────────────────────────────
|
||
IF p_sheet = 'MAIN' THEN
|
||
RETURN QUERY
|
||
SELECT
|
||
(CASE t.depth WHEN 0 THEN 'ROOT' WHEN 1 THEN 'GROUP' ELSE 'ITEM' END)::character varying,
|
||
t.depth,
|
||
ROW_NUMBER() OVER (ORDER BY t.item_id),
|
||
jsonb_build_object(
|
||
'section_code', s.section_code,
|
||
'name', s.name,
|
||
'plan', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.plan_support_q1, 'q2', s.plan_support_q2, 'q3', s.plan_support_q3, 'q4', s.plan_support_q4, 'year', s.plan_support_year),
|
||
'development', jsonb_build_object('q1', s.plan_development_q1, 'q2', s.plan_development_q2, 'q3', s.plan_development_q3, 'q4', s.plan_development_q4, 'year', s.plan_development_year),
|
||
'total_year', s.plan_total_year
|
||
),
|
||
'approved', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.approved_support_q1, 'q2', s.approved_support_q2, 'q3', s.approved_support_q3, 'q4', s.approved_support_q4, 'year', s.approved_support_year),
|
||
'development', jsonb_build_object('q1', s.approved_development_q1, 'q2', s.approved_development_q2, 'q3', s.approved_development_q3, 'q4', s.approved_development_q4, 'year', s.approved_development_year),
|
||
'total_year', s.approved_total_year
|
||
),
|
||
'fact', jsonb_build_object(
|
||
'support', jsonb_build_object('q1', s.fact_support_q1, 'q2', s.fact_support_q2, 'q3', s.fact_support_q3, 'q4', s.fact_support_q4, 'year', s.fact_support_year),
|
||
'development', jsonb_build_object('q1', s.fact_development_q1, 'q2', s.fact_development_q2, 'q3', s.fact_development_q3, 'q4', s.fact_development_q4, 'year', s.fact_development_year),
|
||
'total_year', s.fact_total_year
|
||
),
|
||
'corrected', jsonb_build_object(
|
||
'support', jsonb_build_object('q2', s.corrected_support_q2, 'q3', s.corrected_support_q3, 'q4', s.corrected_support_q4),
|
||
'development', jsonb_build_object('q2', s.corrected_development_q2, 'q3', s.corrected_development_q3, 'q4', s.corrected_development_q4)
|
||
)
|
||
)
|
||
FROM v3.v_main_format(p_year, p_org_unit_ids) s
|
||
JOIN v3.mv_expense_item_tree t ON t.item_id = s.section_code AND t.depth < 3;
|
||
RETURN;
|
||
END IF;
|
||
|
||
RAISE EXCEPTION 'Unknown summary sheet: %', p_sheet
|
||
USING HINT = 'Use FORM_1 / FORM_2 / FORM_3 / FORM_4 / MAIN';
|
||
|
||
END;
|
||
$function$;
|