change country counting

This commit is contained in:
Ruslan 2024-12-28 10:22:04 +03:00
parent 1940b40a6a
commit 1fd405140a
20 changed files with 6054 additions and 4063 deletions

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.appeal-document-service</name>
<server>appeal-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>appeal-dbname</database>
<port>2222</port>
<username>appeal-dbuser</username>
<password>Encrypted 2be98afa91ad79785a754aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>2222</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (appeal_document) РФ</from>
@ -795,39 +744,48 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.appeal-document-service</connection>
<sql>WITH
t1 AS (
SELECT COUNT(*) AS total_appeals
FROM public.appeal_document
),
t2 AS (
SELECT
ROUND(
AVG(
(TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)
),
2
) AS average_consideration
FROM public.appeal_document ad
),
resolved AS (
SELECT COUNT(*) AS resolved
FROM public.appeal_document ad
WHERE ad.extra_info->>'result' IN ('1', '2')
)
SELECT
t1.total_appeals,
t2.average_consideration,
r.resolved,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_appeals) END AS total_appeals,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(resolved) END AS resolved,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_consideration) END AS average_consideration,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_rating) END AS average_rating,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_to_face) END AS average_to_face,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("average_EPGU") END AS average_epgu,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
THEN ROUND((SUM(average_to_face) / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
ELSE 0
END,
0
)
END AS average_to_face_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
THEN ROUND((SUM("average_EPGU") / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
ELSE 0
END,
0
)
END AS average_epgu_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
0 AS average_rating,
0 AS average_to_face,
0 AS average_epgu,
0 AS average_to_face_percent,
0 AS average_epgu_percent
FROM t1, t2, resolved AS r;</sql>
'Ministry' AS schema
FROM main_dashboard.appeals
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,169 +504,12 @@
</attribute>
</attributes>
</connection>
<connection>
<name>ervu_person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.subpoena</name>
<server>subpoena-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>subpoena-dbname</database>
<port>5555</port>
<username>subpoena-dbuser</username>
<password>Encrypted 2beebdaaa1ac8978aaa54aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>5555</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Sort rows 2 2</from>
<to>Merge join 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows 3</from>
<to>Merge join 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/осень</from>
<to>Sort rows 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (subpoena) РФ/осень</from>
<to>Sort rows 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Merge join 2</from>
<to>Insert / update (main_dashboard.recruitment_campaign)</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Sort rows 2 2 2</from>
<to>Merge join 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows 3 2</from>
<to>Merge join 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (subpoena) РФ/весна</from>
<to>Sort rows 2 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Merge join 2 2</from>
<to>Insert / update (main_dashboard.recruitment_campaign) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/весна</from>
<to>Sort rows 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2</from>
<to>Select values 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Merge join 2</from>
<to>Get variables 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2</from>
<to>Insert / update (main_dashboard.recruitment_campaign)</to>
@ -678,13 +521,18 @@
<enabled>Y</enabled>
</hop>
<hop>
<from>Merge join 2 2</from>
<to>Get variables 3 2 2</to>
<from>Select values 3 2 2</from>
<to>Insert / update (main_dashboard.recruitment_campaign) 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (main_dashboard.recruitment_campaign) 2</to>
<from>Table input (subpoena) РФ/осень</from>
<to>Get variables 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (subpoena) РФ/весна</from>
<to>Get variables 3 2 2</to>
<enabled>Y</enabled>
</hop>
</order>
@ -1020,74 +868,6 @@
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Merge join 2</name>
<type>MergeJoin</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<join_type>FULL OUTER</join_type>
<step1>Sort rows 2 2</step1>
<step2>Sort rows 3</step2>
<keys_1>
<key>org</key>
</keys_1>
<keys_2>
<key>org</key>
</keys_2>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>864</xloc>
<yloc>128</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Merge join 2 2</name>
<type>MergeJoin</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<join_type>FULL OUTER</join_type>
<step1>Sort rows 2 2 2</step1>
<step2>Sort rows 3 2</step2>
<keys_1>
<key>org</key>
</keys_1>
<keys_2>
<key>org</key>
</keys_2>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>864</xloc>
<yloc>400</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2</name>
<type>SelectValues</type>
@ -1212,276 +992,6 @@
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Sort rows 2 2</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>%%java.io.tmpdir%%</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>org</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>768</xloc>
<yloc>128</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Sort rows 2 2 2</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>%%java.io.tmpdir%%</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>org</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>768</xloc>
<yloc>400</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Sort rows 3</name>
<type>SortRows</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>%%java.io.tmpdir%%</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>org</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>752</xloc>
<yloc>240</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Sort rows 3 2</name>
<type>SortRows</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>%%java.io.tmpdir%%</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>org</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>752</xloc>
<yloc>512</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/весна</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>SELECT
1 AS org,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS new_recruits,
COUNT(*) FILTER (
WHERE conscription = true
) AS postponement_granted,
ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false)), 0), 2) AS postponement_granted_percent
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>N</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>496</xloc>
<yloc>512</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/осень</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>SELECT
1 AS org,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS new_recruits,
COUNT(*) FILTER (
WHERE conscription = true
) AS postponement_granted,
ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false)), 0), 2) AS postponement_granted_percent
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>N</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>496</xloc>
<yloc>240</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (subpoena) РФ/весна</name>
<type>TableInput</type>
@ -1493,87 +1003,74 @@ FROM public.recruits AS r
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
s.recruit_id, -- recruit_id добавляем, если есть
sh.date_time
FROM public.subpoena s
JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN public.subpoena_status AS ss ON ss.id = s.status_id
JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '3'
AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
),
last_status_data AS (
-- Выбираем последнюю дату истории для каждой subpoena
SELECT
s.subpoena_id,
MAX(s.history_date) AS last_history_date
FROM subpoena_data s
GROUP BY s.subpoena_id
),
last_status AS (
-- Соединяем таблицу с максимальной датой и оригинальные данные, чтобы выбрать последние записи
SELECT
sd.*
FROM subpoena_data sd
JOIN last_status_data lsd
ON sd.subpoena_id = lsd.subpoena_id
AND sd.history_date = lsd.last_history_date
),
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist in ('5', '5.1')
),
t4 AS (
SELECT COUNT(DISTINCT recruit_id) AS new_recruits
FROM subpoena_data
)
SELECT
t1.count_subpoena,
t2.count_appeared,
t3.count_not_appeared,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent,
-- t4.new_recruits,
0 AS postponement_have_right,
-- 0 AS postponement_granted,
0 AS postponement_have_right_percent,
-- 0 AS postponement_granted_percent,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoenas_sent) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared_on_subpoenas) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared_on_subpoenas) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(new_recruits) END AS new_recruits,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(postponement_have_right) END AS postponement_have_right,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(postponement_granted) END AS postponement_granted,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_on_subpoenas_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(not_appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_on_subpoenas_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(postponement_have_right) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS postponement_have_right_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(postponement_granted) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS postponement_granted_percent,
'${REG_ID}' AS recruitment_id,
'Весна' AS spring_autumn,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
1 AS org
FROM t1
JOIN t2 ON true
JOIN t3 ON true
JOIN t4 ON true;</sql>
'Ministry' AS schema
FROM main_dashboard.recruitment_campaign
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Весна'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1604,87 +1101,74 @@ JOIN t4 ON true;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
s.recruit_id, -- recruit_id добавляем, если есть
sh.date_time
FROM public.subpoena s
JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN public.subpoena_status AS ss ON ss.id = s.status_id
JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '3' -- статус изменен на 3
AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
),
last_status_data AS (
-- Выбираем последнюю дату истории для каждой subpoena
SELECT
s.subpoena_id,
MAX(s.history_date) AS last_history_date
FROM subpoena_data s
GROUP BY s.subpoena_id
),
last_status AS (
-- Соединяем таблицу с максимальной датой и оригинальные данные, чтобы выбрать последние записи
SELECT
sd.*
FROM subpoena_data sd
JOIN last_status_data lsd
ON sd.subpoena_id = lsd.subpoena_id
AND sd.history_date = lsd.last_history_date
),
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist in ('5', '5.1') -- добавлен статус 5.1
),
t4 AS (
SELECT COUNT(DISTINCT recruit_id) AS new_recruits
FROM subpoena_data
)
SELECT
t1.count_subpoena,
t2.count_appeared,
t3.count_not_appeared,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent,
-- t4.new_recruits,
0 AS postponement_have_right,
-- 0 AS postponement_granted,
0 AS postponement_have_right_percent,
-- 0 AS postponement_granted_percent,
'Осень' AS spring_autumn,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoenas_sent) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared_on_subpoenas) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared_on_subpoenas) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(new_recruits) END AS new_recruits,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(postponement_have_right) END AS postponement_have_right,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(postponement_granted) END AS postponement_granted,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_on_subpoenas_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(not_appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_on_subpoenas_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(postponement_have_right) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS postponement_have_right_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoenas_sent) > 0
THEN ROUND((SUM(postponement_granted) / SUM(subpoenas_sent) * 100), 2)
ELSE 0
END,
0
)
END AS postponement_granted_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
1 AS org
FROM t1
JOIN t2 ON true
JOIN t3 ON true
JOIN t4 ON true;</sql>
'Осень' AS spring_autumn,
'Ministry' AS schema
FROM main_dashboard.recruitment_campaign
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Осень'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry) РФ</from>
@ -800,88 +749,60 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM
children_birth_dates
WHERE
AGE(make_date(year, month, day)) &lt; interval '16 years'
GROUP BY
recruit_id
),
recruit_data AS (
SELECT
COUNT(*) AS total_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
AND gender = 'MALE') -- мужчины от 18 до 70 лет
OR
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
AND gender = 'FEMALE') -- женщины от 18 до 45 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND COALESCE(cc.children_under_16, 0) &lt; 5 -- исключить рекрутов с 5 и более детьми младше 16 лет
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS volunteer_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE' -- мужчины от 18 до 50 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
) AS contract_criterion
FROM vse as ri
LEFT JOIN children_count AS cc
ON ri.r_id = cc.recruit_id
)
SELECT
total_count,
male_count,
female_count,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_registered) END AS total_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("total_registered_M") END AS male_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("total_registered_W") END AS female_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(mobilization_criterion) END AS mobilization_criterion,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(volunteer_criterion) END AS volunteer_criterion,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(contract_criterion) END AS contract_criterion,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_registered) > 0
THEN ROUND((SUM(mobilization_criterion) / SUM(total_registered) * 100), 2)
ELSE 0
END,
0
)
END AS mobilization_criterion_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_registered) > 0
THEN ROUND((SUM(volunteer_criterion) / SUM(total_registered) * 100), 2)
ELSE 0
END,
0
)
END AS volunteer_criterion_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_registered) > 0
THEN ROUND((SUM(contract_criterion) / SUM(total_registered) * 100), 2)
ELSE 0
END,
0
)
END AS contract_criterion_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
mobilization_criterion,
volunteer_criterion,
contract_criterion,
ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
ROUND(volunteer_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS volunteer_criterion_percent,
ROUND(contract_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS contract_criterion_percent
FROM recruit_data;</sql>
'Ministry' AS schema
FROM main_dashboard.total_registered
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input 2 (person_registry) РФ</from>
@ -805,94 +754,61 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM
children_birth_dates
WHERE
AGE(make_date(year, month, day)) &lt; interval '16 years'
GROUP BY
recruit_id
),
recruit_data AS (
SELECT
COUNT(*) AS waiting_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
AND gender = 'MALE') -- мужчины от 18 до 70 лет
OR
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
AND gender = 'FEMALE') -- женщины от 18 до 45 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND COALESCE(cc.children_under_16, 0) &lt; 5 -- исключить рекрутов с 5 и более детьми младше 16 лет
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS volunteer_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE' -- мужчины от 18 до 50 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
) AS contract_criterion
FROM vse as ri
LEFT JOIN children_count AS cc
ON ri.r_id = cc.recruit_id
)
SELECT
waiting_count,
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL), 0) * 100), 0), 2) AS waiting_percent,
male_count,
female_count,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(waiting_registration) END AS waiting_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("waiting_registration_M") END AS male_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("waiting_registration_W") END AS female_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(mobilization_criterion) END AS mobilization_criterion,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(volunteer_criterion) END AS volunteer_criterion,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(contract_criterion) END AS contract_criterion,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(waiting_registration) > 0
THEN ROUND((SUM(mobilization_criterion) / SUM(waiting_registration) * 100), 2)
ELSE 0
END,
0
)
END AS mobilization_criterion_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(waiting_registration) > 0
THEN ROUND((SUM(volunteer_criterion) / SUM(waiting_registration) * 100), 2)
ELSE 0
END,
0
)
END AS volunteer_criterion_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(waiting_registration) > 0
THEN ROUND((SUM(contract_criterion) / SUM(waiting_registration) * 100), 2)
ELSE 0
END,
0
)
END AS contract_criterion_percent,
0 AS waiting_percent, -- waiting_registration_percent
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
mobilization_criterion,
volunteer_criterion,
contract_criterion,
ROUND(mobilization_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS mobilization_criterion_percent,
ROUND(volunteer_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS volunteer_criterion_percent,
ROUND(contract_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS contract_criterion_percent
FROM recruit_data;</sql>
'Ministry' AS schema
FROM main_dashboard.waiting_registration
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.appeal-document-service</name>
<server>appeal-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>appeal-dbname</database>
<port>2222</port>
<username>appeal-dbuser</username>
<password>Encrypted 2be98afa91ad79785a754aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>2222</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (appeal_document) РФ/осень</from>
@ -1034,28 +983,51 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.appeal-document-service</connection>
<sql>-- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
WITH appeals_data AS (
SELECT
COUNT(*) AS total_appeals,
ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
COUNT(CASE WHEN ad.extra_info->>'result' = '1' THEN 1 END) AS resolved,
COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 END) AS not_resolved
FROM public.appeal_document ad
)
SELECT
ad.total_appeals,
ad.average_consideration,
ad.resolved,
ad.not_resolved,
ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS resolved_percent,
ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS not_resolved_percent,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_appeals) END AS total_appeals,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_consideration) END AS average_consideration,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(resolved) END AS resolved,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_resolved) END AS not_resolved,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_appeals) > 0
THEN ROUND((SUM(not_resolved) / SUM(total_appeals) * 100), 2)
ELSE 0
END,
0
)
END AS not_resolved_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_rating) END AS average_rating,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_appeals) > 0
THEN ROUND((SUM(resolved) / SUM(total_appeals) * 100), 2)
ELSE 0
END,
0
)
END AS resolved_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
0 AS average_rating,
'Весна' as spring_autumn
FROM appeals_data AS ad;</sql>
'Весна' AS spring_autumn,
'Ministry' AS schema
FROM recruitment_campaign.appeals
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Весна'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1086,28 +1058,51 @@ FROM appeals_data AS ad;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.appeal-document-service</connection>
<sql>-- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
WITH appeals_data AS (
SELECT
COUNT(*) AS total_appeals,
ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
COUNT(CASE WHEN ad.extra_info->>'result' = '1' THEN 1 END) AS resolved,
COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 END) AS not_resolved
FROM public.appeal_document ad
)
SELECT
ad.total_appeals,
ad.average_consideration,
ad.resolved,
ad.not_resolved,
ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS resolved_percent,
ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS not_resolved_percent,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_appeals) END AS total_appeals,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_consideration) END AS average_consideration,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(resolved) END AS resolved,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_resolved) END AS not_resolved,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_appeals) > 0
THEN ROUND((SUM(not_resolved) / SUM(total_appeals) * 100), 2)
ELSE 0
END,
0
)
END AS not_resolved_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_rating) END AS average_rating,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_appeals) > 0
THEN ROUND((SUM(resolved) / SUM(total_appeals) * 100), 2)
ELSE 0
END,
0
)
END AS resolved_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
0 AS average_rating,
'Осень' as spring_autumn
FROM appeals_data AS ad;</sql>
'Осень' AS spring_autumn,
'Ministry' AS schema
FROM recruitment_campaign.appeals
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Осень'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -491,57 +491,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.subpoena</name>
<server>subpoena-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>subpoena-dbname</database>
<port>5555</port>
<username>subpoena-dbuser</username>
<password>Encrypted 2beebdaaa1ac8978aaa54aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>5555</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (subpoena) Весна/РФ</from>
@ -1131,145 +1080,138 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
FROM subpoena s
JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN subpoena_status AS ss ON ss.id = s.status_id
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '3'
and ssh.code not in ('3.14','3.7','3.72', '3.71')
),
-- фильтруем только последние статусы для каждой повестки
last_status AS (
SELECT *
FROM subpoena_data
WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
),
-- Подсчет различных метрик
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
),
t5 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
FROM last_status
WHERE sub_stat_hist = '5.1'
),
t6 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
FROM last_status
WHERE sub_stat_hist IN ('3.8', '5.2')
),
t7 AS ( -- количество повесток по которым применены ограничения
SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
FROM last_status
WHERE restr_dc IS NULL
),
t8 AS ( -- количество повесток по которым введены меры
SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
FROM last_status
WHERE restr_dc IS NULL AND ap_date IS NOT NULL
),
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
FROM last_status
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
),
t12 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
FROM last_status
WHERE d_code is null
),
t13 AS (
SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
FROM last_status
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
)
SELECT
t1.count_subpoena,
t2.average_appeared,
t3.count_appeared,
t4.count_not_appeared,
t5.count_not_ap_good_reason,
t6.count_ap_not_required,
t7.count_restrictions_applied,
t8.count_introduced_measures,
t9.count_paper,
t10.count_electron,
t11.count_restrictions,
t12.count_not_delivery,
t13.appear_date_is_good,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoena) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_ap_good_reason) END AS count_not_ap_good_reason,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(introduced_measures) END AS count_introduced_measures,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(ap_not_required) END AS count_ap_not_required,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(restrictions_applied) END AS count_restrictions_applied,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_ap_good_reason_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS ap_not_required_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS restrictions_applied_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS introduced_measures_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(rest) END AS rest,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(count_not_delivery) END AS count_not_delivery,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appear_date_is_good) END AS appear_date_is_good,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
0 as rest,
'Весна' as spring_autumn,
1 AS org
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1
FULL OUTER JOIN t7 ON 1 = 1
FULL OUTER JOIN t8 ON 1 = 1
FULL OUTER JOIN t9 ON 1 = 1
FULL OUTER JOIN t10 ON 1 = 1
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;
</sql>
'Весна' AS spring_autumn,
'Ministry' AS schema
FROM recruitment_campaign.subpoenas
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Весна'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1300,145 +1242,138 @@ FULL OUTER JOIN t13 ON 1 = 1;
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
FROM subpoena s
JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN subpoena_status AS ss ON ss.id = s.status_id
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '3'
and ssh.code not in ('3.14','3.7','3.72', '3.71')
),
-- фильтруем только последние статусы для каждой повестки
last_status AS (
SELECT *
FROM subpoena_data
WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
),
-- Подсчет различных метрик
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
),
t5 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
FROM last_status
WHERE sub_stat_hist = '5.1'
),
t6 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
FROM last_status
WHERE sub_stat_hist IN ('3.8', '5.2')
),
t7 AS ( -- количество повесток по которым применены ограничения
SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
FROM last_status
WHERE restr_dc IS NULL
),
t8 AS ( -- количество повесток по которым введены меры
SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
FROM last_status
WHERE restr_dc IS NULL AND ap_date IS NOT NULL
),
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
FROM last_status
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
),
t12 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
FROM last_status
WHERE d_code is null
),
t13 AS (
SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
FROM last_status
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
)
SELECT
t1.count_subpoena,
t2.average_appeared,
t3.count_appeared,
t4.count_not_appeared,
t5.count_not_ap_good_reason,
t6.count_ap_not_required,
t7.count_restrictions_applied,
t8.count_introduced_measures,
t9.count_paper,
t10.count_electron,
t11.count_restrictions,
t12.count_not_delivery,
t13.appear_date_is_good,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoena) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_ap_good_reason) END AS count_not_ap_good_reason,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(introduced_measures) END AS count_introduced_measures,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(ap_not_required) END AS count_ap_not_required,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(restrictions_applied) END AS count_restrictions_applied,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_ap_good_reason_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS ap_not_required_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS restrictions_applied_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS introduced_measures_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(rest) END AS rest,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(count_not_delivery) END AS count_not_delivery,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appear_date_is_good) END AS appear_date_is_good,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
0 as rest,
'Осень' as spring_autumn,
1 AS org
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1
FULL OUTER JOIN t7 ON 1 = 1
FULL OUTER JOIN t8 ON 1 = 1
FULL OUTER JOIN t9 ON 1 = 1
FULL OUTER JOIN t10 ON 1 = 1
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;
</sql>
'Осень' AS spring_autumn,
'Ministry' AS schema
FROM recruitment_campaign.subpoenas
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND spring_autumn = 'Осень'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -536,9 +536,10 @@
</partitioning>
<connection>ervu-dashboard</connection>
<sql>WITH
t1 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT00_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '0000000')
t1 AS (SELECT array_agg(recruitment_dstr_id) AS RECRUITMENT_COUNTRY_ID
FROM ervu_dashboard.array_mildis)
SELECT
t1.RECRUITMENT00_ID AS VK_ARRAY_ID,
t1.RECRUITMENT_COUNTRY_ID AS VK_ARRAY_ID,
'f03fc8c0-2ce7-4121-a306-f82d65ea029d' AS RECRUITMENT_REG_ID
FROM t1
</sql>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>ervu_person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry)РФ/женщины</from>
@ -1312,71 +1261,86 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_18
FROM
children_birth_dates
WHERE
AGE(make_date(year, month, day)) &lt; interval '18 years'
GROUP BY
recruit_id
),
final_counts AS (
SELECT
COALESCE(children_under_18, 0) AS children_count,
COUNT(*) AS num_people
FROM
public.recruits_info ri
LEFT JOIN
children_count cc ON ri.recruit_id = cc.recruit_id
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
GROUP BY
COALESCE(children_under_18, 0)
),
total_people AS (
SELECT SUM(num_people) AS total_count
FROM final_counts
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_child) END AS no_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("1_child") END AS one_child,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("2_child") END AS two_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("3_child") END AS three_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("4_more_child") END AS four_or_more_children,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS no_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS one_child_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS two_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS three_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS four_or_more_children_percent,
'${REG_ID}' AS recruitment_id,
'ALL' AS gender,
'Ministry' AS schema
FROM total_registered.child_minor
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
SELECT
'ALL' AS gender,
'${REG_ID}' as recruitment_id,
'Ministry' AS schema,
COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS no_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS one_child_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS two_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS three_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS four_or_more_children_percent
FROM
final_counts;</sql>
AND schema = 'Region'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1407,86 +1371,86 @@ FROM
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_18
FROM
children_birth_dates
WHERE
make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
GROUP BY
recruit_id
),
final_counts AS (
SELECT
COALESCE(children_under_18, 0) AS children_count,
COUNT(*) AS num_people
FROM
public.recruits_info ri
LEFT JOIN
children_count cc ON ri.recruit_id = cc.recruit_id
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
GROUP BY
COALESCE(children_under_18, 0)
),
total_men AS (
SELECT
COUNT(*) AS total_men_count
FROM
public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
)
SELECT
'W' AS gender,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_child) END AS no_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("1_child") END AS one_child,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("2_child") END AS two_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("3_child") END AS three_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("4_more_child") END AS four_or_more_children,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS no_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS one_child_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS two_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS three_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS four_or_more_children_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS no_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS one_child_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS two_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS three_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS four_or_more_children_percent
FROM
final_counts;</sql>
'W' AS gender,
'Ministry' AS schema
FROM total_registered.child_minor
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1517,86 +1481,86 @@ FROM
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_18
FROM
children_birth_dates
WHERE
make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
GROUP BY
recruit_id
),
final_counts AS (
SELECT
COALESCE(children_under_18, 0) AS children_count,
COUNT(*) AS num_people
FROM
public.recruits_info ri
LEFT JOIN
children_count cc ON ri.recruit_id = cc.recruit_id
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
GROUP BY
COALESCE(children_under_18, 0)
),
total_men AS (
SELECT
COUNT(*) AS total_men_count
FROM
public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE
r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
)
SELECT
'M' AS gender,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_child) END AS no_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("1_child") END AS one_child,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("2_child") END AS two_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("3_child") END AS three_children,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("4_more_child") END AS four_or_more_children,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS no_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS one_child_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS two_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS three_children_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS four_or_more_children_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS no_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS one_child_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS two_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS three_children_percent,
ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS four_or_more_children_percent
FROM
final_counts;</sql>
'M' AS gender,
'Ministry' AS schema
FROM total_registered.child_minor
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry) РФ/женщины</from>
@ -1327,48 +1276,99 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH categorized AS (
SELECT
r.id,
r.gender,
-- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
GROUP BY r.id, r.gender
),
aggregated AS (
SELECT
'ALL' AS gender,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
-- Считаем количество уникальных рекрутов с каждой категорией
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
COUNT(DISTINCT r.id) AS total
FROM categorized r
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("A") END AS a,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("B") END AS b,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("C") END AS c,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("D") END AS d,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("E") END AS e,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(nope) END AS nope,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS a_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS b_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS c_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS d_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS e_percent, -- нет такой категории
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS nope_percent,
'${REG_ID}' AS recruitment_id,
'ALL' AS gender,
'Ministry' AS schema
FROM total_registered.driver_license
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
SELECT *,
ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
FROM aggregated;</sql>
AND schema = 'Region'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1399,49 +1399,99 @@ FROM aggregated;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH categorized AS (
SELECT
r.id,
r.gender,
-- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
GROUP BY r.id, r.gender
),
aggregated AS (
SELECT
'W' AS gender,
'${REG_ID}' as recruitment_id,
'Ministry' AS schema,
-- Считаем количество уникальных рекрутов с каждой категорией
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
COUNT(DISTINCT r.id) AS total
FROM categorized r
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("A") END AS a,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("B") END AS b,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("C") END AS c,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("D") END AS d,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("E") END AS e,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(nope) END AS nope,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS a_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS b_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS c_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS d_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS e_percent, -- нет такой категории
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS nope_percent,
'${REG_ID}' AS recruitment_id,
'W' AS gender,
'Ministry' AS schema
FROM total_registered.driver_license
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
SELECT *,
ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
FROM aggregated;</sql>
AND schema = 'Region'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1472,49 +1522,99 @@ FROM aggregated;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH categorized AS (
SELECT
r.id,
r.gender,
-- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
GROUP BY r.id, r.gender
),
aggregated AS (
SELECT
'M' AS gender,
'${REG_ID}' as recruitment_id,
'Ministry' AS schema,
-- Считаем количество уникальных рекрутов с каждой категорией
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
COUNT(DISTINCT r.id) AS total
FROM categorized r
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(total_count) END AS total,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("A") END AS a,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("B") END AS b,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("C") END AS c,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("D") END AS d,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM("E") END AS e,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(nope) END AS nope,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS a_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS b_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS c_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS d_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS e_percent, -- нет такой категории
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(total_count) > 0
THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
ELSE 0
END,
0
)
END AS nope_percent,
'${REG_ID}' AS recruitment_id,
'M' AS gender,
'Ministry' AS schema
FROM total_registered.driver_license
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
SELECT *,
ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
FROM aggregated;</sql>
AND schema = 'Region'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>ervu_person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry) РФ/все</from>
@ -1297,112 +1246,74 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH total_count AS (
SELECT COUNT(*) AS total
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
education_status AS (
SELECT
ri.id,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(higher) END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average) END AS average_prof,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(only_general) END AS only_general,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_data) END AS count_nodata,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS higher_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS average_prof_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS only_general_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS count_nodata_percentage,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' = '10'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' = '10'
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
final_counts AS (
SELECT
COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
FROM education_status
)
SELECT
'ALL' AS gender,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(education_level) END AS total,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
FROM final_counts, total_count;</sql>
'ALL' AS gender,
'Ministry' AS schema
FROM total_registered.education_level
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1433,114 +1344,74 @@ FROM final_counts, total_count;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH total_count AS (
SELECT COUNT(*) AS total
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
),
education_status AS (
SELECT
ri.id,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(higher) END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average) END AS average_prof,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(only_general) END AS only_general,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_data) END AS count_nodata,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS higher_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS average_prof_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS only_general_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS count_nodata_percentage,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' = '10'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' = '10'
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'FEMALE'
),
final_counts AS (
SELECT
COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
FROM education_status
)
SELECT
'W' AS gender,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(education_level) END AS total,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
FROM final_counts, total_count;</sql>
'W' AS gender,
'Ministry' AS schema
FROM total_registered.education_level
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1571,114 +1442,74 @@ FROM final_counts, total_count;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH total_count AS (
SELECT COUNT(*) AS total
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
),
education_status AS (
SELECT
ri.id,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(higher) END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average) END AS average_prof,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(only_general) END AS only_general,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(no_data) END AS count_nodata,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS higher_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS average_prof_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS only_general_percentage,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(education_level) > 0
THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
ELSE 0
END,
0
)
END AS count_nodata_percentage,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' = '10'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' = '10'
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits_info ri
JOIN public.recruits r ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
AND r.gender = 'MALE'
),
final_counts AS (
SELECT
COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
FROM education_status
)
SELECT
'M' AS gender,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(education_level) END AS total,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
FROM final_counts, total_count;</sql>
'M' AS gender,
'Ministry' AS schema
FROM total_registered.education_level
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>ervu_person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry) РФ/все</from>
@ -1237,50 +1186,47 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>SELECT
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) AS not_married,
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) AS married,
COUNT(*) AS total,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) * 100.0 / COUNT(*), 2
) END AS not_married_percent,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) * 100.0 / COUNT(*), 2
) END AS married_percent,
'ALL' as gender,
'Ministry' AS schema,
'${REG_ID}' as recruitment_id
FROM
public.recruits r
JOIN
public.recruits_info ri ON ri.recruit_id = r.id
WHERE
r.current_recruitment_id IS NOT NULL
AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null</sql>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(married) END AS married,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_married) END AS not_married,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS married_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS not_married_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(marital_status) END AS total,
'${REG_ID}' AS recruitment_id,
'ALL' AS gender,
'Ministry' AS schema
FROM total_registered.marital_status
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1311,52 +1257,47 @@ WHERE
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql> SELECT
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) AS not_married,
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) AS married,
COUNT(*) AS total,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) * 100.0 / COUNT(*), 2
) END AS not_married_percent,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) * 100.0 / COUNT(*), 2
) END AS married_percent,
'W' as gender,
'Ministry' AS schema,
'${REG_ID}' as recruitment_id
FROM
public.recruits r
JOIN
public.recruits_info ri ON ri.recruit_id = r.id
WHERE
r.current_recruitment_id IS NOT NULL
AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
AND r.gender = 'FEMALE';
</sql>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(married) END AS married,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_married) END AS not_married,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS married_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS not_married_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(marital_status) END AS total,
'${REG_ID}' AS recruitment_id,
'W' AS gender,
'Ministry' AS schema
FROM total_registered.marital_status
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1387,52 +1328,47 @@ WHERE
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>SELECT
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) AS not_married,
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) AS married,
COUNT(*) AS total,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
) * 100.0 / COUNT(*), 2
) END AS not_married_percent,
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE ROUND(
COUNT(*) FILTER (
WHERE
ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
) * 100.0 / COUNT(*), 2
) END AS married_percent,
'M' as gender,
'Ministry' AS schema,
'${REG_ID}' as recruitment_id
FROM
public.recruits r
JOIN
public.recruits_info ri ON ri.recruit_id = r.id
WHERE
r.current_recruitment_id IS NOT NULL
AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
AND r.gender = 'MALE';
</sql>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(married) END AS married,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_married) END AS not_married,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS married_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(marital_status) > 0
THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
ELSE 0
END,
0
)
END AS not_married_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(marital_status) END AS total,
'${REG_ID}' AS recruitment_id,
'M' AS gender,
'Ministry' AS schema
FROM total_registered.marital_status
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>ervu_person_registry</name>
<server>person-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>person-dbname</database>
<port>4444</port>
<username>person-dbuser</username>
<password>Encrypted 2be98afb80fd5818ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>4444</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (person_registry) РФ/на учете</from>
@ -1084,89 +1033,98 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH base_data AS (
-- Основной набор данных
SELECT
r.registration_reasons,
r.gender,
r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
FROM public.recruits r
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
total AS (
-- Общее количество записей
SELECT COUNT(*) AS total_count
FROM base_data
),
t1 AS (
-- Первоначальная постановка 17 лет
SELECT COUNT(*) AS first_reg_17
FROM base_data
WHERE registration_reasons @> '"5"'
),
t2 AS (
-- Первоначальная постановка 18 лет
SELECT COUNT(*) AS first_reg_18
FROM base_data
WHERE registration_reasons @> '"6"'
OR registration_reasons @> '"3"'
OR registration_reasons @> '"1"'
OR registration_reasons @> '"4"'
OR registration_reasons @> '"2"'
),
t3 AS (
-- Женщины, получившие ВУС
SELECT COUNT(*) AS mil_spec_w
FROM base_data
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
),
t4 AS (
-- Возвратившиеся из мест лишения свободы
SELECT COUNT(*) AS returned_dep_liberty
FROM base_data
WHERE registration_reasons @> '"1"'
),
t5 AS (
-- Отбывающие наказание в местах лишения свободы
SELECT COUNT(*) AS punished
FROM base_data
WHERE registration_reasons @> '"4"'
),
t6 AS (
-- Получившие гражданство
SELECT COUNT(*) AS received_citizenship
FROM base_data
WHERE registration_reasons @> '"2"'
)
SELECT
total.total_count,
t1.first_reg_17,
t2.first_reg_18,
t3.mil_spec_w,
t4.returned_dep_liberty,
t5.punished,
t6.received_citizenship,
-- Вычисление процентов
ROUND(t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_17_percent,
ROUND(t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_18_percent,
ROUND(t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0), 2) AS returned_dep_liberty_percent,
ROUND(t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0), 2) AS mil_spec_w_percent,
ROUND(t5.punished * 100.0 / NULLIF(total.total_count, 0), 2) AS punished_percent,
ROUND(t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0), 2) AS received_citizenship_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(first_reg_17), 0) END AS first_reg_17,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(first_reg_18), 0) END AS first_reg_18,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM("mil_spec_W"), 0) END AS mil_spec_w,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(returned_dep_liberty), 0) END AS returned_dep_liberty,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(punished), 0) END AS punished,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(received_citizenship), 0) END AS received_citizenship,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(first_reg_17) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS first_reg_17_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(first_reg_18) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS first_reg_18_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(returned_dep_liberty) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS returned_dep_liberty_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM("mil_spec_W") / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS mil_spec_w_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(punished) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS punished_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(received_citizenship) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS received_citizenship_percent,
'${REG_ID}'::uuid AS recruitment_id,
1 AS mil_reg,
1 AS org
FROM total
FULL OUTER JOIN t1 ON 1 = 1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1;</sql>
'Ministry' AS schema
FROM total_registered.reg_mil_cat
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND mil_reg = 1
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1197,89 +1155,98 @@ FULL OUTER JOIN t6 ON 1 = 1;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<sql>WITH base_data AS (
-- Основной набор данных
SELECT
r.registration_reasons,
r.gender,
r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
FROM public.recruits r
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
total AS (
-- Общее количество записей
SELECT COUNT(*) AS total_count
FROM base_data
),
t1 AS (
-- Первоначальная постановка 17 лет
SELECT COUNT(*) AS first_reg_17
FROM base_data
WHERE registration_reasons @> '"5"'
),
t2 AS (
-- Первоначальная постановка 18 лет
SELECT COUNT(*) AS first_reg_18
FROM base_data
WHERE registration_reasons @> '"6"'
OR registration_reasons @> '"3"'
OR registration_reasons @> '"1"'
OR registration_reasons @> '"4"'
OR registration_reasons @> '"2"'
),
t3 AS (
-- Женщины, получившие ВУС
SELECT COUNT(*) AS mil_spec_w
FROM base_data
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
),
t4 AS (
-- Возвратившиеся из мест лишения свободы
SELECT COUNT(*) AS returned_dep_liberty
FROM base_data
WHERE registration_reasons @> '"1"'
),
t5 AS (
-- Отбывающие наказание в местах лишения свободы
SELECT COUNT(*) AS punished
FROM base_data
WHERE registration_reasons @> '"4"'
),
t6 AS (
-- Получившие гражданство
SELECT COUNT(*) AS received_citizenship
FROM base_data
WHERE registration_reasons @> '"2"'
)
SELECT
total.total_count,
t1.first_reg_17,
t2.first_reg_18,
t3.mil_spec_w,
t4.returned_dep_liberty,
t5.punished,
t6.received_citizenship,
-- Вычисление процентов
ROUND(t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_17_percent,
ROUND(t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_18_percent,
ROUND(t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0), 2) AS returned_dep_liberty_percent,
ROUND(t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0), 2) AS mil_spec_w_percent,
ROUND(t5.punished * 100.0 / NULLIF(total.total_count, 0), 2) AS punished_percent,
ROUND(t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0), 2) AS received_citizenship_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(first_reg_17), 0) END AS first_reg_17,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(first_reg_18), 0) END AS first_reg_18,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM("mil_spec_W"), 0) END AS mil_spec_w,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(returned_dep_liberty), 0) END AS returned_dep_liberty,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(punished), 0) END AS punished,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(received_citizenship), 0) END AS received_citizenship,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(first_reg_17) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS first_reg_17_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(first_reg_18) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS first_reg_18_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(returned_dep_liberty) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS returned_dep_liberty_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM("mil_spec_W") / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS mil_spec_w_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(punished) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS punished_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
THEN ROUND((SUM(received_citizenship) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
ELSE 0
END,
0
)
END AS received_citizenship_percent,
'${REG_ID}'::uuid AS recruitment_id,
0 AS mil_reg,
1 AS org
FROM total
FULL OUTER JOIN t1 ON 1 = 1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1;</sql>
'Ministry' AS schema
FROM total_registered.reg_mil_cat
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND mil_reg = 0
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.decision-document-service</name>
<server>decision-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>decision-dbname</database>
<port>3333</port>
<username>decision-dbuser</username>
<password>Encrypted 2befccaab03d49b8ba554aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>3333</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (decision-document-service) РФ</from>
@ -820,32 +769,97 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.decision-document-service</connection>
<connection>ervu-dashboard</connection>
<sql>SELECT
COUNT(*) AS removed_registry,
COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст
COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть
'0' AS deprivation_citizenship,
'0' AS travel_abroad,
'0' AS living_abroad,
COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other, -- Количество по другим причинам
'0' AS deprivation_citizen_percents,
ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent, -- Процент по причине предельный возраст
ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent, -- Процент по причине смерть
'0' AS travel_abroad_percent,
'0' AS living_abroad_percent,
ROUND(COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent, -- Процент по другим причинам
'Ministry' AS schema,
'${REG_ID}' AS recruitment_id
FROM public.recruit AS r
JOIN public.decision AS d
ON d.recruit_id = r.id
JOIN public.decision_type AS dt
ON dt.id = d.type_id
WHERE r.system_pgs_status = '1.3'
AND r.current_recruitment IS NOT NULL
AND r.target_recruitment IS NOT NULL
AND dt.code IN ('9', '10');</sql>
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(age_limit) END AS age_limit,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(death) END AS death,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(removed_registry) END AS removed_registry,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(deprivation_citizenship) END AS deprivation_citizenship,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(travel_abroad) END AS travel_abroad,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(living_abroad) END AS living_abroad,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(other) END AS other,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(deprivation_citizenship) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS deprivation_citizen_percents,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(age_limit) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS age_limit_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(death) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS death_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(travel_abroad) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS travel_abroad_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(living_abroad) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS living_abroad_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(removed_registry) > 0
THEN ROUND((SUM(other) / SUM(removed_registry) * 100), 2)
ELSE 0
END,
0
)
END AS other_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema
FROM total_registered.removed_registry
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -504,57 +504,6 @@
</attribute>
</attributes>
</connection>
<connection>
<name>postgres.subpoena</name>
<server>subpoena-dbhost</server>
<type>POSTGRESQL</type>
<access>Native</access>
<database>subpoena-dbname</database>
<port>5555</port>
<username>subpoena-dbuser</username>
<password>Encrypted 2beebdaaa1ac8978aaa54aa72ce93bcc9</password>
<servername/>
<data_tablespace/>
<index_tablespace/>
<attributes>
<attribute>
<code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>IS_CLUSTERED</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>PORT_NUMBER</code>
<attribute>5555</attribute>
</attribute>
<attribute>
<code>PRESERVE_RESERVED_WORD_CASE</code>
<attribute>Y</attribute>
</attribute>
<attribute>
<code>QUOTE_ALL_FIELDS</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
<attribute>N</attribute>
</attribute>
<attribute>
<code>USE_POOLING</code>
<attribute>N</attribute>
</attribute>
</attributes>
</connection>
<order>
<hop>
<from>Table input (subpoena)РФ/рег</from>
@ -1184,143 +1133,154 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
FROM subpoena s
JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN subpoena_status AS ss ON ss.id = s.status_id
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '1'
and ssh.code not in ('3.14','3.7','3.72', '3.71')
),
-- фильтруем только последние статусы для каждой повестки
last_status AS (
SELECT *
FROM subpoena_data
WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
),
-- Подсчет различных метрик
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
),
t5 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
FROM last_status
WHERE sub_stat_hist = '5.1'
),
t6 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
FROM last_status
WHERE sub_stat_hist IN ('3.8', '5.2')
),
t7 AS ( -- количество повесток по которым применены ограничения
SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
FROM last_status
WHERE restr_dc IS NULL
),
t8 AS ( -- количество повесток по которым введены меры
SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
FROM last_status
WHERE restr_dc IS NULL AND ap_date IS NOT NULL
),
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
FROM last_status
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
),
t12 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
FROM last_status
WHERE d_code is null
),
t13 AS (
SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
FROM last_status
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
)
SELECT
t1.count_subpoena,
t2.average_appeared,
t3.count_appeared,
t4.count_not_appeared,
t5.count_not_ap_good_reason,
t6.count_ap_not_required,
t7.count_restrictions_applied,
t8.count_introduced_measures,
t9.count_paper,
t10.count_electron,
t11.count_restrictions,
t12.count_not_delivery,
t13.appear_date_is_good,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoena) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_appeared) END AS average_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_ap_good_reason) END AS count_not_ap_good_reason,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(introduced_measures) END AS count_introduced_measures,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(ap_not_required) END AS count_ap_not_required,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(electron) END AS count_electron,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(paper) END AS count_paper,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(restrictions_applied) END AS count_restrictions_applied,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_ap_good_reason_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS ap_not_required_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(electron) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS electron_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(paper) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS paper_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS restrictions_applied_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS introduced_measures_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(count_not_delivery) END AS count_not_delivery,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appear_date_is_good) END AS appear_date_is_good,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
1 AS org,
0 AS mil_reg
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1
FULL OUTER JOIN t7 ON 1 = 1
FULL OUTER JOIN t8 ON 1 = 1
FULL OUTER JOIN t9 ON 1 = 1
FULL OUTER JOIN t10 ON 1 = 1
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;</sql>
0 AS mil_reg,
'Ministry' AS schema
FROM total_registered.subpoenas
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND mil_reg = 0
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1351,143 +1311,154 @@ FULL OUTER JOIN t13 ON 1 = 1;</sql>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
ssh.code AS sub_stat_hist,
s.send_date,
sh.date_time::timestamp AS history_date,
rdi.restriction_document_cancel_id AS restr_dc,
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
FROM subpoena s
JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
JOIN subpoena_status AS ss ON ss.id = s.status_id
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id
LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type != '1'
and ssh.code not in ('3.14','3.7','3.72', '3.71')
),
-- фильтруем только последние статусы для каждой повестки
last_status AS (
SELECT *
FROM subpoena_data
WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
),
-- Подсчет различных метрик
t1 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM last_status
WHERE sub_stat_hist IS NOT NULL
),
t2 AS (
SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
FROM last_status
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
),
t5 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
FROM last_status
WHERE sub_stat_hist = '5.1'
),
t6 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
FROM last_status
WHERE sub_stat_hist IN ('3.8', '5.2')
),
t7 AS ( -- количество повесток по которым применены ограничения
SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
FROM last_status
WHERE restr_dc IS NULL
),
t8 AS ( -- количество повесток по которым введены меры
SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
FROM last_status
WHERE restr_dc IS NULL AND ap_date IS NOT NULL
),
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
FROM last_status
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
),
t12 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
FROM last_status
WHERE d_code is null
),
t13 AS (
SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
FROM last_status
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
)
SELECT
t1.count_subpoena,
t2.average_appeared,
t3.count_appeared,
t4.count_not_appeared,
t5.count_not_ap_good_reason,
t6.count_ap_not_required,
t7.count_restrictions_applied,
t8.count_introduced_measures,
t9.count_paper,
t10.count_electron,
t11.count_restrictions,
t12.count_not_delivery,
t13.appear_date_is_good,
ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(subpoena) END AS count_subpoena,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appeared) END AS count_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(average_appeared) END AS average_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_appeared) END AS count_not_appeared,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_ap_good_reason) END AS count_not_ap_good_reason,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(introduced_measures) END AS count_introduced_measures,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(ap_not_required) END AS count_ap_not_required,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(electron) END AS count_electron,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(paper) END AS count_paper,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(restrictions_applied) END AS count_restrictions_applied,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_appeared_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_ap_good_reason_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS ap_not_required_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(electron) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS electron_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(paper) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS paper_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS restrictions_applied_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS introduced_measures_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(count_not_delivery) END AS count_not_delivery,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(appear_date_is_good) END AS appear_date_is_good,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS not_delivery_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(subpoena) > 0
THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
ELSE 0
END,
0
)
END AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema,
1 AS org,
1 AS mil_reg
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
FULL OUTER JOIN t4 ON 1 = 1
FULL OUTER JOIN t5 ON 1 = 1
FULL OUTER JOIN t6 ON 1 = 1
FULL OUTER JOIN t7 ON 1 = 1
FULL OUTER JOIN t8 ON 1 = 1
FULL OUTER JOIN t9 ON 1 = 1
FULL OUTER JOIN t10 ON 1 = 1
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;</sql>
1 AS mil_reg,
'Ministry' AS schema
FROM total_registered.subpoenas
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Region'
AND mil_reg = 1
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -360,7 +360,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>576</xloc>
<xloc>240</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
@ -397,7 +397,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1024</xloc>
<xloc>688</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
@ -434,8 +434,8 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1024</xloc>
<yloc>96</yloc>
<xloc>1088</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
<entry>
@ -471,7 +471,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>816</xloc>
<xloc>480</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
@ -508,7 +508,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1232</xloc>
<xloc>896</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
@ -520,22 +520,10 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1440</xloc>
<xloc>1264</xloc>
<yloc>224</yloc>
<attributes_kjc/>
</entry>
<entry>
<name>Success 2 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1216</xloc>
<yloc>96</yloc>
<attributes_kjc/>
</entry>
<entry>
<name>job_ratings.kjb</name>
<description/>
@ -569,7 +557,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1232</xloc>
<xloc>896</xloc>
<yloc>320</yloc>
<attributes_kjc/>
</entry>
@ -581,7 +569,7 @@
<parallel>N</parallel>
<draw>Y</draw>
<nr>0</nr>
<xloc>1440</xloc>
<xloc>1328</xloc>
<yloc>320</yloc>
<attributes_kjc/>
</entry>
@ -605,15 +593,6 @@
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_recruitment_mil_district</from>
<to>Success 2</to>
<from_nr>0</from_nr>
<to_nr>0</to_nr>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_recruitments_mil_com</to>
@ -624,8 +603,8 @@
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_recruitments_country</from>
<to>Success 2 2</to>
<from>job_recruitments_region</from>
<to>job_ratings.kjb</to>
<from_nr>0</from_nr>
<to_nr>0</to_nr>
<enabled>Y</enabled>
@ -633,12 +612,21 @@
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<from>job_recruitment_mil_district</from>
<to>job_recruitments_country</to>
<from_nr>0</from_nr>
<to_nr>0</to_nr>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_recruitments_country</from>
<to>Success 2</to>
<from_nr>0</from_nr>
<to_nr>0</to_nr>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
@ -650,15 +638,6 @@
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_recruitments_region</from>
<to>job_ratings.kjb</to>
<from_nr>0</from_nr>
<to_nr>0</to_nr>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>

File diff suppressed because it is too large Load diff

View file

@ -550,6 +550,51 @@
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 4</from>
<to>Select values 3 2 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 2 2</from>
<to>Select values 3 2 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 3 2</from>
<to>Select values 3 2 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 4</from>
<to>Insert / update (total_registered.busyness) 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 2 2</from>
<to>Insert / update (total_registered.busyness) 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 3 2</from>
<to>Insert / update (total_registered.busyness) 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/все 2</from>
<to>Get variables 3 2 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/женщины 2</from>
<to>Get variables 3 2 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины 2</from>
<to>Get variables 3 2 2 2</to>
<enabled>Y</enabled>
</hop>
</order>
<step>
<name>Get variables 3 2</name>
@ -1451,6 +1496,906 @@ AND recording_date = CURRENT_DATE;</sql>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 4</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>MD_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>MD_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>640</xloc>
<yloc>672</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>MD_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>MD_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>640</xloc>
<yloc>832</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 3 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>MD_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>MD_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>656</xloc>
<yloc>992</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 4</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>MD_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1056</xloc>
<yloc>672</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 2 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>MD_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1040</xloc>
<yloc>832</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 3 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>MD_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1040</xloc>
<yloc>992</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 4</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>MD_ID</name>
<rename>MD_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>MD_ARRAY</name>
<rename>MD_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>784</xloc>
<yloc>672</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>MD_ID</name>
<rename>MD_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>MD_ARRAY</name>
<rename>MD_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>784</xloc>
<yloc>832</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 3 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>MD_ID</name>
<rename>MD_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>MD_ARRAY</name>
<rename>MD_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>800</xloc>
<yloc>992</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/все 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${MD_ID}' AS recruitment_id,
'ALL' AS gender,
'false' AS registered,
'Region' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${MD_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Organization'
AND registered = 'false'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>416</xloc>
<yloc>672</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/женщины 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${MD_ID}' AS recruitment_id,
'W' AS gender,
'false' AS registered,
'Region' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${MD_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Organization'
AND registered = 'false'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>416</xloc>
<yloc>992</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/мужчины 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${MD_ARRAY}' IS NULL OR '${MD_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${MD_ID}' AS recruitment_id,
'M' AS gender,
'false' AS registered,
'Region' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${MD_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND schema = 'Organization'
AND registered = 'false'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>416</xloc>
<yloc>832</yloc>
<draw>Y</draw>
</GUI>
</step>
<step_error_handling>
</step_error_handling>
<slave-step-copy-partition-distribution>

View file

@ -550,6 +550,51 @@
<to>Insert / update (total_registered.busyness) 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 3</from>
<to>Select values 3 2 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 2 3</from>
<to>Select values 3 2 2 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get variables 3 2 2 2 2</from>
<to>Select values 3 2 2 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 3</from>
<to>Insert / update (total_registered.busyness) 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 2 3</from>
<to>Insert / update (total_registered.busyness) 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 3 2 2 2 2</from>
<to>Insert / update (total_registered.busyness) 3 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/все 2</from>
<to>Get variables 3 2 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/женщины 2</from>
<to>Get variables 3 2 2 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины 2</from>
<to>Get variables 3 2 2 3</to>
<enabled>Y</enabled>
</hop>
</order>
<step>
<name>Get variables 3 2</name>
@ -1448,6 +1493,903 @@ AND recording_date = CURRENT_DATE;</sql>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 3</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>REG_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>VK_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>683</xloc>
<yloc>661</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 2 3</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>REG_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>VK_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>683</xloc>
<yloc>821</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Get variables 3 2 2 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<name>REG_ID</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
<field>
<name>VK_ARRAY</name>
<variable/>
<type>String</type>
<format/>
<currency/>
<decimal/>
<group/>
<length>-1</length>
<precision>-1</precision>
<trim_type>none</trim_type>
</field>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>683</xloc>
<yloc>981</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 4</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>REG_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1083</xloc>
<yloc>661</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 2 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>REG_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1083</xloc>
<yloc>821</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (total_registered.busyness) 3 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<commit>100</commit>
<update_bypassed>Y</update_bypassed>
<lookup>
<schema>total_registered</schema>
<table>busyness</table>
<key>
<name>REG_ID</name>
<field>recruitment_id</field>
<condition>=</condition>
<name2/>
</key>
<key>
<name>schema</name>
<field>schema</field>
<condition>=</condition>
<name2/>
</key>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>not_work</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>not_work_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>schema</name>
<rename>schema</rename>
<update>N</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>1083</xloc>
<yloc>981</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 3</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REG_ID</name>
<rename>REG_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>VK_ARRAY</name>
<rename>VK_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>827</xloc>
<yloc>661</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 2 3</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REG_ID</name>
<rename>REG_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>VK_ARRAY</name>
<rename>VK_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>827</xloc>
<yloc>821</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 3 2 2 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REG_ID</name>
<rename>REG_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>VK_ARRAY</name>
<rename>VK_ARRAY</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>827</xloc>
<yloc>981</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/все 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${REG_ID}' AS recruitment_id,
'ALL' AS gender,
'false' AS registered,
'Organization' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND registered = 'false'
AND "all_M_W" = 'ALL'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>443</xloc>
<yloc>661</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/женщины 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${REG_ID}' AS recruitment_id,
'W' AS gender,
'false' AS registered,
'Organization' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND registered = 'false'
AND "all_M_W" = 'W'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>443</xloc>
<yloc>981</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (person_registry) РФ/мужчины 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(study) END AS study,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(work) END AS work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS study_percent,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(not_work) END AS not_work,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
THEN 0
ELSE COALESCE(
CASE
WHEN SUM(busyness) > 0
THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
ELSE 0
END,
0
)
END AS not_work_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE SUM(busyness) END AS total_people,
'${REG_ID}' AS recruitment_id,
'M' AS gender,
'false' AS registered,
'Organization' AS schema
FROM total_registered.busyness
WHERE recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
AND registered = 'false'
AND "all_M_W" = 'M'
AND recording_date = CURRENT_DATE;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
<variables_active>Y</variables_active>
<lazy_conversion_active>N</lazy_conversion_active>
<attributes/>
<cluster_schema/>
<remotesteps>
<input>
</input>
<output>
</output>
</remotesteps>
<GUI>
<xloc>443</xloc>
<yloc>821</yloc>
<draw>Y</draw>
</GUI>
</step>
<step_error_handling>
</step_error_handling>
<slave-step-copy-partition-distribution>