ervu-dashboard-etl/mappings/country/main_dashboard.waiting_registration.hpl

321 lines
9.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>main_dashboard.waiting_registration</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)</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Get variables 2 2</from>
<to>Select values 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input 2 (person_registry) РФ</from>
<to>Get variables 2 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Select values 2 2</from>
<to>Insert / update (main_dashboard.waiting_registration)</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REG_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>VK_ARRAY</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>544</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (main_dashboard.waiting_registration)</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>REG_ID</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>waiting_registration_percent</name>
<rename>waiting_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>928</xloc>
<yloc>336</yloc>
</GUI>
</transform>
<transform>
<name>Select values 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REG_ID</name>
<rename>REG_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>VK_ARRAY</name>
<rename>VK_ARRAY</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>752</xloc>
<yloc>400</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>postgres.person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
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
COUNT(*) AS waiting_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
AND gender = 'MALE') -- мужчины от 18 до 70 лет
OR
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
AND gender = 'FEMALE') -- женщины от 18 до 45 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND COALESCE(cc.children_under_16, 0) &lt; 5 -- исключить рекрутов с 5 и более детьми младше 16 лет
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS volunteer_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE' -- мужчины от 18 до 50 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
) AS contract_criterion
FROM vse as ri
LEFT JOIN children_count AS cc
ON ri.r_id = cc.recruit_id
)
SELECT
waiting_count,
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) AS waiting_percent,
male_count,
female_count,
'${REG_ID}' AS recruitment_id,
mobilization_criterion,
volunteer_criterion,
contract_criterion,
ROUND(mobilization_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS mobilization_criterion_percent,
ROUND(volunteer_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS volunteer_criterion_percent,
ROUND(contract_criterion::NUMERIC / NULLIF(waiting_count, 0) * 100, 2) AS contract_criterion_percent
FROM recruit_data;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>368</xloc>
<yloc>336</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>