@ -1,149 +0,0 @@
-- DROP FUNCTION v3.v_project_summary_jsonb(int4);
CREATE OR REPLACE FUNCTION v3 . v_project_summary_jsonb ( p_project_id integer )
RETURNS TABLE ( row_type character varying , depth integer , sort_order bigint , data jsonb )
LANGUAGE sql
STABLE
AS $ function $
WITH
project AS (
SELECT p . id , p . name
FROM v3 . project p
WHERE p . id = p_project_id
) ,
base AS (
SELECT
rpy . year ,
r . report_type ,
ei . sheet ,
q . quarter ,
q . adj_by_items ,
q . adj_increase ,
q . actual_m1 , q . actual_m2 , q . actual_m3
FROM v3 . rf_project_year rpy
LEFT JOIN v3 . rf_project_report r ON r . rf_project_year_id = rpy . id
LEFT JOIN v3 . rf_project_report_line l ON l . rf_project_report_id = r . id
LEFT JOIN v3 . rf_project_report_quarter q ON q . rf_project_report_line_id = l . id
LEFT JOIN v3 . expense_item ei ON ei . id = l . expense_item_id
WHERE rpy . project_id = p_project_id
) ,
py AS (
SELECT
year ,
-- Объем финансирования по контрольному листу (годовой базовый план = adj_by_items)
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' ) , 0 ) AS fin_ahr ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' AND report_type = ' LIMIT ' ) , 0 ) AS fin_ahr_limit ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS fin_ahr_current ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' CAP ' AND report_type = ' LIMIT ' ) , 0 ) AS fin_kv ,
-- Базовый период 01.01-31.03 (базовый план, квартал 1)
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 ) , 0 ) AS bq1_ahr ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 AND report_type = ' LIMIT ' ) , 0 ) AS bq1_ahr_limit ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS bq1_ahr_current ,
COALESCE ( SUM ( adj_by_items ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 1 AND report_type = ' LIMIT ' ) , 0 ) AS bq1_kv ,
-- Скорректированный период 01.04-30.06 (квартал 2, corrected_plan = adj_by_items + adj_increase)
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 ) , 0 ) AS cq2_ahr ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 AND report_type = ' LIMIT ' ) , 0 ) AS cq2_ahr_limit ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS cq2_ahr_current ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 2 AND report_type = ' LIMIT ' ) , 0 ) AS cq2_kv ,
-- Скорректированный период 01.07-30.09 (квартал 3)
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 ) , 0 ) AS cq3_ahr ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 AND report_type = ' LIMIT ' ) , 0 ) AS cq3_ahr_limit ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS cq3_ahr_current ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 3 AND report_type = ' LIMIT ' ) , 0 ) AS cq3_kv ,
-- Скорректированный период 01.10-31.12 (квартал 4)
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 ) , 0 ) AS cq4_ahr ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 AND report_type = ' LIMIT ' ) , 0 ) AS cq4_ahr_limit ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS cq4_ahr_current ,
COALESCE ( SUM ( COALESCE ( adj_by_items , 0 ) + COALESCE ( adj_increase , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 4 AND report_type = ' LIMIT ' ) , 0 ) AS cq4_kv ,
-- Фактические расходы А Х Р по кварталам (actual = m1+m2+m3)
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 ) , 0 ) AS aq1_ahr ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 AND report_type = ' LIMIT ' ) , 0 ) AS aq1_ahr_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 1 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq1_ahr_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 ) , 0 ) AS aq2_ahr ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 AND report_type = ' LIMIT ' ) , 0 ) AS aq2_ahr_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 2 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq2_ahr_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 ) , 0 ) AS aq3_ahr ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 AND report_type = ' LIMIT ' ) , 0 ) AS aq3_ahr_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 3 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq3_ahr_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 ) , 0 ) AS aq4_ahr ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 AND report_type = ' LIMIT ' ) , 0 ) AS aq4_ahr_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' AHR ' AND quarter = 4 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq4_ahr_current ,
-- Фактические расходы К В по кварталам
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 1 ) , 0 ) AS aq1_kv ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 1 AND report_type = ' LIMIT ' ) , 0 ) AS aq1_kv_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 1 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq1_kv_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 2 ) , 0 ) AS aq2_kv ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 2 AND report_type = ' LIMIT ' ) , 0 ) AS aq2_kv_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 2 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq2_kv_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 3 ) , 0 ) AS aq3_kv ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 3 AND report_type = ' LIMIT ' ) , 0 ) AS aq3_kv_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 3 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq3_kv_current ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 4 ) , 0 ) AS aq4_kv ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 4 AND report_type = ' LIMIT ' ) , 0 ) AS aq4_kv_limit ,
COALESCE ( SUM ( COALESCE ( actual_m1 , 0 ) + COALESCE ( actual_m2 , 0 ) + COALESCE ( actual_m3 , 0 ) ) FILTER ( WHERE sheet = ' CAP ' AND quarter = 4 AND report_type = ' CURRENT_EXPENSES ' ) , 0 ) AS aq4_kv_current
FROM base
GROUP BY year
) ,
rows AS (
SELECT ' PROJECT ' : : varchar AS row_type , NULL : : int AS year ,
NULL : : numeric AS fin_ahr , NULL : : numeric AS fin_ahr_limit , NULL : : numeric AS fin_ahr_current , NULL : : numeric AS fin_kv ,
NULL : : numeric AS bq1_ahr , NULL : : numeric AS bq1_ahr_limit , NULL : : numeric AS bq1_ahr_current , NULL : : numeric AS bq1_kv ,
NULL : : numeric AS cq2_ahr , NULL : : numeric AS cq2_ahr_limit , NULL : : numeric AS cq2_ahr_current , NULL : : numeric AS cq2_kv ,
NULL : : numeric AS cq3_ahr , NULL : : numeric AS cq3_ahr_limit , NULL : : numeric AS cq3_ahr_current , NULL : : numeric AS cq3_kv ,
NULL : : numeric AS cq4_ahr , NULL : : numeric AS cq4_ahr_limit , NULL : : numeric AS cq4_ahr_current , NULL : : numeric AS cq4_kv ,
NULL : : numeric AS aq1_ahr , NULL : : numeric AS aq1_ahr_limit , NULL : : numeric AS aq1_ahr_current ,
NULL : : numeric AS aq2_ahr , NULL : : numeric AS aq2_ahr_limit , NULL : : numeric AS aq2_ahr_current ,
NULL : : numeric AS aq3_ahr , NULL : : numeric AS aq3_ahr_limit , NULL : : numeric AS aq3_ahr_current ,
NULL : : numeric AS aq4_ahr , NULL : : numeric AS aq4_ahr_limit , NULL : : numeric AS aq4_ahr_current ,
NULL : : numeric AS aq1_kv , NULL : : numeric AS aq1_kv_limit , NULL : : numeric AS aq1_kv_current ,
NULL : : numeric AS aq2_kv , NULL : : numeric AS aq2_kv_limit , NULL : : numeric AS aq2_kv_current ,
NULL : : numeric AS aq3_kv , NULL : : numeric AS aq3_kv_limit , NULL : : numeric AS aq3_kv_current ,
NULL : : numeric AS aq4_kv , NULL : : numeric AS aq4_kv_limit , NULL : : numeric AS aq4_kv_current
UNION ALL
SELECT ' YEAR ' : : varchar , year ,
fin_ahr , fin_ahr_limit , fin_ahr_current , fin_kv ,
bq1_ahr , bq1_ahr_limit , bq1_ahr_current , bq1_kv ,
cq2_ahr , cq2_ahr_limit , cq2_ahr_current , cq2_kv ,
cq3_ahr , cq3_ahr_limit , cq3_ahr_current , cq3_kv ,
cq4_ahr , cq4_ahr_limit , cq4_ahr_current , cq4_kv ,
aq1_ahr , aq1_ahr_limit , aq1_ahr_current ,
aq2_ahr , aq2_ahr_limit , aq2_ahr_current ,
aq3_ahr , aq3_ahr_limit , aq3_ahr_current ,
aq4_ahr , aq4_ahr_limit , aq4_ahr_current ,
aq1_kv , aq1_kv_limit , aq1_kv_current ,
aq2_kv , aq2_kv_limit , aq2_kv_current ,
aq3_kv , aq3_kv_limit , aq3_kv_current ,
aq4_kv , aq4_kv_limit , aq4_kv_current
FROM py
)
SELECT
r . row_type ,
CASE r . row_type WHEN ' PROJECT ' THEN 0 ELSE 1 END AS depth ,
ROW_NUMBER ( ) OVER (
ORDER BY CASE r . row_type WHEN ' PROJECT ' THEN 0 WHEN ' YEAR ' THEN 1 ELSE 2 END ,
COALESCE ( r . year , 0 )
) AS sort_order ,
jsonb_build_object (
' header ' , jsonb_build_object ( ' project_id ' , p_project_id , ' name ' , p . name , ' year ' , r . year ) ,
' financing ' , jsonb_build_object ( ' ahr ' , r . fin_ahr , ' ahr_limit ' , r . fin_ahr_limit , ' ahr_current ' , r . fin_ahr_current , ' kv ' , r . fin_kv ) ,
' base_q1 ' , jsonb_build_object ( ' ahr ' , r . bq1_ahr , ' ahr_limit ' , r . bq1_ahr_limit , ' ahr_current ' , r . bq1_ahr_current , ' kv ' , r . bq1_kv ) ,
' corrected_q2 ' , jsonb_build_object ( ' ahr ' , r . cq2_ahr , ' ahr_limit ' , r . cq2_ahr_limit , ' ahr_current ' , r . cq2_ahr_current , ' kv ' , r . cq2_kv ) ,
' corrected_q3 ' , jsonb_build_object ( ' ahr ' , r . cq3_ahr , ' ahr_limit ' , r . cq3_ahr_limit , ' ahr_current ' , r . cq3_ahr_current , ' kv ' , r . cq3_kv ) ,
' corrected_q4 ' , jsonb_build_object ( ' ahr ' , r . cq4_ahr , ' ahr_limit ' , r . cq4_ahr_limit , ' ahr_current ' , r . cq4_ahr_current , ' kv ' , r . cq4_kv ) ,
' actual_ahr ' , jsonb_build_object (
' q1 ' , jsonb_build_object ( ' ahr ' , r . aq1_ahr , ' ahr_limit ' , r . aq1_ahr_limit , ' ahr_current ' , r . aq1_ahr_current ) ,
' q2 ' , jsonb_build_object ( ' ahr ' , r . aq2_ahr , ' ahr_limit ' , r . aq2_ahr_limit , ' ahr_current ' , r . aq2_ahr_current ) ,
' q3 ' , jsonb_build_object ( ' ahr ' , r . aq3_ahr , ' ahr_limit ' , r . aq3_ahr_limit , ' ahr_current ' , r . aq3_ahr_current ) ,
' q4 ' , jsonb_build_object ( ' ahr ' , r . aq4_ahr , ' ahr_limit ' , r . aq4_ahr_limit , ' ahr_current ' , r . aq4_ahr_current )
) ,
' actual_kv ' , jsonb_build_object (
' q1 ' , jsonb_build_object ( ' kv ' , r . aq1_kv , ' kv_limit ' , r . aq1_kv_limit , ' kv_current ' , r . aq1_kv_current ) ,
' q2 ' , jsonb_build_object ( ' kv ' , r . aq2_kv , ' kv_limit ' , r . aq2_kv_limit , ' kv_current ' , r . aq2_kv_current ) ,
' q3 ' , jsonb_build_object ( ' kv ' , r . aq3_kv , ' kv_limit ' , r . aq3_kv_limit , ' kv_current ' , r . aq3_kv_current ) ,
' q4 ' , jsonb_build_object ( ' kv ' , r . aq4_kv , ' kv_limit ' , r . aq4_kv_limit , ' kv_current ' , r . aq4_kv_current )
)
) AS data
FROM rows r
CROSS JOIN project p ;
$ function $
;