mc_parallel

This commit is contained in:
Ruslan 2025-04-01 09:47:42 +03:00
parent d288a7519e
commit 28e48951f6
45 changed files with 13650 additions and 258 deletions

File diff suppressed because it is too large Load diff

View file

@ -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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; 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) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; 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) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; 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) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; 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) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; 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) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_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>

View file

@ -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' &lt;= current_date::text
)
ELSE
false
END AS uchet_pnd,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM 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)) &lt; interval '16 years'
GROUP BY recruit_id
),
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
OR uchet_pnd is false)
AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
--AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion -- критерии от 03.06.2025
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_target_recruitment_id
)
SELECT
rd.recruitment_id,
current_date AS recording_date,
COALESCE(rd.waiting_count, 0) AS waiting_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>