+subpoena, temporary_measure

This commit is contained in:
Ruslan 2024-10-07 14:32:34 +03:00
parent aa93c87e07
commit 15fa09aeac
11 changed files with 3029 additions and 1437 deletions

View file

@ -785,46 +785,106 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH recruit_data AS (
SELECT
COUNT(*) AS total_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count
FROM public.recruits r
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
OR r.target_recruitment_id = ANY (
CASE
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
)
),
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 total_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')
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
AND gender = 'FEMALE')
AND (conscription IS NULL OR conscription = false)
AND COALESCE(cc.children_under_16, 0) &lt; 5
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
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'
AND (conscription IS NULL OR conscription = false)
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
)
SELECT
'${REG_ID}' AS recruitment_id,
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 '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
ELSE rd.total_count
END AS total_count,
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 '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
ELSE rd.male_count
END AS male_count,
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 '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
ELSE rd.female_count
END AS female_count,
'${REG_ID}' AS recruitment_id,
0 AS mobilization_criterion,
0 AS volunteer_criterion,
0 AS contract_criterion,
0 AS mobilization_criterion_percent,
0 AS volunteer_criterion_percent,
0 AS contract_criterion_percent
FROM recruit_data rd;</sql>
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM recruit_data AS rd;
</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

View file

@ -696,6 +696,11 @@
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>waiting_registration_percent</name>
<rename>waiting_percent</rename>
<update>Y</update>
</value>
</lookup>
<attributes/>
<cluster_schema/>
@ -785,30 +790,113 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>SELECT
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(*) END AS waiting_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(*) FILTER (WHERE gender = 'MALE') END AS male_count,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(*) FILTER (WHERE gender = 'FEMALE') END AS female_count,
'${REG_ID}' AS recruitment_id,
0 AS mobilization_criterion,
0 AS volunteer_criterion,
0 AS contract_criterion,
0 AS mobilization_criterion_percent,
0 AS volunteer_criterion_percent,
0 AS contract_criterion_percent,
CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE((COUNT(*)::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) END AS waiting_percent
FROM public.recruits r
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NULL
OR '${VK_ARRAY}' = ''
OR r.target_recruitment_id = ANY (
string_to_array(
trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
)::uuid[]
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
);</sql>
),
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')
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45 AND gender = 'FEMALE')
AND (conscription IS NULL OR conscription = false)
AND COALESCE(cc.children_under_16, 0) &lt; 5
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
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'
AND (conscription IS NULL OR conscription = false)
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
)
SELECT
'${REG_ID}' AS recruitment_id,
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,
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
ELSE ROUND(
COALESCE(
(rd.waiting_count::DECIMAL / NULLIF(
(SELECT COUNT(*) FROM public.recruits WHERE vu_current_info ->> 'isMilitaryRegistered' = 'true'), 0) * 100
), 0
), 2
)
END AS waiting_percent
FROM recruit_data AS rd;</sql>
<limit>0</limit>
<lookup/>
<execute_each_row>N</execute_each_row>

File diff suppressed because it is too large Load diff