This commit is contained in:
Ruslan 2024-10-11 01:13:41 +03:00
parent 95f88087ef
commit 66b234139c
9 changed files with 1514 additions and 869 deletions

View file

@ -504,6 +504,57 @@
</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>
@ -557,15 +608,55 @@
</connection>
<order>
<hop>
<from>Table input (subpoena) РФ/весна</from>
<to>Insert / update (main_dashboard.recruitment_campaign) 2</to>
<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>Y</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>Y</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/весна</from>
<to>Sort rows 3 2</to>
<enabled>Y</enabled>
</hop>
</order>
<step>
<name>Insert / update (main_dashboard.recruitment_campaign)</name>
@ -666,8 +757,8 @@
</output>
</remotesteps>
<GUI>
<xloc>928</xloc>
<yloc>288</yloc>
<xloc>1184</xloc>
<yloc>128</yloc>
<draw>Y</draw>
</GUI>
</step>
@ -770,8 +861,346 @@
</output>
</remotesteps>
<GUI>
<xloc>928</xloc>
<yloc>352</yloc>
<xloc>1184</xloc>
<yloc>400</yloc>
<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>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>
@ -809,7 +1238,7 @@
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 = '1'
WHERE sr.type = '3'
AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
),
last_status_data AS (
@ -842,7 +1271,7 @@ t2 AS (
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
WHERE sub_stat_hist in ('5', '5.1')
),
t4 AS (
SELECT COUNT(DISTINCT recruit_id) AS new_recruits
@ -854,11 +1283,11 @@ SELECT
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,
-- t4.new_recruits,
0 AS postponement_have_right,
0 AS postponement_granted,
-- 0 AS postponement_granted,
0 AS postponement_have_right_percent,
0 AS postponement_granted_percent,
-- 0 AS postponement_granted_percent,
'Весна' AS spring_autumn,
'00' AS recruitment_id,
1 AS org
@ -880,8 +1309,8 @@ JOIN t4 ON true;</sql>
</output>
</remotesteps>
<GUI>
<xloc>512</xloc>
<yloc>352</yloc>
<xloc>496</xloc>
<yloc>400</yloc>
<draw>Y</draw>
</GUI>
</step>
@ -919,7 +1348,7 @@ JOIN t4 ON true;</sql>
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 = '1'
WHERE sr.type = '3' -- статус изменен на 3
AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
),
last_status_data AS (
@ -952,7 +1381,7 @@ t2 AS (
t3 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM last_status
WHERE sub_stat_hist = '5'
WHERE sub_stat_hist in ('5', '5.1') -- добавлен статус 5.1
),
t4 AS (
SELECT COUNT(DISTINCT recruit_id) AS new_recruits
@ -964,11 +1393,11 @@ SELECT
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,
-- t4.new_recruits,
0 AS postponement_have_right,
0 AS postponement_granted,
-- 0 AS postponement_granted,
0 AS postponement_have_right_percent,
0 AS postponement_granted_percent,
-- 0 AS postponement_granted_percent,
'Осень' AS spring_autumn,
'00' AS recruitment_id,
1 AS org
@ -990,8 +1419,8 @@ JOIN t4 ON true;</sql>
</output>
</remotesteps>
<GUI>
<xloc>512</xloc>
<yloc>288</yloc>
<xloc>496</xloc>
<yloc>128</yloc>
<draw>Y</draw>
</GUI>
</step>

View file

@ -550,7 +550,7 @@
</hop>
<hop>
<from>Table input (subpoena) Весна/РФ</from>
<to>Insert / update (recruitment_campaign.subpoenas) 2</to>
<to>Insert / update (recruitment_campaign.subpoenas) 3</to>
<enabled>Y</enabled>
</hop>
</order>
@ -663,6 +663,26 @@
<rename>spring_autumn</rename>
<update>N</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -673,13 +693,13 @@
</output>
</remotesteps>
<GUI>
<xloc>880</xloc>
<xloc>864</xloc>
<yloc>128</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Insert / update (recruitment_campaign.subpoenas) 2</name>
<name>Insert / update (recruitment_campaign.subpoenas) 3</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
@ -787,6 +807,26 @@
<rename>spring_autumn</rename>
<update>N</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -797,7 +837,7 @@
</output>
</remotesteps>
<GUI>
<xloc>880</xloc>
<xloc>864</xloc>
<yloc>240</yloc>
<draw>Y</draw>
</GUI>
@ -815,7 +855,7 @@
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -827,15 +867,16 @@
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 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
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 (
@ -852,12 +893,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -887,7 +928,7 @@ t8 AS ( -- количество повесток по которым введе
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -897,31 +938,45 @@ t10 AS (
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
)
SELECT
),
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,
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,
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,
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, --процент не врученных
'00' AS recruitment_id,
0 as rest,
0 as rest,
'Весна' as spring_autumn,
1 AS org
1 AS org
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
@ -932,7 +987,10 @@ 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;</sql>
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;
</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -965,7 +1023,7 @@ FULL OUTER JOIN t11 ON 1 = 1;</sql>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -977,15 +1035,16 @@ FULL OUTER JOIN t11 ON 1 = 1;</sql>
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 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' -- код про призывную комиссию
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 (
@ -1002,12 +1061,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1037,7 +1096,7 @@ t8 AS ( -- количество повесток по которым введе
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1047,31 +1106,45 @@ t10 AS (
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
)
SELECT
),
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,
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,
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,
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, --процент не врученных
'00' AS recruitment_id,
0 as rest,
0 as rest,
'Осень' as spring_autumn,
1 AS org
1 AS org
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
FULL OUTER JOIN t3 ON 1 = 1
@ -1082,7 +1155,10 @@ 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;</sql>
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;
</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -885,57 +885,84 @@
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
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,
-- Высшее образование (российское или иностранное)
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')
(
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'
(
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')
(
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,
-- Нет данных об образовании (российское или иностранное)
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
(
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
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
@ -946,13 +973,13 @@ final_counts AS (
FROM education_status
)
SELECT
'ALL' AS gender,
'ALL' AS gender,
'00' AS recruitment_id,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
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,
@ -993,55 +1020,86 @@ FROM final_counts, total_count;</sql>
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.gender = 'FEMALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
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,
-- Высшее образование: если есть высшее образование в российском или иностранном блоке
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')
-- Высшее образование (российское или иностранное)
(
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,
-- Среднее профессиональное образование: если есть код 10, но нет высшего
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'
-- Среднее профессиональное образование (если нет высшего)
(
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,
-- Общее образование: если нет высшего и среднего, но есть код 7 или 9
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')
-- Общее образование (если нет высшего и среднего)
(
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,
-- Нет данных об образовании
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
-- Нет данных об образовании (российское или иностранное)
(
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.gender = 'FEMALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
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
@ -1052,13 +1110,13 @@ final_counts AS (
FROM education_status
)
SELECT
'W' as gender,
'00' as recruitment_id,
'W' AS gender,
'00' AS recruitment_id,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
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,
@ -1099,55 +1157,86 @@ FROM final_counts, total_count;</sql>
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.gender = 'MALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
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,
-- Высшее образование: если есть высшее образование в российском или иностранном блоке
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')
-- Высшее образование (российское или иностранное)
(
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,
-- Среднее профессиональное образование: если есть код 10, но нет высшего
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'
-- Среднее профессиональное образование (если нет высшего)
(
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,
-- Общее образование: если нет высшего и среднего, но есть код 7 или 9
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')
-- Общее образование (если нет высшего и среднего)
(
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,
-- Нет данных об образовании
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
-- Нет данных об образовании (российское или иностранное)
(
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.gender = 'MALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
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
@ -1158,13 +1247,13 @@ final_counts AS (
FROM education_status
)
SELECT
'M' as gender,
'00' as recruitment_id,
'M' AS gender,
'00' AS recruitment_id,
higher,
average_prof,
only_general,
count_nodata,
total_count.total,
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,

View file

@ -683,29 +683,29 @@
</partitioning>
<connection>postgres.decision-document-service</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,
'0' 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,
'0' AS other_percent,
'00' AS recruitment_id
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, -- Процент по другим причинам
'00' AS recruitment_id
FROM public.recruit AS r
JOIN public.decision AS d
ON d.recruit_id = r.id
ON d.recruit_id = r.id
JOIN public.decision_type AS dt
ON dt.id = d.type_id
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 = '9'</sql>
AND r.current_recruitment IS NOT NULL
AND r.target_recruitment IS NOT NULL
AND dt.code IN ('9', '10');</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -563,7 +563,7 @@
</hop>
<hop>
<from>Table input (subpoena) РФ/не рег</from>
<to>Insert / update (total_registered.subpoenas) 2</to>
<to>Insert / update (total_registered.subpoenas) 3</to>
<enabled>Y</enabled>
</hop>
</order>
@ -696,6 +696,26 @@
<rename>introduced_measures_percent</rename>
<update>Y</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -712,7 +732,7 @@
</GUI>
</step>
<step>
<name>Insert / update (total_registered.subpoenas) 2</name>
<name>Insert / update (total_registered.subpoenas) 3</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
@ -840,6 +860,26 @@
<rename>introduced_measures_percent</rename>
<update>Y</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -868,7 +908,7 @@
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -889,6 +929,7 @@
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 (
@ -905,12 +946,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -940,7 +981,7 @@ t8 AS ( -- количество повесток по которым введе
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -950,29 +991,43 @@ t10 AS (
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
)
SELECT
),
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,
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,
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,
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,
'00' AS recruitment_id,
1 AS org,
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, --процент не врученных
'00' AS recruitment_id,
1 AS org,
0 AS mil_reg
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
@ -984,7 +1039,9 @@ 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;</sql>
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1017,7 +1074,7 @@ FULL OUTER JOIN t11 ON 1 = 1;</sql>
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -1038,6 +1095,7 @@ FULL OUTER JOIN t11 ON 1 = 1;</sql>
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 (
@ -1054,12 +1112,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1089,7 +1147,7 @@ t8 AS ( -- количество повесток по которым введе
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1099,29 +1157,43 @@ t10 AS (
t11 AS (
SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
FROM last_status
)
SELECT
),
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,
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,
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,
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,
'00' AS recruitment_id,
1 AS org,
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, --процент не врученных
'00' AS recruitment_id,
1 AS org,
1 AS mil_reg
FROM t1
FULL OUTER JOIN t2 ON 1 = 1
@ -1133,7 +1205,9 @@ 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;</sql>
FULL OUTER JOIN t11 ON 1 = 1
FULL OUTER JOIN t12 ON 1 = 1
FULL OUTER JOIN t13 ON 1 = 1;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -565,12 +565,12 @@
</hop>
<hop>
<from>Select values 4 3</from>
<to>Insert / update (recruitment_campaign.subpoenas)</to>
<to>Insert / update (recruitment_campaign.subpoenas) 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 4 3 2</from>
<to>Insert / update (recruitment_campaign.subpoenas) 2</to>
<to>Insert / update (recruitment_campaign.subpoenas) 3 2</to>
<enabled>Y</enabled>
</hop>
</order>
@ -677,7 +677,7 @@
</GUI>
</step>
<step>
<name>Insert / update (recruitment_campaign.subpoenas)</name>
<name>Insert / update (recruitment_campaign.subpoenas) 3</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
@ -779,6 +779,26 @@
<rename>spring_autumn</rename>
<update>N</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -795,7 +815,7 @@
</GUI>
</step>
<step>
<name>Insert / update (recruitment_campaign.subpoenas) 2</name>
<name>Insert / update (recruitment_campaign.subpoenas) 3 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
@ -897,6 +917,26 @@
<rename>spring_autumn</rename>
<update>N</update>
</value>
<value>
<name>count_not_delivery</name>
<rename>count_not_delivery</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good</name>
<rename>appear_date_is_good</rename>
<update>Y</update>
</value>
<value>
<name>not_delivery_percent</name>
<rename>not_delivery_percent</rename>
<update>Y</update>
</value>
<value>
<name>appear_date_is_good_percent</name>
<rename>appear_date_is_good_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -1049,7 +1089,7 @@
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -1061,21 +1101,22 @@
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 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
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')
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
COALESCE('${VK_ARRAY}', '') = ''
OR s.department_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
','
)::uuid[]
)
)
@ -1093,12 +1134,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1128,7 +1169,7 @@ t8 AS (
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1136,46 +1177,78 @@ t10 AS (
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT(DISTINCT rdi_id) AS count_restrictions
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
SELECT
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
COALESCE(t2.average_appeared, 0) AS average_appeared,
COALESCE(t3.count_appeared, 0) AS count_appeared,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t10.count_electron, 0) AS count_electron,
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS not_appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / t1.count_subpoena, 2) END AS not_ap_good_reason_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / t1.count_subpoena, 2) END AS ap_not_required_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / t1.count_subpoena, 2) END AS electron_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / t1.count_subpoena, 2) END AS paper_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / t1.count_subpoena, 2) END AS restrictions_applied_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / t1.count_subpoena, 2) END AS introduced_measures_percent,
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
1 AS org,
0 AS rest,
'Весна' AS spring_autumn,
1 AS org
'Осень' AS spring_autumn
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
WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0));</sql>
FULL OUTER JOIN t2 ON true
FULL OUTER JOIN t3 ON true
FULL OUTER JOIN t4 ON true
FULL OUTER JOIN t5 ON true
FULL OUTER JOIN t6 ON true
FULL OUTER JOIN t7 ON true
FULL OUTER JOIN t8 ON true
FULL OUTER JOIN t9 ON true
FULL OUTER JOIN t10 ON true
FULL OUTER JOIN t11 ON true
FULL OUTER JOIN t12 ON true
FULL OUTER JOIN t13 ON true
WHERE NOT (
COALESCE('${VK_ARRAY}', '') = ''
AND (
COALESCE(t1.count_subpoena, 0) > 0
OR COALESCE(t2.average_appeared, 0) > 0
OR COALESCE(t3.count_appeared, 0) > 0
OR COALESCE(t4.count_not_appeared, 0) > 0
OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
OR COALESCE(t6.count_ap_not_required, 0) > 0
OR COALESCE(t7.count_restrictions_applied, 0) > 0
OR COALESCE(t8.count_introduced_measures, 0) > 0
OR COALESCE(t9.count_paper, 0) > 0
OR COALESCE(t10.count_electron, 0) > 0
OR COALESCE(t11.count_restrictions, 0) > 0
OR COALESCE(t12.count_not_delivery, 0) > 0
OR COALESCE(t13.appear_date_is_good, 0) > 0
)
);</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1208,7 +1281,7 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -1220,21 +1293,22 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_
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 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
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')
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
COALESCE('${VK_ARRAY}', '') = ''
OR s.department_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
','
)::uuid[]
)
)
@ -1252,12 +1326,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1287,7 +1361,7 @@ t8 AS (
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1295,46 +1369,78 @@ t10 AS (
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT(DISTINCT rdi_id) AS count_restrictions
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
SELECT
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
COALESCE(t2.average_appeared, 0) AS average_appeared,
COALESCE(t3.count_appeared, 0) AS count_appeared,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t10.count_electron, 0) AS count_electron,
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS not_appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / t1.count_subpoena, 2) END AS not_ap_good_reason_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / t1.count_subpoena, 2) END AS ap_not_required_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / t1.count_subpoena, 2) END AS electron_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / t1.count_subpoena, 2) END AS paper_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / t1.count_subpoena, 2) END AS restrictions_applied_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / t1.count_subpoena, 2) END AS introduced_measures_percent,
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
1 AS org,
0 AS rest,
'Осень' AS spring_autumn,
1 AS org
'Осень' AS spring_autumn
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
WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0));</sql>
FULL OUTER JOIN t2 ON true
FULL OUTER JOIN t3 ON true
FULL OUTER JOIN t4 ON true
FULL OUTER JOIN t5 ON true
FULL OUTER JOIN t6 ON true
FULL OUTER JOIN t7 ON true
FULL OUTER JOIN t8 ON true
FULL OUTER JOIN t9 ON true
FULL OUTER JOIN t10 ON true
FULL OUTER JOIN t11 ON true
FULL OUTER JOIN t12 ON true
FULL OUTER JOIN t13 ON true
WHERE NOT (
COALESCE('${VK_ARRAY}', '') = ''
AND (
COALESCE(t1.count_subpoena, 0) > 0
OR COALESCE(t2.average_appeared, 0) > 0
OR COALESCE(t3.count_appeared, 0) > 0
OR COALESCE(t4.count_not_appeared, 0) > 0
OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
OR COALESCE(t6.count_ap_not_required, 0) > 0
OR COALESCE(t7.count_restrictions_applied, 0) > 0
OR COALESCE(t8.count_introduced_measures, 0) > 0
OR COALESCE(t9.count_paper, 0) > 0
OR COALESCE(t10.count_electron, 0) > 0
OR COALESCE(t11.count_restrictions, 0) > 0
OR COALESCE(t12.count_not_delivery, 0) > 0
OR COALESCE(t13.appear_date_is_good, 0) > 0
)
);</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -1236,8 +1236,8 @@
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
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1251,47 +1251,76 @@
education_status AS (
SELECT
ri.id,
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')
-- Высшее образование (российское или иностранное)
(
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'
-- Среднее профессиональное образование (если нет высшего)
(
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')
-- Общее образование (если нет высшего и среднего)
(
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,
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
-- Нет данных об образовании (российское или иностранное)
(
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
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1311,7 +1340,7 @@ final_counts AS (
FROM education_status
)
SELECT
'ALL' AS gender,
'ALL' AS gender,
'${REG_ID}' AS recruitment_id,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
@ -1337,7 +1366,7 @@ FROM final_counts, total_count;</sql>
</output>
</remotesteps>
<GUI>
<xloc>432</xloc>
<xloc>400</xloc>
<yloc>192</yloc>
<draw>Y</draw>
</GUI>
@ -1358,9 +1387,8 @@ FROM final_counts, total_count;</sql>
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.gender = 'FEMALE'
AND r.current_recruitment_id IS NOT NULL
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1374,48 +1402,76 @@ FROM final_counts, total_count;</sql>
education_status AS (
SELECT
ri.id,
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')
-- Высшее образование (российское или иностранное)
(
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'
-- Среднее профессиональное образование (если нет высшего)
(
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')
-- Общее образование (если нет высшего и среднего)
(
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,
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
-- Нет данных об образовании (российское или иностранное)
(
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.gender = 'FEMALE'
AND r.current_recruitment_id IS NOT NULL
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1435,7 +1491,7 @@ final_counts AS (
FROM education_status
)
SELECT
'W' AS gender,
'W' AS gender,
'${REG_ID}' AS recruitment_id,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
@ -1482,9 +1538,8 @@ FROM final_counts, total_count;</sql>
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.gender = 'MALE'
AND r.current_recruitment_id IS NOT NULL
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1498,48 +1553,76 @@ FROM final_counts, total_count;</sql>
education_status AS (
SELECT
ri.id,
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')
-- Высшее образование (российское или иностранное)
(
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'
-- Среднее профессиональное образование (если нет высшего)
(
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')
-- Общее образование (если нет высшего и среднего)
(
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,
(ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data
-- Нет данных об образовании (российское или иностранное)
(
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.gender = 'MALE'
AND r.current_recruitment_id IS NOT NULL
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
@ -1559,7 +1642,7 @@ final_counts AS (
FROM education_status
)
SELECT
'M' AS gender,
'M' AS gender,
'${REG_ID}' AS recruitment_id,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
@ -1585,7 +1668,7 @@ FROM final_counts, total_count;</sql>
</output>
</remotesteps>
<GUI>
<xloc>432</xloc>
<xloc>416</xloc>
<yloc>352</yloc>
<draw>Y</draw>
</GUI>

View file

@ -555,91 +555,20 @@
</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>Get variables 2 2</from>
<to>Select values 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Merge join 2</from>
<to>Get variables 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 2 2</from>
<to>Insert / update (total_registered.removed_registry) 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows 3</from>
<to>Merge join 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows 2 2</from>
<to>Merge join 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input (decision-document-service) регион</from>
<to>Sort rows 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input 2 (person_registry) регион</from>
<to>Sort rows 3</to>
<from>Table input (decision-document-service) регион 2</from>
<to>Get variables 2 2</to>
<enabled>Y</enabled>
</hop>
</order>
@ -802,40 +731,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>576</xloc>
<yloc>320</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Select values 2 2</name>
<type>SelectValues</type>
@ -899,91 +794,7 @@
</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>480</xloc>
<yloc>320</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Sort rows 3</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>464</xloc>
<yloc>432</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input (decision-document-service) регион</name>
<name>Table input (decision-document-service) регион 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -994,102 +805,43 @@
<schema_name/>
</partitioning>
<connection>postgres.decision-document-service</connection>
<sql>WITH t1 AS (
SELECT COUNT(*) AS age_limit
FROM public.decision d
INNER JOIN public.decision_type dt ON dt.id = d.type_id AND dt.code = '9'
WHERE d.extra_info ->> 'cause' = '"ageLimit"'
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
OR d.recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
)
),
t2 AS (
SELECT COUNT(*) AS death
FROM public.decision d
INNER JOIN public.decision_type dt ON dt.id = d.type_id AND dt.code = '9'
WHERE d.extra_info ->> 'cause' = '"notAlive"'
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
OR d.recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
)
)
SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t1.age_limit, 0) END AS age_limit,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t2.death, 0) END AS death,
1 AS org,
'${REG_ID}' AS recruitment_id,
0 AS deprivation_citizenship,
0 AS travel_abroad,
0 AS living_abroad,
0 AS other,
0 AS deprivation_citizen_percents,
0 AS age_limit_percent,
0 AS death_percent,
0 AS travel_abroad_percent,
0 AS living_abroad_percent,
0 AS other_percent
FROM t1
FULL OUTER JOIN t2 ON 1 = 1;</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>208</xloc>
<yloc>320</yloc>
<draw>Y</draw>
</GUI>
</step>
<step>
<name>Table input 2 (person_registry) регион</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>SELECT
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
ELSE COUNT(*)
END AS removed_registry,
1 AS org
FROM public.recruits r
<sql>WITH
total_info AS (
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, -- Количество по причине смерть
COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other,
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,
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,
'00' 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_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
OR r.target_recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
)
);</sql>
AND r.current_recruitment IS NOT NULL
AND r.target_recruitment IS NOT NULL
AND dt.code in ('9','10')
)
SELECT
'${REG_ID}' AS recruitment_id,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.removed_registry, 0) END AS removed_registry,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit, 0) END AS age_limit,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death, 0) END AS death,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other, 0) END AS other,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit_percent, 0) END AS age_limit_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death_percent, 0) END AS death_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other_percent, 0) END AS other_percent,
'0' AS deprivation_citizenship,
'0' AS travel_abroad,
'0' AS living_abroad,
'0' AS deprivation_citizen_percents,
'0' AS travel_abroad_percent,
'0' AS living_abroad_percent
FROM total_info</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1104,8 +856,8 @@ WHERE r.system_pgs_status = '1.3'
</output>
</remotesteps>
<GUI>
<xloc>208</xloc>
<yloc>432</yloc>
<xloc>400</xloc>
<yloc>320</yloc>
<draw>Y</draw>
</GUI>
</step>

View file

@ -1102,7 +1102,7 @@
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -1123,12 +1123,13 @@
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')
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
COALESCE('${VK_ARRAY}', '') = ''
OR s.department_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
','
)::uuid[]
)
)
@ -1146,12 +1147,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1181,7 +1182,7 @@ t8 AS (
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1189,60 +1190,77 @@ t10 AS (
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT(DISTINCT rdi_id) AS count_restrictions
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
SELECT
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
COALESCE(t2.average_appeared, 0) AS average_appeared,
COALESCE(t3.count_appeared, 0) AS count_appeared,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t10.count_electron, 0) AS count_electron,
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS not_appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS not_ap_good_reason_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS ap_not_required_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS electron_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS paper_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS restrictions_applied_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS introduced_measures_percent,
'${REG_ID}' AS recruitment_id,
1 AS org,
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
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
WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0));</sql>
FULL OUTER JOIN t2 ON true
FULL OUTER JOIN t3 ON true
FULL OUTER JOIN t4 ON true
FULL OUTER JOIN t5 ON true
FULL OUTER JOIN t6 ON true
FULL OUTER JOIN t7 ON true
FULL OUTER JOIN t8 ON true
FULL OUTER JOIN t9 ON true
FULL OUTER JOIN t10 ON true
FULL OUTER JOIN t11 ON true
FULL OUTER JOIN t12 ON true
FULL OUTER JOIN t13 ON true
WHERE NOT (
COALESCE('${VK_ARRAY}', '') = ''
AND (
COALESCE(t1.count_subpoena, 0) > 0
OR COALESCE(t2.average_appeared, 0) > 0
OR COALESCE(t3.count_appeared, 0) > 0
OR COALESCE(t4.count_not_appeared, 0) > 0
OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
OR COALESCE(t6.count_ap_not_required, 0) > 0
OR COALESCE(t7.count_restrictions_applied, 0) > 0
OR COALESCE(t8.count_introduced_measures, 0) > 0
OR COALESCE(t9.count_paper, 0) > 0
OR COALESCE(t10.count_electron, 0) > 0
OR COALESCE(t11.count_restrictions, 0) > 0
OR COALESCE(t12.count_not_delivery, 0) > 0
OR COALESCE(t13.appear_date_is_good, 0) > 0
)
);</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>
@ -1275,7 +1293,7 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_
</partitioning>
<connection>postgres.subpoena</connection>
<sql>WITH subpoena_data AS (
SELECT
SELECT
s.id AS subpoena_id,
s.status_id,
sr.type,
@ -1296,12 +1314,13 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_
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')
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
COALESCE('${VK_ARRAY}', '') = ''
OR s.department_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
','
)::uuid[]
)
)
@ -1319,12 +1338,12 @@ t1 AS (
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 = '4.1' OR sub_stat_hist = '4.2'
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 = '4.1' OR sub_stat_hist = '4.2'
WHERE sub_stat_hist IN ('4.1', '4.2', '4')
),
t4 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
@ -1354,7 +1373,7 @@ t8 AS (
t9 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_paper
FROM last_status
WHERE d_code = '14'
WHERE d_code != '7'
),
t10 AS (
SELECT COUNT(DISTINCT subpoena_id) AS count_electron
@ -1362,60 +1381,77 @@ t10 AS (
WHERE d_code = '7'
),
t11 AS (
SELECT COUNT(DISTINCT rdi_id) AS count_restrictions
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
SELECT
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
COALESCE(t2.average_appeared, 0) AS average_appeared,
COALESCE(t3.count_appeared, 0) AS count_appeared,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
COALESCE(t9.count_paper, 0) AS count_paper,
COALESCE(t10.count_electron, 0) AS count_electron,
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS not_appeared_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS not_ap_good_reason_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS ap_not_required_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS electron_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS paper_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS restrictions_applied_percent,
CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0
ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2)
END AS introduced_measures_percent,
'${REG_ID}' AS recruitment_id,
1 AS org,
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
'${REG_ID}' AS recruitment_id,
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
WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0));</sql>
FULL OUTER JOIN t2 ON true
FULL OUTER JOIN t3 ON true
FULL OUTER JOIN t4 ON true
FULL OUTER JOIN t5 ON true
FULL OUTER JOIN t6 ON true
FULL OUTER JOIN t7 ON true
FULL OUTER JOIN t8 ON true
FULL OUTER JOIN t9 ON true
FULL OUTER JOIN t10 ON true
FULL OUTER JOIN t11 ON true
FULL OUTER JOIN t12 ON true
FULL OUTER JOIN t13 ON true
WHERE NOT (
COALESCE('${VK_ARRAY}', '') = ''
AND (
COALESCE(t1.count_subpoena, 0) > 0
OR COALESCE(t2.average_appeared, 0) > 0
OR COALESCE(t3.count_appeared, 0) > 0
OR COALESCE(t4.count_not_appeared, 0) > 0
OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
OR COALESCE(t6.count_ap_not_required, 0) > 0
OR COALESCE(t7.count_restrictions_applied, 0) > 0
OR COALESCE(t8.count_introduced_measures, 0) > 0
OR COALESCE(t9.count_paper, 0) > 0
OR COALESCE(t10.count_electron, 0) > 0
OR COALESCE(t11.count_restrictions, 0) > 0
OR COALESCE(t12.count_not_delivery, 0) > 0
OR COALESCE(t13.appear_date_is_good, 0) > 0
)
);</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>