parallel array

This commit is contained in:
Ruslan 2025-03-31 11:00:57 +03:00
parent 0dde5613bf
commit d9a39775f8
8 changed files with 1605 additions and 226 deletions

View file

@ -153,7 +153,7 @@
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1248</xloc>
<yloc>960</yloc>
<yloc>1040</yloc>
<attributes_hac/>
</action>
<action>
@ -163,36 +163,6 @@
<attributes/>
<parallel>N</parallel>
<xloc>1456</xloc>
<yloc>960</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration(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/main_dashboard.waiting_registration(m_c).hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<parameter>
<name>ARR_MC</name>
<stream_name>ARRAY_MIL_COM</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>1248</xloc>
<yloc>1040</yloc>
<attributes_hac/>
</action>
@ -203,7 +173,7 @@
<attributes/>
<parallel>N</parallel>
<xloc>1456</xloc>
<yloc>1040</yloc>
<yloc>960</yloc>
<attributes_hac/>
</action>
<action>
@ -672,23 +642,6 @@ WHERE recording_date = current_date
<yloc>1120</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL main_dashboard.recruitment_campaign</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM main_dashboard.recruitment_campaign
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>576</xloc>
<yloc>880</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL main_dashboard.total_registered</name>
<description/>
@ -699,24 +652,6 @@ WHERE recording_date = current_date
<sql>DELETE FROM main_dashboard.total_registered
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>928</xloc>
<yloc>960</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL main_dashboard.waiting_registration</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM main_dashboard.waiting_registration
WHERE recording_date = current_date
AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
</sql>
<sqlfromfile>N</sqlfromfile>
<useVariableSubstitution>N</useVariableSubstitution>
@ -978,6 +913,32 @@ AND postponement_granted IS NULL;</sql>
<yloc>800</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration(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>N</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>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</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>928</xloc>
<yloc>960</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
@ -987,13 +948,6 @@ AND postponement_granted IS NULL;</sql>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>total_registered.reg_mil_cat(m_c).hpl</from>
<to>Success 7</to>
@ -1113,13 +1067,6 @@ AND postponement_granted IS NULL;</sql>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitments.hpl</from>
<to>SQL main_dashboard.recruitment_campaign</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>array_recruitments.hpl</from>
<to>SQL main_dashboard.total_registered</to>
@ -1134,20 +1081,6 @@ AND postponement_granted IS NULL;</sql>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitments.hpl</from>
<to>SQL main_dashboard.waiting_registration</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>SQL main_dashboard.waiting_registration</from>
<to>main_dashboard.waiting_registration(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>array_recruitments.hpl</from>
<to>SQL total_registered.removed_registry</to>
@ -1274,20 +1207,6 @@ AND postponement_granted IS NULL;</sql>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL main_dashboard.recruitment_campaign</from>
<to>main_dashboard.recruitment_campaign(m_c).hwf</to>
<enabled>N</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>SQL main_dashboard.recruitment_campaign</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>main_dashboard.recruitment_campaign(m_c).hwf</to>
@ -1330,6 +1249,20 @@ AND postponement_granted IS NULL;</sql>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration(m_c).hwf</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>main_dashboard.waiting_registration(m_c).hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
</hops>
<notepads>
<notepad>

View file

@ -0,0 +1,367 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>main_dashboard.waiting_registration(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/03/31 10:12:19.214</created_date>
<modified_user>-</modified_user>
<modified_date>2025/03/31 10:12:19.214</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>N</parallel>
<xloc>688</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>array_recruitment_for_parallel.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>N</exec_per_row>
<filename>${PROJECT_HOME}/mil_com/parameters/array_recruitment_for_parallel.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</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>Y</parallel>
<xloc>1216</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration_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/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_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>1568</xloc>
<yloc>256</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration_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/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_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>1568</xloc>
<yloc>336</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration_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/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_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>1568</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration_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/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_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>1568</xloc>
<yloc>496</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1808</xloc>
<yloc>256</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 2</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1808</xloc>
<yloc>336</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 3</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1808</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 4</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1808</xloc>
<yloc>496</yloc>
<attributes_hac/>
</action>
<action>
<name>main_dashboard.waiting_registration_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/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_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>1568</xloc>
<yloc>576</yloc>
<attributes_hac/>
</action>
<action>
<name>Success 5</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1808</xloc>
<yloc>576</yloc>
<attributes_hac/>
</action>
<action>
<name>SQL main_dashboard.waiting_registration</name>
<description/>
<type>SQL</type>
<attributes/>
<connection>ervu-dashboard</connection>
<sendOneStatement>N</sendOneStatement>
<sql>DELETE FROM main_dashboard.waiting_registration
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>928</xloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>main_dashboard.waiting_registration_pr1(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>main_dashboard.waiting_registration_pr2(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>main_dashboard.waiting_registration_pr3(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>main_dashboard.waiting_registration_pr4(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration_pr1(m_c).hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration_pr2(m_c).hpl</from>
<to>Success 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration_pr3(m_c).hpl</from>
<to>Success 3</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration_pr4(m_c).hpl</from>
<to>Success 4</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>array_recruitment_for_parallel.hpl</from>
<to>main_dashboard.waiting_registration_pr5(m_c).hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>main_dashboard.waiting_registration_pr5(m_c).hpl</from>
<to>Success 5</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>SQL main_dashboard.waiting_registration</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>SQL main_dashboard.waiting_registration</from>
<to>array_recruitment_for_parallel.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration(m_c)</name>
<name>main_dashboard.waiting_registration_pr1(m_c)</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
@ -21,60 +21,12 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 5</from>
<to>Select values 5</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 5</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input 2 (person_registry) регион</from>
<to>Get variables 5</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input 2 (person_registry) регион</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 5</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>576</xloc>
<yloc>416</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (main_dashboard.waiting_registration) 2</name>
<type>InsertUpdate</type>
@ -159,60 +111,6 @@
<yloc>240</yloc>
</GUI>
</transform>
<transform>
<name>Select values 5</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>720</xloc>
<yloc>416</yloc>
</GUI>
</transform>
<transform>
<name>Table input 2 (person_registry) регион</name>
<type>TableInput</type>
@ -229,7 +127,11 @@
<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
),
r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits
where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids))
AND current_recruitment_id is null
),
last_status as (select recruit_id,
max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
@ -249,7 +151,7 @@ notregistered as (
),
vse AS (
SELECT
r.id AS r_id,
r.recruit_id AS r_id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
r.gender,
@ -260,7 +162,7 @@ vse AS (
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text
WHERE uchet_pnd->>'dataSnyatUchet' &amp;lt;= current_date::text
)
ELSE
false
@ -270,16 +172,12 @@ vse AS (
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM public.recruits AS r
FROM r_ids r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
JOIN public.recruits_history rh on rh.recruit_id=r.id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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
ON ri.recruit_id = r.recruit_id
JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id
WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids)
),
extracted_children AS (
SELECT
@ -301,7 +199,7 @@ children_count AS (
recruit_id,
COUNT(*) AS children_under_16
FROM children_birth_dates
WHERE AGE(make_date(year, month, day)) &lt; interval '16 years'
WHERE AGE(make_date(year, month, day)) &amp;lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
@ -313,7 +211,7 @@ recruit_data AS (
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &lt; 5
AND COALESCE(cc.children_under_16, 0) &amp;lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (

View file

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration_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 2 (person_registry) регион</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (main_dashboard.waiting_registration) 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>
<schema>main_dashboard</schema>
<table>waiting_registration</table>
<value>
<name>waiting_registration</name>
<rename>waiting_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_M"</name>
<rename>male_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_W"</name>
<rename>female_count</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion</name>
<rename>mobilization_criterion</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion</name>
<rename>volunteer_criterion</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion</name>
<rename>contract_criterion</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion_percent</name>
<rename>mobilization_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion_percent</name>
<rename>volunteer_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion_percent</name>
<rename>contract_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>1024</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform>
<name>Table input 2 (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
),
r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits
where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids))
AND current_recruitment_id is null
),
last_status as (select recruit_id,
max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history rh
join recruits r on r.id = rh.recruit_id
where rh.status in ('1', '12.7', '8.2', '8.3')
and r.current_recruitment_id is null
group by rh.recruit_id),
notregistered 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 in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
vse AS (
SELECT
r.recruit_id AS r_id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
r.gender,
r.birth_date,
-- r.conscription,
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
WHERE uchet_pnd->>'dataSnyatUchet' &amp;lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM r_ids r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.recruit_id
JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id
WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids)
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
FROM vse ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM children_birth_dates
WHERE AGE(make_date(year, month, day)) &amp;lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &amp;lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_target_recruitment_id
)
SELECT
rd.recruitment_id,
current_date AS recording_date,
COALESCE(rd.waiting_count, 0) AS waiting_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration_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 2 (person_registry) регион</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (main_dashboard.waiting_registration) 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>
<schema>main_dashboard</schema>
<table>waiting_registration</table>
<value>
<name>waiting_registration</name>
<rename>waiting_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_M"</name>
<rename>male_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_W"</name>
<rename>female_count</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion</name>
<rename>mobilization_criterion</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion</name>
<rename>volunteer_criterion</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion</name>
<rename>contract_criterion</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion_percent</name>
<rename>mobilization_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion_percent</name>
<rename>volunteer_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion_percent</name>
<rename>contract_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>1024</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform>
<name>Table input 2 (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
),
r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits
where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids))
AND current_recruitment_id is null
),
last_status as (select recruit_id,
max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history rh
join recruits r on r.id = rh.recruit_id
where rh.status in ('1', '12.7', '8.2', '8.3')
and r.current_recruitment_id is null
group by rh.recruit_id),
notregistered 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 in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
vse AS (
SELECT
r.recruit_id AS r_id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
r.gender,
r.birth_date,
-- r.conscription,
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
WHERE uchet_pnd->>'dataSnyatUchet' &amp;lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM r_ids r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.recruit_id
JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id
WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids)
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
FROM vse ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM children_birth_dates
WHERE AGE(make_date(year, month, day)) &amp;lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &amp;lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_target_recruitment_id
)
SELECT
rd.recruitment_id,
current_date AS recording_date,
COALESCE(rd.waiting_count, 0) AS waiting_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration_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 2 (person_registry) регион</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (main_dashboard.waiting_registration) 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>
<schema>main_dashboard</schema>
<table>waiting_registration</table>
<value>
<name>waiting_registration</name>
<rename>waiting_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_M"</name>
<rename>male_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_W"</name>
<rename>female_count</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion</name>
<rename>mobilization_criterion</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion</name>
<rename>volunteer_criterion</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion</name>
<rename>contract_criterion</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion_percent</name>
<rename>mobilization_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion_percent</name>
<rename>volunteer_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion_percent</name>
<rename>contract_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>1024</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform>
<name>Table input 2 (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
),
r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits
where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids))
AND current_recruitment_id is null
),
last_status as (select recruit_id,
max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history rh
join recruits r on r.id = rh.recruit_id
where rh.status in ('1', '12.7', '8.2', '8.3')
and r.current_recruitment_id is null
group by rh.recruit_id),
notregistered 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 in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
vse AS (
SELECT
r.recruit_id AS r_id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
r.gender,
r.birth_date,
-- r.conscription,
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
WHERE uchet_pnd->>'dataSnyatUchet' &amp;lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM r_ids r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.recruit_id
JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id
WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids)
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
FROM vse ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM children_birth_dates
WHERE AGE(make_date(year, month, day)) &amp;lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &amp;lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_target_recruitment_id
)
SELECT
rd.recruitment_id,
current_date AS recording_date,
COALESCE(rd.waiting_count, 0) AS waiting_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration_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 2 (person_registry) регион</from>
<to>Insert / update (main_dashboard.waiting_registration) 2</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Insert / update (main_dashboard.waiting_registration) 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>
<schema>main_dashboard</schema>
<table>waiting_registration</table>
<value>
<name>waiting_registration</name>
<rename>waiting_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_M"</name>
<rename>male_count</rename>
<update>Y</update>
</value>
<value>
<name>"waiting_registration_W"</name>
<rename>female_count</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion</name>
<rename>mobilization_criterion</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion</name>
<rename>volunteer_criterion</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion</name>
<rename>contract_criterion</rename>
<update>Y</update>
</value>
<value>
<name>mobilization_criterion_percent</name>
<rename>mobilization_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>volunteer_criterion_percent</name>
<rename>volunteer_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>contract_criterion_percent</name>
<rename>contract_criterion_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>1024</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform>
<name>Table input 2 (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
),
r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits
where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids))
AND current_recruitment_id is null
),
last_status as (select recruit_id,
max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history rh
join recruits r on r.id = rh.recruit_id
where rh.status in ('1', '12.7', '8.2', '8.3')
and r.current_recruitment_id is null
group by rh.recruit_id),
notregistered 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 in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
vse AS (
SELECT
r.recruit_id AS r_id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
r.gender,
r.birth_date,
-- r.conscription,
CASE
WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
EXISTS (
SELECT 1
FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
WHERE uchet_pnd->>'dataSnyatUchet' &amp;lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM r_ids r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.recruit_id
JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id
WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids)
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
FROM vse ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM extracted_children
),
children_count AS (
SELECT
recruit_id,
COUNT(*) AS children_under_16
FROM children_birth_dates
WHERE AGE(make_date(year, month, day)) &amp;lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &amp;lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_target_recruitment_id
)
SELECT
rd.recruitment_id,
current_date AS recording_date,
COALESCE(rd.waiting_count, 0) AS waiting_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>array_recruitment_for_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/31 10:14:04.435</created_date>
<modified_user>-</modified_user>
<modified_date>2025/03/31 10:14:04.435</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>Copy rows to result</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>384</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>0</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')
),
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>672</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>