This commit is contained in:
Ruslan 2025-04-01 14:38:38 +03:00
parent 28e48951f6
commit 28aadf1a59
35 changed files with 10591 additions and 539 deletions

View file

@ -373,7 +373,7 @@
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c).hpl</filename>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
@ -389,7 +389,7 @@
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>320</xloc>
<yloc>1712</yloc>
<yloc>1632</yloc>
<attributes_hac/>
</action>
<action>
@ -399,7 +399,7 @@
<attributes/>
<parallel>N</parallel>
<xloc>0</xloc>
<yloc>1712</yloc>
<yloc>1632</yloc>
<attributes_hac/>
</action>
<action>
@ -413,7 +413,7 @@
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c).hpl</filename>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
@ -429,7 +429,7 @@
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>320</xloc>
<yloc>1776</yloc>
<yloc>1696</yloc>
<attributes_hac/>
</action>
<action>
@ -439,7 +439,7 @@
<attributes/>
<parallel>N</parallel>
<xloc>0</xloc>
<yloc>1776</yloc>
<yloc>1696</yloc>
<attributes_hac/>
</action>
<action>
@ -453,7 +453,7 @@
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c).hpl</filename>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
@ -469,7 +469,7 @@
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>320</xloc>
<yloc>1840</yloc>
<yloc>1760</yloc>
<attributes_hac/>
</action>
<action>
@ -479,7 +479,7 @@
<attributes/>
<parallel>N</parallel>
<xloc>0</xloc>
<yloc>1840</yloc>
<yloc>1760</yloc>
<attributes_hac/>
</action>
<action>
@ -493,7 +493,7 @@
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c).hpl</filename>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
@ -509,7 +509,7 @@
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>320</xloc>
<yloc>1904</yloc>
<yloc>1824</yloc>
<attributes_hac/>
</action>
<action>
@ -519,7 +519,7 @@
<attributes/>
<parallel>N</parallel>
<xloc>0</xloc>
<yloc>1904</yloc>
<yloc>1824</yloc>
<attributes_hac/>
</action>
<action>
@ -719,7 +719,7 @@ WHERE recording_date = current_date
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>624</xloc>
<yloc>1712</yloc>
<yloc>1632</yloc>
<attributes_hac/>
</action>
<action>
@ -737,7 +737,7 @@ WHERE recording_date = current_date
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>624</xloc>
<yloc>1776</yloc>
<yloc>1696</yloc>
<attributes_hac/>
</action>
<action>
@ -754,7 +754,7 @@ WHERE recording_date = current_date
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>624</xloc>
<yloc>1840</yloc>
<yloc>1760</yloc>
<attributes_hac/>
</action>
<action>
@ -772,7 +772,7 @@ WHERE recording_date = current_date
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>624</xloc>
<yloc>1904</yloc>
<yloc>1824</yloc>
<attributes_hac/>
</action>
<action>
@ -897,27 +897,34 @@ AND postponement_granted IS NULL;</sql>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf</filename>
<logext/>
<logfile/>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
<value/>
</parameter>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
<value/>
</parameter>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
<value/>
</parameter>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
<value/>
</parameter>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
<value/>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
@ -1456,7 +1463,7 @@ WHERE recording_date = current_date
<attributes_hac/>
</action>
<action>
<name>Success total_registered.child_minor(m_c)</name>
<name>Success total_registered.child_minor(m_c)_pll</name>
<description/>
<type>SUCCESS</type>
<attributes/>
@ -1465,6 +1472,293 @@ WHERE recording_date = current_date
<yloc>1712</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL total_registered.age 2</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM total_registered.age
WHERE recording_date = current_date
AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
</sql>
<sqlfromfile>N</sqlfromfile>
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>1712</xloc>
<yloc>1792</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age(m_c).hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2032</xloc>
<yloc>1792</yloc>
<attributes_hac/>
</action>
<action>
<name>Success total_registered.age(m_c)_pll</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2592</xloc>
<yloc>1792</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL total_registered.marital_status 2</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM total_registered.marital_status
WHERE recording_date = current_date
AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
</sql>
<sqlfromfile>N</sqlfromfile>
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>1712</xloc>
<yloc>1872</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status(m_c).hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2032</xloc>
<yloc>1872</yloc>
<attributes_hac/>
</action>
<action>
<name>Success total_registered.marital_status(m_c)_pll</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2592</xloc>
<yloc>1872</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL total_registered.education_level 2</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM total_registered.education_level
WHERE recording_date = current_date
AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')</sql>
<sqlfromfile>N</sqlfromfile>
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>1712</xloc>
<yloc>1952</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level(m_c).hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2032</xloc>
<yloc>1952</yloc>
<attributes_hac/>
</action>
<action>
<name>Success total_registered.education_level(m_c)_pll</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2592</xloc>
<yloc>1952</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL total_registered.busyness 2</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM total_registered.busyness
WHERE recording_date = current_date
AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
</sql>
<sqlfromfile>N</sqlfromfile>
<useVariableSubstitution>N</useVariableSubstitution>
<parallel>N</parallel>
<xloc>1712</xloc>
<yloc>2032</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness(m_c).hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2032</xloc>
<yloc>2032</yloc>
<attributes_hac/>
</action>
<action>
<name>Success total_registered.busyness(m_c)_pll</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2592</xloc>
<yloc>2032</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
@ -1652,7 +1946,7 @@ WHERE recording_date = current_date
<hop>
<from>array_recruitments.hpl</from>
<to>SQL total_registered.age</to>
<enabled>Y</enabled>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
@ -1666,7 +1960,7 @@ WHERE recording_date = current_date
<hop>
<from>array_recruitments.hpl</from>
<to>SQL total_registered.marital_status</to>
<enabled>Y</enabled>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
@ -1680,7 +1974,7 @@ WHERE recording_date = current_date
<hop>
<from>array_recruitments.hpl</from>
<to>SQL total_registered.education_level</to>
<enabled>Y</enabled>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
@ -1694,7 +1988,7 @@ WHERE recording_date = current_date
<hop>
<from>array_recruitments.hpl</from>
<to>SQL total_registered.busyness</to>
<enabled>Y</enabled>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
@ -1722,7 +2016,7 @@ WHERE recording_date = current_date
<hop>
<from>Start</from>
<to>main_dashboard.recruitment_campaign(m_c).hwf</to>
<enabled>N</enabled>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
@ -1750,7 +2044,7 @@ WHERE recording_date = current_date
<hop>
<from>Start</from>
<to>recruitment_campaign.subpoenas(m_c).hwf</to>
<enabled>N</enabled>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
@ -1938,7 +2232,91 @@ WHERE recording_date = current_date
</hop>
<hop>
<from>total_registered.child_minor(m_c).hwf</from>
<to>Success total_registered.child_minor(m_c)</to>
<to>Success total_registered.child_minor(m_c)_pll</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL total_registered.age 2</from>
<to>total_registered.age(m_c).hwf</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.age(m_c).hwf</from>
<to>Success total_registered.age(m_c)_pll</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>SQL total_registered.age 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>SQL total_registered.marital_status 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL total_registered.marital_status 2</from>
<to>total_registered.marital_status(m_c).hwf</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.marital_status(m_c).hwf</from>
<to>Success total_registered.marital_status(m_c)_pll</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>SQL total_registered.education_level 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL total_registered.education_level 2</from>
<to>total_registered.education_level(m_c).hwf</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.education_level(m_c).hwf</from>
<to>Success total_registered.education_level(m_c)_pll</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>SQL total_registered.busyness 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL total_registered.busyness 2</from>
<to>total_registered.busyness(m_c).hwf</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.busyness(m_c).hwf</from>
<to>Success total_registered.busyness(m_c)_pll</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>

View file

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>array_season_recruitments_all_parallel</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/03/20 10:44:35.298</created_date>
<modified_user>-</modified_user>
<modified_date>2025/03/20 10:44:35.298</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input остальные</from>
<to>Copy rows to result 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result 2</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>832</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Table input остальные</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>WITH ids AS (
SELECT idm_id,
NTILE(5) OVER (ORDER BY idm_id) AS part -- Разбиваем на 5 частей
FROM ervu_dashboard.recruitment
WHERE schema IN ('Department', 'Organization', 'Region')
AND idm_id NOT IN (
'55158cc6-1342-4701-ab2b-855a6389906d'::UUID, -- Военный комиссариат Провиденского и Чукотского районов Чукотского автономного округа
'd35584cf-8405-42ea-9944-25bfe5725347', -- Военный комиссариат Охотского Аяно-Майского и Тугуро-Чумиканского районов Хабаровского края
'b960d9a3-97c5-42ff-9fa7-1843114392a0', -- Военный комиссариат Тигильского Карагинского Олюторского и Пенжинского районов Камчатского края
'ab335d7b-7966-470d-89b3-72cee950839d', -- Военный комиссариат Оймяконского и Момского улусов Республики Саха (Якутия)
'1dea48be-40fb-42bd-9df8-14d0cfd3fd12', -- Военный комиссариат Нижнеколымского и Среднеколымского улусов Республики Саха (Якутия)
'018b8e04-2714-402a-961b-39877b9ee698', -- Военный комиссариат Верхоянского и Эвено-Бытантайского улусов Республики Саха (Якутия)
'18e818af-ef45-49ee-aea2-d0f3516ddf1d', -- Военный комиссариат Верхнеколымского улуса Республики Саха (Якутия)
'b2ec295c-47a4-4be9-a6f8-827096f9857d', -- Военный комиссариат Булунского и Жиганского улусов Республики Саха (Якутия)
'eaffdb79-767f-405c-a1b1-b48bdc63add8', -- Военный комиссариат Усть-Янского Аллаиховского и Абыйского улусов Республики Саха (Якутия)
'354f7fbd-467f-4f41-aaad-f0e2e139527e', -- Военный комиссариат города Воркута Республики Коми
'ce2b0297-d1e8-422a-8367-b7e3a5cc7a40', -- Военный комиссариат города Инта Республики Коми
'c023af4a-ad27-4539-a1f9-7a3251634fdb', -- Военный комиссариат города Печора и Печорского района Республики Коми
'0e44335f-02db-43ac-b713-f09532e675a3', -- Военный комиссариат городов Ухта Вуктыл и Сосногорск Вуктыльского и Сосногорского районов Республики Коми
'e55859e6-9d34-47b7-a969-efc8ceea708b', -- Военный комиссариат Ижемского района Республики Коми
'b9d1002f-d2a7-4d2f-910b-637b2cf332dd', -- Военный комиссариат Княжпогостского и Усть-Вымского районов Республики Коми
'ef2da2e5-0cc1-479c-b2de-c334c95b5514', -- Военный комиссариат Сысольского Койгородского и Прилузского районов Республики Коми
'53851a38-fc95-400b-9ff7-00b4dcad2918', -- Военный комиссариат города Сыктывкар Сыктывдинского и Корткеросского районов Республики Коми
'2dc1de3a-712a-4376-8baf-7833a43f6678', -- Военный комиссариат Троицко-Печорского района Республики Коми
'a6db3dba-65e3-4ad9-a76e-a846efec2a2d', -- Военный комиссариат Удорского района Республики Коми
'630ba6cd-c979-4d35-b128-f6e2527949ef', -- Военный комиссариат города Усинск и Усинского района Республики Коми
'231361d3-3d34-4409-8a30-20c4b013d62c', -- Военный комиссариат Усть-Куломского района Республики Коми
'6466af82-e8be-416d-88c9-cef02f99fef0', -- Военный комиссариат Усть-Цилемского района Республики Коми
'83c89e3d-aa69-43bc-857c-59ce405b9e1e', -- Военный комиссариат Туруханского района и города Игарка Красноярского края
'ec2c03cd-9c13-4980-9f6d-ba4a93a9a411', -- Военный комиссариат города Лесосибирск и Мотыгинского района Красноярского края
'd386bf1f-42bd-436f-8b14-288b2cbe1046', -- какой то Северо-Енисейский безымянный военкомат
'61b5758c-c72b-426e-a96f-e146d89197c2', -- Военный комиссариат города Норильск и Таймырского Долгано-Ненецкого района Красноярского края
'9f1a1e68-2fd2-478c-b6ba-b04cc6b752b3', -- Военный комиссариат Эвенкийского района Красноярского края
'7cb704d4-b600-4ce9-bddf-723e1b024f98', -- Военный комиссариат Гайнского района Пермского края
'be515915-26e8-41c8-af21-3b53d991d632', -- Военный комиссариат Кочевского и Косинского районов Пермского края
'28061db5-22ef-46f6-a2af-043c47288885', -- Военный комиссариат Ненецкого автономного округа
'ce08e909-5a14-480f-b931-bff172872ac6', -- ВК городских округов Курильский и Северо-Курильский Сахалинской области
'f578c2c0-72fe-4f3b-bcf7-659bda20f511', -- Военный комиссариат города Губкинский Пуровского и Красноселькупского районов Ямало-Ненецкого автономного округа
'5a0c4a0c-1d00-4528-9dcc-73c8d6dd52b9', -- Военный комиссариат города Лабытнанги и Шурышкарского района Ямало-Ненецкого автономного округа
'50af0e45-872b-48e8-bf74-c13b2162e3ce', -- Военный комиссариат городов Ноябрьск и Муравленко Ямало-Ненецкого автономного округа
'a8852d04-516d-4ea4-9979-5eb149e9ac7e', -- Военный комиссариат города Новый Уренгой Ямало-Ненецкого автономного округа
'9464d4df-9402-4eb2-abb2-c68b079ad5cf', -- Военный комиссариат города Салехард и Приуральского района Ямало-Ненецкого автономного округа
'b778245a-0257-4d93-a51c-fa7005e4a480', -- Военный комиссариат города Надым и Надымского района Ямало-Ненецкого автономного округа
'2e18cd11-bbca-406d-a2b8-0a89cbb2046e', -- Военный комиссариат Тазовского района Ямало-Ненецкого автономного округа
'a4126a2d-3412-47cd-aa90-caa62e202c7f' -- Военный комиссариат Ямальского района Ямало-Ненецкого автономного округа
)
),
grouped AS (
SELECT
array_agg(idm_id) FILTER (WHERE part = 1) AS part_1,
array_agg(idm_id) FILTER (WHERE part = 2) AS part_2,
array_agg(idm_id) FILTER (WHERE part = 3) AS part_3,
array_agg(idm_id) FILTER (WHERE part = 4) AS part_4,
array_agg(idm_id) FILTER (WHERE part = 5) AS part_5
FROM ids
),
split_parts AS (
SELECT
gs.row_num,
(SELECT array_agg(val) FROM unnest(part_1) WITH ORDINALITY AS t(val, ord)
WHERE ord > array_length(part_1, 1) * (gs.row_num - 1) / 2
AND ord &lt;= array_length(part_1, 1) * gs.row_num / 2) AS PART_RECRUITMENT_1,
(SELECT array_agg(val) FROM unnest(part_2) WITH ORDINALITY AS t(val, ord)
WHERE ord > array_length(part_2, 1) * (gs.row_num - 1) / 2
AND ord &lt;= array_length(part_2, 1) * gs.row_num / 2) AS PART_RECRUITMENT_2,
(SELECT array_agg(val) FROM unnest(part_3) WITH ORDINALITY AS t(val, ord)
WHERE ord > array_length(part_3, 1) * (gs.row_num - 1) / 2
AND ord &lt;= array_length(part_3, 1) * gs.row_num / 2) AS PART_RECRUITMENT_3,
(SELECT array_agg(val) FROM unnest(part_4) WITH ORDINALITY AS t(val, ord)
WHERE ord > array_length(part_4, 1) * (gs.row_num - 1) / 2
AND ord &lt;= array_length(part_4, 1) * gs.row_num / 2) AS PART_RECRUITMENT_4,
(SELECT array_agg(val) FROM unnest(part_5) WITH ORDINALITY AS t(val, ord)
WHERE ord > array_length(part_5, 1) * (gs.row_num - 1) / 2
AND ord &lt;= array_length(part_5, 1) * gs.row_num / 2) AS PART_RECRUITMENT_5
FROM grouped
CROSS JOIN generate_series(1, 2) gs(row_num)
)
SELECT
PART_RECRUITMENT_1,
PART_RECRUITMENT_2,
PART_RECRUITMENT_3,
PART_RECRUITMENT_4,
PART_RECRUITMENT_5
FROM split_parts;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>512</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>total_registered.age(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/04/01 09:55:15.265</created_date>
<modified_user>-</modified_user>
<modified_date>2025/04/01 09:55:15.265</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>Y</parallel>
<xloc>544</xloc>
<yloc>400</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age_pr1(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr1(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>992</xloc>
<yloc>240</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age_pr2(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr2(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>992</xloc>
<yloc>320</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age_pr3(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr3(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>992</xloc>
<yloc>400</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age_pr4(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr4(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>992</xloc>
<yloc>480</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.age_pr5(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr5(m_c).hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
<value/>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>992</xloc>
<yloc>560</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>240</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>320</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 3</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>400</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 4</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>480</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 5</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>560</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>total_registered.age_pr1(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.age_pr2(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.age_pr3(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.age_pr4(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.age_pr5(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.age_pr1(m_c).hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.age_pr2(m_c).hpl</from>
<to>Success 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.age_pr3(m_c).hpl</from>
<to>Success 3</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.age_pr4(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.age_pr5(m_c).hpl</from>
<to>Success 5</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.age_pr1(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регион/мужчины</from>
<to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
total_count AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
total_count_all AS (
SELECT
rd.recruitment_id,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.registered, rd.convicts
),
age_counts AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
age_counts_all AS (
SELECT
r.recruitment_id,
r.registered,
r.convicts,
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data r
GROUP BY r.recruitment_id, r.registered, r.convicts
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
tc.recruitment_id,
(CASE
WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W'
END)::text AS gender,
tc.convicts,
tc.registered::text
FROM total_count tc
LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender
AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id,
'ALL' AS gender,
tca.convicts,
tca.registered::text
FROM total_count_all tca
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.age_pr2(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регион/мужчины</from>
<to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
total_count AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
total_count_all AS (
SELECT
rd.recruitment_id,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.registered, rd.convicts
),
age_counts AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
age_counts_all AS (
SELECT
r.recruitment_id,
r.registered,
r.convicts,
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data r
GROUP BY r.recruitment_id, r.registered, r.convicts
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
tc.recruitment_id,
(CASE
WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W'
END)::text AS gender,
tc.convicts,
tc.registered::text
FROM total_count tc
LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender
AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id,
'ALL' AS gender,
tca.convicts,
tca.registered::text
FROM total_count_all tca
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.age_pr3(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регион/мужчины</from>
<to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
total_count AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
total_count_all AS (
SELECT
rd.recruitment_id,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.registered, rd.convicts
),
age_counts AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
age_counts_all AS (
SELECT
r.recruitment_id,
r.registered,
r.convicts,
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data r
GROUP BY r.recruitment_id, r.registered, r.convicts
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
tc.recruitment_id,
(CASE
WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W'
END)::text AS gender,
tc.convicts,
tc.registered::text
FROM total_count tc
LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender
AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id,
'ALL' AS gender,
tca.convicts,
tca.registered::text
FROM total_count_all tca
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.age_pr4(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регион/мужчины</from>
<to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
total_count AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
total_count_all AS (
SELECT
rd.recruitment_id,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.registered, rd.convicts
),
age_counts AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
age_counts_all AS (
SELECT
r.recruitment_id,
r.registered,
r.convicts,
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data r
GROUP BY r.recruitment_id, r.registered, r.convicts
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
tc.recruitment_id,
(CASE
WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W'
END)::text AS gender,
tc.convicts,
tc.registered::text
FROM total_count tc
LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender
AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id,
'ALL' AS gender,
tca.convicts,
tca.registered::text
FROM total_count_all tca
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.age_pr5(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регион/мужчины</from>
<to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'false' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered)
and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
UNION ALL
SELECT
r.id,
ri.recruit_id AS recruit_id,
r.current_recruitment_id AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
'ALL' AS convicts,
'true' AS registered,
r.birth_date
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
--join public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered)
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
total_count AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
total_count_all AS (
SELECT
rd.recruitment_id,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.registered, rd.convicts
),
age_counts AS (
SELECT
rd.recruitment_id,
rd.gender,
rd.registered,
rd.convicts,
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
),
age_counts_all AS (
SELECT
r.recruitment_id,
r.registered,
r.convicts,
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data r
GROUP BY r.recruitment_id, r.registered, r.convicts
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
tc.recruitment_id,
(CASE
WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W'
END)::text AS gender,
tc.convicts,
tc.registered::text
FROM total_count tc
LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender
AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id,
'ALL' AS gender,
tca.convicts,
tca.registered::text
FROM total_count_all tca
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>720</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>total_registered.busyness(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/04/01 10:45:43.074</created_date>
<modified_user>-</modified_user>
<modified_date>2025/04/01 10:45:43.074</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>Y</parallel>
<xloc>704</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness_pr1(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr1(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>272</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness_pr2(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr2(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness_pr3(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr3(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness_pr4(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr4(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>512</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.busyness_pr5(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr5(m_c).hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
<value/>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>592</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>272</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 3</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 4</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>512</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 5</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>592</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>total_registered.busyness_pr1(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.busyness_pr2(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.busyness_pr3(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.busyness_pr4(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.busyness_pr5(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.busyness_pr1(m_c).hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.busyness_pr2(m_c).hpl</from>
<to>Success 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.busyness_pr3(m_c).hpl</from>
<to>Success 3</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.busyness_pr4(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.busyness_pr5(m_c).hpl</from>
<to>Success 5</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.busyness_pr1(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 3 2 2</from>
<to>Select values 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Get variables 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 3 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1568</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.busyness) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>busyness</table>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>no_info</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>no_info_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1968</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Select values 3 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1712</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
status_info AS (
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered)
AND rh.id in (SELECT recruit_history_id FROM notregistered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
),
summary AS (
SELECT
si.recruitment_id,
CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
si.convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
UNION ALL
SELECT
si.recruitment_id,
CASE
WHEN si.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
'ALL' AS convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.registered
),
summary_all AS (
SELECT
recruitment_id,
registered,
convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered, convicts
UNION ALL
SELECT
recruitment_id,
registered,
'ALL' AS convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered
)
SELECT
current_date AS recording_date,
s.convicts,
s.gender,
s.registered,
s.recruitment_id,
s.study,
s.work,
s.no_info,
s.total_people,
-- Процент людей, которые учатся
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
FROM summary s
UNION ALL
SELECT
current_date AS recording_date,
sa.convicts,
sa.gender,
sa.registered,
sa.recruitment_id,
sa.study,
sa.work,
sa.no_info,
sa.total_people,
-- Процент людей, которые учатся
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
FROM summary_all sa</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1328</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.busyness_pr2(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 3 2 2</from>
<to>Select values 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Get variables 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 3 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1568</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.busyness) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>busyness</table>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>no_info</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>no_info_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1968</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Select values 3 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1712</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
status_info AS (
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered)
AND rh.id in (SELECT recruit_history_id FROM notregistered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
),
summary AS (
SELECT
si.recruitment_id,
CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
si.convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
UNION ALL
SELECT
si.recruitment_id,
CASE
WHEN si.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
'ALL' AS convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.registered
),
summary_all AS (
SELECT
recruitment_id,
registered,
convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered, convicts
UNION ALL
SELECT
recruitment_id,
registered,
'ALL' AS convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered
)
SELECT
current_date AS recording_date,
s.convicts,
s.gender,
s.registered,
s.recruitment_id,
s.study,
s.work,
s.no_info,
s.total_people,
-- Процент людей, которые учатся
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
FROM summary s
UNION ALL
SELECT
current_date AS recording_date,
sa.convicts,
sa.gender,
sa.registered,
sa.recruitment_id,
sa.study,
sa.work,
sa.no_info,
sa.total_people,
-- Процент людей, которые учатся
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
FROM summary_all sa</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1328</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.busyness_pr3(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 3 2 2</from>
<to>Select values 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Get variables 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 3 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1568</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.busyness) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>busyness</table>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>no_info</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>no_info_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1968</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Select values 3 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1712</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
status_info AS (
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered)
AND rh.id in (SELECT recruit_history_id FROM notregistered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
),
summary AS (
SELECT
si.recruitment_id,
CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
si.convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
UNION ALL
SELECT
si.recruitment_id,
CASE
WHEN si.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
'ALL' AS convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.registered
),
summary_all AS (
SELECT
recruitment_id,
registered,
convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered, convicts
UNION ALL
SELECT
recruitment_id,
registered,
'ALL' AS convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered
)
SELECT
current_date AS recording_date,
s.convicts,
s.gender,
s.registered,
s.recruitment_id,
s.study,
s.work,
s.no_info,
s.total_people,
-- Процент людей, которые учатся
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
FROM summary s
UNION ALL
SELECT
current_date AS recording_date,
sa.convicts,
sa.gender,
sa.registered,
sa.recruitment_id,
sa.study,
sa.work,
sa.no_info,
sa.total_people,
-- Процент людей, которые учатся
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
FROM summary_all sa</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1328</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.busyness_pr4(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 3 2 2</from>
<to>Select values 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Get variables 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 3 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1568</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.busyness) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>busyness</table>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>no_info</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>no_info_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1968</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Select values 3 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1712</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
status_info AS (
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered)
AND rh.id in (SELECT recruit_history_id FROM notregistered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
),
summary AS (
SELECT
si.recruitment_id,
CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
si.convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
UNION ALL
SELECT
si.recruitment_id,
CASE
WHEN si.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
'ALL' AS convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.registered
),
summary_all AS (
SELECT
recruitment_id,
registered,
convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered, convicts
UNION ALL
SELECT
recruitment_id,
registered,
'ALL' AS convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered
)
SELECT
current_date AS recording_date,
s.convicts,
s.gender,
s.registered,
s.recruitment_id,
s.study,
s.work,
s.no_info,
s.total_people,
-- Процент людей, которые учатся
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
FROM summary s
UNION ALL
SELECT
current_date AS recording_date,
sa.convicts,
sa.gender,
sa.registered,
sa.recruitment_id,
sa.study,
sa.work,
sa.no_info,
sa.total_people,
-- Процент людей, которые учатся
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
FROM summary_all sa</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1328</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,691 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.busyness_pr5(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 3 2 2</from>
<to>Select values 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Get variables 3 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.busyness) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 3 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1568</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.busyness) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>busyness</table>
<value>
<name>study</name>
<rename>study</rename>
<update>Y</update>
</value>
<value>
<name>work</name>
<rename>work</rename>
<update>Y</update>
</value>
<value>
<name>study_percent</name>
<rename>study_percent</rename>
<update>Y</update>
</value>
<value>
<name>work_percent</name>
<rename>work_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>not_work</name>
<rename>no_info</rename>
<update>Y</update>
</value>
<value>
<name>not_work_percent</name>
<rename>no_info_percent</rename>
<update>Y</update>
</value>
<value>
<name>busyness</name>
<rename>total_people</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1968</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Select values 3 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1712</xloc>
<yloc>624</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
/*
last_status_r as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
status_info AS (
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'true' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
/*
r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
r.id AS recruit_id,
-- Проверка на обучение в вузе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
WHERE vuz->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_vuz,
-- Проверка на обучение в колледже (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
WHERE kolledzh->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_college,
-- Проверка на обучение в школе (есть информация и обучается)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
WHERE school->>'kodStatus' IN (
'1', -- Обучается
'2', -- Восстановлен
'4' -- Отпуск
)
)
ELSE false
END
) AS is_studying_in_school,
-- Проверка на работу (есть информация и работает)
(
CASE
WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
WHERE trud->>'prAktMestRab' = '1'
)
ELSE false
END
) AS is_working,
-- Проверка на самозанятого (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
ELSE false
END
) AS is_samozanyat,
-- Проверка на ИП (есть информация)
(
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
ELSE false
END
) AS is_ip,
-- Проверка на КФХ (есть информация)
(
CASE
WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
ELSE false
END
) AS is_kfh,
-- Проверка на отсутствие сведений о вузе
info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
-- Проверка на отсутствие сведений о колледже
info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
-- Проверка на отсутствие сведений о школе
info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
-- Проверка на отсутствие сведений о работе
info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
-- Проверка на отсутствие сведений о самозанятых
info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
-- Проверка на отсутствие сведений об ip
info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
-- Проверка на отсутствие сведений о KFH
info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
'false' AS registered
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
WHERE
r.id in (SELECT recruit_id FROM notregistered)
AND rh.id in (SELECT recruit_history_id FROM notregistered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
),
summary AS (
SELECT
si.recruitment_id,
CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
si.convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
UNION ALL
SELECT
si.recruitment_id,
CASE
WHEN si.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
'ALL' AS convicts,
si.registered,
-- Количество людей, которые учатся
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
-- Количество людей, которые работают (но не учатся)
COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
THEN 1 END) AS work,
/*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
*/
-- Количество людей, для которых нет информации
COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
is_working OR is_samozanyat OR is_ip OR is_kfh)
THEN 1 END) AS no_info,
-- Общее количество людей
COUNT(si.recruit_id) AS total_people
FROM status_info si
GROUP BY si.recruitment_id, si.gender, si.registered
),
summary_all AS (
SELECT
recruitment_id,
registered,
convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered, convicts
UNION ALL
SELECT
recruitment_id,
registered,
'ALL' AS convicts,
'ALL' AS gender,
SUM(study) AS study,
SUM(work) AS work,
SUM(no_info) AS no_info,
SUM(total_people) AS total_people
FROM summary
GROUP BY recruitment_id, registered
)
SELECT
current_date AS recording_date,
s.convicts,
s.gender,
s.registered,
s.recruitment_id,
s.study,
s.work,
s.no_info,
s.total_people,
-- Процент людей, которые учатся
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
FROM summary s
UNION ALL
SELECT
current_date AS recording_date,
sa.convicts,
sa.gender,
sa.registered,
sa.recruitment_id,
sa.study,
sa.work,
sa.no_info,
sa.total_people,
-- Процент людей, которые учатся
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
-- Процент людей, которые работают
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
-- Процент людей, для которых отсутствуют сведения
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
FROM summary_all sa</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1328</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 2</from>
<to>Select values 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Get variables 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 2</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.child_minor) 3</name>
<type>InsertUpdate</type>
@ -189,60 +141,6 @@
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1248</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Table input (person_registry)регион/все</name>
<type>TableInput</type>
@ -259,7 +157,7 @@
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,

View file

@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 2</from>
<to>Select values 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Get variables 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 2</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.child_minor) 3</name>
<type>InsertUpdate</type>
@ -189,60 +141,6 @@
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1248</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Table input (person_registry)регион/все</name>
<type>TableInput</type>
@ -259,7 +157,7 @@
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,

View file

@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 2</from>
<to>Select values 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Get variables 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 2</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.child_minor) 3</name>
<type>InsertUpdate</type>
@ -189,60 +141,6 @@
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1248</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Table input (person_registry)регион/все</name>
<type>TableInput</type>
@ -259,7 +157,7 @@
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,

View file

@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 2</from>
<to>Select values 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Get variables 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 2</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.child_minor) 3</name>
<type>InsertUpdate</type>
@ -189,60 +141,6 @@
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1248</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Table input (person_registry)регион/все</name>
<type>TableInput</type>
@ -259,7 +157,7 @@
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,

View file

@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 2</from>
<to>Select values 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Get variables 4 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 2</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry)регион/все</from>
<to>Insert / update (total_registered.child_minor) 3</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (total_registered.child_minor) 3</name>
<type>InsertUpdate</type>
@ -189,60 +141,6 @@
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1248</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Table input (person_registry)регион/все</name>
<type>TableInput</type>
@ -259,7 +157,7 @@
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,

View file

@ -0,0 +1,309 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>total_registered.education_level(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/04/01 10:26:22.205</created_date>
<modified_user>-</modified_user>
<modified_date>2025/04/01 10:26:22.205</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>Y</parallel>
<xloc>624</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level_pr1(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr1(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>272</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level_pr2(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr2(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level_pr3(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr3(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level_pr4(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr4(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>512</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.education_level_pr5(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr5(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1088</xloc>
<yloc>592</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>272</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 3</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>432</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 4</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>512</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 5</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1360</xloc>
<yloc>592</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>total_registered.education_level_pr1(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.education_level_pr1(m_c).hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.education_level_pr2(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.education_level_pr2(m_c).hpl</from>
<to>Success 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.education_level_pr3(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.education_level_pr3(m_c).hpl</from>
<to>Success 3</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.education_level_pr4(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.education_level_pr4(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.education_level_pr5(m_c).hpl</from>
<to>Success 5</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.education_level_pr5(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.education_level_pr1(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.education_level) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.education_level) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>education_level</table>
<value>
<name>higher</name>
<rename>higher</rename>
<update>Y</update>
</value>
<value>
<name>average</name>
<rename>average_prof</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>only_general</name>
<rename>only_general</rename>
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>count_nodata</rename>
<update>Y</update>
</value>
<value>
<name>higher_percent</name>
<rename>higher_percentage</rename>
<update>Y</update>
</value>
<value>
<name>average_percent</name>
<rename>average_prof_percentage</rename>
<update>Y</update>
</value>
<value>
<name>only_general_percent</name>
<rename>only_general_percentage</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>count_nodata_percentage</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>education_level</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1728</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id
),
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
education_status AS (
SELECT
ri.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
join public.recruits_history rh on rh.recruit_id=r.id
WHERE
r.gender IN ('MALE', 'FEMALE')
AND r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
),
final_counts AS (
SELECT
es.gender,
es.recruitment_id,
es.convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender, es.convicts
UNION ALL
SELECT
es.gender,
es.recruitment_id,
'ALL' AS convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender
),
final_counts_all AS (
SELECT
'ALL' AS gender,
recruitment_id,
convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id, convicts
UNION ALL
SELECT
'ALL' AS gender,
recruitment_id,
'ALL' AS convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id
)
SELECT
current_date AS recording_date,
CASE
WHEN fc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
fc.convicts,
fc.recruitment_id,
fc.higher,
fc.average_prof,
fc.only_general,
fc.count_nodata,
fc.total,
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts fc
UNION ALL
SELECT
current_date AS recording_date,
fca.gender,
fca.convicts,
fca.recruitment_id,
fca.higher,
fca.average_prof,
fca.only_general,
fca.count_nodata,
fca.total,
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts_all fca</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1072</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.education_level_pr2(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.education_level) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.education_level) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>education_level</table>
<value>
<name>higher</name>
<rename>higher</rename>
<update>Y</update>
</value>
<value>
<name>average</name>
<rename>average_prof</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>only_general</name>
<rename>only_general</rename>
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>count_nodata</rename>
<update>Y</update>
</value>
<value>
<name>higher_percent</name>
<rename>higher_percentage</rename>
<update>Y</update>
</value>
<value>
<name>average_percent</name>
<rename>average_prof_percentage</rename>
<update>Y</update>
</value>
<value>
<name>only_general_percent</name>
<rename>only_general_percentage</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>count_nodata_percentage</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>education_level</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1728</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id
),
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
education_status AS (
SELECT
ri.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
join public.recruits_history rh on rh.recruit_id=r.id
WHERE
r.gender IN ('MALE', 'FEMALE')
AND r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
),
final_counts AS (
SELECT
es.gender,
es.recruitment_id,
es.convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender, es.convicts
UNION ALL
SELECT
es.gender,
es.recruitment_id,
'ALL' AS convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender
),
final_counts_all AS (
SELECT
'ALL' AS gender,
recruitment_id,
convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id, convicts
UNION ALL
SELECT
'ALL' AS gender,
recruitment_id,
'ALL' AS convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id
)
SELECT
current_date AS recording_date,
CASE
WHEN fc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
fc.convicts,
fc.recruitment_id,
fc.higher,
fc.average_prof,
fc.only_general,
fc.count_nodata,
fc.total,
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts fc
UNION ALL
SELECT
current_date AS recording_date,
fca.gender,
fca.convicts,
fca.recruitment_id,
fca.higher,
fca.average_prof,
fca.only_general,
fca.count_nodata,
fca.total,
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts_all fca</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1072</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.education_level_pr3(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.education_level) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.education_level) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>education_level</table>
<value>
<name>higher</name>
<rename>higher</rename>
<update>Y</update>
</value>
<value>
<name>average</name>
<rename>average_prof</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>only_general</name>
<rename>only_general</rename>
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>count_nodata</rename>
<update>Y</update>
</value>
<value>
<name>higher_percent</name>
<rename>higher_percentage</rename>
<update>Y</update>
</value>
<value>
<name>average_percent</name>
<rename>average_prof_percentage</rename>
<update>Y</update>
</value>
<value>
<name>only_general_percent</name>
<rename>only_general_percentage</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>count_nodata_percentage</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>education_level</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1728</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id
),
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
education_status AS (
SELECT
ri.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
join public.recruits_history rh on rh.recruit_id=r.id
WHERE
r.gender IN ('MALE', 'FEMALE')
AND r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
),
final_counts AS (
SELECT
es.gender,
es.recruitment_id,
es.convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender, es.convicts
UNION ALL
SELECT
es.gender,
es.recruitment_id,
'ALL' AS convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender
),
final_counts_all AS (
SELECT
'ALL' AS gender,
recruitment_id,
convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id, convicts
UNION ALL
SELECT
'ALL' AS gender,
recruitment_id,
'ALL' AS convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id
)
SELECT
current_date AS recording_date,
CASE
WHEN fc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
fc.convicts,
fc.recruitment_id,
fc.higher,
fc.average_prof,
fc.only_general,
fc.count_nodata,
fc.total,
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts fc
UNION ALL
SELECT
current_date AS recording_date,
fca.gender,
fca.convicts,
fca.recruitment_id,
fca.higher,
fca.average_prof,
fca.only_general,
fca.count_nodata,
fca.total,
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts_all fca</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1072</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.education_level_pr4(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.education_level) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.education_level) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>education_level</table>
<value>
<name>higher</name>
<rename>higher</rename>
<update>Y</update>
</value>
<value>
<name>average</name>
<rename>average_prof</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>only_general</name>
<rename>only_general</rename>
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>count_nodata</rename>
<update>Y</update>
</value>
<value>
<name>higher_percent</name>
<rename>higher_percentage</rename>
<update>Y</update>
</value>
<value>
<name>average_percent</name>
<rename>average_prof_percentage</rename>
<update>Y</update>
</value>
<value>
<name>only_general_percent</name>
<rename>only_general_percentage</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>count_nodata_percentage</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>education_level</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1728</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id
),
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
education_status AS (
SELECT
ri.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
join public.recruits_history rh on rh.recruit_id=r.id
WHERE
r.gender IN ('MALE', 'FEMALE')
AND r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
),
final_counts AS (
SELECT
es.gender,
es.recruitment_id,
es.convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender, es.convicts
UNION ALL
SELECT
es.gender,
es.recruitment_id,
'ALL' AS convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender
),
final_counts_all AS (
SELECT
'ALL' AS gender,
recruitment_id,
convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id, convicts
UNION ALL
SELECT
'ALL' AS gender,
recruitment_id,
'ALL' AS convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id
)
SELECT
current_date AS recording_date,
CASE
WHEN fc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
fc.convicts,
fc.recruitment_id,
fc.higher,
fc.average_prof,
fc.only_general,
fc.count_nodata,
fc.total,
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts fc
UNION ALL
SELECT
current_date AS recording_date,
fca.gender,
fca.convicts,
fca.recruitment_id,
fca.higher,
fca.average_prof,
fca.only_general,
fca.count_nodata,
fca.total,
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts_all fca</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1072</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.education_level_pr5(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) РФ/мужчины</from>
<to>Insert / update (total_registered.education_level) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.education_level) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>education_level</table>
<value>
<name>higher</name>
<rename>higher</rename>
<update>Y</update>
</value>
<value>
<name>average</name>
<rename>average_prof</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>only_general</name>
<rename>only_general</rename>
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>count_nodata</rename>
<update>Y</update>
</value>
<value>
<name>higher_percent</name>
<rename>higher_percentage</rename>
<update>Y</update>
</value>
<value>
<name>average_percent</name>
<rename>average_prof_percentage</rename>
<update>Y</update>
</value>
<value>
<name>only_general_percent</name>
<rename>only_general_percentage</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>count_nodata_percentage</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>education_level</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1728</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id
),
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
education_status AS (
SELECT
ri.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
-- Высшее образование (российское или иностранное)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
)
) AS has_higher,
-- Среднее профессиональное образование (если нет высшего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('6', '8', '10', '11')
)
) AS has_average_prof,
-- Общее образование (если нет высшего и среднего)
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
AND education->>'kodUrObr' IN ('7', '9')
)
) AS has_only_general,
-- Нет данных об образовании (российское или иностранное)
(
NOT (
(
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
) OR EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
)
)
) AND (
ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
)
) AS has_no_data
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
join public.recruits_history rh on rh.recruit_id=r.id
WHERE
r.gender IN ('MALE', 'FEMALE')
AND r.id in (SELECT recruit_id FROM registered)
AND rh.id in (SELECT recruit_history_id FROM registered)
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
),
final_counts AS (
SELECT
es.gender,
es.recruitment_id,
es.convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender, es.convicts
UNION ALL
SELECT
es.gender,
es.recruitment_id,
'ALL' AS convicts,
COUNT(DISTINCT es.id) AS total,
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
FROM education_status es
GROUP BY es.recruitment_id, es.gender
),
final_counts_all AS (
SELECT
'ALL' AS gender,
recruitment_id,
convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id, convicts
UNION ALL
SELECT
'ALL' AS gender,
recruitment_id,
'ALL' AS convicts,
SUM(total) AS total,
SUM(higher) AS higher,
SUM(average_prof) AS average_prof,
SUM(only_general) AS only_general,
SUM(count_nodata) AS count_nodata
FROM final_counts
GROUP BY recruitment_id
)
SELECT
current_date AS recording_date,
CASE
WHEN fc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
fc.convicts,
fc.recruitment_id,
fc.higher,
fc.average_prof,
fc.only_general,
fc.count_nodata,
fc.total,
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts fc
UNION ALL
SELECT
current_date AS recording_date,
fca.gender,
fca.convicts,
fca.recruitment_id,
fca.higher,
fca.average_prof,
fca.only_general,
fca.count_nodata,
fca.total,
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
FROM final_counts_all fca</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1072</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>total_registered.marital_status(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/04/01 10:07:53.719</created_date>
<modified_user>-</modified_user>
<modified_date>2025/04/01 10:07:53.719</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>Y</parallel>
<xloc>512</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status_pr1(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr1(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_1</name>
<stream_name>PART_RECRUITMENT_1</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>896</xloc>
<yloc>256</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status_pr2(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr2(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_2</name>
<stream_name>PART_RECRUITMENT_2</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>896</xloc>
<yloc>336</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status_pr3(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr3(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_3</name>
<stream_name>PART_RECRUITMENT_3</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>896</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status_pr4(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr4(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_4</name>
<stream_name>PART_RECRUITMENT_4</stream_name>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>896</xloc>
<yloc>496</yloc>
<attributes_hac/>
</action>
<action>
<name>total_registered.marital_status_pr5(m_c).hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>Y</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr5(m_c).hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_PR_5</name>
<stream_name>PART_RECRUITMENT_5</stream_name>
<value/>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>Y</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>896</xloc>
<yloc>576</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>256</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>336</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 3</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 4</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>496</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 5</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>576</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>total_registered.marital_status_pr1(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.marital_status_pr2(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.marital_status_pr3(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.marital_status_pr4(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>total_registered.marital_status_pr5(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>total_registered.marital_status_pr1(m_c).hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.marital_status_pr2(m_c).hpl</from>
<to>Success 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.marital_status_pr3(m_c).hpl</from>
<to>Success 3</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.marital_status_pr4(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.marital_status_pr5(m_c).hpl</from>
<to>Success 5</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.marital_status_pr1(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регионы/мужчины</from>
<to>Insert / update (total_registered.marital_status) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.marital_status) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>marital_status</table>
<value>
<name>married</name>
<rename>married</rename>
<update>Y</update>
</value>
<value>
<name>not_married</name>
<rename>not_married</rename>
<update>Y</update>
</value>
<value>
<name>married_percent</name>
<rename>married_percent</rename>
<update>Y</update>
</value>
<value>
<name>not_married_percent</name>
<rename>not_married_percent</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>marital_status</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
recruit_data AS (
SELECT
ri.recruit_id,
ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
ri.recruit_id,
ri.info->'svedFL'-&gt;'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
'ALL' AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
married_counts AS (
-- Считаем значения для каждого гендера
SELECT
rd.recruitment_id,
rd.gender,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
COUNT(rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
),
all_counts AS (
-- Считаем значения для ALL, суммируя данные по всем гендерам
SELECT
recruitment_id,
'ALL' AS gender,
convicts,
SUM(not_married) AS not_married,
SUM(married) AS married,
SUM(other) AS other,
SUM(total) AS total
FROM married_counts
GROUP BY recruitment_id, convicts
)
-- Финальное объединение
SELECT
mc.not_married,
mc.married,
mc.total,
mc.other,
mc.convicts,
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
CASE
WHEN mc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
current_date AS recording_date,
mc.recruitment_id
FROM married_counts mc
UNION ALL
SELECT
ac.not_married,
ac.married,
ac.total,
ac.other,
ac.convicts,
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
ac.gender,
current_date AS recording_date,
ac.recruitment_id
FROM all_counts ac</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.marital_status_pr2(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регионы/мужчины</from>
<to>Insert / update (total_registered.marital_status) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.marital_status) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>marital_status</table>
<value>
<name>married</name>
<rename>married</rename>
<update>Y</update>
</value>
<value>
<name>not_married</name>
<rename>not_married</rename>
<update>Y</update>
</value>
<value>
<name>married_percent</name>
<rename>married_percent</rename>
<update>Y</update>
</value>
<value>
<name>not_married_percent</name>
<rename>not_married_percent</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>marital_status</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
recruit_data AS (
SELECT
ri.recruit_id,
ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
ri.recruit_id,
ri.info->'svedFL'-&gt;'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
'ALL' AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
married_counts AS (
-- Считаем значения для каждого гендера
SELECT
rd.recruitment_id,
rd.gender,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
COUNT(rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
),
all_counts AS (
-- Считаем значения для ALL, суммируя данные по всем гендерам
SELECT
recruitment_id,
'ALL' AS gender,
convicts,
SUM(not_married) AS not_married,
SUM(married) AS married,
SUM(other) AS other,
SUM(total) AS total
FROM married_counts
GROUP BY recruitment_id, convicts
)
-- Финальное объединение
SELECT
mc.not_married,
mc.married,
mc.total,
mc.other,
mc.convicts,
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
CASE
WHEN mc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
current_date AS recording_date,
mc.recruitment_id
FROM married_counts mc
UNION ALL
SELECT
ac.not_married,
ac.married,
ac.total,
ac.other,
ac.convicts,
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
ac.gender,
current_date AS recording_date,
ac.recruitment_id
FROM all_counts ac</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.marital_status_pr3(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регионы/мужчины</from>
<to>Insert / update (total_registered.marital_status) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.marital_status) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>marital_status</table>
<value>
<name>married</name>
<rename>married</rename>
<update>Y</update>
</value>
<value>
<name>not_married</name>
<rename>not_married</rename>
<update>Y</update>
</value>
<value>
<name>married_percent</name>
<rename>married_percent</rename>
<update>Y</update>
</value>
<value>
<name>not_married_percent</name>
<rename>not_married_percent</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>marital_status</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
recruit_data AS (
SELECT
ri.recruit_id,
ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
ri.recruit_id,
ri.info->'svedFL'-&gt;'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
'ALL' AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
married_counts AS (
-- Считаем значения для каждого гендера
SELECT
rd.recruitment_id,
rd.gender,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
COUNT(rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
),
all_counts AS (
-- Считаем значения для ALL, суммируя данные по всем гендерам
SELECT
recruitment_id,
'ALL' AS gender,
convicts,
SUM(not_married) AS not_married,
SUM(married) AS married,
SUM(other) AS other,
SUM(total) AS total
FROM married_counts
GROUP BY recruitment_id, convicts
)
-- Финальное объединение
SELECT
mc.not_married,
mc.married,
mc.total,
mc.other,
mc.convicts,
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
CASE
WHEN mc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
current_date AS recording_date,
mc.recruitment_id
FROM married_counts mc
UNION ALL
SELECT
ac.not_married,
ac.married,
ac.total,
ac.other,
ac.convicts,
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
ac.gender,
current_date AS recording_date,
ac.recruitment_id
FROM all_counts ac</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.marital_status_pr4(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регионы/мужчины</from>
<to>Insert / update (total_registered.marital_status) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.marital_status) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>marital_status</table>
<value>
<name>married</name>
<rename>married</rename>
<update>Y</update>
</value>
<value>
<name>not_married</name>
<rename>not_married</rename>
<update>Y</update>
</value>
<value>
<name>married_percent</name>
<rename>married_percent</rename>
<update>Y</update>
</value>
<value>
<name>not_married_percent</name>
<rename>not_married_percent</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>marital_status</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
recruit_data AS (
SELECT
ri.recruit_id,
ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
ri.recruit_id,
ri.info->'svedFL'-&gt;'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
'ALL' AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
married_counts AS (
-- Считаем значения для каждого гендера
SELECT
rd.recruitment_id,
rd.gender,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
COUNT(rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
),
all_counts AS (
-- Считаем значения для ALL, суммируя данные по всем гендерам
SELECT
recruitment_id,
'ALL' AS gender,
convicts,
SUM(not_married) AS not_married,
SUM(married) AS married,
SUM(other) AS other,
SUM(total) AS total
FROM married_counts
GROUP BY recruitment_id, convicts
)
-- Финальное объединение
SELECT
mc.not_married,
mc.married,
mc.total,
mc.other,
mc.convicts,
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
CASE
WHEN mc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
current_date AS recording_date,
mc.recruitment_id
FROM married_counts mc
UNION ALL
SELECT
ac.not_married,
ac.married,
ac.total,
ac.other,
ac.convicts,
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
ac.gender,
current_date AS recording_date,
ac.recruitment_id
FROM all_counts ac</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>total_registered.marital_status_pr5(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<pipeline_status>0</pipeline_status>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2024/08/02 11:56:22.507</created_date>
<modified_user>-</modified_user>
<modified_date>2024/08/02 11:56:22.507</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input (person_registry) регионы/мужчины</from>
<to>Insert / update (total_registered.marital_status) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (total_registered.marital_status) 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>marital_status</table>
<value>
<name>married</name>
<rename>married</rename>
<update>Y</update>
</value>
<value>
<name>not_married</name>
<rename>not_married</rename>
<update>Y</update>
</value>
<value>
<name>married_percent</name>
<rename>married_percent</rename>
<update>Y</update>
</value>
<value>
<name>not_married_percent</name>
<rename>not_married_percent</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>marital_status</name>
<rename>total</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<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>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
*/
recruit_data AS (
SELECT
ri.recruit_id,
ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'NOTCONVICT'
END AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
UNION ALL
SELECT
ri.recruit_id,
ri.info->'svedFL'-&gt;'svedSemPolozh'->>'semPolozh' AS sem_pol,
r.gender,
'ALL' AS convicts,
r.current_recruitment_id AS recruitment_id
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh on rh.recruit_id=r.id
WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.gender IN ('MALE', 'FEMALE')
/*
AND r.id in (SELECT recruit_id FROM registered)
and rh.id in (SELECT recruit_history_id FROM registered)
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
*/
),
married_counts AS (
-- Считаем значения для каждого гендера
SELECT
rd.recruitment_id,
rd.gender,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
COUNT(rd.recruit_id) AS total
FROM recruit_data rd
GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
),
all_counts AS (
-- Считаем значения для ALL, суммируя данные по всем гендерам
SELECT
recruitment_id,
'ALL' AS gender,
convicts,
SUM(not_married) AS not_married,
SUM(married) AS married,
SUM(other) AS other,
SUM(total) AS total
FROM married_counts
GROUP BY recruitment_id, convicts
)
-- Финальное объединение
SELECT
mc.not_married,
mc.married,
mc.total,
mc.other,
mc.convicts,
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
CASE
WHEN mc.gender = 'MALE' THEN 'M'
ELSE 'W'
END AS gender,
current_date AS recording_date,
mc.recruitment_id
FROM married_counts mc
UNION ALL
SELECT
ac.not_married,
ac.married,
ac.total,
ac.other,
ac.convicts,
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
ac.gender,
current_date AS recording_date,
ac.recruitment_id
FROM all_counts ac</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>