mc_parallel
This commit is contained in:
parent
d288a7519e
commit
28e48951f6
45 changed files with 13650 additions and 258 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,309 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>main_dashboard.total_registered(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 14:43:03.816</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 14:43:03.816</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>304</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>main_dashboard.total_registered_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.total_registered(m_c)/main_dashboard.total_registered_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>1120</xloc>
|
||||
<yloc>144</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>main_dashboard.total_registered_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.total_registered(m_c)/main_dashboard.total_registered_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>1120</xloc>
|
||||
<yloc>224</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>main_dashboard.total_registered_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.total_registered(m_c)/main_dashboard.total_registered_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>1120</xloc>
|
||||
<yloc>304</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>main_dashboard.total_registered_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.total_registered(m_c)/main_dashboard.total_registered_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>1120</xloc>
|
||||
<yloc>384</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>main_dashboard.total_registered_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.total_registered(m_c)/main_dashboard.total_registered_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>1120</xloc>
|
||||
<yloc>464</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>144</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>224</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>304</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>384</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>464</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.total_registered_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.total_registered_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.total_registered_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.total_registered_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.total_registered_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>main_dashboard.total_registered_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>main_dashboard.total_registered_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>main_dashboard.total_registered_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>main_dashboard.total_registered_pr4(m_c).hpl</from>
|
||||
<to>Success 4</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>main_dashboard.total_registered_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.total_registered_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 (main_dashboard.total_registered) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (main_dashboard.total_registered) 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>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>main_dashboard</schema>
|
||||
<table>total_registered</table>
|
||||
<value>
|
||||
<name>total_registered</name>
|
||||
<rename>total_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_M"</name>
|
||||
<rename>male_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_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>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1168</xloc>
|
||||
<yloc>320</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') -- критерии от 03.06.2025
|
||||
--and rh.source is not null
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
--distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.current_recruitment_id AS r_current_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' <= 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 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
|
||||
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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)
|
||||
*/
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
COUNT(distinct ri.recruit_id) AS total_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) < 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_current_recruitment_id, ri.convicts
|
||||
),
|
||||
recruit_data_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>496</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.total_registered_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 (main_dashboard.total_registered) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (main_dashboard.total_registered) 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>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>main_dashboard</schema>
|
||||
<table>total_registered</table>
|
||||
<value>
|
||||
<name>total_registered</name>
|
||||
<rename>total_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_M"</name>
|
||||
<rename>male_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_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>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1168</xloc>
|
||||
<yloc>320</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') -- критерии от 03.06.2025
|
||||
--and rh.source is not null
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
--distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.current_recruitment_id AS r_current_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' <= 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 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
|
||||
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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)
|
||||
*/
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
COUNT(distinct ri.recruit_id) AS total_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) < 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_current_recruitment_id, ri.convicts
|
||||
),
|
||||
recruit_data_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>496</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.total_registered_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 (main_dashboard.total_registered) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (main_dashboard.total_registered) 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>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>main_dashboard</schema>
|
||||
<table>total_registered</table>
|
||||
<value>
|
||||
<name>total_registered</name>
|
||||
<rename>total_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_M"</name>
|
||||
<rename>male_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_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>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1168</xloc>
|
||||
<yloc>320</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') -- критерии от 03.06.2025
|
||||
--and rh.source is not null
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
--distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.current_recruitment_id AS r_current_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' <= 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 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
|
||||
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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)
|
||||
*/
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
COUNT(distinct ri.recruit_id) AS total_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) < 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_current_recruitment_id, ri.convicts
|
||||
),
|
||||
recruit_data_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>496</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.total_registered_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 (main_dashboard.total_registered) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (main_dashboard.total_registered) 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>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>main_dashboard</schema>
|
||||
<table>total_registered</table>
|
||||
<value>
|
||||
<name>total_registered</name>
|
||||
<rename>total_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_M"</name>
|
||||
<rename>male_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_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>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1168</xloc>
|
||||
<yloc>320</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') -- критерии от 03.06.2025
|
||||
--and rh.source is not null
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
--distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.current_recruitment_id AS r_current_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' <= 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 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
|
||||
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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)
|
||||
*/
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
COUNT(distinct ri.recruit_id) AS total_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) < 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_current_recruitment_id, ri.convicts
|
||||
),
|
||||
recruit_data_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>496</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.total_registered_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 (main_dashboard.total_registered) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (main_dashboard.total_registered) 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>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>main_dashboard</schema>
|
||||
<table>total_registered</table>
|
||||
<value>
|
||||
<name>total_registered</name>
|
||||
<rename>total_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_M"</name>
|
||||
<rename>male_count</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"total_registered_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>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1168</xloc>
|
||||
<yloc>320</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') -- критерии от 03.06.2025
|
||||
--and rh.source is not null
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
--distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.current_recruitment_id AS r_current_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' <= 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 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
|
||||
LEFT JOIN public.decision_deferment_dto ddd ON ddd.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)
|
||||
*/
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
COUNT(distinct ri.recruit_id) AS total_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) < 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_current_recruitment_id, ri.convicts
|
||||
),
|
||||
recruit_data_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_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.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>496</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,265 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>main_dashboard.waiting_registration(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_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
last_status 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 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.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' <= 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 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
|
||||
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
|
||||
),
|
||||
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)) < 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) < 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>
|
||||
|
|
@ -25,34 +25,8 @@
|
|||
<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>
|
||||
<xloc>688</xloc>
|
||||
<yloc>416</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
|
|
@ -256,54 +230,8 @@
|
|||
<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>
|
||||
|
|
@ -332,13 +260,6 @@ WHERE recording_date = current_date
|
|||
<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>
|
||||
|
|
@ -348,14 +269,35 @@ WHERE recording_date = current_date
|
|||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>SQL main_dashboard.waiting_registration</to>
|
||||
<to>main_dashboard.waiting_registration_pr1(m_c).hpl</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>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.waiting_registration_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.waiting_registration_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.waiting_registration_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>main_dashboard.waiting_registration_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>total_registered.child_minor(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 17:47:01.214</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 17:47:01.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>Y</parallel>
|
||||
<xloc>640</xloc>
|
||||
<yloc>496</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.child_minor_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.child_minor(m_c)/total_registered.child_minor_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>976</xloc>
|
||||
<yloc>336</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.child_minor_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.child_minor(m_c)/total_registered.child_minor_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>976</xloc>
|
||||
<yloc>416</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.child_minor_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.child_minor(m_c)/total_registered.child_minor_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>976</xloc>
|
||||
<yloc>496</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.child_minor_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.child_minor(m_c)/total_registered.child_minor_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>976</xloc>
|
||||
<yloc>576</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.child_minor_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.child_minor(m_c)/total_registered.child_minor_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>976</xloc>
|
||||
<yloc>656</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>336</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>416</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>496</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>576</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>656</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.child_minor_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.child_minor_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.child_minor_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.child_minor_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.child_minor_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.child_minor_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.child_minor_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.child_minor_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.child_minor_pr4(m_c).hpl</from>
|
||||
<to>Success 4</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.child_minor_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,423 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.child_minor_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 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>
|
||||
<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>child_minor</table>
|
||||
<value>
|
||||
<name>no_child</name>
|
||||
<rename>no_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child"</name>
|
||||
<rename>one_child</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child"</name>
|
||||
<rename>two_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child"</name>
|
||||
<rename>three_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child"</name>
|
||||
<rename>four_or_more_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_child_percent</name>
|
||||
<rename>no_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child_percent"</name>
|
||||
<rename>one_child_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child_percent"</name>
|
||||
<rename>two_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child_percent"</name>
|
||||
<rename>three_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child_percent"</name>
|
||||
<rename>four_or_more_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</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>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1504</xloc>
|
||||
<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>
|
||||
<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_MC}'), ','))::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
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--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,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--COALESCE(r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
'ALL' AS convicts,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
),
|
||||
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_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) FILTER (
|
||||
WHERE make_date(
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int
|
||||
) > CURRENT_DATE - INTERVAL '18 years'
|
||||
) AS children_under_18
|
||||
FROM
|
||||
extracted_children
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
gender_and_recruitment_data AS (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(r.recruit_id) AS total_count,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) AS no_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) AS one_child,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) AS two_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) AS three_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) AS four_or_more_children,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS no_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS one_child_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS two_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS three_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS four_or_more_children_percent
|
||||
FROM vse r
|
||||
LEFT JOIN children_count cc
|
||||
ON r.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
r.gender,
|
||||
r.convicts,
|
||||
r.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
total_count,
|
||||
no_children,
|
||||
one_child,
|
||||
two_children,
|
||||
three_children,
|
||||
four_or_more_children,
|
||||
COALESCE(ROUND(no_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(one_child * 100.0 / NULLIF(total_count, 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(two_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(three_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(four_or_more_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(no_children) AS no_children,
|
||||
SUM(one_child) AS one_child,
|
||||
SUM(two_children) AS two_children,
|
||||
SUM(three_children) AS three_children,
|
||||
SUM(four_or_more_children) AS four_or_more_children,
|
||||
COALESCE(ROUND(SUM(no_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(SUM(one_child) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(SUM(two_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(SUM(three_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(SUM(four_or_more_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
GROUP BY recruitment_id, convicts</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,423 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.child_minor_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 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>
|
||||
<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>child_minor</table>
|
||||
<value>
|
||||
<name>no_child</name>
|
||||
<rename>no_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child"</name>
|
||||
<rename>one_child</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child"</name>
|
||||
<rename>two_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child"</name>
|
||||
<rename>three_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child"</name>
|
||||
<rename>four_or_more_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_child_percent</name>
|
||||
<rename>no_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child_percent"</name>
|
||||
<rename>one_child_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child_percent"</name>
|
||||
<rename>two_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child_percent"</name>
|
||||
<rename>three_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child_percent"</name>
|
||||
<rename>four_or_more_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</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>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1504</xloc>
|
||||
<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>
|
||||
<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_MC}'), ','))::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
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--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,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--COALESCE(r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
'ALL' AS convicts,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
),
|
||||
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_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) FILTER (
|
||||
WHERE make_date(
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int
|
||||
) > CURRENT_DATE - INTERVAL '18 years'
|
||||
) AS children_under_18
|
||||
FROM
|
||||
extracted_children
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
gender_and_recruitment_data AS (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(r.recruit_id) AS total_count,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) AS no_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) AS one_child,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) AS two_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) AS three_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) AS four_or_more_children,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS no_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS one_child_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS two_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS three_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS four_or_more_children_percent
|
||||
FROM vse r
|
||||
LEFT JOIN children_count cc
|
||||
ON r.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
r.gender,
|
||||
r.convicts,
|
||||
r.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
total_count,
|
||||
no_children,
|
||||
one_child,
|
||||
two_children,
|
||||
three_children,
|
||||
four_or_more_children,
|
||||
COALESCE(ROUND(no_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(one_child * 100.0 / NULLIF(total_count, 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(two_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(three_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(four_or_more_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(no_children) AS no_children,
|
||||
SUM(one_child) AS one_child,
|
||||
SUM(two_children) AS two_children,
|
||||
SUM(three_children) AS three_children,
|
||||
SUM(four_or_more_children) AS four_or_more_children,
|
||||
COALESCE(ROUND(SUM(no_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(SUM(one_child) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(SUM(two_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(SUM(three_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(SUM(four_or_more_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
GROUP BY recruitment_id, convicts</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,423 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.child_minor_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 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>
|
||||
<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>child_minor</table>
|
||||
<value>
|
||||
<name>no_child</name>
|
||||
<rename>no_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child"</name>
|
||||
<rename>one_child</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child"</name>
|
||||
<rename>two_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child"</name>
|
||||
<rename>three_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child"</name>
|
||||
<rename>four_or_more_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_child_percent</name>
|
||||
<rename>no_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child_percent"</name>
|
||||
<rename>one_child_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child_percent"</name>
|
||||
<rename>two_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child_percent"</name>
|
||||
<rename>three_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child_percent"</name>
|
||||
<rename>four_or_more_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</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>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1504</xloc>
|
||||
<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>
|
||||
<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_MC}'), ','))::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
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--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,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--COALESCE(r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
'ALL' AS convicts,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
),
|
||||
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_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) FILTER (
|
||||
WHERE make_date(
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int
|
||||
) > CURRENT_DATE - INTERVAL '18 years'
|
||||
) AS children_under_18
|
||||
FROM
|
||||
extracted_children
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
gender_and_recruitment_data AS (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(r.recruit_id) AS total_count,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) AS no_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) AS one_child,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) AS two_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) AS three_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) AS four_or_more_children,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS no_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS one_child_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS two_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS three_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS four_or_more_children_percent
|
||||
FROM vse r
|
||||
LEFT JOIN children_count cc
|
||||
ON r.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
r.gender,
|
||||
r.convicts,
|
||||
r.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
total_count,
|
||||
no_children,
|
||||
one_child,
|
||||
two_children,
|
||||
three_children,
|
||||
four_or_more_children,
|
||||
COALESCE(ROUND(no_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(one_child * 100.0 / NULLIF(total_count, 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(two_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(three_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(four_or_more_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(no_children) AS no_children,
|
||||
SUM(one_child) AS one_child,
|
||||
SUM(two_children) AS two_children,
|
||||
SUM(three_children) AS three_children,
|
||||
SUM(four_or_more_children) AS four_or_more_children,
|
||||
COALESCE(ROUND(SUM(no_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(SUM(one_child) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(SUM(two_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(SUM(three_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(SUM(four_or_more_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
GROUP BY recruitment_id, convicts</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,423 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.child_minor_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 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>
|
||||
<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>child_minor</table>
|
||||
<value>
|
||||
<name>no_child</name>
|
||||
<rename>no_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child"</name>
|
||||
<rename>one_child</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child"</name>
|
||||
<rename>two_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child"</name>
|
||||
<rename>three_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child"</name>
|
||||
<rename>four_or_more_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_child_percent</name>
|
||||
<rename>no_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child_percent"</name>
|
||||
<rename>one_child_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child_percent"</name>
|
||||
<rename>two_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child_percent"</name>
|
||||
<rename>three_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child_percent"</name>
|
||||
<rename>four_or_more_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</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>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1504</xloc>
|
||||
<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>
|
||||
<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_MC}'), ','))::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
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--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,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--COALESCE(r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
'ALL' AS convicts,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
),
|
||||
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_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) FILTER (
|
||||
WHERE make_date(
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int
|
||||
) > CURRENT_DATE - INTERVAL '18 years'
|
||||
) AS children_under_18
|
||||
FROM
|
||||
extracted_children
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
gender_and_recruitment_data AS (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(r.recruit_id) AS total_count,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) AS no_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) AS one_child,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) AS two_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) AS three_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) AS four_or_more_children,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS no_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS one_child_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS two_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS three_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS four_or_more_children_percent
|
||||
FROM vse r
|
||||
LEFT JOIN children_count cc
|
||||
ON r.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
r.gender,
|
||||
r.convicts,
|
||||
r.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
total_count,
|
||||
no_children,
|
||||
one_child,
|
||||
two_children,
|
||||
three_children,
|
||||
four_or_more_children,
|
||||
COALESCE(ROUND(no_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(one_child * 100.0 / NULLIF(total_count, 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(two_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(three_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(four_or_more_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(no_children) AS no_children,
|
||||
SUM(one_child) AS one_child,
|
||||
SUM(two_children) AS two_children,
|
||||
SUM(three_children) AS three_children,
|
||||
SUM(four_or_more_children) AS four_or_more_children,
|
||||
COALESCE(ROUND(SUM(no_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(SUM(one_child) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(SUM(two_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(SUM(three_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(SUM(four_or_more_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
GROUP BY recruitment_id, convicts</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,423 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.child_minor_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 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>
|
||||
<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>child_minor</table>
|
||||
<value>
|
||||
<name>no_child</name>
|
||||
<rename>no_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child"</name>
|
||||
<rename>one_child</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child"</name>
|
||||
<rename>two_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child"</name>
|
||||
<rename>three_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child"</name>
|
||||
<rename>four_or_more_children</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_child_percent</name>
|
||||
<rename>no_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"1_child_percent"</name>
|
||||
<rename>one_child_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"2_child_percent"</name>
|
||||
<rename>two_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"3_child_percent"</name>
|
||||
<rename>three_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"4_more_child_percent"</name>
|
||||
<rename>four_or_more_children_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</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>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1504</xloc>
|
||||
<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>
|
||||
<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_MC}'), ','))::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
|
||||
),
|
||||
*/
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--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,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
ri.recruit_id,
|
||||
--COALESCE(r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
'ALL' AS convicts,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info 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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
),
|
||||
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_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) FILTER (
|
||||
WHERE make_date(
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int
|
||||
) > CURRENT_DATE - INTERVAL '18 years'
|
||||
) AS children_under_18
|
||||
FROM
|
||||
extracted_children
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
gender_and_recruitment_data AS (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(r.recruit_id) AS total_count,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) AS no_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) AS one_child,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) AS two_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) AS three_children,
|
||||
COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) AS four_or_more_children,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 0) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS no_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 1) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS one_child_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 2) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS two_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) = 3) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS three_children_percent,
|
||||
ROUND(COUNT(r.recruit_id) FILTER (WHERE COALESCE(children_under_18, 0) >= 4) * 100.0 / NULLIF(COUNT(r.recruit_id), 0), 2) AS four_or_more_children_percent
|
||||
FROM vse r
|
||||
LEFT JOIN children_count cc
|
||||
ON r.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
r.gender,
|
||||
r.convicts,
|
||||
r.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
total_count,
|
||||
no_children,
|
||||
one_child,
|
||||
two_children,
|
||||
three_children,
|
||||
four_or_more_children,
|
||||
COALESCE(ROUND(no_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(one_child * 100.0 / NULLIF(total_count, 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(two_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(three_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(four_or_more_children * 100.0 / NULLIF(total_count, 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(no_children) AS no_children,
|
||||
SUM(one_child) AS one_child,
|
||||
SUM(two_children) AS two_children,
|
||||
SUM(three_children) AS three_children,
|
||||
SUM(four_or_more_children) AS four_or_more_children,
|
||||
COALESCE(ROUND(SUM(no_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS no_children_percent,
|
||||
COALESCE(ROUND(SUM(one_child) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS one_child_percent,
|
||||
COALESCE(ROUND(SUM(two_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS two_children_percent,
|
||||
COALESCE(ROUND(SUM(three_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS three_children_percent,
|
||||
COALESCE(ROUND(SUM(four_or_more_children) * 100.0 / NULLIF(SUM(total_count), 0), 2), 0) AS four_or_more_children_percent
|
||||
FROM
|
||||
gender_and_recruitment_data
|
||||
GROUP BY recruitment_id, convicts</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,309 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>total_registered.driver_license(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 17:29:01.571</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 17:29:01.571</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>592</xloc>
|
||||
<yloc>400</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.driver_license_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.driver_license(m_c)/total_registered.driver_license_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>240</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.driver_license_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.driver_license(m_c)/total_registered.driver_license_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>320</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.driver_license_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.driver_license(m_c)/total_registered.driver_license_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>400</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.driver_license_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.driver_license(m_c)/total_registered.driver_license_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>480</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.driver_license_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.driver_license(m_c)/total_registered.driver_license_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>560</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1520</xloc>
|
||||
<yloc>240</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1520</xloc>
|
||||
<yloc>320</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1520</xloc>
|
||||
<yloc>400</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1520</xloc>
|
||||
<yloc>480</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1520</xloc>
|
||||
<yloc>560</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.driver_license_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.driver_license_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.driver_license_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.driver_license_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.driver_license_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.driver_license_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.driver_license_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.driver_license_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.driver_license_pr4(m_c).hpl</from>
|
||||
<to>Success 4</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.driver_license_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.driver_license_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 (driver_license) регионы/все</from>
|
||||
<to>Insert / update (total_registered.driver_license) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.driver_license) 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>driver_license</table>
|
||||
<value>
|
||||
<name>"A"</name>
|
||||
<rename>a</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B"</name>
|
||||
<rename>b</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C"</name>
|
||||
<rename>c</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D"</name>
|
||||
<rename>d</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E"</name>
|
||||
<rename>e</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>nope</name>
|
||||
<rename>nope</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"A_repcent"</name>
|
||||
<rename>a_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B_repcent"</name>
|
||||
<rename>b_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C_repcent"</name>
|
||||
<rename>c_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D_repcent"</name>
|
||||
<rename>d_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E_repcent"</name>
|
||||
<rename>e_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>nope_repcent</name>
|
||||
<rename>nope_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>total_count</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>1264</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (driver_license) регионы/все</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
|
||||
),
|
||||
*/
|
||||
categorized AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
),
|
||||
aggregated AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
-- Считаем количество уникальных рекрутов с каждой категорией
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.gender, r.recruitment_id, r.convicts
|
||||
),
|
||||
aggregated_all AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.recruitment_id, r.convicts
|
||||
)
|
||||
|
||||
-- Объединение результатов с вычислением процентов
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated_all</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>800</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.driver_license_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 (driver_license) регионы/все</from>
|
||||
<to>Insert / update (total_registered.driver_license) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.driver_license) 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>driver_license</table>
|
||||
<value>
|
||||
<name>"A"</name>
|
||||
<rename>a</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B"</name>
|
||||
<rename>b</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C"</name>
|
||||
<rename>c</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D"</name>
|
||||
<rename>d</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E"</name>
|
||||
<rename>e</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>nope</name>
|
||||
<rename>nope</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"A_repcent"</name>
|
||||
<rename>a_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B_repcent"</name>
|
||||
<rename>b_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C_repcent"</name>
|
||||
<rename>c_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D_repcent"</name>
|
||||
<rename>d_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E_repcent"</name>
|
||||
<rename>e_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>nope_repcent</name>
|
||||
<rename>nope_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>total_count</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>1264</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (driver_license) регионы/все</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
|
||||
),
|
||||
*/
|
||||
categorized AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
),
|
||||
aggregated AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
-- Считаем количество уникальных рекрутов с каждой категорией
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.gender, r.recruitment_id, r.convicts
|
||||
),
|
||||
aggregated_all AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.recruitment_id, r.convicts
|
||||
)
|
||||
|
||||
-- Объединение результатов с вычислением процентов
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated_all</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>800</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.driver_license_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 (driver_license) регионы/все</from>
|
||||
<to>Insert / update (total_registered.driver_license) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.driver_license) 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>driver_license</table>
|
||||
<value>
|
||||
<name>"A"</name>
|
||||
<rename>a</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B"</name>
|
||||
<rename>b</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C"</name>
|
||||
<rename>c</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D"</name>
|
||||
<rename>d</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E"</name>
|
||||
<rename>e</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>nope</name>
|
||||
<rename>nope</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"A_repcent"</name>
|
||||
<rename>a_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B_repcent"</name>
|
||||
<rename>b_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C_repcent"</name>
|
||||
<rename>c_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D_repcent"</name>
|
||||
<rename>d_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E_repcent"</name>
|
||||
<rename>e_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>nope_repcent</name>
|
||||
<rename>nope_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>total_count</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>1264</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (driver_license) регионы/все</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
|
||||
),
|
||||
*/
|
||||
categorized AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
),
|
||||
aggregated AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
-- Считаем количество уникальных рекрутов с каждой категорией
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.gender, r.recruitment_id, r.convicts
|
||||
),
|
||||
aggregated_all AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.recruitment_id, r.convicts
|
||||
)
|
||||
|
||||
-- Объединение результатов с вычислением процентов
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated_all</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>800</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.driver_license_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 (driver_license) регионы/все</from>
|
||||
<to>Insert / update (total_registered.driver_license) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.driver_license) 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>driver_license</table>
|
||||
<value>
|
||||
<name>"A"</name>
|
||||
<rename>a</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B"</name>
|
||||
<rename>b</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C"</name>
|
||||
<rename>c</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D"</name>
|
||||
<rename>d</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E"</name>
|
||||
<rename>e</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>nope</name>
|
||||
<rename>nope</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"A_repcent"</name>
|
||||
<rename>a_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B_repcent"</name>
|
||||
<rename>b_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C_repcent"</name>
|
||||
<rename>c_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D_repcent"</name>
|
||||
<rename>d_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E_repcent"</name>
|
||||
<rename>e_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>nope_repcent</name>
|
||||
<rename>nope_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>total_count</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>1264</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (driver_license) регионы/все</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
|
||||
),
|
||||
*/
|
||||
categorized AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
),
|
||||
aggregated AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
-- Считаем количество уникальных рекрутов с каждой категорией
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.gender, r.recruitment_id, r.convicts
|
||||
),
|
||||
aggregated_all AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.recruitment_id, r.convicts
|
||||
)
|
||||
|
||||
-- Объединение результатов с вычислением процентов
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated_all</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>800</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.driver_license_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 (driver_license) регионы/все</from>
|
||||
<to>Insert / update (total_registered.driver_license) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.driver_license) 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>driver_license</table>
|
||||
<value>
|
||||
<name>"A"</name>
|
||||
<rename>a</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B"</name>
|
||||
<rename>b</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C"</name>
|
||||
<rename>c</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D"</name>
|
||||
<rename>d</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E"</name>
|
||||
<rename>e</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>nope</name>
|
||||
<rename>nope</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"A_repcent"</name>
|
||||
<rename>a_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"B_repcent"</name>
|
||||
<rename>b_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"C_repcent"</name>
|
||||
<rename>c_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"D_repcent"</name>
|
||||
<rename>d_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"E_repcent"</name>
|
||||
<rename>e_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>nope_repcent</name>
|
||||
<rename>nope_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>total_count</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>1264</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (driver_license) регионы/все</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
|
||||
),
|
||||
*/
|
||||
categorized AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
'ALL' AS convicts,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%A%' THEN 1 ELSE 0 END) AS has_A,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%B%' THEN 1 ELSE 0 END) AS has_B,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%C%' THEN 1 ELSE 0 END) AS has_C,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%D%' THEN 1 ELSE 0 END) AS has_D,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%E%' THEN 1 ELSE 0 END) AS has_E,
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%M%' THEN 1 ELSE 0 END) AS has_M, -- мопеды
|
||||
MAX(CASE WHEN cat->>'naimKatTS' like '%T%' THEN 1 ELSE 0 END) AS has_T -- трамваи и троллейбусы
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
--JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
LEFT JOIN jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
|
||||
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)
|
||||
*/
|
||||
AND r.gender IN ('MALE', 'FEMALE') -- Исключаем NULL
|
||||
GROUP BY r.id, r.gender
|
||||
),
|
||||
aggregated AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN r.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
-- Считаем количество уникальных рекрутов с каждой категорией
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.gender, r.recruitment_id, r.convicts
|
||||
),
|
||||
aggregated_all AS (
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
'ALL' AS gender,
|
||||
r.convicts,
|
||||
r.recruitment_id,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) AS a,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) AS b,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) AS c,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) AS d,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) AS e,
|
||||
COUNT(DISTINCT r.id) FILTER (WHERE (has_A + has_B + has_C + has_D + has_E = 0) OR ((has_M + has_T > 0) AND (has_A + has_B + has_C + has_D + has_E = 0))) AS nope, -- условие от 14.03.2025
|
||||
COUNT(DISTINCT r.id) AS total
|
||||
FROM categorized r
|
||||
GROUP BY r.recruitment_id, r.convicts
|
||||
)
|
||||
|
||||
-- Объединение результатов с вычислением процентов
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated
|
||||
UNION ALL
|
||||
SELECT
|
||||
*,
|
||||
COALESCE(ROUND((a * 100.0) / NULLIF(total, 0), 2), 0) AS a_percent,
|
||||
COALESCE(ROUND((b * 100.0) / NULLIF(total, 0), 2), 0) AS b_percent,
|
||||
COALESCE(ROUND((c * 100.0) / NULLIF(total, 0), 2), 0) AS c_percent,
|
||||
COALESCE(ROUND((d * 100.0) / NULLIF(total, 0), 2), 0) AS d_percent,
|
||||
COALESCE(ROUND((e * 100.0) / NULLIF(total, 0), 2), 0) AS e_percent,
|
||||
COALESCE(ROUND((nope * 100.0) / NULLIF(total, 0), 2), 0) AS nope_percent
|
||||
FROM aggregated_all</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>800</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,309 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>total_registered.reg_mil_cat(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 15:05:31.181</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 15:05:31.181</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>400</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat(m_c)/total_registered.reg_mil_cat_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>816</xloc>
|
||||
<yloc>208</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat(m_c)/total_registered.reg_mil_cat_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>816</xloc>
|
||||
<yloc>288</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat(m_c)/total_registered.reg_mil_cat_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>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>816</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat(m_c)/total_registered.reg_mil_cat_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>816</xloc>
|
||||
<yloc>448</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat(m_c)/total_registered.reg_mil_cat_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>816</xloc>
|
||||
<yloc>528</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1136</xloc>
|
||||
<yloc>208</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1136</xloc>
|
||||
<yloc>288</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1136</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1136</xloc>
|
||||
<yloc>448</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1136</xloc>
|
||||
<yloc>528</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.reg_mil_cat_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.reg_mil_cat_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.reg_mil_cat_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.reg_mil_cat_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.reg_mil_cat_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.reg_mil_cat_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.reg_mil_cat_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.reg_mil_cat_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.reg_mil_cat_pr4(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_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat)</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.reg_mil_cat)</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>reg_mil_cat</table>
|
||||
<value>
|
||||
<name>first_reg_17</name>
|
||||
<rename>first_reg_17</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18</name>
|
||||
<rename>first_reg_18</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W"</name>
|
||||
<rename>mil_spec_w</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty</name>
|
||||
<rename>returned_dep_liberty</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished</name>
|
||||
<rename>punished</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship</name>
|
||||
<rename>received_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_17_percent</name>
|
||||
<rename>first_reg_17_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18_percent</name>
|
||||
<rename>first_reg_18_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty_percent</name>
|
||||
<rename>returned_dep_liberty_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W_percent"</name>
|
||||
<rename>mil_spec_w_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished_percent</name>
|
||||
<rename>punished_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship_percent</name>
|
||||
<rename>received_citizenship_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>288</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_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
|
||||
),
|
||||
base_data AS (
|
||||
-- Основной набор данных с вычислением mil_reg
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
1 AS is_military_registered
|
||||
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)
|
||||
*/
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY[
|
||||
'1', -- Освобождение из мест лишения свободы
|
||||
'2', -- Приобретение гражданства Российской Федерации
|
||||
'3', -- Получение военно-учётной специальности гражданином женского пола
|
||||
'4', -- Отбывание наказания в местах лишения свободы
|
||||
'5'--, -- Достижение 17 лет в год постановки на воинский учёт
|
||||
--'6' -- Первоначальная постановка на воинский учет граждан, не состоящих, но обязанных состоять на воинском учёте
|
||||
])
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
0 AS is_military_registered
|
||||
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
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4', '5'])
|
||||
),
|
||||
t1 AS (
|
||||
-- Первоначальная постановка 17 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_17
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"5"' -- Достижение 17 лет в год постановки на воинский учёт
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t2 AS (
|
||||
-- Первоначальная постановка 18 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_18
|
||||
FROM base_data
|
||||
WHERE jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4'])
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t3 AS (
|
||||
-- Женщины, получившие ВУС
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS mil_spec_w
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t4 AS (
|
||||
-- Возвратившиеся из мест лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS returned_dep_liberty
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"1"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t5 AS (
|
||||
-- Отбывающие наказание в местах лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS punished
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"4"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t6 AS (
|
||||
-- Получившие гражданство
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS received_citizenship
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"2"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
total AS (
|
||||
-- Общее количество записей
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS total_count
|
||||
FROM base_data
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
uniq_ms AS (
|
||||
SELECT
|
||||
distinct
|
||||
recruitment_id,
|
||||
is_military_registered
|
||||
FROM base_data
|
||||
)
|
||||
-- Основной запрос
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
dc.recruitment_id,
|
||||
dc.is_military_registered AS mil_reg,
|
||||
COALESCE(total.total_count, 0) AS total_count,
|
||||
COALESCE(t1.first_reg_17, 0) AS first_reg_17,
|
||||
COALESCE(t2.first_reg_18, 0) AS first_reg_18,
|
||||
COALESCE(t3.mil_spec_w, 0) AS mil_spec_w,
|
||||
COALESCE(t4.returned_dep_liberty, 0) AS returned_dep_liberty,
|
||||
COALESCE(t5.punished, 0) AS punished,
|
||||
COALESCE(t6.received_citizenship, 0) AS received_citizenship,
|
||||
-- Вычисление процентов
|
||||
COALESCE(ROUND(COALESCE(t1.first_reg_17, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_17_percent,
|
||||
COALESCE(ROUND(COALESCE(t2.first_reg_18, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_18_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.returned_dep_liberty, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS returned_dep_liberty_percent,
|
||||
COALESCE(ROUND(COALESCE(t3.mil_spec_w, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS mil_spec_w_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.punished, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS punished_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.received_citizenship, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS received_citizenship_percent
|
||||
FROM uniq_ms dc
|
||||
LEFT JOIN total ON dc.recruitment_id = total.recruitment_id
|
||||
AND dc.is_military_registered = total.is_military_registered
|
||||
LEFT JOIN t1 ON dc.recruitment_id = t1.recruitment_id
|
||||
AND dc.is_military_registered = t1.is_military_registered
|
||||
LEFT JOIN t2 ON dc.recruitment_id = t2.recruitment_id
|
||||
AND dc.is_military_registered = t2.is_military_registered
|
||||
LEFT JOIN t3 ON dc.recruitment_id = t3.recruitment_id
|
||||
AND dc.is_military_registered = t3.is_military_registered
|
||||
LEFT JOIN t4 ON dc.recruitment_id = t4.recruitment_id
|
||||
AND dc.is_military_registered = t4.is_military_registered
|
||||
LEFT JOIN t5 ON dc.recruitment_id = t5.recruitment_id
|
||||
AND dc.is_military_registered = t5.is_military_registered
|
||||
LEFT JOIN t6 ON dc.recruitment_id = t6.recruitment_id
|
||||
AND dc.is_military_registered = t6.is_military_registered;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>736</xloc>
|
||||
<yloc>288</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat)</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.reg_mil_cat)</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>reg_mil_cat</table>
|
||||
<value>
|
||||
<name>first_reg_17</name>
|
||||
<rename>first_reg_17</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18</name>
|
||||
<rename>first_reg_18</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W"</name>
|
||||
<rename>mil_spec_w</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty</name>
|
||||
<rename>returned_dep_liberty</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished</name>
|
||||
<rename>punished</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship</name>
|
||||
<rename>received_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_17_percent</name>
|
||||
<rename>first_reg_17_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18_percent</name>
|
||||
<rename>first_reg_18_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty_percent</name>
|
||||
<rename>returned_dep_liberty_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W_percent"</name>
|
||||
<rename>mil_spec_w_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished_percent</name>
|
||||
<rename>punished_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship_percent</name>
|
||||
<rename>received_citizenship_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>288</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_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
|
||||
),
|
||||
base_data AS (
|
||||
-- Основной набор данных с вычислением mil_reg
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
1 AS is_military_registered
|
||||
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)
|
||||
*/
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY[
|
||||
'1', -- Освобождение из мест лишения свободы
|
||||
'2', -- Приобретение гражданства Российской Федерации
|
||||
'3', -- Получение военно-учётной специальности гражданином женского пола
|
||||
'4', -- Отбывание наказания в местах лишения свободы
|
||||
'5'--, -- Достижение 17 лет в год постановки на воинский учёт
|
||||
--'6' -- Первоначальная постановка на воинский учет граждан, не состоящих, но обязанных состоять на воинском учёте
|
||||
])
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
0 AS is_military_registered
|
||||
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
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4', '5'])
|
||||
),
|
||||
t1 AS (
|
||||
-- Первоначальная постановка 17 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_17
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"5"' -- Достижение 17 лет в год постановки на воинский учёт
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t2 AS (
|
||||
-- Первоначальная постановка 18 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_18
|
||||
FROM base_data
|
||||
WHERE jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4'])
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t3 AS (
|
||||
-- Женщины, получившие ВУС
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS mil_spec_w
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t4 AS (
|
||||
-- Возвратившиеся из мест лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS returned_dep_liberty
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"1"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t5 AS (
|
||||
-- Отбывающие наказание в местах лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS punished
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"4"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t6 AS (
|
||||
-- Получившие гражданство
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS received_citizenship
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"2"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
total AS (
|
||||
-- Общее количество записей
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS total_count
|
||||
FROM base_data
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
uniq_ms AS (
|
||||
SELECT
|
||||
distinct
|
||||
recruitment_id,
|
||||
is_military_registered
|
||||
FROM base_data
|
||||
)
|
||||
-- Основной запрос
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
dc.recruitment_id,
|
||||
dc.is_military_registered AS mil_reg,
|
||||
COALESCE(total.total_count, 0) AS total_count,
|
||||
COALESCE(t1.first_reg_17, 0) AS first_reg_17,
|
||||
COALESCE(t2.first_reg_18, 0) AS first_reg_18,
|
||||
COALESCE(t3.mil_spec_w, 0) AS mil_spec_w,
|
||||
COALESCE(t4.returned_dep_liberty, 0) AS returned_dep_liberty,
|
||||
COALESCE(t5.punished, 0) AS punished,
|
||||
COALESCE(t6.received_citizenship, 0) AS received_citizenship,
|
||||
-- Вычисление процентов
|
||||
COALESCE(ROUND(COALESCE(t1.first_reg_17, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_17_percent,
|
||||
COALESCE(ROUND(COALESCE(t2.first_reg_18, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_18_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.returned_dep_liberty, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS returned_dep_liberty_percent,
|
||||
COALESCE(ROUND(COALESCE(t3.mil_spec_w, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS mil_spec_w_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.punished, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS punished_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.received_citizenship, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS received_citizenship_percent
|
||||
FROM uniq_ms dc
|
||||
LEFT JOIN total ON dc.recruitment_id = total.recruitment_id
|
||||
AND dc.is_military_registered = total.is_military_registered
|
||||
LEFT JOIN t1 ON dc.recruitment_id = t1.recruitment_id
|
||||
AND dc.is_military_registered = t1.is_military_registered
|
||||
LEFT JOIN t2 ON dc.recruitment_id = t2.recruitment_id
|
||||
AND dc.is_military_registered = t2.is_military_registered
|
||||
LEFT JOIN t3 ON dc.recruitment_id = t3.recruitment_id
|
||||
AND dc.is_military_registered = t3.is_military_registered
|
||||
LEFT JOIN t4 ON dc.recruitment_id = t4.recruitment_id
|
||||
AND dc.is_military_registered = t4.is_military_registered
|
||||
LEFT JOIN t5 ON dc.recruitment_id = t5.recruitment_id
|
||||
AND dc.is_military_registered = t5.is_military_registered
|
||||
LEFT JOIN t6 ON dc.recruitment_id = t6.recruitment_id
|
||||
AND dc.is_military_registered = t6.is_military_registered;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>736</xloc>
|
||||
<yloc>288</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat)</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.reg_mil_cat)</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>reg_mil_cat</table>
|
||||
<value>
|
||||
<name>first_reg_17</name>
|
||||
<rename>first_reg_17</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18</name>
|
||||
<rename>first_reg_18</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W"</name>
|
||||
<rename>mil_spec_w</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty</name>
|
||||
<rename>returned_dep_liberty</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished</name>
|
||||
<rename>punished</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship</name>
|
||||
<rename>received_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_17_percent</name>
|
||||
<rename>first_reg_17_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18_percent</name>
|
||||
<rename>first_reg_18_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty_percent</name>
|
||||
<rename>returned_dep_liberty_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W_percent"</name>
|
||||
<rename>mil_spec_w_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished_percent</name>
|
||||
<rename>punished_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship_percent</name>
|
||||
<rename>received_citizenship_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>288</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_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
|
||||
),
|
||||
base_data AS (
|
||||
-- Основной набор данных с вычислением mil_reg
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
1 AS is_military_registered
|
||||
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)
|
||||
*/
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY[
|
||||
'1', -- Освобождение из мест лишения свободы
|
||||
'2', -- Приобретение гражданства Российской Федерации
|
||||
'3', -- Получение военно-учётной специальности гражданином женского пола
|
||||
'4', -- Отбывание наказания в местах лишения свободы
|
||||
'5'--, -- Достижение 17 лет в год постановки на воинский учёт
|
||||
--'6' -- Первоначальная постановка на воинский учет граждан, не состоящих, но обязанных состоять на воинском учёте
|
||||
])
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
0 AS is_military_registered
|
||||
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
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4', '5'])
|
||||
),
|
||||
t1 AS (
|
||||
-- Первоначальная постановка 17 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_17
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"5"' -- Достижение 17 лет в год постановки на воинский учёт
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t2 AS (
|
||||
-- Первоначальная постановка 18 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_18
|
||||
FROM base_data
|
||||
WHERE jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4'])
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t3 AS (
|
||||
-- Женщины, получившие ВУС
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS mil_spec_w
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t4 AS (
|
||||
-- Возвратившиеся из мест лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS returned_dep_liberty
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"1"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t5 AS (
|
||||
-- Отбывающие наказание в местах лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS punished
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"4"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t6 AS (
|
||||
-- Получившие гражданство
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS received_citizenship
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"2"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
total AS (
|
||||
-- Общее количество записей
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS total_count
|
||||
FROM base_data
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
uniq_ms AS (
|
||||
SELECT
|
||||
distinct
|
||||
recruitment_id,
|
||||
is_military_registered
|
||||
FROM base_data
|
||||
)
|
||||
-- Основной запрос
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
dc.recruitment_id,
|
||||
dc.is_military_registered AS mil_reg,
|
||||
COALESCE(total.total_count, 0) AS total_count,
|
||||
COALESCE(t1.first_reg_17, 0) AS first_reg_17,
|
||||
COALESCE(t2.first_reg_18, 0) AS first_reg_18,
|
||||
COALESCE(t3.mil_spec_w, 0) AS mil_spec_w,
|
||||
COALESCE(t4.returned_dep_liberty, 0) AS returned_dep_liberty,
|
||||
COALESCE(t5.punished, 0) AS punished,
|
||||
COALESCE(t6.received_citizenship, 0) AS received_citizenship,
|
||||
-- Вычисление процентов
|
||||
COALESCE(ROUND(COALESCE(t1.first_reg_17, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_17_percent,
|
||||
COALESCE(ROUND(COALESCE(t2.first_reg_18, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_18_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.returned_dep_liberty, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS returned_dep_liberty_percent,
|
||||
COALESCE(ROUND(COALESCE(t3.mil_spec_w, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS mil_spec_w_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.punished, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS punished_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.received_citizenship, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS received_citizenship_percent
|
||||
FROM uniq_ms dc
|
||||
LEFT JOIN total ON dc.recruitment_id = total.recruitment_id
|
||||
AND dc.is_military_registered = total.is_military_registered
|
||||
LEFT JOIN t1 ON dc.recruitment_id = t1.recruitment_id
|
||||
AND dc.is_military_registered = t1.is_military_registered
|
||||
LEFT JOIN t2 ON dc.recruitment_id = t2.recruitment_id
|
||||
AND dc.is_military_registered = t2.is_military_registered
|
||||
LEFT JOIN t3 ON dc.recruitment_id = t3.recruitment_id
|
||||
AND dc.is_military_registered = t3.is_military_registered
|
||||
LEFT JOIN t4 ON dc.recruitment_id = t4.recruitment_id
|
||||
AND dc.is_military_registered = t4.is_military_registered
|
||||
LEFT JOIN t5 ON dc.recruitment_id = t5.recruitment_id
|
||||
AND dc.is_military_registered = t5.is_military_registered
|
||||
LEFT JOIN t6 ON dc.recruitment_id = t6.recruitment_id
|
||||
AND dc.is_military_registered = t6.is_military_registered;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>736</xloc>
|
||||
<yloc>288</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat)</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.reg_mil_cat)</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>reg_mil_cat</table>
|
||||
<value>
|
||||
<name>first_reg_17</name>
|
||||
<rename>first_reg_17</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18</name>
|
||||
<rename>first_reg_18</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W"</name>
|
||||
<rename>mil_spec_w</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty</name>
|
||||
<rename>returned_dep_liberty</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished</name>
|
||||
<rename>punished</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship</name>
|
||||
<rename>received_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_17_percent</name>
|
||||
<rename>first_reg_17_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18_percent</name>
|
||||
<rename>first_reg_18_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty_percent</name>
|
||||
<rename>returned_dep_liberty_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W_percent"</name>
|
||||
<rename>mil_spec_w_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished_percent</name>
|
||||
<rename>punished_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship_percent</name>
|
||||
<rename>received_citizenship_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>288</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_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
|
||||
),
|
||||
base_data AS (
|
||||
-- Основной набор данных с вычислением mil_reg
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
1 AS is_military_registered
|
||||
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)
|
||||
*/
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY[
|
||||
'1', -- Освобождение из мест лишения свободы
|
||||
'2', -- Приобретение гражданства Российской Федерации
|
||||
'3', -- Получение военно-учётной специальности гражданином женского пола
|
||||
'4', -- Отбывание наказания в местах лишения свободы
|
||||
'5'--, -- Достижение 17 лет в год постановки на воинский учёт
|
||||
--'6' -- Первоначальная постановка на воинский учет граждан, не состоящих, но обязанных состоять на воинском учёте
|
||||
])
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
0 AS is_military_registered
|
||||
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
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4', '5'])
|
||||
),
|
||||
t1 AS (
|
||||
-- Первоначальная постановка 17 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_17
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"5"' -- Достижение 17 лет в год постановки на воинский учёт
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t2 AS (
|
||||
-- Первоначальная постановка 18 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_18
|
||||
FROM base_data
|
||||
WHERE jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4'])
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t3 AS (
|
||||
-- Женщины, получившие ВУС
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS mil_spec_w
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t4 AS (
|
||||
-- Возвратившиеся из мест лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS returned_dep_liberty
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"1"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t5 AS (
|
||||
-- Отбывающие наказание в местах лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS punished
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"4"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t6 AS (
|
||||
-- Получившие гражданство
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS received_citizenship
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"2"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
total AS (
|
||||
-- Общее количество записей
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS total_count
|
||||
FROM base_data
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
uniq_ms AS (
|
||||
SELECT
|
||||
distinct
|
||||
recruitment_id,
|
||||
is_military_registered
|
||||
FROM base_data
|
||||
)
|
||||
-- Основной запрос
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
dc.recruitment_id,
|
||||
dc.is_military_registered AS mil_reg,
|
||||
COALESCE(total.total_count, 0) AS total_count,
|
||||
COALESCE(t1.first_reg_17, 0) AS first_reg_17,
|
||||
COALESCE(t2.first_reg_18, 0) AS first_reg_18,
|
||||
COALESCE(t3.mil_spec_w, 0) AS mil_spec_w,
|
||||
COALESCE(t4.returned_dep_liberty, 0) AS returned_dep_liberty,
|
||||
COALESCE(t5.punished, 0) AS punished,
|
||||
COALESCE(t6.received_citizenship, 0) AS received_citizenship,
|
||||
-- Вычисление процентов
|
||||
COALESCE(ROUND(COALESCE(t1.first_reg_17, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_17_percent,
|
||||
COALESCE(ROUND(COALESCE(t2.first_reg_18, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_18_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.returned_dep_liberty, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS returned_dep_liberty_percent,
|
||||
COALESCE(ROUND(COALESCE(t3.mil_spec_w, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS mil_spec_w_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.punished, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS punished_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.received_citizenship, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS received_citizenship_percent
|
||||
FROM uniq_ms dc
|
||||
LEFT JOIN total ON dc.recruitment_id = total.recruitment_id
|
||||
AND dc.is_military_registered = total.is_military_registered
|
||||
LEFT JOIN t1 ON dc.recruitment_id = t1.recruitment_id
|
||||
AND dc.is_military_registered = t1.is_military_registered
|
||||
LEFT JOIN t2 ON dc.recruitment_id = t2.recruitment_id
|
||||
AND dc.is_military_registered = t2.is_military_registered
|
||||
LEFT JOIN t3 ON dc.recruitment_id = t3.recruitment_id
|
||||
AND dc.is_military_registered = t3.is_military_registered
|
||||
LEFT JOIN t4 ON dc.recruitment_id = t4.recruitment_id
|
||||
AND dc.is_military_registered = t4.is_military_registered
|
||||
LEFT JOIN t5 ON dc.recruitment_id = t5.recruitment_id
|
||||
AND dc.is_military_registered = t5.is_military_registered
|
||||
LEFT JOIN t6 ON dc.recruitment_id = t6.recruitment_id
|
||||
AND dc.is_military_registered = t6.is_military_registered;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>736</xloc>
|
||||
<yloc>288</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.reg_mil_cat_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.reg_mil_cat)</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.reg_mil_cat)</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>reg_mil_cat</table>
|
||||
<value>
|
||||
<name>first_reg_17</name>
|
||||
<rename>first_reg_17</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18</name>
|
||||
<rename>first_reg_18</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W"</name>
|
||||
<rename>mil_spec_w</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty</name>
|
||||
<rename>returned_dep_liberty</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished</name>
|
||||
<rename>punished</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship</name>
|
||||
<rename>received_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_17_percent</name>
|
||||
<rename>first_reg_17_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>first_reg_18_percent</name>
|
||||
<rename>first_reg_18_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>returned_dep_liberty_percent</name>
|
||||
<rename>returned_dep_liberty_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"mil_spec_W_percent"</name>
|
||||
<rename>mil_spec_w_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>punished_percent</name>
|
||||
<rename>punished_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>received_citizenship_percent</name>
|
||||
<rename>received_citizenship_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>288</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_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
|
||||
),
|
||||
base_data AS (
|
||||
-- Основной набор данных с вычислением mil_reg
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
r.current_recruitment_id AS recruitment_id,
|
||||
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
1 AS is_military_registered
|
||||
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)
|
||||
*/
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY[
|
||||
'1', -- Освобождение из мест лишения свободы
|
||||
'2', -- Приобретение гражданства Российской Федерации
|
||||
'3', -- Получение военно-учётной специальности гражданином женского пола
|
||||
'4', -- Отбывание наказания в местах лишения свободы
|
||||
'5'--, -- Достижение 17 лет в год постановки на воинский учёт
|
||||
--'6' -- Первоначальная постановка на воинский учет граждан, не состоящих, но обязанных состоять на воинском учёте
|
||||
])
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.registration_reasons,
|
||||
r.gender,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
0 AS is_military_registered
|
||||
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
|
||||
AND jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4', '5'])
|
||||
),
|
||||
t1 AS (
|
||||
-- Первоначальная постановка 17 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_17
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"5"' -- Достижение 17 лет в год постановки на воинский учёт
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t2 AS (
|
||||
-- Первоначальная постановка 18 лет
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS first_reg_18
|
||||
FROM base_data
|
||||
WHERE jsonb_exists_any(registration_reasons, ARRAY['1', '2', '3', '4'])
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t3 AS (
|
||||
-- Женщины, получившие ВУС
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS mil_spec_w
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t4 AS (
|
||||
-- Возвратившиеся из мест лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS returned_dep_liberty
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"1"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t5 AS (
|
||||
-- Отбывающие наказание в местах лишения свободы
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS punished
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"4"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
t6 AS (
|
||||
-- Получившие гражданство
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS received_citizenship
|
||||
FROM base_data
|
||||
WHERE registration_reasons @> '"2"'
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
total AS (
|
||||
-- Общее количество записей
|
||||
SELECT
|
||||
recruitment_id,
|
||||
is_military_registered,
|
||||
COUNT(*) AS total_count
|
||||
FROM base_data
|
||||
GROUP BY recruitment_id, is_military_registered
|
||||
),
|
||||
uniq_ms AS (
|
||||
SELECT
|
||||
distinct
|
||||
recruitment_id,
|
||||
is_military_registered
|
||||
FROM base_data
|
||||
)
|
||||
-- Основной запрос
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
dc.recruitment_id,
|
||||
dc.is_military_registered AS mil_reg,
|
||||
COALESCE(total.total_count, 0) AS total_count,
|
||||
COALESCE(t1.first_reg_17, 0) AS first_reg_17,
|
||||
COALESCE(t2.first_reg_18, 0) AS first_reg_18,
|
||||
COALESCE(t3.mil_spec_w, 0) AS mil_spec_w,
|
||||
COALESCE(t4.returned_dep_liberty, 0) AS returned_dep_liberty,
|
||||
COALESCE(t5.punished, 0) AS punished,
|
||||
COALESCE(t6.received_citizenship, 0) AS received_citizenship,
|
||||
-- Вычисление процентов
|
||||
COALESCE(ROUND(COALESCE(t1.first_reg_17, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_17_percent,
|
||||
COALESCE(ROUND(COALESCE(t2.first_reg_18, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS first_reg_18_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.returned_dep_liberty, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS returned_dep_liberty_percent,
|
||||
COALESCE(ROUND(COALESCE(t3.mil_spec_w, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS mil_spec_w_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.punished, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS punished_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.received_citizenship, 0) * 100.0 / NULLIF(total.total_count, 0), 2), 0) AS received_citizenship_percent
|
||||
FROM uniq_ms dc
|
||||
LEFT JOIN total ON dc.recruitment_id = total.recruitment_id
|
||||
AND dc.is_military_registered = total.is_military_registered
|
||||
LEFT JOIN t1 ON dc.recruitment_id = t1.recruitment_id
|
||||
AND dc.is_military_registered = t1.is_military_registered
|
||||
LEFT JOIN t2 ON dc.recruitment_id = t2.recruitment_id
|
||||
AND dc.is_military_registered = t2.is_military_registered
|
||||
LEFT JOIN t3 ON dc.recruitment_id = t3.recruitment_id
|
||||
AND dc.is_military_registered = t3.is_military_registered
|
||||
LEFT JOIN t4 ON dc.recruitment_id = t4.recruitment_id
|
||||
AND dc.is_military_registered = t4.is_military_registered
|
||||
LEFT JOIN t5 ON dc.recruitment_id = t5.recruitment_id
|
||||
AND dc.is_military_registered = t5.is_military_registered
|
||||
LEFT JOIN t6 ON dc.recruitment_id = t6.recruitment_id
|
||||
AND dc.is_military_registered = t6.is_military_registered;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>736</xloc>
|
||||
<yloc>288</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>total_registered.removed_registry(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 15:23:08.216</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 15:23:08.216</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>800</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.removed_registry_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.removed_registry(m_c)/total_registered.removed_registry_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>1312</xloc>
|
||||
<yloc>208</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.removed_registry_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.removed_registry(m_c)/total_registered.removed_registry_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>1312</xloc>
|
||||
<yloc>288</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.removed_registry_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.removed_registry(m_c)/total_registered.removed_registry_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>1312</xloc>
|
||||
<yloc>448</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.removed_registry_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.removed_registry(m_c)/total_registered.removed_registry_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>1312</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.removed_registry_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.removed_registry(m_c)/total_registered.removed_registry_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>1312</xloc>
|
||||
<yloc>528</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1664</xloc>
|
||||
<yloc>208</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1664</xloc>
|
||||
<yloc>288</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1664</xloc>
|
||||
<yloc>368</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1664</xloc>
|
||||
<yloc>448</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1664</xloc>
|
||||
<yloc>528</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.removed_registry_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.removed_registry_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.removed_registry_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.removed_registry_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.removed_registry_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.removed_registry_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.removed_registry_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.removed_registry_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.removed_registry_pr4(m_c).hpl</from>
|
||||
<to>Success 4</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.removed_registry_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.removed_registry_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>
|
||||
<notepad>
|
||||
<backgroundcolorblue>251</backgroundcolorblue>
|
||||
<backgroundcolorgreen>232</backgroundcolorgreen>
|
||||
<backgroundcolorred>201</backgroundcolorred>
|
||||
<bordercolorblue>90</bordercolorblue>
|
||||
<bordercolorgreen>58</bordercolorgreen>
|
||||
<bordercolorred>14</bordercolorred>
|
||||
<fontbold>N</fontbold>
|
||||
<fontcolorblue>90</fontcolorblue>
|
||||
<fontcolorgreen>58</fontcolorgreen>
|
||||
<fontcolorred>14</fontcolorred>
|
||||
<fontitalic>N</fontitalic>
|
||||
<fontname>Segoe UI</fontname>
|
||||
<fontsize>9</fontsize>
|
||||
<height>26</height>
|
||||
<xloc>904</xloc>
|
||||
<yloc>118</yloc>
|
||||
<note>на 12.03.2025 статус 1.3 на тесте рубит все результаты</note>
|
||||
<width>303</width>
|
||||
</notepad>
|
||||
</notepads>
|
||||
<order>
|
||||
<hop>
|
||||
<from>Table input (decision-document-service) регион 2</from>
|
||||
<to>Insert / update (total_registered.removed_registry) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.removed_registry) 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>total_registered</schema>
|
||||
<table>removed_registry</table>
|
||||
<value>
|
||||
<name>age_limit</name>
|
||||
<rename>age_limit</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death</name>
|
||||
<rename>death</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>removed_registry</name>
|
||||
<rename>removed_registry</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizenship</name>
|
||||
<rename>deprivation_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizen_percents</name>
|
||||
<rename>deprivation_citizen_percents</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>age_limit_percent</name>
|
||||
<rename>age_limit_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death_percent</name>
|
||||
<rename>death_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad_percent</name>
|
||||
<rename>travel_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad_percent</name>
|
||||
<rename>living_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_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>1408</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (decision-document-service) регион 2</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
|
||||
),
|
||||
recr AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.system_pgs_status
|
||||
FROM recruits r
|
||||
WHERE r.system_pgs_status = '1.3'
|
||||
),
|
||||
last_decision AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.code
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY d.recruit_id ORDER BY d.created_at DESC) AS rn,
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.type->>'code' AS code
|
||||
FROM decision d
|
||||
WHERE d.recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год
|
||||
) d
|
||||
WHERE rn = 1 -- ищем последнее решение для рекрута
|
||||
AND d.code IN ('9', '10')
|
||||
/*FROM decision d
|
||||
WHERE EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год*/
|
||||
),
|
||||
total_info AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
COUNT(*) AS removed_registry,
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') AS age_limit, -- Количество по причине предельный возраст
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') AS death, -- Количество по причине смерть
|
||||
--COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'citizenshipLost') AS deprivation_citizenship, -- лишение гражданства
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) AS other, -- прочее
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
|
||||
FROM last_decision d
|
||||
JOIN recr AS r ON d.recruit_id = r.id
|
||||
GROUP BY d.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
recruitment_id,
|
||||
COALESCE(total_info.removed_registry, 0) AS removed_registry,
|
||||
COALESCE(total_info.age_limit, 0) AS age_limit,
|
||||
COALESCE(total_info.death, 0) AS death,
|
||||
COALESCE(total_info.other, 0) AS other,
|
||||
COALESCE(total_info.age_limit_percent, 0) AS age_limit_percent,
|
||||
COALESCE(total_info.death_percent, 0) AS death_percent,
|
||||
COALESCE(total_info.other_percent, 0) AS other_percent,
|
||||
--deprivation_citizenship,
|
||||
'0' AS deprivation_citizenship,
|
||||
'0' AS travel_abroad,
|
||||
'0' AS living_abroad,
|
||||
'0' AS deprivation_citizen_percents,
|
||||
'0' AS travel_abroad_percent,
|
||||
'0' AS living_abroad_percent
|
||||
FROM total_info;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>752</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.removed_registry_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>
|
||||
<notepad>
|
||||
<backgroundcolorblue>251</backgroundcolorblue>
|
||||
<backgroundcolorgreen>232</backgroundcolorgreen>
|
||||
<backgroundcolorred>201</backgroundcolorred>
|
||||
<bordercolorblue>90</bordercolorblue>
|
||||
<bordercolorgreen>58</bordercolorgreen>
|
||||
<bordercolorred>14</bordercolorred>
|
||||
<fontbold>N</fontbold>
|
||||
<fontcolorblue>90</fontcolorblue>
|
||||
<fontcolorgreen>58</fontcolorgreen>
|
||||
<fontcolorred>14</fontcolorred>
|
||||
<fontitalic>N</fontitalic>
|
||||
<fontname>Segoe UI</fontname>
|
||||
<fontsize>9</fontsize>
|
||||
<height>26</height>
|
||||
<xloc>904</xloc>
|
||||
<yloc>118</yloc>
|
||||
<note>на 12.03.2025 статус 1.3 на тесте рубит все результаты</note>
|
||||
<width>303</width>
|
||||
</notepad>
|
||||
</notepads>
|
||||
<order>
|
||||
<hop>
|
||||
<from>Table input (decision-document-service) регион 2</from>
|
||||
<to>Insert / update (total_registered.removed_registry) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.removed_registry) 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>total_registered</schema>
|
||||
<table>removed_registry</table>
|
||||
<value>
|
||||
<name>age_limit</name>
|
||||
<rename>age_limit</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death</name>
|
||||
<rename>death</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>removed_registry</name>
|
||||
<rename>removed_registry</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizenship</name>
|
||||
<rename>deprivation_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizen_percents</name>
|
||||
<rename>deprivation_citizen_percents</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>age_limit_percent</name>
|
||||
<rename>age_limit_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death_percent</name>
|
||||
<rename>death_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad_percent</name>
|
||||
<rename>travel_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad_percent</name>
|
||||
<rename>living_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_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>1408</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (decision-document-service) регион 2</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
|
||||
),
|
||||
recr AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.system_pgs_status
|
||||
FROM recruits r
|
||||
WHERE r.system_pgs_status = '1.3'
|
||||
),
|
||||
last_decision AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.code
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY d.recruit_id ORDER BY d.created_at DESC) AS rn,
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.type->>'code' AS code
|
||||
FROM decision d
|
||||
WHERE d.recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год
|
||||
) d
|
||||
WHERE rn = 1 -- ищем последнее решение для рекрута
|
||||
AND d.code IN ('9', '10')
|
||||
/*FROM decision d
|
||||
WHERE EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год*/
|
||||
),
|
||||
total_info AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
COUNT(*) AS removed_registry,
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') AS age_limit, -- Количество по причине предельный возраст
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') AS death, -- Количество по причине смерть
|
||||
--COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'citizenshipLost') AS deprivation_citizenship, -- лишение гражданства
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) AS other, -- прочее
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
|
||||
FROM last_decision d
|
||||
JOIN recr AS r ON d.recruit_id = r.id
|
||||
GROUP BY d.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
recruitment_id,
|
||||
COALESCE(total_info.removed_registry, 0) AS removed_registry,
|
||||
COALESCE(total_info.age_limit, 0) AS age_limit,
|
||||
COALESCE(total_info.death, 0) AS death,
|
||||
COALESCE(total_info.other, 0) AS other,
|
||||
COALESCE(total_info.age_limit_percent, 0) AS age_limit_percent,
|
||||
COALESCE(total_info.death_percent, 0) AS death_percent,
|
||||
COALESCE(total_info.other_percent, 0) AS other_percent,
|
||||
--deprivation_citizenship,
|
||||
'0' AS deprivation_citizenship,
|
||||
'0' AS travel_abroad,
|
||||
'0' AS living_abroad,
|
||||
'0' AS deprivation_citizen_percents,
|
||||
'0' AS travel_abroad_percent,
|
||||
'0' AS living_abroad_percent
|
||||
FROM total_info;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>752</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.removed_registry_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>
|
||||
<notepad>
|
||||
<backgroundcolorblue>251</backgroundcolorblue>
|
||||
<backgroundcolorgreen>232</backgroundcolorgreen>
|
||||
<backgroundcolorred>201</backgroundcolorred>
|
||||
<bordercolorblue>90</bordercolorblue>
|
||||
<bordercolorgreen>58</bordercolorgreen>
|
||||
<bordercolorred>14</bordercolorred>
|
||||
<fontbold>N</fontbold>
|
||||
<fontcolorblue>90</fontcolorblue>
|
||||
<fontcolorgreen>58</fontcolorgreen>
|
||||
<fontcolorred>14</fontcolorred>
|
||||
<fontitalic>N</fontitalic>
|
||||
<fontname>Segoe UI</fontname>
|
||||
<fontsize>9</fontsize>
|
||||
<height>26</height>
|
||||
<xloc>904</xloc>
|
||||
<yloc>118</yloc>
|
||||
<note>на 12.03.2025 статус 1.3 на тесте рубит все результаты</note>
|
||||
<width>303</width>
|
||||
</notepad>
|
||||
</notepads>
|
||||
<order>
|
||||
<hop>
|
||||
<from>Table input (decision-document-service) регион 2</from>
|
||||
<to>Insert / update (total_registered.removed_registry) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.removed_registry) 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>total_registered</schema>
|
||||
<table>removed_registry</table>
|
||||
<value>
|
||||
<name>age_limit</name>
|
||||
<rename>age_limit</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death</name>
|
||||
<rename>death</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>removed_registry</name>
|
||||
<rename>removed_registry</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizenship</name>
|
||||
<rename>deprivation_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizen_percents</name>
|
||||
<rename>deprivation_citizen_percents</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>age_limit_percent</name>
|
||||
<rename>age_limit_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death_percent</name>
|
||||
<rename>death_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad_percent</name>
|
||||
<rename>travel_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad_percent</name>
|
||||
<rename>living_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_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>1408</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (decision-document-service) регион 2</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
|
||||
),
|
||||
recr AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.system_pgs_status
|
||||
FROM recruits r
|
||||
WHERE r.system_pgs_status = '1.3'
|
||||
),
|
||||
last_decision AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.code
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY d.recruit_id ORDER BY d.created_at DESC) AS rn,
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.type->>'code' AS code
|
||||
FROM decision d
|
||||
WHERE d.recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год
|
||||
) d
|
||||
WHERE rn = 1 -- ищем последнее решение для рекрута
|
||||
AND d.code IN ('9', '10')
|
||||
/*FROM decision d
|
||||
WHERE EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год*/
|
||||
),
|
||||
total_info AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
COUNT(*) AS removed_registry,
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') AS age_limit, -- Количество по причине предельный возраст
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') AS death, -- Количество по причине смерть
|
||||
--COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'citizenshipLost') AS deprivation_citizenship, -- лишение гражданства
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) AS other, -- прочее
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
|
||||
FROM last_decision d
|
||||
JOIN recr AS r ON d.recruit_id = r.id
|
||||
GROUP BY d.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
recruitment_id,
|
||||
COALESCE(total_info.removed_registry, 0) AS removed_registry,
|
||||
COALESCE(total_info.age_limit, 0) AS age_limit,
|
||||
COALESCE(total_info.death, 0) AS death,
|
||||
COALESCE(total_info.other, 0) AS other,
|
||||
COALESCE(total_info.age_limit_percent, 0) AS age_limit_percent,
|
||||
COALESCE(total_info.death_percent, 0) AS death_percent,
|
||||
COALESCE(total_info.other_percent, 0) AS other_percent,
|
||||
--deprivation_citizenship,
|
||||
'0' AS deprivation_citizenship,
|
||||
'0' AS travel_abroad,
|
||||
'0' AS living_abroad,
|
||||
'0' AS deprivation_citizen_percents,
|
||||
'0' AS travel_abroad_percent,
|
||||
'0' AS living_abroad_percent
|
||||
FROM total_info;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>752</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.removed_registry_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>
|
||||
<notepad>
|
||||
<backgroundcolorblue>251</backgroundcolorblue>
|
||||
<backgroundcolorgreen>232</backgroundcolorgreen>
|
||||
<backgroundcolorred>201</backgroundcolorred>
|
||||
<bordercolorblue>90</bordercolorblue>
|
||||
<bordercolorgreen>58</bordercolorgreen>
|
||||
<bordercolorred>14</bordercolorred>
|
||||
<fontbold>N</fontbold>
|
||||
<fontcolorblue>90</fontcolorblue>
|
||||
<fontcolorgreen>58</fontcolorgreen>
|
||||
<fontcolorred>14</fontcolorred>
|
||||
<fontitalic>N</fontitalic>
|
||||
<fontname>Segoe UI</fontname>
|
||||
<fontsize>9</fontsize>
|
||||
<height>26</height>
|
||||
<xloc>904</xloc>
|
||||
<yloc>118</yloc>
|
||||
<note>на 12.03.2025 статус 1.3 на тесте рубит все результаты</note>
|
||||
<width>303</width>
|
||||
</notepad>
|
||||
</notepads>
|
||||
<order>
|
||||
<hop>
|
||||
<from>Table input (decision-document-service) регион 2</from>
|
||||
<to>Insert / update (total_registered.removed_registry) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.removed_registry) 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>total_registered</schema>
|
||||
<table>removed_registry</table>
|
||||
<value>
|
||||
<name>age_limit</name>
|
||||
<rename>age_limit</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death</name>
|
||||
<rename>death</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>removed_registry</name>
|
||||
<rename>removed_registry</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizenship</name>
|
||||
<rename>deprivation_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizen_percents</name>
|
||||
<rename>deprivation_citizen_percents</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>age_limit_percent</name>
|
||||
<rename>age_limit_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death_percent</name>
|
||||
<rename>death_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad_percent</name>
|
||||
<rename>travel_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad_percent</name>
|
||||
<rename>living_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_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>1408</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (decision-document-service) регион 2</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
|
||||
),
|
||||
recr AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.system_pgs_status
|
||||
FROM recruits r
|
||||
WHERE r.system_pgs_status = '1.3'
|
||||
),
|
||||
last_decision AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.code
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY d.recruit_id ORDER BY d.created_at DESC) AS rn,
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.type->>'code' AS code
|
||||
FROM decision d
|
||||
WHERE d.recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год
|
||||
) d
|
||||
WHERE rn = 1 -- ищем последнее решение для рекрута
|
||||
AND d.code IN ('9', '10')
|
||||
/*FROM decision d
|
||||
WHERE EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год*/
|
||||
),
|
||||
total_info AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
COUNT(*) AS removed_registry,
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') AS age_limit, -- Количество по причине предельный возраст
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') AS death, -- Количество по причине смерть
|
||||
--COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'citizenshipLost') AS deprivation_citizenship, -- лишение гражданства
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) AS other, -- прочее
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
|
||||
FROM last_decision d
|
||||
JOIN recr AS r ON d.recruit_id = r.id
|
||||
GROUP BY d.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
recruitment_id,
|
||||
COALESCE(total_info.removed_registry, 0) AS removed_registry,
|
||||
COALESCE(total_info.age_limit, 0) AS age_limit,
|
||||
COALESCE(total_info.death, 0) AS death,
|
||||
COALESCE(total_info.other, 0) AS other,
|
||||
COALESCE(total_info.age_limit_percent, 0) AS age_limit_percent,
|
||||
COALESCE(total_info.death_percent, 0) AS death_percent,
|
||||
COALESCE(total_info.other_percent, 0) AS other_percent,
|
||||
--deprivation_citizenship,
|
||||
'0' AS deprivation_citizenship,
|
||||
'0' AS travel_abroad,
|
||||
'0' AS living_abroad,
|
||||
'0' AS deprivation_citizen_percents,
|
||||
'0' AS travel_abroad_percent,
|
||||
'0' AS living_abroad_percent
|
||||
FROM total_info;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>752</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.removed_registry_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>
|
||||
<notepad>
|
||||
<backgroundcolorblue>251</backgroundcolorblue>
|
||||
<backgroundcolorgreen>232</backgroundcolorgreen>
|
||||
<backgroundcolorred>201</backgroundcolorred>
|
||||
<bordercolorblue>90</bordercolorblue>
|
||||
<bordercolorgreen>58</bordercolorgreen>
|
||||
<bordercolorred>14</bordercolorred>
|
||||
<fontbold>N</fontbold>
|
||||
<fontcolorblue>90</fontcolorblue>
|
||||
<fontcolorgreen>58</fontcolorgreen>
|
||||
<fontcolorred>14</fontcolorred>
|
||||
<fontitalic>N</fontitalic>
|
||||
<fontname>Segoe UI</fontname>
|
||||
<fontsize>9</fontsize>
|
||||
<height>26</height>
|
||||
<xloc>904</xloc>
|
||||
<yloc>118</yloc>
|
||||
<note>на 12.03.2025 статус 1.3 на тесте рубит все результаты</note>
|
||||
<width>303</width>
|
||||
</notepad>
|
||||
</notepads>
|
||||
<order>
|
||||
<hop>
|
||||
<from>Table input (decision-document-service) регион 2</from>
|
||||
<to>Insert / update (total_registered.removed_registry) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.removed_registry) 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>total_registered</schema>
|
||||
<table>removed_registry</table>
|
||||
<value>
|
||||
<name>age_limit</name>
|
||||
<rename>age_limit</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death</name>
|
||||
<rename>death</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>removed_registry</name>
|
||||
<rename>removed_registry</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizenship</name>
|
||||
<rename>deprivation_citizenship</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad</name>
|
||||
<rename>travel_abroad</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>deprivation_citizen_percents</name>
|
||||
<rename>deprivation_citizen_percents</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>age_limit_percent</name>
|
||||
<rename>age_limit_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>death_percent</name>
|
||||
<rename>death_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>travel_abroad_percent</name>
|
||||
<rename>travel_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>living_abroad_percent</name>
|
||||
<rename>living_abroad_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_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>1408</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (decision-document-service) регион 2</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
|
||||
),
|
||||
recr AS (
|
||||
SELECT
|
||||
r.id,
|
||||
r.system_pgs_status
|
||||
FROM recruits r
|
||||
WHERE r.system_pgs_status = '1.3'
|
||||
),
|
||||
last_decision AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.code
|
||||
FROM (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY d.recruit_id ORDER BY d.created_at DESC) AS rn,
|
||||
d.recruitment_id,
|
||||
d.recruit_id,
|
||||
d.extra_info,
|
||||
d.created_at,
|
||||
d.type->>'code' AS code
|
||||
FROM decision d
|
||||
WHERE d.recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год
|
||||
) d
|
||||
WHERE rn = 1 -- ищем последнее решение для рекрута
|
||||
AND d.code IN ('9', '10')
|
||||
/*FROM decision d
|
||||
WHERE EXTRACT(YEAR FROM d.created_at) = EXTRACT(YEAR FROM CURRENT_DATE) -- ищим записи на текущий год*/
|
||||
),
|
||||
total_info AS (
|
||||
SELECT
|
||||
d.recruitment_id,
|
||||
COUNT(*) AS removed_registry,
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') AS age_limit, -- Количество по причине предельный возраст
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') AS death, -- Количество по причине смерть
|
||||
--COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'citizenshipLost') AS deprivation_citizenship, -- лишение гражданства
|
||||
COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) AS other, -- прочее
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'ageLimit') * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' = 'notAlive') * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
|
||||
ROUND(COUNT(*) FILTER (WHERE d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive', 'citizenshipLost')) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
|
||||
FROM last_decision d
|
||||
JOIN recr AS r ON d.recruit_id = r.id
|
||||
GROUP BY d.recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
recruitment_id,
|
||||
COALESCE(total_info.removed_registry, 0) AS removed_registry,
|
||||
COALESCE(total_info.age_limit, 0) AS age_limit,
|
||||
COALESCE(total_info.death, 0) AS death,
|
||||
COALESCE(total_info.other, 0) AS other,
|
||||
COALESCE(total_info.age_limit_percent, 0) AS age_limit_percent,
|
||||
COALESCE(total_info.death_percent, 0) AS death_percent,
|
||||
COALESCE(total_info.other_percent, 0) AS other_percent,
|
||||
--deprivation_citizenship,
|
||||
'0' AS deprivation_citizenship,
|
||||
'0' AS travel_abroad,
|
||||
'0' AS living_abroad,
|
||||
'0' AS deprivation_citizen_percents,
|
||||
'0' AS travel_abroad_percent,
|
||||
'0' AS living_abroad_percent
|
||||
FROM total_info;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>752</xloc>
|
||||
<yloc>320</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<workflow>
|
||||
<name>total_registered.subpoenas(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 16:22:00.652</created_date>
|
||||
<modified_user>-</modified_user>
|
||||
<modified_date>2025/03/31 16:22:00.652</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>384</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.subpoenas_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.subpoenas(m_c)/total_registered.subpoenas_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>1040</xloc>
|
||||
<yloc>224</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.subpoenas_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.subpoenas(m_c)/total_registered.subpoenas_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>1040</xloc>
|
||||
<yloc>304</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.subpoenas_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.subpoenas(m_c)/total_registered.subpoenas_pr3(m_c).hpl</filename>
|
||||
<logext/>
|
||||
<logfile/>
|
||||
<loglevel>Basic</loglevel>
|
||||
<parameters>
|
||||
<parameter>
|
||||
<name>ARR_PR_3</name>
|
||||
<stream_name>PART_RECRUITMENT_3</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>1040</xloc>
|
||||
<yloc>384</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.subpoenas_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.subpoenas(m_c)/total_registered.subpoenas_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>1040</xloc>
|
||||
<yloc>464</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>total_registered.subpoenas_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.subpoenas(m_c)/total_registered.subpoenas_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>1040</xloc>
|
||||
<yloc>544</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>224</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 2</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>304</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 3</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>384</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 4</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>464</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
<action>
|
||||
<name>Success 5</name>
|
||||
<description/>
|
||||
<type>SUCCESS</type>
|
||||
<attributes/>
|
||||
<parallel>N</parallel>
|
||||
<xloc>1392</xloc>
|
||||
<yloc>544</yloc>
|
||||
<attributes_hac/>
|
||||
</action>
|
||||
</actions>
|
||||
<hops>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.subpoenas_pr1(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.subpoenas_pr2(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.subpoenas_pr3(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.subpoenas_pr4(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Start</from>
|
||||
<to>total_registered.subpoenas_pr5(m_c).hpl</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>Y</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.subpoenas_pr1(m_c).hpl</from>
|
||||
<to>Success</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.subpoenas_pr2(m_c).hpl</from>
|
||||
<to>Success 2</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.subpoenas_pr3(m_c).hpl</from>
|
||||
<to>Success 3</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.subpoenas_pr4(m_c).hpl</from>
|
||||
<to>Success 4</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>total_registered.subpoenas_pr5(m_c).hpl</from>
|
||||
<to>Success 5</to>
|
||||
<enabled>Y</enabled>
|
||||
<evaluation>Y</evaluation>
|
||||
<unconditional>N</unconditional>
|
||||
</hop>
|
||||
</hops>
|
||||
<notepads>
|
||||
</notepads>
|
||||
<attributes/>
|
||||
</workflow>
|
||||
|
|
@ -0,0 +1,474 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.subpoenas_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 (subpoena) регион/рег</from>
|
||||
<to>Insert / update (total_registered.subpoenas) 3</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.subpoenas) 3</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>subpoenas</table>
|
||||
<value>
|
||||
<name>subpoena</name>
|
||||
<rename>count_subpoena</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared</name>
|
||||
<rename>count_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_appeared</name>
|
||||
<rename>average_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared</name>
|
||||
<rename>count_not_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason</name>
|
||||
<rename>count_not_ap_good_reason</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures</name>
|
||||
<rename>count_introduced_measures</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required</name>
|
||||
<rename>count_ap_not_required</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron</name>
|
||||
<rename>count_electron</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper</name>
|
||||
<rename>count_paper</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied</name>
|
||||
<rename>count_restrictions_applied</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared_percent</name>
|
||||
<rename>appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared_percent</name>
|
||||
<rename>not_appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason_percent</name>
|
||||
<rename>not_ap_good_reason_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required_percent</name>
|
||||
<rename>ap_not_required_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron_percent</name>
|
||||
<rename>electron_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper_percent</name>
|
||||
<rename>paper_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied_percent</name>
|
||||
<rename>restrictions_applied_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures_percent</name>
|
||||
<rename>introduced_measures_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>count_not_delivery</name>
|
||||
<rename>count_not_delivery</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good</name>
|
||||
<rename>appear_date_is_good</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_delivery_percent</name>
|
||||
<rename>not_delivery_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good_percent</name>
|
||||
<rename>appear_date_is_good_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (subpoena) регион/рег</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.subpoena</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
|
||||
),
|
||||
subpoena_data AS (
|
||||
SELECT
|
||||
s.id AS subpoena_id,
|
||||
s.department_id::uuid,
|
||||
s.status_id,
|
||||
(CASE
|
||||
WHEN sr.type = '1' THEN 0
|
||||
WHEN sr.type != '1' THEN 1
|
||||
ELSE NULL
|
||||
END)::numeric AS mil_reg,
|
||||
ssh.code AS sub_stat_hist,
|
||||
s.send_date,
|
||||
sh.date_time::timestamp AS history_date,
|
||||
rdi.restriction_document_cancel_id AS restr_dc,
|
||||
rdi.applied_date AS ap_date,
|
||||
rdi.id AS rdi_id,
|
||||
ssi.delivery_code AS d_code,
|
||||
ssi.act_number,
|
||||
s.visit_date
|
||||
FROM subpoena s
|
||||
JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY date_time DESC) AS rn,
|
||||
subpoena_id,
|
||||
status_id,
|
||||
date_time
|
||||
FROM subpoena_history sh
|
||||
) sh on sh.subpoena_id = s.id
|
||||
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
|
||||
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY created_at DESC) AS rn_d,
|
||||
subpoena_id,
|
||||
id
|
||||
FROM restriction_document
|
||||
) AS rd ON rd.subpoena_id = s.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY restriction_document_create_id ORDER BY created_at DESC) AS rn_di,
|
||||
restriction_document_create_id,
|
||||
restriction_document_cancel_id,
|
||||
applied_date,
|
||||
id
|
||||
FROM restriction_document_item
|
||||
) AS rdi ON rdi.restriction_document_create_id = rd.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY send_date DESC) AS rn_si,
|
||||
subpoena_id,
|
||||
delivery_code,
|
||||
act_number
|
||||
FROM subpoena_send_info
|
||||
) AS ssi ON ssi.subpoena_id = s.id
|
||||
WHERE sh.rn = 1 AND rd.rn_d = 1 AND rdi.rn_di = 1 AND ssi.rn_si = 1
|
||||
AND sr.type IS NOT NULL
|
||||
AND ssh.code NOT IN ('3.7','3.72', '3.71') -- 3.14 снесено от 14.03.2025
|
||||
AND s.department_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM subpoena_history sh2
|
||||
WHERE sh2.subpoena_id = s.id
|
||||
AND sh2.status_id = (SELECT id FROM subpoena_status WHERE code = '3')
|
||||
)
|
||||
),
|
||||
uniq_ls AS (
|
||||
SELECT
|
||||
distinct
|
||||
department_id,
|
||||
mil_reg
|
||||
FROM subpoena_data
|
||||
),
|
||||
t1 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_subpoena
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t2 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
ROUND(
|
||||
AVG(
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
GREATEST(EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp)), 0)
|
||||
ELSE
|
||||
GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp)), 0)
|
||||
END
|
||||
) FILTER (WHERE
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp))
|
||||
ELSE
|
||||
EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp))
|
||||
END > 0
|
||||
), 1
|
||||
) AS average_appeared
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t3 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t4 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t5 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_ap_good_reason -- не явились по уважительной причине
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5.1'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t6 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_ap_not_required -- явка не требуется
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3.8', '5.2')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t7 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions_applied
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t8 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_introduced_measures
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL AND ap_date IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t9 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_paper
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code != '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t10 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_electron
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code = '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t11 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t12 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_delivery
|
||||
FROM subpoena_data ls
|
||||
WHERE act_number IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t13 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS appear_date_is_good
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
)
|
||||
SELECT
|
||||
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
|
||||
COALESCE(t2.average_appeared, 0) AS average_appeared,
|
||||
COALESCE(t3.count_appeared, 0) AS count_appeared,
|
||||
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
|
||||
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
|
||||
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
|
||||
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
|
||||
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
|
||||
COALESCE(t9.count_paper, 0) AS count_paper,
|
||||
COALESCE(t10.count_electron, 0) AS count_electron,
|
||||
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
|
||||
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
|
||||
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
|
||||
COALESCE(ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_ap_good_reason_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS ap_not_required_percent,
|
||||
COALESCE(ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS electron_percent,
|
||||
COALESCE(ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS paper_percent,
|
||||
COALESCE(ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS restrictions_applied_percent,
|
||||
COALESCE(ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS introduced_measures_percent,
|
||||
COALESCE(ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_delivery_percent,
|
||||
COALESCE(ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appear_date_is_good_percent,
|
||||
ls.department_id AS recruitment_id,
|
||||
current_date AS recording_date,
|
||||
ls.mil_reg
|
||||
FROM uniq_ls ls
|
||||
LEFT JOIN t1 ON ls.department_id = t1.department_id
|
||||
AND ls.mil_reg = t1.mil_reg
|
||||
LEFT JOIN t2 ON ls.department_id = t2.department_id
|
||||
AND ls.mil_reg = t2.mil_reg
|
||||
LEFT JOIN t3 ON ls.department_id = t3.department_id
|
||||
AND ls.mil_reg = t3.mil_reg
|
||||
LEFT JOIN t4 ON ls.department_id = t4.department_id
|
||||
AND ls.mil_reg = t4.mil_reg
|
||||
LEFT JOIN t5 ON ls.department_id = t5.department_id
|
||||
AND ls.mil_reg = t5.mil_reg
|
||||
LEFT JOIN t6 ON ls.department_id = t6.department_id
|
||||
AND ls.mil_reg = t6.mil_reg
|
||||
LEFT JOIN t7 ON ls.department_id = t7.department_id
|
||||
AND ls.mil_reg = t7.mil_reg
|
||||
LEFT JOIN t8 ON ls.department_id = t8.department_id
|
||||
AND ls.mil_reg = t8.mil_reg
|
||||
LEFT JOIN t9 ON ls.department_id = t9.department_id
|
||||
AND ls.mil_reg = t9.mil_reg
|
||||
LEFT JOIN t10 ON ls.department_id = t10.department_id
|
||||
AND ls.mil_reg = t10.mil_reg
|
||||
LEFT JOIN t11 ON ls.department_id = t11.department_id
|
||||
AND ls.mil_reg = t11.mil_reg
|
||||
LEFT JOIN t12 ON ls.department_id = t12.department_id
|
||||
AND ls.mil_reg = t12.mil_reg
|
||||
LEFT JOIN t13 ON ls.department_id = t13.department_id
|
||||
AND ls.mil_reg = t13.mil_reg;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,474 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.subpoenas_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 (subpoena) регион/рег</from>
|
||||
<to>Insert / update (total_registered.subpoenas) 3</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.subpoenas) 3</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>subpoenas</table>
|
||||
<value>
|
||||
<name>subpoena</name>
|
||||
<rename>count_subpoena</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared</name>
|
||||
<rename>count_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_appeared</name>
|
||||
<rename>average_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared</name>
|
||||
<rename>count_not_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason</name>
|
||||
<rename>count_not_ap_good_reason</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures</name>
|
||||
<rename>count_introduced_measures</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required</name>
|
||||
<rename>count_ap_not_required</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron</name>
|
||||
<rename>count_electron</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper</name>
|
||||
<rename>count_paper</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied</name>
|
||||
<rename>count_restrictions_applied</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared_percent</name>
|
||||
<rename>appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared_percent</name>
|
||||
<rename>not_appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason_percent</name>
|
||||
<rename>not_ap_good_reason_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required_percent</name>
|
||||
<rename>ap_not_required_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron_percent</name>
|
||||
<rename>electron_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper_percent</name>
|
||||
<rename>paper_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied_percent</name>
|
||||
<rename>restrictions_applied_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures_percent</name>
|
||||
<rename>introduced_measures_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>count_not_delivery</name>
|
||||
<rename>count_not_delivery</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good</name>
|
||||
<rename>appear_date_is_good</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_delivery_percent</name>
|
||||
<rename>not_delivery_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good_percent</name>
|
||||
<rename>appear_date_is_good_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (subpoena) регион/рег</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.subpoena</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
|
||||
),
|
||||
subpoena_data AS (
|
||||
SELECT
|
||||
s.id AS subpoena_id,
|
||||
s.department_id::uuid,
|
||||
s.status_id,
|
||||
(CASE
|
||||
WHEN sr.type = '1' THEN 0
|
||||
WHEN sr.type != '1' THEN 1
|
||||
ELSE NULL
|
||||
END)::numeric AS mil_reg,
|
||||
ssh.code AS sub_stat_hist,
|
||||
s.send_date,
|
||||
sh.date_time::timestamp AS history_date,
|
||||
rdi.restriction_document_cancel_id AS restr_dc,
|
||||
rdi.applied_date AS ap_date,
|
||||
rdi.id AS rdi_id,
|
||||
ssi.delivery_code AS d_code,
|
||||
ssi.act_number,
|
||||
s.visit_date
|
||||
FROM subpoena s
|
||||
JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY date_time DESC) AS rn,
|
||||
subpoena_id,
|
||||
status_id,
|
||||
date_time
|
||||
FROM subpoena_history sh
|
||||
) sh on sh.subpoena_id = s.id
|
||||
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
|
||||
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY created_at DESC) AS rn_d,
|
||||
subpoena_id,
|
||||
id
|
||||
FROM restriction_document
|
||||
) AS rd ON rd.subpoena_id = s.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY restriction_document_create_id ORDER BY created_at DESC) AS rn_di,
|
||||
restriction_document_create_id,
|
||||
restriction_document_cancel_id,
|
||||
applied_date,
|
||||
id
|
||||
FROM restriction_document_item
|
||||
) AS rdi ON rdi.restriction_document_create_id = rd.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY send_date DESC) AS rn_si,
|
||||
subpoena_id,
|
||||
delivery_code,
|
||||
act_number
|
||||
FROM subpoena_send_info
|
||||
) AS ssi ON ssi.subpoena_id = s.id
|
||||
WHERE sh.rn = 1 AND rd.rn_d = 1 AND rdi.rn_di = 1 AND ssi.rn_si = 1
|
||||
AND sr.type IS NOT NULL
|
||||
AND ssh.code NOT IN ('3.7','3.72', '3.71') -- 3.14 снесено от 14.03.2025
|
||||
AND s.department_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM subpoena_history sh2
|
||||
WHERE sh2.subpoena_id = s.id
|
||||
AND sh2.status_id = (SELECT id FROM subpoena_status WHERE code = '3')
|
||||
)
|
||||
),
|
||||
uniq_ls AS (
|
||||
SELECT
|
||||
distinct
|
||||
department_id,
|
||||
mil_reg
|
||||
FROM subpoena_data
|
||||
),
|
||||
t1 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_subpoena
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t2 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
ROUND(
|
||||
AVG(
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
GREATEST(EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp)), 0)
|
||||
ELSE
|
||||
GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp)), 0)
|
||||
END
|
||||
) FILTER (WHERE
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp))
|
||||
ELSE
|
||||
EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp))
|
||||
END > 0
|
||||
), 1
|
||||
) AS average_appeared
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t3 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t4 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t5 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_ap_good_reason -- не явились по уважительной причине
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5.1'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t6 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_ap_not_required -- явка не требуется
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3.8', '5.2')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t7 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions_applied
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t8 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_introduced_measures
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL AND ap_date IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t9 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_paper
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code != '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t10 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_electron
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code = '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t11 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t12 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_delivery
|
||||
FROM subpoena_data ls
|
||||
WHERE act_number IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t13 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS appear_date_is_good
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
)
|
||||
SELECT
|
||||
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
|
||||
COALESCE(t2.average_appeared, 0) AS average_appeared,
|
||||
COALESCE(t3.count_appeared, 0) AS count_appeared,
|
||||
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
|
||||
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
|
||||
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
|
||||
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
|
||||
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
|
||||
COALESCE(t9.count_paper, 0) AS count_paper,
|
||||
COALESCE(t10.count_electron, 0) AS count_electron,
|
||||
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
|
||||
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
|
||||
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
|
||||
COALESCE(ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_ap_good_reason_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS ap_not_required_percent,
|
||||
COALESCE(ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS electron_percent,
|
||||
COALESCE(ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS paper_percent,
|
||||
COALESCE(ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS restrictions_applied_percent,
|
||||
COALESCE(ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS introduced_measures_percent,
|
||||
COALESCE(ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_delivery_percent,
|
||||
COALESCE(ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appear_date_is_good_percent,
|
||||
ls.department_id AS recruitment_id,
|
||||
current_date AS recording_date,
|
||||
ls.mil_reg
|
||||
FROM uniq_ls ls
|
||||
LEFT JOIN t1 ON ls.department_id = t1.department_id
|
||||
AND ls.mil_reg = t1.mil_reg
|
||||
LEFT JOIN t2 ON ls.department_id = t2.department_id
|
||||
AND ls.mil_reg = t2.mil_reg
|
||||
LEFT JOIN t3 ON ls.department_id = t3.department_id
|
||||
AND ls.mil_reg = t3.mil_reg
|
||||
LEFT JOIN t4 ON ls.department_id = t4.department_id
|
||||
AND ls.mil_reg = t4.mil_reg
|
||||
LEFT JOIN t5 ON ls.department_id = t5.department_id
|
||||
AND ls.mil_reg = t5.mil_reg
|
||||
LEFT JOIN t6 ON ls.department_id = t6.department_id
|
||||
AND ls.mil_reg = t6.mil_reg
|
||||
LEFT JOIN t7 ON ls.department_id = t7.department_id
|
||||
AND ls.mil_reg = t7.mil_reg
|
||||
LEFT JOIN t8 ON ls.department_id = t8.department_id
|
||||
AND ls.mil_reg = t8.mil_reg
|
||||
LEFT JOIN t9 ON ls.department_id = t9.department_id
|
||||
AND ls.mil_reg = t9.mil_reg
|
||||
LEFT JOIN t10 ON ls.department_id = t10.department_id
|
||||
AND ls.mil_reg = t10.mil_reg
|
||||
LEFT JOIN t11 ON ls.department_id = t11.department_id
|
||||
AND ls.mil_reg = t11.mil_reg
|
||||
LEFT JOIN t12 ON ls.department_id = t12.department_id
|
||||
AND ls.mil_reg = t12.mil_reg
|
||||
LEFT JOIN t13 ON ls.department_id = t13.department_id
|
||||
AND ls.mil_reg = t13.mil_reg;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,474 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.subpoenas_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 (subpoena) регион/рег</from>
|
||||
<to>Insert / update (total_registered.subpoenas) 3</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.subpoenas) 3</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>subpoenas</table>
|
||||
<value>
|
||||
<name>subpoena</name>
|
||||
<rename>count_subpoena</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared</name>
|
||||
<rename>count_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_appeared</name>
|
||||
<rename>average_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared</name>
|
||||
<rename>count_not_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason</name>
|
||||
<rename>count_not_ap_good_reason</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures</name>
|
||||
<rename>count_introduced_measures</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required</name>
|
||||
<rename>count_ap_not_required</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron</name>
|
||||
<rename>count_electron</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper</name>
|
||||
<rename>count_paper</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied</name>
|
||||
<rename>count_restrictions_applied</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared_percent</name>
|
||||
<rename>appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared_percent</name>
|
||||
<rename>not_appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason_percent</name>
|
||||
<rename>not_ap_good_reason_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required_percent</name>
|
||||
<rename>ap_not_required_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron_percent</name>
|
||||
<rename>electron_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper_percent</name>
|
||||
<rename>paper_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied_percent</name>
|
||||
<rename>restrictions_applied_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures_percent</name>
|
||||
<rename>introduced_measures_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>count_not_delivery</name>
|
||||
<rename>count_not_delivery</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good</name>
|
||||
<rename>appear_date_is_good</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_delivery_percent</name>
|
||||
<rename>not_delivery_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good_percent</name>
|
||||
<rename>appear_date_is_good_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (subpoena) регион/рег</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.subpoena</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
|
||||
),
|
||||
subpoena_data AS (
|
||||
SELECT
|
||||
s.id AS subpoena_id,
|
||||
s.department_id::uuid,
|
||||
s.status_id,
|
||||
(CASE
|
||||
WHEN sr.type = '1' THEN 0
|
||||
WHEN sr.type != '1' THEN 1
|
||||
ELSE NULL
|
||||
END)::numeric AS mil_reg,
|
||||
ssh.code AS sub_stat_hist,
|
||||
s.send_date,
|
||||
sh.date_time::timestamp AS history_date,
|
||||
rdi.restriction_document_cancel_id AS restr_dc,
|
||||
rdi.applied_date AS ap_date,
|
||||
rdi.id AS rdi_id,
|
||||
ssi.delivery_code AS d_code,
|
||||
ssi.act_number,
|
||||
s.visit_date
|
||||
FROM subpoena s
|
||||
JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY date_time DESC) AS rn,
|
||||
subpoena_id,
|
||||
status_id,
|
||||
date_time
|
||||
FROM subpoena_history sh
|
||||
) sh on sh.subpoena_id = s.id
|
||||
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
|
||||
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY created_at DESC) AS rn_d,
|
||||
subpoena_id,
|
||||
id
|
||||
FROM restriction_document
|
||||
) AS rd ON rd.subpoena_id = s.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY restriction_document_create_id ORDER BY created_at DESC) AS rn_di,
|
||||
restriction_document_create_id,
|
||||
restriction_document_cancel_id,
|
||||
applied_date,
|
||||
id
|
||||
FROM restriction_document_item
|
||||
) AS rdi ON rdi.restriction_document_create_id = rd.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY send_date DESC) AS rn_si,
|
||||
subpoena_id,
|
||||
delivery_code,
|
||||
act_number
|
||||
FROM subpoena_send_info
|
||||
) AS ssi ON ssi.subpoena_id = s.id
|
||||
WHERE sh.rn = 1 AND rd.rn_d = 1 AND rdi.rn_di = 1 AND ssi.rn_si = 1
|
||||
AND sr.type IS NOT NULL
|
||||
AND ssh.code NOT IN ('3.7','3.72', '3.71') -- 3.14 снесено от 14.03.2025
|
||||
AND s.department_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM subpoena_history sh2
|
||||
WHERE sh2.subpoena_id = s.id
|
||||
AND sh2.status_id = (SELECT id FROM subpoena_status WHERE code = '3')
|
||||
)
|
||||
),
|
||||
uniq_ls AS (
|
||||
SELECT
|
||||
distinct
|
||||
department_id,
|
||||
mil_reg
|
||||
FROM subpoena_data
|
||||
),
|
||||
t1 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_subpoena
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t2 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
ROUND(
|
||||
AVG(
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
GREATEST(EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp)), 0)
|
||||
ELSE
|
||||
GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp)), 0)
|
||||
END
|
||||
) FILTER (WHERE
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp))
|
||||
ELSE
|
||||
EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp))
|
||||
END > 0
|
||||
), 1
|
||||
) AS average_appeared
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t3 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t4 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t5 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_ap_good_reason -- не явились по уважительной причине
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5.1'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t6 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_ap_not_required -- явка не требуется
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3.8', '5.2')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t7 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions_applied
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t8 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_introduced_measures
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL AND ap_date IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t9 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_paper
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code != '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t10 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_electron
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code = '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t11 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t12 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_delivery
|
||||
FROM subpoena_data ls
|
||||
WHERE act_number IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t13 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS appear_date_is_good
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
)
|
||||
SELECT
|
||||
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
|
||||
COALESCE(t2.average_appeared, 0) AS average_appeared,
|
||||
COALESCE(t3.count_appeared, 0) AS count_appeared,
|
||||
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
|
||||
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
|
||||
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
|
||||
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
|
||||
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
|
||||
COALESCE(t9.count_paper, 0) AS count_paper,
|
||||
COALESCE(t10.count_electron, 0) AS count_electron,
|
||||
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
|
||||
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
|
||||
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
|
||||
COALESCE(ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_ap_good_reason_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS ap_not_required_percent,
|
||||
COALESCE(ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS electron_percent,
|
||||
COALESCE(ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS paper_percent,
|
||||
COALESCE(ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS restrictions_applied_percent,
|
||||
COALESCE(ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS introduced_measures_percent,
|
||||
COALESCE(ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_delivery_percent,
|
||||
COALESCE(ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appear_date_is_good_percent,
|
||||
ls.department_id AS recruitment_id,
|
||||
current_date AS recording_date,
|
||||
ls.mil_reg
|
||||
FROM uniq_ls ls
|
||||
LEFT JOIN t1 ON ls.department_id = t1.department_id
|
||||
AND ls.mil_reg = t1.mil_reg
|
||||
LEFT JOIN t2 ON ls.department_id = t2.department_id
|
||||
AND ls.mil_reg = t2.mil_reg
|
||||
LEFT JOIN t3 ON ls.department_id = t3.department_id
|
||||
AND ls.mil_reg = t3.mil_reg
|
||||
LEFT JOIN t4 ON ls.department_id = t4.department_id
|
||||
AND ls.mil_reg = t4.mil_reg
|
||||
LEFT JOIN t5 ON ls.department_id = t5.department_id
|
||||
AND ls.mil_reg = t5.mil_reg
|
||||
LEFT JOIN t6 ON ls.department_id = t6.department_id
|
||||
AND ls.mil_reg = t6.mil_reg
|
||||
LEFT JOIN t7 ON ls.department_id = t7.department_id
|
||||
AND ls.mil_reg = t7.mil_reg
|
||||
LEFT JOIN t8 ON ls.department_id = t8.department_id
|
||||
AND ls.mil_reg = t8.mil_reg
|
||||
LEFT JOIN t9 ON ls.department_id = t9.department_id
|
||||
AND ls.mil_reg = t9.mil_reg
|
||||
LEFT JOIN t10 ON ls.department_id = t10.department_id
|
||||
AND ls.mil_reg = t10.mil_reg
|
||||
LEFT JOIN t11 ON ls.department_id = t11.department_id
|
||||
AND ls.mil_reg = t11.mil_reg
|
||||
LEFT JOIN t12 ON ls.department_id = t12.department_id
|
||||
AND ls.mil_reg = t12.mil_reg
|
||||
LEFT JOIN t13 ON ls.department_id = t13.department_id
|
||||
AND ls.mil_reg = t13.mil_reg;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,474 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.subpoenas_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 (subpoena) регион/рег</from>
|
||||
<to>Insert / update (total_registered.subpoenas) 3</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.subpoenas) 3</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>subpoenas</table>
|
||||
<value>
|
||||
<name>subpoena</name>
|
||||
<rename>count_subpoena</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared</name>
|
||||
<rename>count_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_appeared</name>
|
||||
<rename>average_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared</name>
|
||||
<rename>count_not_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason</name>
|
||||
<rename>count_not_ap_good_reason</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures</name>
|
||||
<rename>count_introduced_measures</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required</name>
|
||||
<rename>count_ap_not_required</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron</name>
|
||||
<rename>count_electron</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper</name>
|
||||
<rename>count_paper</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied</name>
|
||||
<rename>count_restrictions_applied</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared_percent</name>
|
||||
<rename>appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared_percent</name>
|
||||
<rename>not_appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason_percent</name>
|
||||
<rename>not_ap_good_reason_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required_percent</name>
|
||||
<rename>ap_not_required_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron_percent</name>
|
||||
<rename>electron_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper_percent</name>
|
||||
<rename>paper_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied_percent</name>
|
||||
<rename>restrictions_applied_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures_percent</name>
|
||||
<rename>introduced_measures_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>count_not_delivery</name>
|
||||
<rename>count_not_delivery</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good</name>
|
||||
<rename>appear_date_is_good</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_delivery_percent</name>
|
||||
<rename>not_delivery_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good_percent</name>
|
||||
<rename>appear_date_is_good_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (subpoena) регион/рег</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.subpoena</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
|
||||
),
|
||||
subpoena_data AS (
|
||||
SELECT
|
||||
s.id AS subpoena_id,
|
||||
s.department_id::uuid,
|
||||
s.status_id,
|
||||
(CASE
|
||||
WHEN sr.type = '1' THEN 0
|
||||
WHEN sr.type != '1' THEN 1
|
||||
ELSE NULL
|
||||
END)::numeric AS mil_reg,
|
||||
ssh.code AS sub_stat_hist,
|
||||
s.send_date,
|
||||
sh.date_time::timestamp AS history_date,
|
||||
rdi.restriction_document_cancel_id AS restr_dc,
|
||||
rdi.applied_date AS ap_date,
|
||||
rdi.id AS rdi_id,
|
||||
ssi.delivery_code AS d_code,
|
||||
ssi.act_number,
|
||||
s.visit_date
|
||||
FROM subpoena s
|
||||
JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY date_time DESC) AS rn,
|
||||
subpoena_id,
|
||||
status_id,
|
||||
date_time
|
||||
FROM subpoena_history sh
|
||||
) sh on sh.subpoena_id = s.id
|
||||
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
|
||||
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY created_at DESC) AS rn_d,
|
||||
subpoena_id,
|
||||
id
|
||||
FROM restriction_document
|
||||
) AS rd ON rd.subpoena_id = s.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY restriction_document_create_id ORDER BY created_at DESC) AS rn_di,
|
||||
restriction_document_create_id,
|
||||
restriction_document_cancel_id,
|
||||
applied_date,
|
||||
id
|
||||
FROM restriction_document_item
|
||||
) AS rdi ON rdi.restriction_document_create_id = rd.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY send_date DESC) AS rn_si,
|
||||
subpoena_id,
|
||||
delivery_code,
|
||||
act_number
|
||||
FROM subpoena_send_info
|
||||
) AS ssi ON ssi.subpoena_id = s.id
|
||||
WHERE sh.rn = 1 AND rd.rn_d = 1 AND rdi.rn_di = 1 AND ssi.rn_si = 1
|
||||
AND sr.type IS NOT NULL
|
||||
AND ssh.code NOT IN ('3.7','3.72', '3.71') -- 3.14 снесено от 14.03.2025
|
||||
AND s.department_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM subpoena_history sh2
|
||||
WHERE sh2.subpoena_id = s.id
|
||||
AND sh2.status_id = (SELECT id FROM subpoena_status WHERE code = '3')
|
||||
)
|
||||
),
|
||||
uniq_ls AS (
|
||||
SELECT
|
||||
distinct
|
||||
department_id,
|
||||
mil_reg
|
||||
FROM subpoena_data
|
||||
),
|
||||
t1 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_subpoena
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t2 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
ROUND(
|
||||
AVG(
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
GREATEST(EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp)), 0)
|
||||
ELSE
|
||||
GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp)), 0)
|
||||
END
|
||||
) FILTER (WHERE
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp))
|
||||
ELSE
|
||||
EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp))
|
||||
END > 0
|
||||
), 1
|
||||
) AS average_appeared
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t3 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t4 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t5 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_ap_good_reason -- не явились по уважительной причине
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5.1'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t6 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_ap_not_required -- явка не требуется
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3.8', '5.2')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t7 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions_applied
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t8 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_introduced_measures
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL AND ap_date IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t9 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_paper
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code != '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t10 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_electron
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code = '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t11 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t12 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_delivery
|
||||
FROM subpoena_data ls
|
||||
WHERE act_number IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t13 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS appear_date_is_good
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
)
|
||||
SELECT
|
||||
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
|
||||
COALESCE(t2.average_appeared, 0) AS average_appeared,
|
||||
COALESCE(t3.count_appeared, 0) AS count_appeared,
|
||||
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
|
||||
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
|
||||
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
|
||||
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
|
||||
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
|
||||
COALESCE(t9.count_paper, 0) AS count_paper,
|
||||
COALESCE(t10.count_electron, 0) AS count_electron,
|
||||
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
|
||||
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
|
||||
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
|
||||
COALESCE(ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_ap_good_reason_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS ap_not_required_percent,
|
||||
COALESCE(ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS electron_percent,
|
||||
COALESCE(ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS paper_percent,
|
||||
COALESCE(ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS restrictions_applied_percent,
|
||||
COALESCE(ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS introduced_measures_percent,
|
||||
COALESCE(ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_delivery_percent,
|
||||
COALESCE(ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appear_date_is_good_percent,
|
||||
ls.department_id AS recruitment_id,
|
||||
current_date AS recording_date,
|
||||
ls.mil_reg
|
||||
FROM uniq_ls ls
|
||||
LEFT JOIN t1 ON ls.department_id = t1.department_id
|
||||
AND ls.mil_reg = t1.mil_reg
|
||||
LEFT JOIN t2 ON ls.department_id = t2.department_id
|
||||
AND ls.mil_reg = t2.mil_reg
|
||||
LEFT JOIN t3 ON ls.department_id = t3.department_id
|
||||
AND ls.mil_reg = t3.mil_reg
|
||||
LEFT JOIN t4 ON ls.department_id = t4.department_id
|
||||
AND ls.mil_reg = t4.mil_reg
|
||||
LEFT JOIN t5 ON ls.department_id = t5.department_id
|
||||
AND ls.mil_reg = t5.mil_reg
|
||||
LEFT JOIN t6 ON ls.department_id = t6.department_id
|
||||
AND ls.mil_reg = t6.mil_reg
|
||||
LEFT JOIN t7 ON ls.department_id = t7.department_id
|
||||
AND ls.mil_reg = t7.mil_reg
|
||||
LEFT JOIN t8 ON ls.department_id = t8.department_id
|
||||
AND ls.mil_reg = t8.mil_reg
|
||||
LEFT JOIN t9 ON ls.department_id = t9.department_id
|
||||
AND ls.mil_reg = t9.mil_reg
|
||||
LEFT JOIN t10 ON ls.department_id = t10.department_id
|
||||
AND ls.mil_reg = t10.mil_reg
|
||||
LEFT JOIN t11 ON ls.department_id = t11.department_id
|
||||
AND ls.mil_reg = t11.mil_reg
|
||||
LEFT JOIN t12 ON ls.department_id = t12.department_id
|
||||
AND ls.mil_reg = t12.mil_reg
|
||||
LEFT JOIN t13 ON ls.department_id = t13.department_id
|
||||
AND ls.mil_reg = t13.mil_reg;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
|
|
@ -0,0 +1,474 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<pipeline>
|
||||
<info>
|
||||
<name>total_registered.subpoenas_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 (subpoena) регион/рег</from>
|
||||
<to>Insert / update (total_registered.subpoenas) 3</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.subpoenas) 3</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>mil_reg</field>
|
||||
<name>mil_reg</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>subpoenas</table>
|
||||
<value>
|
||||
<name>subpoena</name>
|
||||
<rename>count_subpoena</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared</name>
|
||||
<rename>count_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_appeared</name>
|
||||
<rename>average_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared</name>
|
||||
<rename>count_not_appeared</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason</name>
|
||||
<rename>count_not_ap_good_reason</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures</name>
|
||||
<rename>count_introduced_measures</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required</name>
|
||||
<rename>count_ap_not_required</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron</name>
|
||||
<rename>count_electron</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper</name>
|
||||
<rename>count_paper</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied</name>
|
||||
<rename>count_restrictions_applied</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>mil_reg</name>
|
||||
<rename>mil_reg</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appeared_percent</name>
|
||||
<rename>appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_appeared_percent</name>
|
||||
<rename>not_appeared_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_ap_good_reason_percent</name>
|
||||
<rename>not_ap_good_reason_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>ap_not_required_percent</name>
|
||||
<rename>ap_not_required_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>electron_percent</name>
|
||||
<rename>electron_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>paper_percent</name>
|
||||
<rename>paper_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>restrictions_applied_percent</name>
|
||||
<rename>restrictions_applied_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>introduced_measures_percent</name>
|
||||
<rename>introduced_measures_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>count_not_delivery</name>
|
||||
<rename>count_not_delivery</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good</name>
|
||||
<rename>appear_date_is_good</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_delivery_percent</name>
|
||||
<rename>not_delivery_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>appear_date_is_good_percent</name>
|
||||
<rename>appear_date_is_good_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>N</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (subpoena) регион/рег</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.subpoena</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
|
||||
),
|
||||
subpoena_data AS (
|
||||
SELECT
|
||||
s.id AS subpoena_id,
|
||||
s.department_id::uuid,
|
||||
s.status_id,
|
||||
(CASE
|
||||
WHEN sr.type = '1' THEN 0
|
||||
WHEN sr.type != '1' THEN 1
|
||||
ELSE NULL
|
||||
END)::numeric AS mil_reg,
|
||||
ssh.code AS sub_stat_hist,
|
||||
s.send_date,
|
||||
sh.date_time::timestamp AS history_date,
|
||||
rdi.restriction_document_cancel_id AS restr_dc,
|
||||
rdi.applied_date AS ap_date,
|
||||
rdi.id AS rdi_id,
|
||||
ssi.delivery_code AS d_code,
|
||||
ssi.act_number,
|
||||
s.visit_date
|
||||
FROM subpoena s
|
||||
JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY date_time DESC) AS rn,
|
||||
subpoena_id,
|
||||
status_id,
|
||||
date_time
|
||||
FROM subpoena_history sh
|
||||
) sh on sh.subpoena_id = s.id
|
||||
JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
|
||||
JOIN subpoena_reason AS sr ON sr.id = s.reason_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY created_at DESC) AS rn_d,
|
||||
subpoena_id,
|
||||
id
|
||||
FROM restriction_document
|
||||
) AS rd ON rd.subpoena_id = s.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY restriction_document_create_id ORDER BY created_at DESC) AS rn_di,
|
||||
restriction_document_create_id,
|
||||
restriction_document_cancel_id,
|
||||
applied_date,
|
||||
id
|
||||
FROM restriction_document_item
|
||||
) AS rdi ON rdi.restriction_document_create_id = rd.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (PARTITION BY subpoena_id ORDER BY send_date DESC) AS rn_si,
|
||||
subpoena_id,
|
||||
delivery_code,
|
||||
act_number
|
||||
FROM subpoena_send_info
|
||||
) AS ssi ON ssi.subpoena_id = s.id
|
||||
WHERE sh.rn = 1 AND rd.rn_d = 1 AND rdi.rn_di = 1 AND ssi.rn_si = 1
|
||||
AND sr.type IS NOT NULL
|
||||
AND ssh.code NOT IN ('3.7','3.72', '3.71') -- 3.14 снесено от 14.03.2025
|
||||
AND s.department_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM subpoena_history sh2
|
||||
WHERE sh2.subpoena_id = s.id
|
||||
AND sh2.status_id = (SELECT id FROM subpoena_status WHERE code = '3')
|
||||
)
|
||||
),
|
||||
uniq_ls AS (
|
||||
SELECT
|
||||
distinct
|
||||
department_id,
|
||||
mil_reg
|
||||
FROM subpoena_data
|
||||
),
|
||||
t1 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_subpoena
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t2 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
ROUND(
|
||||
AVG(
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
GREATEST(EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp)), 0)
|
||||
ELSE
|
||||
GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp)), 0)
|
||||
END
|
||||
) FILTER (WHERE
|
||||
CASE
|
||||
WHEN ls.sub_stat_hist = '4.2' THEN
|
||||
EXTRACT(DAY FROM (ls.history_date::timestamp - ls.visit_date::timestamp))
|
||||
ELSE
|
||||
EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ls.visit_date::timestamp))
|
||||
END > 0
|
||||
), 1
|
||||
) AS average_appeared
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t3 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t4 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_appeared
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t5 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_ap_good_reason -- не явились по уважительной причине
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist = '5.1'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t6 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_ap_not_required -- явка не требуется
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3.8', '5.2')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t7 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions_applied
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t8 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_introduced_measures
|
||||
FROM subpoena_data ls
|
||||
WHERE rdi_id IS NOT NULL AND restr_dc IS NULL AND ap_date IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t9 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_paper
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code != '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t10 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_electron
|
||||
FROM subpoena_data ls
|
||||
WHERE d_code = '7'
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t11 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(rdi_id) AS count_restrictions
|
||||
FROM subpoena_data ls
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t12 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS count_not_delivery
|
||||
FROM subpoena_data ls
|
||||
WHERE act_number IS NOT NULL
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
),
|
||||
t13 AS (
|
||||
SELECT
|
||||
ls.mil_reg,
|
||||
ls.department_id,
|
||||
COUNT(subpoena_id) AS appear_date_is_good
|
||||
FROM subpoena_data ls
|
||||
WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
|
||||
GROUP BY ls.department_id, ls.mil_reg
|
||||
)
|
||||
SELECT
|
||||
COALESCE(t1.count_subpoena, 0) AS count_subpoena,
|
||||
COALESCE(t2.average_appeared, 0) AS average_appeared,
|
||||
COALESCE(t3.count_appeared, 0) AS count_appeared,
|
||||
COALESCE(t4.count_not_appeared, 0) AS count_not_appeared,
|
||||
COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason,
|
||||
COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required,
|
||||
COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied,
|
||||
COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures,
|
||||
COALESCE(t9.count_paper, 0) AS count_paper,
|
||||
COALESCE(t10.count_electron, 0) AS count_electron,
|
||||
COALESCE(t11.count_restrictions, 0) AS count_restrictions,
|
||||
COALESCE(t12.count_not_delivery, 0) AS count_not_delivery,
|
||||
COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good,
|
||||
COALESCE(ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_appeared_percent,
|
||||
COALESCE(ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_ap_good_reason_percent,
|
||||
COALESCE(ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS ap_not_required_percent,
|
||||
COALESCE(ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS electron_percent,
|
||||
COALESCE(ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS paper_percent,
|
||||
COALESCE(ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS restrictions_applied_percent,
|
||||
COALESCE(ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS introduced_measures_percent,
|
||||
COALESCE(ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS not_delivery_percent,
|
||||
COALESCE(ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2), 0) AS appear_date_is_good_percent,
|
||||
ls.department_id AS recruitment_id,
|
||||
current_date AS recording_date,
|
||||
ls.mil_reg
|
||||
FROM uniq_ls ls
|
||||
LEFT JOIN t1 ON ls.department_id = t1.department_id
|
||||
AND ls.mil_reg = t1.mil_reg
|
||||
LEFT JOIN t2 ON ls.department_id = t2.department_id
|
||||
AND ls.mil_reg = t2.mil_reg
|
||||
LEFT JOIN t3 ON ls.department_id = t3.department_id
|
||||
AND ls.mil_reg = t3.mil_reg
|
||||
LEFT JOIN t4 ON ls.department_id = t4.department_id
|
||||
AND ls.mil_reg = t4.mil_reg
|
||||
LEFT JOIN t5 ON ls.department_id = t5.department_id
|
||||
AND ls.mil_reg = t5.mil_reg
|
||||
LEFT JOIN t6 ON ls.department_id = t6.department_id
|
||||
AND ls.mil_reg = t6.mil_reg
|
||||
LEFT JOIN t7 ON ls.department_id = t7.department_id
|
||||
AND ls.mil_reg = t7.mil_reg
|
||||
LEFT JOIN t8 ON ls.department_id = t8.department_id
|
||||
AND ls.mil_reg = t8.mil_reg
|
||||
LEFT JOIN t9 ON ls.department_id = t9.department_id
|
||||
AND ls.mil_reg = t9.mil_reg
|
||||
LEFT JOIN t10 ON ls.department_id = t10.department_id
|
||||
AND ls.mil_reg = t10.mil_reg
|
||||
LEFT JOIN t11 ON ls.department_id = t11.department_id
|
||||
AND ls.mil_reg = t11.mil_reg
|
||||
LEFT JOIN t12 ON ls.department_id = t12.department_id
|
||||
AND ls.mil_reg = t12.mil_reg
|
||||
LEFT JOIN t13 ON ls.department_id = t13.department_id
|
||||
AND ls.mil_reg = t13.mil_reg;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>816</xloc>
|
||||
<yloc>384</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
</pipeline>
|
||||
Loading…
Add table
Add a link
Reference in a new issue