+appeals.reasons_appeal, rating.conscription_info

This commit is contained in:
Ruslan 2025-03-19 10:12:27 +03:00
parent 83de694301
commit 14fd9bae64
7 changed files with 213 additions and 171 deletions

View file

@ -125,7 +125,7 @@ WHERE recording_date = current_date
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
<name>REG_ID</name>
</key>
<schema>appeals</schema>
<table>reasons_appeal</table>
@ -155,23 +155,33 @@ WHERE recording_date = current_date
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>no_data</rename>
<name>sending_documents</name>
<rename>sending_documents</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>no_data_percent</rename>
<name>sending_documents_percent</name>
<rename>sending_documents_percent</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<name>decision_disagreement</name>
<rename>decision_disagreement</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<name>decision_disagreement_persent</name>
<rename>decision_disagreement_persent</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal</name>
<rename>complaint_withdrawal</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal_percent</name>
<rename>complaint_withdrawal_percent</rename>
<update>Y</update>
</value>
</lookup>
@ -253,8 +263,9 @@ WHERE recording_date = current_date
<sql>SELECT
COALESCE(SUM(appeal), 0) appeal,
COALESCE(SUM(incorrect_inf), 0) incorrect_inf,
COALESCE(SUM(no_data), 0) no_data,
COALESCE(SUM(other), 0) other,
COALESCE(SUM(sending_documents), 0) sending_documents,
COALESCE(SUM(decision_disagreement), 0) decision_disagreement,
COALESCE(SUM(complaint_withdrawal), 0) complaint_withdrawal,
COALESCE(
CASE
WHEN SUM(appeal) > 0
@ -266,19 +277,27 @@ WHERE recording_date = current_date
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(no_data) / SUM(appeal) * 100), 2)
THEN ROUND((SUM(sending_documents) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) no_data_percent,
) sending_documents_percent,
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(other) / SUM(appeal) * 100), 2)
THEN ROUND((SUM(decision_disagreement) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) other_percent,
) decision_disagreement_persent,
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(complaint_withdrawal) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) complaint_withdrawal_percent,
'${REG_ID}' AS recruitment_id,
'Ministry' AS schema
FROM appeals.reasons_appeal

View file

@ -1000,7 +1000,7 @@
<hop>
<from>select_recruitments_country</from>
<to>appeals.reasons_appeal.hpl</to>
<enabled>N</enabled>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>

View file

@ -21,18 +21,18 @@
<notepads>
</notepads>
<order>
<hop>
<from>Get variables 4 3</from>
<to>Select values 4 3</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (subpoena) регион/осень</from>
<to>Get variables 4 3</to>
<to>Merge join</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 4 3</from>
<from>Table input отчрочки из decisions</from>
<to>Merge join</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Merge join</from>
<to>Insert / update (main_dashboard.recruitment_campaign)</to>
<enabled>N</enabled>
</hop>
@ -42,39 +42,6 @@
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get variables 4 3</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>432</xloc>
<yloc>416</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update (main_dashboard.recruitment_campaign)</name>
<type>InsertUpdate</type>
@ -170,13 +137,13 @@
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>720</xloc>
<xloc>1008</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Select values 4 3</name>
<type>SelectValues</type>
<name>Merge join</name>
<type>MergeJoin</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
@ -185,47 +152,21 @@
<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>
<join_type>LEFT OUTER</join_type>
<keys_1>
<key>recruitment_id</key>
<key>spring_autumn</key>
</keys_1>
<keys_2>
<key>recruitment_id</key>
<key>spring_autumn</key>
</keys_2>
<transform1>Table input (subpoena) регион/осень</transform1>
<transform2>Table input отчрочки из decisions</transform2>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>416</yloc>
<xloc>624</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
@ -260,6 +201,7 @@ subpoena_data AS (
rdi.applied_date AS ap_date,
rdi.id AS rdi_id,
ssi.delivery_code AS d_code,
ssi.act_number,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
FROM public.subpoena s
JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id
@ -270,8 +212,14 @@ subpoena_data AS (
LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
WHERE sr.type = '3'
AND ssh.code NOT IN ('3.14', '3.7', '3.72', '3.71')
AND ssh.code NOT IN ('3.7','3.72', '3.71')
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')
)
),
last_status AS (
SELECT *
@ -279,43 +227,27 @@ last_status AS (
WHERE rn = 1
),
season_separations AS (
/*
Осенний призыв:
Начало: 1 октября
Конец: 31 декабря
Весенний призыв:
Начало: 1 апреля
Конец: 15 июля
Весна
Если текущий период с 1 янаваря по 30 сентября текущего года ТО
обрезаем текущую дату до начала года, прибавляем 3 месяца(это начало весеннего призыва) И
обрезаем текущую дату до начала года, прибавляем 6 месяца и 15 дней(это конец весеннего призыва))//
Если текущий период с 1 октября по 31 декабря текущего года ТО
обрезаем текущую дату до начала года, прибавляем 3 месяца(это начало весеннего призыва) И
обрезаем текущую дату до начала года, прибавляем 6 месяца и 15 дней(это конец весеннего призыва))
Осень
Если текущий период с 1 января по 30 сентября текущего года ТО
create_date >= 1 октября прошлого года
create_date &lt;= 31 декабря прошлого года)
Если текущий период с 1 октября по 31 декабря текущего года ТО
create_date >= 1 октября текущего года
create_date &lt;= 31 декабря текущего года)
должно быть что-то похожее, но данных пока нет на текущие периоды
*/
SELECT
SELECT distinct
ls.recruitment_id,
ls.create_date,
ls.sub_stat_hist,
ls.subpoena_id,
ls.history_date,
ls.send_date,
ls.restr_dc,
ls.ap_date,
ls.d_code,
ls.act_number,
ls.rdi_id,
CASE
WHEN EXTRACT(MONTH FROM ls.create_date) BETWEEN 1 AND 6 THEN 'Весна'
WHEN EXTRACT(MONTH FROM ls.create_date) BETWEEN 7 AND 12 THEN 'Осень'
END AS spring_autumn
FROM last_status ls
WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
),
season_separations_clean AS (
SELECT DISTINCT recruitment_id, spring_autumn FROM season_separations
),
t1 AS (
SELECT
@ -323,7 +255,6 @@ t1 AS (
ss.spring_autumn,
COUNT(DISTINCT subpoena_id) AS count_subpoena
FROM season_separations ss
JOIN last_status ls ON ss.recruitment_id = ls.recruitment_id
WHERE sub_stat_hist IS NOT NULL
GROUP BY ss.recruitment_id, ss.spring_autumn
),
@ -333,7 +264,6 @@ t2 AS (
ss.spring_autumn,
COUNT(DISTINCT subpoena_id) AS count_appeared
FROM season_separations ss
JOIN last_status ls ON ss.recruitment_id = ls.recruitment_id
WHERE sub_stat_hist IN ('4.1', '4.2')
GROUP BY ss.recruitment_id, ss.spring_autumn
),
@ -343,7 +273,6 @@ t3 AS (
ss.spring_autumn,
COUNT(DISTINCT subpoena_id) AS count_not_appeared
FROM season_separations ss
JOIN last_status ls ON ss.recruitment_id = ls.recruitment_id
WHERE sub_stat_hist = '5'
GROUP BY ss.recruitment_id, ss.spring_autumn
)
@ -361,17 +290,75 @@ SELECT
0 AS postponement_granted_percent,
ss.spring_autumn,
ss.recruitment_id
FROM season_separations ss
FROM season_separations_clean ss
LEFT JOIN t1 ON ss.recruitment_id = t1.recruitment_id AND ss.spring_autumn = t1.spring_autumn
LEFT JOIN t2 ON ss.recruitment_id = t2.recruitment_id AND ss.spring_autumn = t2.spring_autumn
LEFT JOIN t3 ON ss.recruitment_id = t3.recruitment_id AND ss.spring_autumn = t3.spring_autumn;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<xloc>288</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Table input отчрочки из decisions</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
vse AS(
SELECT
CASE
WHEN dd.hidden is true THEN 'true'
ELSE 'false'
END AS postponement,
COALESCE(dd.updated_at, dd.created_at) AS postponement_date,
dd.recruit_id,
COALESCE(r.current_recruitment, r.target_recruitment) AS recruitment_id,
ROW_NUMBER() OVER (PARTITION BY dd.recruit_id ORDER BY COALESCE(dd.updated_at, dd.created_at) DESC) AS rn
FROM recruit r
JOIN deferment_decision dd ON dd.recruit_id = r.id
JOIN deferment_decision_type ddt on ddt.id = dd.type_id AND ddt.code = '1'
WHERE COALESCE(r.current_recruitment, r.target_recruitment)::uuid IN (SELECT recruitment_id FROM ids)
),
last_status AS(
SELECT *
FROM vse
WHERE rn = 1
)
SELECT
COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'true') AS postponement_have_right,
COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'false') AS postponement_granted,
CASE
WHEN EXTRACT(MONTH FROM ls.postponement_date) BETWEEN 1 AND 6 THEN 'Весна'
WHEN EXTRACT(MONTH FROM ls.postponement_date) BETWEEN 7 AND 12 THEN 'Осень'
END AS spring_autumn,
ls.recruitment_id,
current_date AS recording_date
FROM last_status ls
WHERE ls.recruitment_id IS NOT NULL
AND ls.postponement_date >= DATE_TRUNC('year', CURRENT_DATE)
GROUP BY spring_autumn, ls.recruitment_id</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>288</xloc>
<yloc>416</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>

View file

@ -179,23 +179,33 @@ WHERE recording_date = current_date
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>no_data</rename>
<name>sending_documents</name>
<rename>sending_documents</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>no_data_percent</rename>
<name>sending_documents_percent</name>
<rename>sending_documents_percent</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<name>decision_disagreement</name>
<rename>decision_disagreement</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<name>decision_disagreement_persent</name>
<rename>decision_disagreement_persent</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal</name>
<rename>complaint_withdrawal</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal_percent</name>
<rename>complaint_withdrawal_percent</rename>
<update>Y</update>
</value>
<value>
@ -285,10 +295,11 @@ WHERE recording_date = current_date
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
(SUM(appeal), 0) appeal,
(SUM(incorrect_inf), 0) incorrect_inf,
(SUM(no_data), 0) no_data,
(SUM(other), 0) other,
COALESCE(SUM(appeal), 0) appeal,
COALESCE(SUM(incorrect_inf), 0) incorrect_inf,
COALESCE(SUM(sending_documents), 0) sending_documents,
COALESCE(SUM(decision_disagreement), 0) decision_disagreement,
COALESCE(SUM(complaint_withdrawal), 0) complaint_withdrawal,
COALESCE(
CASE
WHEN SUM(appeal) > 0
@ -300,19 +311,27 @@ WHERE recording_date = current_date
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(no_data) / SUM(appeal) * 100), 2)
THEN ROUND((SUM(sending_documents) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) no_data_percent,
) sending_documents_percent,
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(other) / SUM(appeal) * 100), 2)
THEN ROUND((SUM(decision_disagreement) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) other_percent,
) decision_disagreement_persent,
COALESCE(
CASE
WHEN SUM(appeal) > 0
THEN ROUND((SUM(complaint_withdrawal) / SUM(appeal) * 100), 2)
ELSE 0
END,
0
) complaint_withdrawal_percent,
'${MD_ID}' AS recruitment_id,
'Region' AS schema
FROM appeals.reasons_appeal

View file

@ -1000,7 +1000,7 @@
<hop>
<from>job_get_rows_mildis.hwf</from>
<to>appeals.reasons_appeal(m_d).hpl</to>
<enabled>N</enabled>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>

View file

@ -80,13 +80,11 @@
<condition>=</condition>
<field>id_region</field>
<name>REG_ID</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>spring_autumn</field>
<name>spring_autumn</name>
<name2/>
</key>
<schema>ratings</schema>
<table>conscription_info</table>
@ -220,7 +218,7 @@ season_separations AS (
WHEN EXTRACT(MONTH FROM ls.create_date) BETWEEN 7 AND 12 THEN 'Осень'
END AS spring_autumn
FROM last_status ls
WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
--WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
)
SELECT
'${REG_ID}' AS region_id,

View file

@ -166,16 +166,19 @@ WHERE recording_date = current_date
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>schema</field>
<name>schema</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
<name2/>
</key>
<schema>appeals</schema>
<table>reasons_appeal</table>
@ -205,23 +208,33 @@ WHERE recording_date = current_date
<update>Y</update>
</value>
<value>
<name>no_data</name>
<rename>no_data</rename>
<name>sending_documents</name>
<rename>sending_documents</rename>
<update>Y</update>
</value>
<value>
<name>no_data_percent</name>
<rename>no_data_percent</rename>
<name>sending_documents_percent</name>
<rename>sending_documents_percent</rename>
<update>Y</update>
</value>
<value>
<name>other</name>
<rename>other</rename>
<name>decision_disagreement</name>
<rename>decision_disagreement</rename>
<update>Y</update>
</value>
<value>
<name>other_percent</name>
<rename>other_percent</rename>
<name>decision_disagreement_persent</name>
<rename>decision_disagreement_percent</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal</name>
<rename>complaint_withdrawal</rename>
<update>Y</update>
</value>
<value>
<name>complaint_withdrawal_percent</name>
<rename>complaint_withdrawal_percent</rename>
<update>Y</update>
</value>
</lookup>
@ -326,16 +339,20 @@ total_appeals AS (
FROM appeals.appeals_list
WHERE
region_id::uuid IN (SELECT recruitment_id FROM ids)
AND (reasons_appeal IS NULL OR
reasons_appeal IN ('Отзыв жалобы', 'Некорректные данные', 'Досыл документов', 'Несогласие с решением'))
AND reasons_appeal IN ('Отзыв жалобы', 'Некорректные данные', 'Досыл документов', 'Несогласие с решением')
),
summary_counts AS (
SELECT
region_id AS recruitment_id,
COUNT(*) AS total_appeals,
SUM(CASE WHEN reasons_appeal = 'Некорректные данные' THEN 1 ELSE 0 END) AS incorrect_inf,
SUM(CASE WHEN reasons_appeal IS NULL THEN 1 ELSE 0 END) AS no_data,
SUM(CASE WHEN reasons_appeal IN ('Отзыв жалобы', 'Досыл документов', 'Несогласие с решением') THEN 1 ELSE 0 END) AS other
SUM(CASE WHEN reasons_appeal = 'Некорректные данные' THEN 1 ELSE 0 END) AS incorrect_inf, --некорректные данные
SUM(CASE WHEN reasons_appeal = 'Досыл документов' THEN 1 ELSE 0 END) AS sending_documents,
SUM(CASE WHEN reasons_appeal = 'Несогласие с решением' THEN 1 ELSE 0 END) AS decision_disagreement,
SUM(CASE WHEN reasons_appeal = 'Отзыв жалобы' THEN 1 ELSE 0 END) AS complaint_withdrawal
/*
sending_documents -- Досыл документов
complaint_withdrawal -- Отзыв жалобы
decision_disagreement --Несогласие с решением*/
FROM total_appeals
GROUP BY recruitment_id
)
@ -345,11 +362,13 @@ SELECT
current_date AS recording_date,
COALESCE(sc.total_appeals, 0) AS appeal,
COALESCE(sc.incorrect_inf, 0) AS incorrect_inf,
COALESCE(sc.no_data, 0) AS no_data,
COALESCE(sc.other, 0) AS other,
COALESCE(sc.sending_documents, 0) AS sending_documents,
COALESCE(sc.decision_disagreement, 0) AS decision_disagreement,
COALESCE(sc.complaint_withdrawal, 0) AS complaint_withdrawal,
COALESCE(ROUND(sc.incorrect_inf * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS incorrect_inf_percent,
COALESCE(ROUND(sc.no_data * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS no_data_percent,
COALESCE(ROUND(sc.other * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS other_percent
COALESCE(ROUND(sc.sending_documents * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS sending_documents_percent,
COALESCE(ROUND(sc.decision_disagreement * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS decision_disagreement_percent,
COALESCE(ROUND(sc.complaint_withdrawal * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS complaint_withdrawal_percent
FROM ids i
LEFT JOIN summary_counts sc ON sc.recruitment_id = i.recruitment_id;</sql>
<variables_active>Y</variables_active>