diff --git a/mappings/connections/db.json b/mappings/connections/db.json
index 325825a..eb00421 100644
--- a/mappings/connections/db.json
+++ b/mappings/connections/db.json
@@ -1,7 +1,7 @@
{
"variables" : [ {
"name" : "DB_PERSON_HOST",
- "value" : "10.10.31.119",
+ "value" : "10.10.31.118",
"description" : ""
}, {
"name" : "DB_PERSON_PORT",
@@ -9,15 +9,15 @@
"description" : ""
}, {
"name" : "DB_PERSON_NAME",
- "value" : "ervu_person_registry",
+ "value" : "ervu-person-registry",
"description" : ""
}, {
"name" : "DB_PERSON_USERNAME",
- "value" : "ervu-dashboard",
+ "value" : "postgres",
"description" : ""
}, {
"name" : "DB_PERSON_PASSWORD",
- "value" : "Encrypted 2be98caba1cd2df80aa0aa672d193bdde",
+ "value" : "Encrypted 2be98afc86aa7f2e4b11ba562feabf7eb",
"description" : ""
}, {
"name" : "DB_DASHBOARD_HOST",
@@ -29,7 +29,7 @@
"description" : ""
}, {
"name" : "DB_DASHBOARD_NAME",
- "value" : "ervu-dashboard",
+ "value" : "ervu-dashboard-recr",
"description" : ""
}, {
"name" : "DB_DASHBOARD_USERNAME",
@@ -69,7 +69,7 @@
"description" : ""
}, {
"name" : "DB_DECISION_NAME",
- "value" : "decision-document-service",
+ "value" : "ervu-decision-document-service",
"description" : ""
}, {
"name" : "DB_DECISION_USERNAME",
@@ -89,7 +89,7 @@
"description" : ""
}, {
"name" : "DB_SUBPOENA_NAME",
- "value" : "subpoena",
+ "value" : "ervu-subpoena-registry",
"description" : ""
}, {
"name" : "DB_SUBPOENA_USERNAME",
diff --git a/mappings/connections/db_uat.json b/mappings/connections/db_uat.json
new file mode 100644
index 0000000..83656a5
--- /dev/null
+++ b/mappings/connections/db_uat.json
@@ -0,0 +1,103 @@
+{
+ "variables" : [ {
+ "name" : "DB_PERSON_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_NAME",
+ "value" : "ervu_person_registry",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_NAME",
+ "value" : "ervu-dashboard",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_USERNAME",
+ "value" : "ervu-dashboard",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_PASSWORD",
+ "value" : "ervu-dashboard",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_NAME",
+ "value" : "ervu_appeal_document",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_NAME",
+ "value" : "ervu_decision_document",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_NAME",
+ "value" : "ervu_subpoena_registry",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ } ]
+}
\ No newline at end of file
diff --git a/mappings/connections/db_uat_to_here.json b/mappings/connections/db_uat_to_here.json
new file mode 100644
index 0000000..3a818ca
--- /dev/null
+++ b/mappings/connections/db_uat_to_here.json
@@ -0,0 +1,103 @@
+{
+ "variables" : [ {
+ "name" : "DB_PERSON_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_NAME",
+ "value" : "ervu_person_registry",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_PERSON_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_HOST",
+ "value" : "10.10.31.119",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_PORT",
+ "value" : "5432",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_NAME",
+ "value" : "ervu-dashboard-recr",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_USERNAME",
+ "value" : "ervu-dashboard",
+ "description" : ""
+ }, {
+ "name" : "DB_DASHBOARD_PASSWORD",
+ "value" : "ervu-dashboard",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_NAME",
+ "value" : "ervu_appeal_document",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_APPEAL_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_NAME",
+ "value" : "ervu_decision_document",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_DECISION_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_HOST",
+ "value" : "10.65.244.45",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_PORT",
+ "value" : "6432",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_NAME",
+ "value" : "ervu_subpoena_registry",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_USERNAME",
+ "value" : "readonly",
+ "description" : ""
+ }, {
+ "name" : "DB_SUBPOENA_PASSWORD",
+ "value" : "readonly",
+ "description" : ""
+ } ]
+}
\ No newline at end of file
diff --git a/mappings/country/appeals.main_profile.hpl b/mappings/country/appeals.main_profile.hpl
new file mode 100644
index 0000000..6ceb452
--- /dev/null
+++ b/mappings/country/appeals.main_profile.hpl
@@ -0,0 +1,200 @@
+
+
+
+ appeals.main_profile
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/11/11 16:52:36.340
+ -
+ 2024/11/11 16:52:36.340
+
+
+
+
+
+ Table input appel-doc
+ Merge join
+ Y
+
+
+ Table input person-reg
+ Merge join
+ Y
+
+
+ Merge join
+ Memory group by
+ Y
+
+
+
+ Table input appel-doc
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.appeal-document-service
+ N
+ 0
+ SELECT
+recruit_id
+FROM public.appeal_document
+ N
+
+
+ 480
+ 160
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+
+
+ N
+ N
+ N
+ N
+
+ Y
+ N
+ N
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 1104
+ 160
+
+
+
+ Memory group by
+ MemoryGroupBy
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ N
+
+
+
+
+ 800
+ 160
+
+
+
+ Sort rows
+ SortRows
+
+ Y
+
+ 1
+
+ none
+
+
+ N
+ ${java.io.tmpdir}
+
+
+ out
+ 1000000
+ N
+
+
+ 960
+ 160
+
+
+
+ Table input person-reg
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ SELECT
+ recruit_id
+FROM public.recruits r
+JOIN public.recruits_info ri
+ ON ri.recruit_id = r.id
+WHERE r.current_recruitment_id IS NOT NULL
+ AND r.target_recruitment_id IS NOT NULL
+ N
+
+
+ 480
+ 288
+
+
+
+ Merge join
+ MergeJoin
+
+ Y
+
+ 1
+
+ none
+
+
+ LEFT OUTER
+
+ recruit_id
+
+
+ recruit_id
+
+ Table input appel-doc
+ Table input person-reg
+
+
+ 640
+ 160
+
+
+
+
+
+
diff --git a/mappings/country/appeals.reasons_appeal.hpl b/mappings/country/appeals.reasons_appeal.hpl
index 5b724bd..76c5740 100644
--- a/mappings/country/appeals.reasons_appeal.hpl
+++ b/mappings/country/appeals.reasons_appeal.hpl
@@ -1,3 +1,4 @@
+
appeals.reasons_appeal
@@ -6,31 +7,104 @@
Normal
- 0
- /
N
1000
100
-
- 2024/08/02 11:56:22.507
+ 2025/01/28 11:14:23.116
-
- 2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
+ 2025/01/28 11:14:23.116
- Table input (appeal_document) РФ
- Insert / update (main_dashboard.appeals)
+ Execute SQL script
+ Table input (subpoena) РФ/осень
+ Y
+
+
+ Get variables 2 2
+ Select values 2 2
+ Y
+
+
+ Select values 2 2
+ Insert / update (appeals.reasons_appeal)
+ Y
+
+
+ Table input (subpoena) РФ/осень
+ Get variables 2 2
Y
- Insert / update (main_dashboard.appeals)
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.reasons_appeal
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 336
+ 448
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+ -1
+ VK_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 800
+ 448
+
+
+
+ Insert / update (appeals.reasons_appeal)
InsertUpdate
Y
@@ -40,39 +114,140 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
- main_dashboard
-
- recruitment_id
- recruitment_id
=
-
+ schema
+ schema
-
- total_appeals
- total_appeals
- Y
-
+
+ =
+ recruitment_id
+ REG_ID
+
+ appeals
+
recruitment_id
recruitment_id
N
+
+ schema
+ schema
+ N
+
+
+ appeal
+ appeal
+ Y
+
+
+ incorrect_inf
+ incorrect_inf
+ Y
+
+
+ incorrect_inf_percent
+ incorrect_inf_percent
+ Y
+
+
+ sending_documents
+ sending_documents
+ Y
+
+
+ sending_documents_percent
+ sending_documents_percent
+ Y
+
+
+ decision_disagreement
+ decision_disagreement
+ Y
+
+
+ decision_disagreement_persent
+ decision_disagreement_persent
+ Y
+
+
+ complaint_withdrawal
+ complaint_withdrawal
+ Y
+
+
+ complaint_withdrawal_percent
+ complaint_withdrawal_percent
+ Y
+
+ N
-
- 752
- 176
- Y
+ 1296
+ 448
- Table input (appeal_document) РФ
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REG_ID
+ REG_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ VK_ARRAY
+ VK_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1008
+ 448
+
+
+
+ Table input (subpoena) РФ/осень
TableInput
Y
@@ -82,33 +257,58 @@
none
- postgres.appeal-document-service
- WITH
-t1 AS (
- SELECT COUNT(*) AS total_appeals
- FROM public.appeal_document
-) -- нет причин обжалований
-SELECT
- t1.total_appeals,
- '00' AS recruitment_id,
- 0 AS incorrect_inf,
- 0 AS no_data,
- 0 AS other,
- 0 AS incorrect_inf_percent,
- 0 AS no_data_percent,
- 0 AS other_percent
-FROM t1;
- 0
-
+ ervu-dashboard
N
- N
- N
+ 0
+ SELECT
+ 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
+ THEN ROUND((SUM(incorrect_inf) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) incorrect_inf_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appeal) > 0
+ THEN ROUND((SUM(sending_documents) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) sending_documents_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appeal) > 0
+ THEN ROUND((SUM(decision_disagreement) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) 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
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE;
+ Y
-
- 400
- 176
- Y
+ 576
+ 448
diff --git a/mappings/country/appeals.topic_appeal.hpl b/mappings/country/appeals.topic_appeal.hpl
new file mode 100644
index 0000000..1b596fe
--- /dev/null
+++ b/mappings/country/appeals.topic_appeal.hpl
@@ -0,0 +1,300 @@
+
+
+
+ appeals.topic_appeal
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/28 11:14:23.116
+ -
+ 2025/01/28 11:14:23.116
+
+
+
+
+
+ Execute SQL script
+ Table input (subpoena) РФ/осень
+ Y
+
+
+ Get variables 2 2
+ Select values 2 2
+ Y
+
+
+ Select values 2 2
+ Insert / update (appeals.topic_appeal)
+ Y
+
+
+ Table input (subpoena) РФ/осень
+ Get variables 2 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.topic_appeal
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 336
+ 448
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+ -1
+ VK_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 800
+ 448
+
+
+
+ Insert / update (appeals.topic_appeal)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ schema
+ schema
+
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ appeals
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ registration
+ registration
+ Y
+
+
+ registration_percent
+ registration_percent
+ Y
+
+
+ sabpoena
+ sabpoena
+ Y
+
+
+ sabpoena_percent
+ sabpoena_percent
+ Y
+
+
+ temporary_measures
+ temporary_measures
+ Y
+
+
+ temporary_measures_percent
+ temporary_measures_percent
+ Y
+
+
+ appear
+ appear
+ Y
+
+
+ N
+
+
+ 1296
+ 448
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REG_ID
+ REG_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ VK_ARRAY
+ VK_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1008
+ 448
+
+
+
+ Table input (subpoena) РФ/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(appear), 0) appear,
+ COALESCE(SUM(registration), 0) registration,
+ COALESCE(SUM(sabpoena), 0) sabpoena,
+ COALESCE(SUM(temporary_measures), 0) temporary_measures,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(registration) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) registration_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(sabpoena) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) sabpoena_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(temporary_measures) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) temporary_measures_percent,
+ '${REG_ID}' AS recruitment_id,
+ 'Ministry' AS schema
+FROM appeals.topic_appeal
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 576
+ 448
+
+
+
+
+
+
diff --git a/mappings/country/job_recruitments_country.hwf b/mappings/country/job_recruitments_country.hwf
index 1061b7b..443e47b 100644
--- a/mappings/country/job_recruitments_country.hwf
+++ b/mappings/country/job_recruitments_country.hwf
@@ -37,8 +37,8 @@
0
1
N
- 48
- 576
+ 576
+ 1088
@@ -71,8 +71,8 @@
N
Y
N
- 960
- 48
+ 1360
+ 624
@@ -81,8 +81,8 @@
SUCCESS
N
- 1136
- 48
+ 1536
+ 624
@@ -115,8 +115,8 @@
N
Y
N
- 960
- 128
+ 1360
+ 704
@@ -125,8 +125,8 @@
SUCCESS
N
- 1136
- 128
+ 1536
+ 704
@@ -159,8 +159,8 @@
N
Y
N
- 960
- 192
+ 1360
+ 768
@@ -169,8 +169,8 @@
SUCCESS
N
- 1136
- 192
+ 1536
+ 768
@@ -203,8 +203,8 @@
N
Y
N
- 960
- 272
+ 1360
+ 848
@@ -213,8 +213,8 @@
SUCCESS
N
- 1136
- 272
+ 1536
+ 848
@@ -247,8 +247,8 @@
N
Y
N
- 960
- 352
+ 1360
+ 928
@@ -257,8 +257,8 @@
SUCCESS
N
- 1136
- 352
+ 1536
+ 928
@@ -291,8 +291,8 @@
N
Y
N
- 960
- 432
+ 1360
+ 1008
@@ -301,8 +301,8 @@
SUCCESS
N
- 1136
- 432
+ 1536
+ 1008
@@ -335,8 +335,8 @@
N
Y
N
- 960
- 512
+ 1360
+ 1088
@@ -345,8 +345,8 @@
SUCCESS
N
- 1136
- 512
+ 1536
+ 1088
@@ -379,8 +379,8 @@
N
Y
N
- 960
- 576
+ 1360
+ 1152
@@ -389,8 +389,8 @@
SUCCESS
N
- 1136
- 576
+ 1536
+ 1152
@@ -423,8 +423,8 @@
N
Y
N
- 960
- 640
+ 1360
+ 1216
@@ -433,8 +433,8 @@
SUCCESS
N
- 1136
- 640
+ 1536
+ 1216
@@ -467,8 +467,8 @@
N
Y
N
- 960
- 704
+ 1360
+ 1280
@@ -477,8 +477,8 @@
SUCCESS
N
- 1136
- 704
+ 1536
+ 1280
@@ -511,8 +511,8 @@
N
Y
N
- 960
- 768
+ 1360
+ 1344
@@ -521,128 +521,8 @@
SUCCESS
N
- 1136
- 768
-
-
-
- SQL.md.appeals
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.appeals where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 48
-
-
-
- SQL.md.rec_cam
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.recruitment_campaign where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 128
-
-
-
- SQL.md.tot_reg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.total_registered where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 192
-
-
-
- SQL.md.wait_reg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.waiting_registration where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 272
-
-
-
- SQL.rcam.subpoenas
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM recruitment_campaign.subpoenas where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 352
-
-
-
- SQL.totreg.mrc
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.reg_mil_cat where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 432
-
-
-
- SQL.totreg.remreg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.removed_registry where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 512
-
-
-
- SQL.totreg.sub
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.subpoenas where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 576
+ 1536
+ 1344
@@ -675,8 +555,8 @@
N
Y
N
- 960
- 832
+ 1360
+ 1408
@@ -685,68 +565,8 @@
SUCCESS
N
- 1136
- 832
-
-
-
- SQL.totreg.marstat
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.marital_status where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 832
-
-
-
- SQL.totreg.chimin
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.child_minor where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 704
-
-
-
- SQL.totreg.age
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.age where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 768
-
-
-
- SQL.totreg.drilic
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.driver_license where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 640
+ 1536
+ 1408
@@ -779,8 +599,8 @@
N
Y
N
- 960
- 912
+ 1360
+ 1488
@@ -789,23 +609,8 @@
SUCCESS
N
- 1136
- 912
-
-
-
- SQL.totreg.edulev
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.education_level where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 912
+ 1536
+ 1488
@@ -838,8 +643,8 @@
N
Y
N
- 960
- 992
+ 1360
+ 1568
@@ -848,23 +653,8 @@
SUCCESS
N
- 1136
- 992
-
-
-
- SQL.totreg.busyn
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.busyness where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 992
+ 1536
+ 1568
@@ -897,8 +687,8 @@
N
Y
N
- 960
- 1056
+ 1360
+ 1632
@@ -907,23 +697,8 @@
SUCCESS
N
- 1136
- 1056
-
-
-
- SQL.reccam.app
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM recruitment_campaign.appeals where recruitment_id = '00' and recording_date = current_date
- N
- N
- N
- 768
- 1056
+ 1536
+ 1632
@@ -947,20 +722,101 @@
N
N
Y
+ Y
+ 768
+ 1088
+
+
+
+ appeals.reasons_appeal.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/country/appeals.reasons_appeal.hpl
+ Basic
+
+
+ VK_ARRAY
+ VK_ARRAY_ID
+
+
+ REG_ID
+ RECRUITMENT_REG_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
N
- 240
- 576
+ 1360
+ 544
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1536
+ 544
+
+
+
+ appeals.topic_appeal.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/country/appeals.topic_appeal.hpl
+ Basic
+
+
+ VK_ARRAY
+ VK_ARRAY_ID
+
+
+ REG_ID
+ RECRUITMENT_REG_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1360
+ 464
+
+
+
+ Success 17
+
+ SUCCESS
+
+ N
+ 1536
+ 464
-
- main_dashboard.appeals
- Success
- Y
- Y
- N
-
main_dashboard.recruitment_campaign
Success 2
@@ -1031,69 +887,6 @@
Y
N
-
- SQL.md.appeals
- main_dashboard.appeals
- Y
- Y
- N
-
-
- SQL.md.rec_cam
- main_dashboard.recruitment_campaign
- Y
- Y
- N
-
-
- SQL.md.tot_reg
- main_dashboard.total_registered
- Y
- Y
- N
-
-
- SQL.md.wait_reg
- main_dashboard.waiting_registration
- Y
- Y
- N
-
-
- SQL.rcam.subpoenas
- recruitment_campaign.subpoenas
- Y
- Y
- N
-
-
- SQL.totreg.mrc
- total_registered.reg_mil_cat
- Y
- Y
- N
-
-
- SQL.totreg.remreg
- total_registered.removed_registry
- Y
- Y
- N
-
-
- SQL.totreg.sub
- total_registered.subpoenas
- Y
- Y
- N
-
-
- SQL.totreg.marstat
- total_registered.marital_status
- Y
- Y
- N
-
total_registered.marital_status
Success 13
@@ -1101,34 +894,6 @@
Y
N
-
- SQL.totreg.chimin
- total_registered.child_minor
- Y
- Y
- N
-
-
- SQL.totreg.age
- total_registered.age
- Y
- Y
- N
-
-
- SQL.totreg.drilic
- total_registered.driver_license
- Y
- Y
- N
-
-
- SQL.totreg.edulev
- total_registered.education_level
- Y
- Y
- N
-
total_registered.education_level
Success 14
@@ -1136,13 +901,6 @@
Y
N
-
- SQL.totreg.busyn
- total_registered.busyness
- Y
- Y
- N
-
total_registered.busyness
Success 15
@@ -1150,13 +908,6 @@
Y
N
-
- SQL.reccam.app
- recruitment_campaign.appeals
- Y
- Y
- N
-
recruitment_campaign.appeals
Success 16
@@ -1172,109 +923,144 @@
Y
- select_recruitments_country
- SQL.md.appeals
+ main_dashboard.appeals
+ Success
Y
Y
- Y
+ N
select_recruitments_country
- SQL.md.tot_reg
+ main_dashboard.appeals
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.md.wait_reg
+ main_dashboard.recruitment_campaign
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.md.rec_cam
+ main_dashboard.total_registered
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.rcam.subpoenas
+ main_dashboard.waiting_registration
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.mrc
+ recruitment_campaign.subpoenas
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.remreg
+ total_registered.reg_mil_cat
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.sub
+ total_registered.removed_registry
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.drilic
+ total_registered.subpoenas
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.chimin
+ total_registered.driver_license
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.age
+ total_registered.child_minor
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.marstat
+ total_registered.age
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.edulev
+ total_registered.marital_status
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.totreg.busyn
+ total_registered.education_level
Y
- N
- Y
+ Y
+ N
select_recruitments_country
- SQL.reccam.app
+ total_registered.busyness
Y
- N
- Y
+ Y
+ N
+
+
+ select_recruitments_country
+ recruitment_campaign.appeals
+ Y
+ Y
+ N
+
+
+ appeals.reasons_appeal.hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+ select_recruitments_country
+ appeals.reasons_appeal.hpl
+ Y
+ Y
+ N
+
+
+ appeals.topic_appeal.hpl
+ Success 17
+ Y
+ Y
+ N
+
+
+ select_recruitments_country
+ appeals.topic_appeal.hpl
+ Y
+ Y
+ N
diff --git a/mappings/country/main_dashboard.appeals.hpl b/mappings/country/main_dashboard.appeals.hpl
index 61934e5..b54794c 100644
--- a/mappings/country/main_dashboard.appeals.hpl
+++ b/mappings/country/main_dashboard.appeals.hpl
@@ -21,11 +21,6 @@
-
- Table input (appeal_document) РФ
- Insert / update (main_dashboard.appeals)
- N
-
Get variables 3 2
Select values 3 2
@@ -41,7 +36,41 @@
Get variables 3 2
Y
+
+ Execute SQL script
+ Table input (appeal_document) РФ
+ Y
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 336
+ 272
+
+
Get variables 3 2
GetVariable
@@ -71,82 +100,8 @@
- 672
- 176
-
-
-
- Insert / update (main_dashboard.appeals)
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- recruitment_id
-
- main_dashboard
-
-
- total_appeals
- total_appeals
- Y
-
-
- average_consideration
- average_consideration
- Y
-
-
- resolved
- resolved
- Y
-
-
- average_rating
- average_rating
- Y
-
-
- average_to_face
- average_to_face
- Y
-
-
- "average_EPGU"
- average_epgu
- Y
-
-
- average_to_face_percent
- average_to_face_percent
- Y
-
-
- "average_EPGU_percent"
- average_epgu_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- N
-
-
- 736
- 400
+ 768
+ 272
@@ -168,6 +123,11 @@
recruitment_id
REG_ID
+
+ =
+ schema
+ schema
+
main_dashboard
@@ -215,12 +175,17 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
Y
- 1024
- 176
+ 1120
+ 272
@@ -273,8 +238,8 @@
- 816
- 176
+ 912
+ 272
@@ -288,45 +253,43 @@
none
- postgres.appeal-document-service
+ ervu-dashboard
N
0
- WITH
-t1 AS (
- SELECT COUNT(*) AS total_appeals
- FROM public.appeal_document
-),
-t2 AS (
- SELECT
- ROUND(
- AVG(
- (TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)
- ),
- 2
- ) AS average_consideration
- FROM public.appeal_document ad
-),
-resolved AS (
- SELECT COUNT(*) AS resolved
- FROM public.appeal_document ad
- WHERE ad.extra_info->>'result' IN ('1', '2')
-)
-SELECT
- t1.total_appeals,
- t2.average_consideration,
- r.resolved,
+ SELECT
+ COALESCE(SUM(total_appeals), 0) total_appeals,
+ COALESCE(SUM(resolved), 0) resolved,
+ COALESCE(SUM(average_consideration), 0) average_consideration,
+ COALESCE(SUM(average_rating), 0) average_rating,
+ COALESCE(SUM(average_to_face), 0) average_to_face,
+ COALESCE(SUM("average_EPGU"), 0) average_epgu,
+ COALESCE(
+ CASE
+ WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
+ THEN ROUND((SUM(average_to_face) / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_to_face_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
+ THEN ROUND((SUM("average_EPGU") / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_epgu_percent,
'${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 0 AS average_to_face,
- 0 AS average_epgu,
- 0 AS average_to_face_percent,
- 0 AS average_epgu_percent
-FROM t1, t2, resolved AS r;
+ 'Ministry' AS schema
+FROM main_dashboard.appeals
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE;
Y
- 400
- 176
+ 560
+ 272
diff --git a/mappings/country/main_dashboard.recruitment_campaign.hpl b/mappings/country/main_dashboard.recruitment_campaign.hpl
index 8748462..69ab311 100644
--- a/mappings/country/main_dashboard.recruitment_campaign.hpl
+++ b/mappings/country/main_dashboard.recruitment_campaign.hpl
@@ -21,396 +21,30 @@
-
- Sort rows 2 2
- Merge join 2
- Y
-
-
- Sort rows 3
- Merge join 2
- Y
-
-
- Table input (person_registry) РФ/осень
- Sort rows 3
- Y
-
-
- Table input (subpoena) РФ/осень
- Sort rows 2 2
- Y
-
-
- Merge join 2
- Insert / update (main_dashboard.recruitment_campaign)
- N
-
-
- Sort rows 2 2 2
- Merge join 2 2
- Y
-
-
- Sort rows 3 2
- Merge join 2 2
- Y
-
-
- Table input (subpoena) РФ/весна
- Sort rows 2 2 2
- Y
-
-
- Merge join 2 2
- Insert / update (main_dashboard.recruitment_campaign) 2
- N
-
-
- Table input (person_registry) РФ/весна
- Sort rows 3 2
- Y
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Merge join 2
- Get variables 2 2
- Y
-
Select values 2 2
Insert / update (main_dashboard.recruitment_campaign)
Y
- Merge join 2 2
- Get variables 2 2 2
+ Table input (subpoena) РФ/осень
+ Get variables 2 2
Y
- Select values 2 2 2
- Insert / update (main_dashboard.recruitment_campaign) 2
+ Execute SQL script
+ Table input (subpoena) РФ/осень
Y
- Insert / update (main_dashboard.recruitment_campaign)
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- spring_autumn
- spring_autumn
-
-
-
- =
- recruitment_id
- REG_ID
-
-
- main_dashboard
-
-
- subpoenas_sent
- count_subpoena
- Y
-
-
- appeared_on_subpoenas
- count_appeared
- Y
-
-
- not_appeared_on_subpoenas
- count_not_appeared
- Y
-
-
- new_recruits
- new_recruits
- Y
-
-
- postponement_have_right
- postponement_have_right
- Y
-
-
- postponement_granted
- postponement_granted
- Y
-
-
- appeared_on_subpoenas_percent
- appeared_on_subpoenas_percent
- Y
-
-
- not_appeared_on_subpoenas_percent
- not_appeared_on_subpoenas_percent
- Y
-
-
- postponement_have_right_percent
- postponement_have_right_percent
- Y
-
-
- postponement_granted_percent
- postponement_granted_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
- N
-
-
- 1360
- 128
-
-
-
- Insert / update (main_dashboard.recruitment_campaign) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- spring_autumn
- spring_autumn
-
-
-
- =
- recruitment_id
- REG_ID
-
-
- main_dashboard
-
-
- subpoenas_sent
- count_subpoena
- Y
-
-
- appeared_on_subpoenas
- count_appeared
- Y
-
-
- not_appeared_on_subpoenas
- count_not_appeared
- Y
-
-
- new_recruits
- new_recruits
- Y
-
-
- postponement_have_right
- postponement_have_right
- Y
-
-
- postponement_granted
- postponement_granted
- Y
-
-
- appeared_on_subpoenas_percent
- appeared_on_subpoenas_percent
- Y
-
-
- not_appeared_on_subpoenas_percent
- not_appeared_on_subpoenas_percent
- Y
-
-
- postponement_have_right_percent
- postponement_have_right_percent
- Y
-
-
- postponement_granted_percent
- postponement_granted_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
- N
-
-
- 1360
- 400
-
-
-
- Merge join 2
- MergeJoin
-
- Y
-
- 1
-
- none
-
-
- FULL OUTER
-
- org
-
-
- org
-
- Sort rows 2 2
- Sort rows 3
-
-
- 864
- 128
-
-
-
- Merge join 2 2
- MergeJoin
-
- Y
-
- 1
-
- none
-
-
- FULL OUTER
-
- org
-
-
- org
-
- Sort rows 2 2 2
- Sort rows 3 2
-
-
- 864
- 400
-
-
-
- Sort rows 2 2
- SortRows
-
- Y
-
- 1
-
- none
-
-
- N
- %%java.io.tmpdir%%
-
-
- Y
- N
- N
- 0
- org
- N
-
-
- 1000000
- N
-
-
- 768
- 128
-
-
-
- Sort rows 2 2 2
- SortRows
-
- Y
-
- 1
-
- none
-
-
- N
- %%java.io.tmpdir%%
-
-
- Y
- N
- N
- 0
- org
- N
-
-
- 1000000
- N
-
-
- 768
- 400
-
-
-
- Sort rows 3
- SortRows
+ Execute SQL script
+ ExecSql
N
@@ -419,337 +53,22 @@
none
- N
- %%java.io.tmpdir%%
-
-
- Y
- N
- N
- 0
- org
- N
-
-
- 1000000
- N
-
-
- 752
- 240
-
-
-
- Sort rows 3 2
- SortRows
-
- N
-
- 1
-
- none
-
-
- N
- %%java.io.tmpdir%%
-
-
- Y
- N
- N
- 0
- org
- N
-
-
- 1000000
- N
-
-
- 752
- 512
-
-
-
- Table input (person_registry) РФ/весна
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
+
+
+ ervu-dashboard
N
- 0
- SELECT
-1 AS org,
-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 new_recruits,
-COUNT(*) FILTER (
- WHERE conscription = true
-) AS postponement_granted,
-ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(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)), 0), 2) AS postponement_granted_percent
-FROM public.recruits AS r
- JOIN public.recruits_info AS ri
- ON ri.recruit_id = r.id
- WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 496
- 512
-
-
-
- Table input (person_registry) РФ/осень
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- SELECT
-1 AS org,
-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 new_recruits,
-COUNT(*) FILTER (
- WHERE conscription = true
-) AS postponement_granted,
-ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(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)), 0), 2) AS postponement_granted_percent
-FROM public.recruits AS r
- JOIN public.recruits_info AS ri
- ON ri.recruit_id = r.id
- WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- N
-
-
- 496
- 240
-
-
-
- Table input (subpoena) РФ/весна
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- s.recruit_id, -- recruit_id добавляем, если есть
- sh.date_time
- FROM public.subpoena s
- JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN public.subpoena_status AS ss ON ss.id = s.status_id
- JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
- JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
- LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
- 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 EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
-),
-last_status_data AS (
- -- Выбираем последнюю дату истории для каждой subpoena
- SELECT
- s.subpoena_id,
- MAX(s.history_date) AS last_history_date
- FROM subpoena_data s
- GROUP BY s.subpoena_id
-),
-last_status AS (
- -- Соединяем таблицу с максимальной датой и оригинальные данные, чтобы выбрать последние записи
- SELECT
- sd.*
- FROM subpoena_data sd
- JOIN last_status_data lsd
- ON sd.subpoena_id = lsd.subpoena_id
- AND sd.history_date = lsd.last_history_date
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist in ('5', '5.1')
-),
-t4 AS (
- SELECT COUNT(DISTINCT recruit_id) AS new_recruits
- FROM subpoena_data
-)
-SELECT
- t1.count_subpoena,
- t2.count_appeared,
- t3.count_not_appeared,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent,
- -- t4.new_recruits,
- 0 AS postponement_have_right,
- -- 0 AS postponement_granted,
- 0 AS postponement_have_right_percent,
- -- 0 AS postponement_granted_percent,
- 'Весна' AS spring_autumn,
- '${REG_ID}' AS recruitment_id,
- 1 AS org
-FROM t1
-JOIN t2 ON true
-JOIN t3 ON true
-JOIN t4 ON true;
- Y
-
-
- 496
- 400
-
-
-
- Table input (subpoena) РФ/осень
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- s.recruit_id, -- recruit_id добавляем, если есть
- sh.date_time
- FROM public.subpoena s
- JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN public.subpoena_status AS ss ON ss.id = s.status_id
- JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
- JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
- LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
- 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' -- статус изменен на 3
- AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30
-),
-last_status_data AS (
- -- Выбираем последнюю дату истории для каждой subpoena
- SELECT
- s.subpoena_id,
- MAX(s.history_date) AS last_history_date
- FROM subpoena_data s
- GROUP BY s.subpoena_id
-),
-last_status AS (
- -- Соединяем таблицу с максимальной датой и оригинальные данные, чтобы выбрать последние записи
- SELECT
- sd.*
- FROM subpoena_data sd
- JOIN last_status_data lsd
- ON sd.subpoena_id = lsd.subpoena_id
- AND sd.history_date = lsd.last_history_date
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist in ('5', '5.1') -- добавлен статус 5.1
-),
-t4 AS (
- SELECT COUNT(DISTINCT recruit_id) AS new_recruits
- FROM subpoena_data
-)
-SELECT
- t1.count_subpoena,
- t2.count_appeared,
- t3.count_not_appeared,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent,
- -- t4.new_recruits,
- 0 AS postponement_have_right,
- -- 0 AS postponement_granted,
- 0 AS postponement_have_right_percent,
- -- 0 AS postponement_granted_percent,
- 'Осень' AS spring_autumn,
- '${REG_ID}' AS recruitment_id,
- 1 AS org
-FROM t1
-JOIN t2 ON true
-JOIN t3 ON true
-JOIN t4 ON true;
- Y
-
-
- 496
- 128
+ 784
+ 480
@@ -781,8 +100,112 @@ JOIN t4 ON true;
- 1008
- 208
+ 1248
+ 480
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+ main_dashboard
+
+
+ subpoenas_sent
+ count_subpoena
+ Y
+
+
+ appeared_on_subpoenas
+ count_appeared
+ Y
+
+
+ not_appeared_on_subpoenas
+ count_not_appeared
+ Y
+
+
+ new_recruits
+ new_recruits
+ Y
+
+
+ postponement_have_right
+ postponement_have_right
+ Y
+
+
+ postponement_granted
+ postponement_granted
+ Y
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+ Y
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+ Y
+
+
+ postponement_have_right_percent
+ postponement_have_right_percent
+ Y
+
+
+ postponement_granted_percent
+ postponement_granted_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1744
+ 480
@@ -835,13 +258,13 @@ JOIN t4 ON true;
- 1216
- 208
+ 1456
+ 480
- Get variables 2 2 2
- GetVariable
+ Table input (subpoena) РФ/осень
+ TableInput
Y
@@ -850,80 +273,61 @@ JOIN t4 ON true;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoenas_sent), 0) count_subpoena,
+ COALESCE(SUM(appeared_on_subpoenas), 0) count_appeared,
+ COALESCE(SUM(not_appeared_on_subpoenas), 0) count_not_appeared,
+ COALESCE(SUM(new_recruits), 0) new_recruits,
+ COALESCE(SUM(postponement_have_right), 0) postponement_have_right,
+ COALESCE(SUM(postponement_granted), 0) postponement_granted,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(not_appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_have_right) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_have_right_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_granted) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_granted_percent,
+ '${REG_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Ministry' AS schema
+FROM main_dashboard.recruitment_campaign
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
- 1008
- 496
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 1216
- 496
+ 1024
+ 480
diff --git a/mappings/country/main_dashboard.total_registered.hpl b/mappings/country/main_dashboard.total_registered.hpl
index 069201a..fb16125 100644
--- a/mappings/country/main_dashboard.total_registered.hpl
+++ b/mappings/country/main_dashboard.total_registered.hpl
@@ -21,11 +21,6 @@
-
- Table input (person_registry) РФ
- Insert / update (main_dashboard.total_registered)
- N
-
Get variables 2 2
Select values 2 2
@@ -41,7 +36,74 @@
Insert / update (main_dashboard.total_registered)
Y
+
+ Execute SQL script
+ Table input (person_registry) РФ
+ Y
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 240
+ 368
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+ -1
+ VK_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 624
+ 368
+
+
Insert / update (main_dashboard.total_registered)
InsertUpdate
@@ -60,7 +122,16 @@
=
recruitment_id
REG_ID
-
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
main_dashboard
@@ -114,148 +185,24 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
N
- 992
+ 1008
368
-
- Table input (person_registry) РФ
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- 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' = 'true'
- 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)) < 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') -- мужчины от 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) < 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
- total_count,
- male_count,
- female_count,
- '${REG_ID}' AS recruitment_id,
- mobilization_criterion,
- volunteer_criterion,
- contract_criterion,
- ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
- ROUND(volunteer_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS volunteer_criterion_percent,
- ROUND(contract_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS contract_criterion_percent
-FROM recruit_data;
- Y
-
-
- 432
- 368
-
-
-
- Get variables 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 592
- 464
-
-
Select values 2 2
SelectValues
@@ -306,8 +253,68 @@ FROM recruit_data;
- 800
- 464
+ 768
+ 368
+
+
+
+ Table input (person_registry) РФ
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_registered), 0) total_count,
+ COALESCE(SUM("total_registered_M"), 0) male_count,
+ COALESCE(SUM("total_registered_W"), 0) female_count,
+ COALESCE(SUM(mobilization_criterion), 0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion), 0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion), 0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
+ '${REG_ID}' AS recruitment_id,
+ convicts,
+ 'Ministry' AS schema
+FROM main_dashboard.total_registered
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY convicts;
+ Y
+
+
+ 432
+ 368
diff --git a/mappings/country/main_dashboard.waiting_registration.hpl b/mappings/country/main_dashboard.waiting_registration.hpl
index cdafc45..8bf390e 100644
--- a/mappings/country/main_dashboard.waiting_registration.hpl
+++ b/mappings/country/main_dashboard.waiting_registration.hpl
@@ -21,11 +21,6 @@
-
- Table input 2 (person_registry) РФ
- Insert / update (main_dashboard.waiting_registration)
- N
-
Get variables 2 2
Select values 2 2
@@ -41,7 +36,41 @@
Insert / update (main_dashboard.waiting_registration)
Y
+
+ Execute SQL script
+ Table input 2 (person_registry) РФ
+ Y
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 416
+ 352
+
+
Get variables 2 2
GetVariable
@@ -71,8 +100,8 @@
- 544
- 400
+ 832
+ 352
@@ -93,6 +122,13 @@
=
recruitment_id
REG_ID
+
+
+
+ =
+ schema
+ schema
+
main_dashboard
@@ -141,22 +177,22 @@
contract_criterion_percent
Y
-
- waiting_registration_percent
- waiting_percent
- Y
-
recruitment_id
recruitment_id
N
+
+ schema
+ schema
+ N
+
N
- 928
- 336
+ 1360
+ 352
@@ -209,8 +245,8 @@
- 752
- 400
+ 1040
+ 352
@@ -224,95 +260,51 @@
none
- postgres.person_registry
+ ervu-dashboard
N
0
- 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)) < 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) < 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,
+ SELECT
+ COALESCE(SUM(waiting_registration), 0) waiting_count,
+ COALESCE(SUM("waiting_registration_M"), 0) male_count,
+ COALESCE(SUM("waiting_registration_W"), 0) female_count,
+ COALESCE(SUM(mobilization_criterion), 0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion), 0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion), 0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
'${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;
+ 'Ministry' AS schema
+FROM main_dashboard.waiting_registration
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE;
Y
- 368
- 336
+ 624
+ 352
diff --git a/mappings/country/recruitment_campaign.appeals.hpl b/mappings/country/recruitment_campaign.appeals.hpl
index 2b69a28..33925a8 100644
--- a/mappings/country/recruitment_campaign.appeals.hpl
+++ b/mappings/country/recruitment_campaign.appeals.hpl
@@ -21,36 +21,11 @@
-
- Table input (appeal_document) РФ/осень
- Insert / update (main_dashboard.appeals)
- N
-
-
- Table input (appeal_document) РФ/весна
- Insert / update (main_dashboard.appeals) 2
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Table input (appeal_document) РФ/весна
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (main_dashboard.appeals) 2
- Y
-
Table input (appeal_document) РФ/осень
Get variables 2 2
@@ -61,249 +36,39 @@
Insert / update (main_dashboard.appeals)
Y
+
+ Execute SQL script
+ Table input (appeal_document) РФ/осень
+ Y
+
- Insert / update (main_dashboard.appeals)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- spring_autumn
- spring_autumn
-
-
- recruitment_campaign
-
-
- total_appeals
- total_appeals
- Y
-
-
- average_consideration
- average_consideration
- Y
-
-
- resolved
- resolved
- Y
-
-
- not_resolved
- not_resolved
- Y
-
-
- not_resolved_percent
- not_resolved_percent
- Y
-
-
- average_rating
- average_rating
- Y
-
-
- resolved_percent
- resolved_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
- N
-
-
- 752
- 176
-
-
-
- Insert / update (main_dashboard.appeals) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- spring_autumn
- spring_autumn
-
-
- recruitment_campaign
-
-
- total_appeals
- total_appeals
- Y
-
-
- average_consideration
- average_consideration
- Y
-
-
- resolved
- resolved
- Y
-
-
- not_resolved
- not_resolved
- Y
-
-
- not_resolved_percent
- not_resolved_percent
- Y
-
-
- average_rating
- average_rating
- Y
-
-
- resolved_percent
- resolved_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
- N
-
-
- 752
- 336
-
-
-
- Table input (appeal_document) РФ/весна
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.appeal-document-service
N
- 0
- -- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
-WITH appeals_data AS (
- SELECT
- COUNT(*) AS total_appeals,
- ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
- COUNT(CASE WHEN ad.extra_info->>'result' IN ('1', '2') THEN 1 END) AS resolved, -- 2 это частично удовлетворена
- COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 END) AS not_resolved
- FROM public.appeal_document ad
-)
-SELECT
- ad.total_appeals,
- ad.average_consideration,
- ad.resolved,
- ad.not_resolved,
- ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS resolved_percent,
- ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS not_resolved_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 'Весна' as spring_autumn
-FROM appeals_data AS ad;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 400
- 336
-
-
-
- Table input (appeal_document) РФ/осень
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.appeal-document-service
- N
- 0
- -- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
-WITH appeals_data AS (
- SELECT
- COUNT(*) AS total_appeals,
- ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
- COUNT(CASE WHEN ad.extra_info->>'result' IN ('1', '2') THEN 1 END) AS resolved, -- 2 это частично удовлетворена
- COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 END) AS not_resolved
- FROM public.appeal_document ad
-)
-SELECT
- ad.total_appeals,
- ad.average_consideration,
- ad.resolved,
- ad.not_resolved,
- ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS resolved_percent,
- ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) AS not_resolved_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 'Осень' as spring_autumn
-FROM appeals_data AS ad;
- Y
-
-
- 400
- 176
+ 208
+ 256
@@ -335,7 +100,96 @@ FROM appeals_data AS ad;
- 464
+ 656
+ 256
+
+
+
+ Insert / update (main_dashboard.appeals)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ schema
+ schema
+
+ recruitment_campaign
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ not_resolved
+ not_resolved
+ Y
+
+
+ not_resolved_percent
+ not_resolved_percent
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ resolved_percent
+ resolved_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1104
256
@@ -389,13 +243,13 @@ FROM appeals_data AS ad;
- 672
+ 864
256
- Get variables 2 2 2
- GetVariable
+ Table input (appeal_document) РФ/осень
+ TableInput
Y
@@ -404,80 +258,46 @@ FROM appeals_data AS ad;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_appeals), 0) total_appeals,
+ COALESCE(SUM(average_consideration), 0) average_consideration,
+ COALESCE(SUM(resolved), 0) resolved,
+ COALESCE(SUM(not_resolved), 0) not_resolved,
+ COALESCE(
+ CASE
+ WHEN SUM(total_appeals) > 0
+ THEN ROUND((SUM(not_resolved) / SUM(total_appeals) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_resolved_percent,
+
+ COALESCE(SUM(average_rating), 0) average_rating,
+ COALESCE(
+ CASE
+ WHEN SUM(total_appeals) > 0
+ THEN ROUND((SUM(resolved) / SUM(total_appeals) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) resolved_percent,
+
+ '${REG_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Ministry' AS schema
+FROM recruitment_campaign.appeals
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
- 464
- 416
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 672
- 416
+ 416
+ 256
diff --git a/mappings/country/recruitment_campaign.subpoenas.hpl b/mappings/country/recruitment_campaign.subpoenas.hpl
index e466717..8ff426a 100644
--- a/mappings/country/recruitment_campaign.subpoenas.hpl
+++ b/mappings/country/recruitment_campaign.subpoenas.hpl
@@ -21,26 +21,11 @@
-
- Table input (subpoena) осень/РФ
- Insert / update (recruitment_campaign.subpoenas)
- N
-
-
- Table input (subpoena) Весна/РФ
- Insert / update (recruitment_campaign.subpoenas) 3
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
Table input (subpoena) осень/РФ
Get variables 2 2
@@ -52,602 +37,38 @@
Y
- Table input (subpoena) Весна/РФ
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (recruitment_campaign.subpoenas) 3
+ Execute SQL script
+ Table input (subpoena) осень/РФ
Y
- Insert / update (recruitment_campaign.subpoenas)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- spring_autumn
- spring_autumn
-
-
- recruitment_campaign
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- rest
- rest
- Y
-
-
- spring_autumn
- spring_autumn
- N
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
- N
-
-
- 1072
- 240
-
-
-
- Insert / update (recruitment_campaign.subpoenas) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- spring_autumn
- spring_autumn
-
-
- recruitment_campaign
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- rest
- rest
- Y
-
-
- spring_autumn
- spring_autumn
- N
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
- N
-
-
- 1072
- 432
-
-
-
- Table input (subpoena) Весна/РФ
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN 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')
-),
--- фильтруем только последние статусы для каждой повестки
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
--- Подсчет различных метрик
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS ( -- количество повесток по которым применены ограничения
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS ( -- количество повесток по которым введены меры
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
- FROM last_status
- WHERE d_code is null
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
- )
-SELECT
- t1.count_subpoena,
- t2.average_appeared,
- t3.count_appeared,
- t4.count_not_appeared,
- t5.count_not_ap_good_reason,
- t6.count_ap_not_required,
- t7.count_restrictions_applied,
- t8.count_introduced_measures,
- t9.count_paper,
- t10.count_electron,
- t11.count_restrictions,
- t12.count_not_delivery,
- t13.appear_date_is_good,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
- ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
- ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
- ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
- '${REG_ID}' AS recruitment_id,
- 0 as rest,
- 'Весна' as spring_autumn,
- 1 AS org
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1
-FULL OUTER JOIN t8 ON 1 = 1
-FULL OUTER JOIN t9 ON 1 = 1
-FULL OUTER JOIN t10 ON 1 = 1
-FULL OUTER JOIN t11 ON 1 = 1
-FULL OUTER JOIN t12 ON 1 = 1
-FULL OUTER JOIN t13 ON 1 = 1;
-
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 384
- 432
-
-
-
- Table input (subpoena) осень/РФ
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN 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')
-),
--- фильтруем только последние статусы для каждой повестки
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
--- Подсчет различных метрик
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS ( -- количество повесток по которым применены ограничения
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS ( -- количество повесток по которым введены меры
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
- FROM last_status
- WHERE d_code is null
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
- )
-SELECT
- t1.count_subpoena,
- t2.average_appeared,
- t3.count_appeared,
- t4.count_not_appeared,
- t5.count_not_ap_good_reason,
- t6.count_ap_not_required,
- t7.count_restrictions_applied,
- t8.count_introduced_measures,
- t9.count_paper,
- t10.count_electron,
- t11.count_restrictions,
- t12.count_not_delivery,
- t13.appear_date_is_good,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
- ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
- ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
- ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
- '${REG_ID}' AS recruitment_id,
- 0 as rest,
- 'Осень' as spring_autumn,
- 1 AS org
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1
-FULL OUTER JOIN t8 ON 1 = 1
-FULL OUTER JOIN t9 ON 1 = 1
-FULL OUTER JOIN t10 ON 1 = 1
-FULL OUTER JOIN t11 ON 1 = 1
-FULL OUTER JOIN t12 ON 1 = 1
-FULL OUTER JOIN t13 ON 1 = 1;
-
- Y
-
-
- 384
- 240
+ 192
+ 336
@@ -680,7 +101,151 @@ FULL OUTER JOIN t13 ON 1 = 1;
640
- 304
+ 336
+
+
+
+ Insert / update (recruitment_campaign.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ schema
+ schema
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ rest
+ rest
+ Y
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1104
+ 336
@@ -734,12 +299,12 @@ FULL OUTER JOIN t13 ON 1 = 1;
848
- 304
+ 336
- Get variables 2 2 2
- GetVariable
+ Table input (subpoena) осень/РФ
+ TableInput
Y
@@ -748,80 +313,105 @@ FULL OUTER JOIN t13 ON 1 = 1;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+ COALESCE(SUM(rest), 0) rest,
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${REG_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Ministry' AS schema
+FROM recruitment_campaign.subpoenas
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
- 640
- 496
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 848
- 496
+ 416
+ 336
diff --git a/mappings/country/select_recruitments_country.hpl b/mappings/country/select_recruitments_country.hpl
index 3f4c96d..de9cad8 100644
--- a/mappings/country/select_recruitments_country.hpl
+++ b/mappings/country/select_recruitments_country.hpl
@@ -57,13 +57,10 @@
ervu-dashboard
N
- 10
- WITH
-t1 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT00_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '0000000')
-SELECT
- t1.RECRUITMENT00_ID AS VK_ARRAY_ID,
- '00' AS RECRUITMENT_REG_ID
-FROM t1
+
+ SELECT 'f03fc8c0-2ce7-4121-a306-f82d65ea029d' AS RECRUITMENT_REG_ID,
+ array_agg(recruitment_dstr_id) AS VK_ARRAY_ID
+FROM ervu_dashboard.array_mildis
N
diff --git a/mappings/country/total_registered.age.hpl b/mappings/country/total_registered.age.hpl
index 9564802..6a9aaed 100644
--- a/mappings/country/total_registered.age.hpl
+++ b/mappings/country/total_registered.age.hpl
@@ -21,66 +21,11 @@
-
- Table input (person_registry) РФ/женщины/на учете
- Insert / update (total_registered.age) 3
- N
-
-
- Table input (person_registry) РФ/мужчины/на учете
- Insert / update (total_registered.age) 2
- N
-
-
- Table input (person_registry) РФ/все/на учете
- Insert / update (total_registered.age)
- N
-
-
- Table input (person_registry) РФ/все/не на учете
- Insert / update (total_registered.age) 4
- N
-
-
- Table input (person_registry) РФ/женщины/не на учете
- Insert / update (total_registered.age) 3 2
- N
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- Insert / update (total_registered.age) 2 2
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
-
- Get variables 2 2 4
- Select values 2 2 4
- Y
-
-
- Get variables 2 2 5
- Select values 2 2 5
- Y
-
-
- Get variables 2 2 6
- Select values 2 2 6
- Y
-
Table input (person_registry) РФ/все/на учете
Get variables 2 2
@@ -92,1284 +37,38 @@
Y
- Table input (person_registry) РФ/мужчины/на учете
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.age) 2
- Y
-
-
- Table input (person_registry) РФ/женщины/на учете
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.age) 3
- Y
-
-
- Table input (person_registry) РФ/все/не на учете
- Get variables 2 2 4
- Y
-
-
- Select values 2 2 4
- Insert / update (total_registered.age) 4
- Y
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- Get variables 2 2 5
- Y
-
-
- Select values 2 2 5
- Insert / update (total_registered.age) 2 2
- Y
-
-
- Table input (person_registry) РФ/женщины/не на учете
- Get variables 2 2 6
- Y
-
-
- Select values 2 2 6
- Insert / update (total_registered.age) 3 2
+ Execute SQL script
+ Table input (person_registry) РФ/все/на учете
Y
- Insert / update (total_registered.age)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 224
-
-
-
- Insert / update (total_registered.age) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 320
-
-
-
- Insert / update (total_registered.age) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 672
-
-
-
- Insert / update (total_registered.age) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 416
-
-
-
- Insert / update (total_registered.age) 3 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 768
-
-
-
- Insert / update (total_registered.age) 4
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
- =
- "all_M_W"
- gender
-
-
- =
- registered
- registered
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1024
- 576
-
-
-
- Table input (person_registry) РФ/все/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'ALL' as gender,
- 'true' as registered
-
-FROM age_counts, total_count;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 400
- 224
-
-
-
- Table input (person_registry) РФ/все/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info 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
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info 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
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'ALL' as gender,
- 'false' as registered
-
-FROM age_counts, total_count;
- Y
-
-
- 400
- 576
-
-
-
- Table input (person_registry) РФ/женщины/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'FEMALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'FEMALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'W' as gender,
- 'true' as registered
-
-FROM age_counts, total_count;
- Y
-
-
- 400
- 416
-
-
-
- Table input (person_registry) РФ/женщины/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'FEMALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'false' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'FEMALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'false' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'W' as gender,
- 'false' as registered
-
-FROM age_counts, total_count;
- Y
-
-
- 400
- 768
-
-
-
- Table input (person_registry) РФ/мужчины/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'MALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'MALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'M' as gender,
- 'true' as registered
-
-FROM age_counts, total_count;
- Y
-
-
- 400
- 320
-
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'MALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'false' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-age_counts AS (
- SELECT
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17) AS "17_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
- COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51) AS "51+_year_count"
- FROM public.recruits r
- join public.recruits_info ri on ri.recruit_id=r.id
- WHERE r.gender = 'MALE' AND r.vu_current_info->>'isMilitaryRegistered' = 'false' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0),2) AS "51+_year_percent",
-
- '${REG_ID}' as recruitment_id,
- 'M' as gender,
- 'false' as registered
-
-FROM age_counts, total_count;
- Y
-
-
- 400
- 672
+ 848
+ 560
@@ -1401,8 +100,167 @@ FROM age_counts, total_count;
- 608
- 256
+ 1408
+ 560
+
+
+
+ Insert / update (total_registered.age)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ Y
+
+
+ 1904
+ 560
@@ -1455,13 +313,13 @@ FROM age_counts, total_count;
- 816
- 256
+ 1616
+ 560
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry) РФ/все/на учете
+ TableInput
Y
@@ -1470,428 +328,100 @@ FROM age_counts, total_count;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+
+SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM("17_years"), 0) "17_year_count",
+ COALESCE(SUM("18-26_years"), 0) "18-26_year_count",
+ COALESCE(SUM("27-30_years"), 0) "27-30_year_count",
+ COALESCE(SUM("31-35_years"), 0) "31-35_year_count",
+ COALESCE(SUM("36-40_years"), 0) "36-40_year_count",
+ COALESCE(SUM("41-45_years"), 0) "41-45_year_count",
+ COALESCE(SUM("51+_years"), 0) "51+_year_count",
+ COALESCE(SUM("46-50_years"), 0) "46-50_year_count",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("17_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "17_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("18-26_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "18-26_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("27-30_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "27-30_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("31-35_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "31-35_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("36-40_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "36-40_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("41-45_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "41-45_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("46-50_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "46-50_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("51+_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "51+_year_percent",
+
+ '${REG_ID}' AS recruitment_id,
+ registered,
+ "all_M_W" AS gender,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.age
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
+ Y
- 608
- 368
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 368
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 608
- 464
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 464
-
-
-
- Get variables 2 2 4
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 608
- 624
-
-
-
- Select values 2 2 4
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 624
-
-
-
- Get variables 2 2 5
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 608
- 720
-
-
-
- Select values 2 2 5
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 720
-
-
-
- Get variables 2 2 6
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 608
- 800
-
-
-
- Select values 2 2 6
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 800
+ 1104
+ 560
diff --git a/mappings/country/total_registered.busyness.hpl b/mappings/country/total_registered.busyness.hpl
index 6f63ce8..34e09b5 100644
--- a/mappings/country/total_registered.busyness.hpl
+++ b/mappings/country/total_registered.busyness.hpl
@@ -21,66 +21,11 @@
-
- Table input (person_registry) РФ/все/на учете
- Insert / update (total_registered.busyness)
- N
-
-
- Table input (person_registry) РФ/мужчины/на учете
- Insert / update (total_registered.busyness) 2
- N
-
-
- Table input (person_registry) РФ/женщины/на учете
- Insert / update (total_registered.busyness) 3
- N
-
-
- Table input (person_registry) РФ/все/не на учете
- Insert / update (total_registered.busyness) 4
- N
-
-
- Table input (person_registry) РФ/женщины/не на учете
- Insert / update (total_registered.busyness) 3 2
- N
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- Insert / update (total_registered.busyness) 2 2
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
-
- Get variables 2 2 4
- Select values 2 2 4
- Y
-
-
- Get variables 2 2 5
- Select values 2 2 5
- Y
-
-
- Get variables 2 2 6
- Select values 2 2 6
- Y
-
Table input (person_registry) РФ/все/на учете
Get variables 2 2
@@ -92,1306 +37,38 @@
Y
- Table input (person_registry) РФ/мужчины/на учете
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.busyness) 2
- Y
-
-
- Table input (person_registry) РФ/женщины/на учете
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.busyness) 3
- Y
-
-
- Table input (person_registry) РФ/все/не на учете
- Get variables 2 2 4
- Y
-
-
- Select values 2 2 4
- Insert / update (total_registered.busyness) 4
- Y
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- Get variables 2 2 5
- Y
-
-
- Select values 2 2 5
- Insert / update (total_registered.busyness) 2 2
- Y
-
-
- Table input (person_registry) РФ/женщины/не на учете
- Get variables 2 2 6
- Y
-
-
- Select values 2 2 6
- Insert / update (total_registered.busyness) 3 2
+ Execute SQL script
+ Table input (person_registry) РФ/все/на учете
Y
- Insert / update (total_registered.busyness)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 224
-
-
-
- Insert / update (total_registered.busyness) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 320
-
-
-
- Insert / update (total_registered.busyness) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 672
-
-
-
- Insert / update (total_registered.busyness) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 416
-
-
-
- Insert / update (total_registered.busyness) 3 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 768
-
-
-
- Insert / update (total_registered.busyness) 4
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
-
- =
- registered
- registered
-
-
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1024
- 576
-
-
-
- Table input (person_registry) РФ/все/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info -> 'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'ALL' as gender,
- 'true' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 400
- 224
-
-
-
- Table input (person_registry) РФ/все/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r 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
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'ALL' as gender,
- 'false' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
-
-
- 400
- 576
-
-
-
- Table input (person_registry) РФ/женщины/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info -> 'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- AND gender = 'FEMALE'
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'W' as gender,
- 'true' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
-
-
- 400
- 416
-
-
-
- Table input (person_registry) РФ/женщины/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r 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
- AND gender = 'FEMALE'
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'W' as gender,
- 'false' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
-
-
- 400
- 768
-
-
-
- Table input (person_registry) РФ/мужчины/на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info -> 'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- AND gender = 'MALE'
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'M' as gender,
- 'true' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
-
-
- 400
- 320
-
-
-
- Table input (person_registry) РФ/мужчины/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- -- в json отсутствует инфа об обучении в школе
-
-WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r 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
- AND gender = 'MALE'
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, которые ни учатся, ни работают
- -- COUNT(CASE WHEN NOT is_studying_in_vuz AND NOT is_studying_in_college AND NOT is_working THEN 1 END) AS not_work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS not_work, -- no_info по факту
-
- -- Общее количество людей
- COUNT(*) AS total_people
- FROM status_info
-)
-SELECT
- 'M' as gender,
- 'false' as registered,
- '${REG_ID}' as recruitment_id,
- study,
- work,
- not_work,
- -- 0 as not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- ROUND(study * 100.0 / NULLIF(total_people, 0), 2) AS study_percent,
-
- -- Процент людей, которые работают
- ROUND(work * 100.0 / NULLIF(total_people, 0), 2) AS work_percent,
-
- -- Процент людей, которые ни учатся, ни работают
- ROUND(not_work * 100.0 / NULLIF(total_people, 0), 2) AS not_work_percent -- убрать
-
- -- Процент людей, для которых отсутствуют сведения
- -- ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) AS no_info_percent
-FROM summary;
- Y
-
-
- 400
- 672
+ 112
+ 480
@@ -1423,8 +100,117 @@ FROM summary;
- 608
- 272
+ 736
+ 480
+
+
+
+ Insert / update (total_registered.busyness)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1200
+ 480
@@ -1477,13 +263,13 @@ FROM summary;
- 816
- 272
+ 944
+ 480
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry) РФ/все/на учете
+ TableInput
Y
@@ -1492,428 +278,55 @@ FROM summary;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(study), 0) study,
+ COALESCE(SUM(work), 0) work,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) study_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) work_percent,
+
+ COALESCE(SUM(not_work), 0) no_info,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_info_percent,
+
+ COALESCE(SUM(busyness), 0) total_people,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ registered,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.busyness
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
+ Y
- 608
- 352
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 352
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 608
- 448
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 448
-
-
-
- Get variables 2 2 4
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 624
- 608
-
-
-
- Select values 2 2 4
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 832
- 608
-
-
-
- Get variables 2 2 5
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 624
- 720
-
-
-
- Select values 2 2 5
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 832
- 720
-
-
-
- Get variables 2 2 6
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 624
- 816
-
-
-
- Select values 2 2 6
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 832
- 816
+ 448
+ 480
diff --git a/mappings/country/total_registered.child_minor.hpl b/mappings/country/total_registered.child_minor.hpl
index d732e5a..4a42e43 100644
--- a/mappings/country/total_registered.child_minor.hpl
+++ b/mappings/country/total_registered.child_minor.hpl
@@ -21,36 +21,11 @@
-
- Table input (person_registry)РФ/женщины
- Insert / update (total_registered.child_minor) 3
- N
-
-
- Table input (person_registry)РФ/мужчины
- Insert / update (total_registered.child_minor) 2
- N
-
-
- Table input (person_registry)РФ/все
- Insert / update (total_registered.child_minor)
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
Table input (person_registry)РФ/все
Get variables 2 2
@@ -62,594 +37,38 @@
Y
- Table input (person_registry)РФ/мужчины
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.child_minor) 2
- Y
-
-
- Table input (person_registry)РФ/женщины
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.child_minor) 3
+ Execute SQL script
+ Table input (person_registry)РФ/все
Y
- Insert / update (total_registered.child_minor)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- no_child
- no_children
- Y
-
-
- "1_child"
- one_child
- Y
-
-
- "2_child"
- two_children
- Y
-
-
- "3_child"
- three_children
- Y
-
-
- "4_more_child"
- four_or_more_children
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- no_child_percent
- no_children_percent
- Y
-
-
- "1_child_percent"
- one_child_percent
- Y
-
-
- "2_child_percent"
- two_children_percent
- Y
-
-
- "3_child_percent"
- three_children_percent
- Y
-
-
- "4_more_child_percent"
- four_or_more_children_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- N
-
-
- 992
- 240
-
-
-
- Insert / update (total_registered.child_minor) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- no_child
- no_children
- Y
-
-
- "1_child"
- one_child
- Y
-
-
- "2_child"
- two_children
- Y
-
-
- "3_child"
- three_children
- Y
-
-
- "4_more_child"
- four_or_more_children
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- no_child_percent
- no_children_percent
- Y
-
-
- "1_child_percent"
- one_child_percent
- Y
-
-
- "2_child_percent"
- two_children_percent
- Y
-
-
- "3_child_percent"
- three_children_percent
- Y
-
-
- "4_more_child_percent"
- four_or_more_children_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- N
-
-
- 992
- 336
-
-
-
- Insert / update (total_registered.child_minor) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- no_child
- no_children
- Y
-
-
- "1_child"
- one_child
- Y
-
-
- "2_child"
- two_children
- Y
-
-
- "3_child"
- three_children
- Y
-
-
- "4_more_child"
- four_or_more_children
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- no_child_percent
- no_children_percent
- Y
-
-
- "1_child_percent"
- one_child_percent
- Y
-
-
- "2_child_percent"
- two_children_percent
- Y
-
-
- "3_child_percent"
- three_children_percent
- Y
-
-
- "4_more_child_percent"
- four_or_more_children_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- N
-
-
- 992
- 448
-
-
-
- Table input (person_registry)РФ/все
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
N
- 0
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r 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 r.target_recruitment_id is not null
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- AGE(make_date(year, month, day)) < interval '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_people AS (
- SELECT SUM(num_people) AS total_count
- FROM final_counts
-)
-SELECT
- 'ALL' AS gender,
- '${REG_ID}' as recruitment_id,
- COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
- COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
- COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
- COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
- COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS no_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS one_child_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS two_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS three_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) AS four_or_more_children_percent
-FROM
- final_counts;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 352
- 240
-
-
-
- Table input (person_registry)РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r 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 r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_men AS (
- SELECT
- COUNT(*) AS total_men_count
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
-)
-SELECT
- 'W' AS gender,
- '${REG_ID}' AS recruitment_id,
- COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
- COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
- COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
- COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
- COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS no_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS one_child_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS two_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS three_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS four_or_more_children_percent
-FROM
- final_counts;
- Y
-
-
- 352
- 448
-
-
-
- Table input (person_registry)РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r 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 r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_men AS (
- SELECT
- COUNT(*) AS total_men_count
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
-)
-SELECT
- 'M' AS gender,
- '${REG_ID}' AS recruitment_id,
- COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) AS no_children,
- COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) AS one_child,
- COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) AS two_children,
- COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) AS three_children,
- COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) AS four_or_more_children,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS no_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS one_child_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS two_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS three_children_percent,
- ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) AS four_or_more_children_percent
-FROM
- final_counts;
- Y
-
-
- 352
- 336
+ 480
+ 352
@@ -681,8 +100,127 @@ FROM
- 560
- 272
+ 992
+ 352
+
+
+
+ Insert / update (total_registered.child_minor)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ N
+
+
+ 1488
+ 352
@@ -735,13 +273,13 @@ FROM
- 768
- 272
+ 1200
+ 352
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry)РФ/все
+ TableInput
Y
@@ -750,167 +288,70 @@ FROM
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 560
- 368
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM(no_child), 0) no_children,
+ COALESCE(SUM("1_child"), 0) one_child,
+ COALESCE(SUM("2_child"), 0) two_children,
+ COALESCE(SUM("3_child"), 0) three_children,
+ COALESCE(SUM("4_more_child"), 0) four_or_more_children,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) one_child_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) two_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) three_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) four_or_more_children_percent,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.child_minor
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
768
- 368
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 560
- 496
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 768
- 496
+ 352
diff --git a/mappings/country/total_registered.driver_license.hpl b/mappings/country/total_registered.driver_license.hpl
index af361cc..9bd5d4e 100644
--- a/mappings/country/total_registered.driver_license.hpl
+++ b/mappings/country/total_registered.driver_license.hpl
@@ -21,36 +21,11 @@
-
- Table input (person_registry) РФ/женщины
- Insert / update (total_registered.driver_license) 2 2 2
- N
-
-
- Table input (person_registry) РФ/мужчины
- Insert / update (total_registered.driver_license) 2 2
- N
-
-
- Table input (person_registry) РФ/все
- Insert / update (total_registered.driver_license) 2
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
Table input (person_registry) РФ/все
Get variables 2 2
@@ -62,529 +37,40 @@
Y
- Table input (person_registry) РФ/мужчины
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.driver_license) 2 2
- Y
-
-
- Table input (person_registry) РФ/женщины
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.driver_license) 2 2 2
+ Execute SQL script
+ Table input (person_registry) РФ/все
Y
- Insert / update (total_registered.driver_license) 2
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- "A"
- a
- Y
-
-
- "B"
- b
- Y
-
-
- "C"
- c
- Y
-
-
- "D"
- d
- Y
-
-
- "E"
- e
- Y
-
-
- nope
- nope
- Y
-
-
- "A_repcent"
- a_percent
- Y
-
-
- "B_repcent"
- b_percent
- Y
-
-
- "C_repcent"
- c_percent
- Y
-
-
- "D_repcent"
- d_percent
- Y
-
-
- "E_repcent"
- e_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- nope_repcent
- nope_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- Y
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 1104
- 128
-
-
-
- Insert / update (total_registered.driver_license) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- "A"
- a
- Y
-
-
- "B"
- b
- Y
-
-
- "C"
- c
- Y
-
-
- "D"
- d
- Y
-
-
- "E"
- e
- Y
-
-
- nope
- nope
- Y
-
-
- "A_repcent"
- a_percent
- Y
-
-
- "B_repcent"
- b_percent
- Y
-
-
- "C_repcent"
- c_percent
- Y
-
-
- "D_repcent"
- d_percent
- Y
-
-
- "E_repcent"
- e_percent
- Y
-
-
- nope_repcent
- nope_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- Y
-
-
- 1104
- 256
-
-
-
- Insert / update (total_registered.driver_license) 2 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- "A"
- a
- Y
-
-
- "B"
- b
- Y
-
-
- "C"
- c
- Y
-
-
- "D"
- d
- Y
-
-
- "E"
- e
- Y
-
-
- nope
- nope
- Y
-
-
- "A_repcent"
- a_percent
- Y
-
-
- "B_repcent"
- b_percent
- Y
-
-
- "C_repcent"
- c_percent
- Y
-
-
- "D_repcent"
- d_percent
- Y
-
-
- "E_repcent"
- e_percent
- Y
-
-
- nope_repcent
- nope_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- Y
-
-
- 1104
+ 608
400
-
- Table input (person_registry) РФ/все
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.person_registry
- N
- 0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'ALL' AS gender,
- '${REG_ID}' AS 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 = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
- COUNT(DISTINCT r.id) AS total
- FROM categorized r
-)
-SELECT *,
- ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
- ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
- ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
- ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
- ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
- ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
-FROM aggregated;
- Y
-
-
- 480
- 128
-
-
-
- Table input (person_registry) РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.person_registry
- N
- 0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'W' AS gender,
- '${REG_ID}' as 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 = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
- COUNT(DISTINCT r.id) AS total
- FROM categorized r
-)
-SELECT *,
- ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
- ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
- ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
- ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
- ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
- ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
-FROM aggregated;
- Y
-
-
- 480
- 400
-
-
-
- Table input (person_registry) РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.person_registry
- N
- 0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'M' AS gender,
- '${REG_ID}' as 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 = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) AS nope,
- COUNT(DISTINCT r.id) AS total
- FROM categorized r
-)
-SELECT *,
- ROUND((a * 100.0) / NULLIF(total, 0), 2) AS a_percent,
- ROUND((b * 100.0) / NULLIF(total, 0), 2) AS b_percent,
- ROUND((c * 100.0) / NULLIF(total, 0), 2) AS c_percent,
- ROUND((d * 100.0) / NULLIF(total, 0), 2) AS d_percent,
- ROUND((e * 100.0) / NULLIF(total, 0), 2) AS e_percent,
- ROUND((nope * 100.0) / NULLIF(total, 0), 2) AS nope_percent
-FROM aggregated;
- Y
-
-
- 480
- 256
-
-
Get variables 2 2
GetVariable
@@ -614,8 +100,137 @@ FROM aggregated;
- 688
- 192
+ 1104
+ 400
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ total_count
+ total
+ Y
+
+
+ Y
+
+
+ 1584
+ 400
@@ -668,13 +283,13 @@ FROM aggregated;
- 896
- 192
+ 1312
+ 400
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry) РФ/все
+ TableInput
Y
@@ -683,167 +298,79 @@ FROM aggregated;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total,
+ COALESCE(SUM("A"), 0) a,
+ COALESCE(SUM("B"), 0) b,
+ COALESCE(SUM("C"), 0) c,
+ COALESCE(SUM("D"), 0) d,
+ COALESCE(SUM("E"), 0) e,
+ COALESCE(SUM(nope), 0) nope,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) a_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) b_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) c_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) d_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) e_percent, -- нет такой категории
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) nope_percent,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.driver_license
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
- 688
- 304
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 896
- 304
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 688
- 464
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 896
- 464
+ 864
+ 400
diff --git a/mappings/country/total_registered.education_level.hpl b/mappings/country/total_registered.education_level.hpl
index e4c05af..1b075c5 100644
--- a/mappings/country/total_registered.education_level.hpl
+++ b/mappings/country/total_registered.education_level.hpl
@@ -21,36 +21,11 @@
-
- Table input (person_registry) РФ/все
- Insert / update (total_registered.education_level)
- N
-
-
- Table input (person_registry) РФ/мужчины
- Insert / update (total_registered.education_level) 2
- N
-
-
- Table input (person_registry) РФ/женщины
- Insert / update (total_registered.education_level) 3
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
Table input (person_registry) РФ/все
Get variables 2 2
@@ -62,675 +37,37 @@
Y
- Table input (person_registry) РФ/мужчины
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.education_level) 2
- Y
-
-
- Table input (person_registry) РФ/женщины
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.education_level) 3
+ Execute SQL script
+ Table input (person_registry) РФ/все
Y
- Insert / update (total_registered.education_level)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- higher
- higher
- Y
-
-
- average
- average_prof
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- only_general
- only_general
- Y
-
-
- no_data
- count_nodata
- Y
-
-
- higher_percent
- higher_percentage
- Y
-
-
- average_percent
- average_prof_percentage
- Y
-
-
- only_general_percent
- only_general_percentage
- Y
-
-
- no_data_percent
- count_nodata_percentage
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- education_level
- total
- Y
-
-
- Y
-
-
- 1024
- 224
-
-
-
- Insert / update (total_registered.education_level) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- higher
- higher
- Y
-
-
- average
- average_prof
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- only_general
- only_general
- Y
-
-
- no_data
- count_nodata
- Y
-
-
- higher_percent
- higher_percentage
- Y
-
-
- average_percent
- average_prof_percentage
- Y
-
-
- only_general_percent
- only_general_percentage
- Y
-
-
- no_data_percent
- count_nodata_percentage
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- education_level
- total
- Y
-
-
- Y
-
-
- 1024
- 320
-
-
-
- Insert / update (total_registered.education_level) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- higher
- higher
- Y
-
-
- average
- average_prof
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- only_general
- only_general
- Y
-
-
- no_data
- count_nodata
- Y
-
-
- higher_percent
- higher_percentage
- Y
-
-
- average_percent
- average_prof_percentage
- Y
-
-
- only_general_percent
- only_general_percentage
- Y
-
-
- no_data_percent
- count_nodata_percentage
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- education_level
- total
- Y
-
-
- Y
-
-
- 1024
- 416
-
-
-
- Table input (person_registry) РФ/все
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
-),
-education_status AS (
- SELECT
- ri.id,
-
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'ALL' AS gender,
- '${REG_ID}' AS recruitment_id,
- higher,
- average_prof,
- only_general,
- count_nodata,
- total_count.total,
- ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
- ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
- ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
- ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
-FROM final_counts, total_count;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 400
- 224
-
-
-
- Table input (person_registry) РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
-),
-education_status AS (
- SELECT
- ri.id,
-
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'W' AS gender,
- '${REG_ID}' AS recruitment_id,
- higher,
- average_prof,
- only_general,
- count_nodata,
- total_count.total,
- ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
- ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
- ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
- ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
-FROM final_counts, total_count;
- Y
-
-
- 400
- 416
-
-
-
- Table input (person_registry) РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT COUNT(*) AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
-),
-education_status AS (
- SELECT
- ri.id,
-
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'M' AS gender,
- '${REG_ID}' AS recruitment_id,
- higher,
- average_prof,
- only_general,
- count_nodata,
- total_count.total,
- ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage,
- ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage,
- ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage,
- ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) AS count_nodata_percentage
-FROM final_counts, total_count;
- Y
-
-
- 400
+ 176
320
@@ -763,8 +100,117 @@ FROM final_counts, total_count;
- 592
- 256
+ 656
+ 320
+
+
+
+ Insert / update (total_registered.education_level)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1136
+ 320
@@ -817,13 +263,13 @@ FROM final_counts, total_count;
- 800
- 256
+ 864
+ 320
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry) РФ/все
+ TableInput
Y
@@ -832,167 +278,62 @@ FROM final_counts, total_count;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(higher), 0) higher,
+ COALESCE(SUM(average), 0) average_prof,
+ COALESCE(SUM(only_general), 0) only_general,
+ COALESCE(SUM(no_data), 0) count_nodata,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) higher_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_prof_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) only_general_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) count_nodata_percentage,
+
+ COALESCE(SUM(education_level), 0) total,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.education_level
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
- 592
- 352
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 800
- 352
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 592
- 448
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 800
- 448
+ 432
+ 320
diff --git a/mappings/country/total_registered.marital_status.hpl b/mappings/country/total_registered.marital_status.hpl
index 822f827..23e99f5 100644
--- a/mappings/country/total_registered.marital_status.hpl
+++ b/mappings/country/total_registered.marital_status.hpl
@@ -21,36 +21,11 @@
-
- Table input (person_registry) РФ/все
- Insert / update (total_registered.marital_status)
- N
-
-
- Table input (person_registry) РФ/мужчины
- Insert / update (total_registered.marital_status) 2
- N
-
-
- Table input (person_registry) РФ/женщины
- Insert / update (total_registered.marital_status) 3
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Get variables 2 2 3
- Select values 2 2 3
- Y
-
Table input (person_registry) РФ/все
Get variables 2 2
@@ -62,429 +37,37 @@
Y
- Table input (person_registry) РФ/мужчины
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.marital_status) 2
- Y
-
-
- Table input (person_registry) РФ/женщины
- Get variables 2 2 3
- Y
-
-
- Select values 2 2 3
- Insert / update (total_registered.marital_status) 3
+ Execute SQL script
+ Table input (person_registry) РФ/все
Y
- Insert / update (total_registered.marital_status)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- married
- married
- Y
-
-
- not_married
- not_married
- Y
-
-
- married_percent
- married_percent
- Y
-
-
- not_married_percent
- not_married_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- marital_status
- total
- Y
-
-
- Y
-
-
- 1216
- 176
-
-
-
- Insert / update (total_registered.marital_status) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- married
- married
- Y
-
-
- not_married
- not_married
- Y
-
-
- married_percent
- married_percent
- Y
-
-
- not_married_percent
- not_married_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- marital_status
- total
- Y
-
-
- Y
-
-
- 1216
- 272
-
-
-
- Insert / update (total_registered.marital_status) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- "all_M_W"
- gender
-
-
- total_registered
-
-
- married
- married
- Y
-
-
- not_married
- not_married
- Y
-
-
- married_percent
- married_percent
- Y
-
-
- not_married_percent
- not_married_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- marital_status
- total
- Y
-
-
- Y
-
-
- 1216
- 368
-
-
-
- Table input (person_registry) РФ/все
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
N
- 0
- SELECT
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) AS not_married,
-
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) AS married,
-
- COUNT(*) AS total,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- ) END AS not_married_percent,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- ) END AS married_percent,
- 'ALL' as gender,
-'${REG_ID}' as recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-WHERE
- r.current_recruitment_id IS NOT NULL
- AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 592
- 176
-
-
-
- Table input (person_registry) РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- SELECT
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) AS not_married,
-
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) AS married,
-
- COUNT(*) AS total,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- ) END AS not_married_percent,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- ) END AS married_percent,
- 'W' as gender,
- '${REG_ID}' as recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-WHERE
- r.current_recruitment_id IS NOT NULL
- AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- AND r.gender = 'FEMALE';
-
- Y
-
-
- 592
- 368
-
-
-
- Table input (person_registry) РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- SELECT
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) AS not_married,
-
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) AS married,
-
- COUNT(*) AS total,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- ) END AS not_married_percent,
-
- CASE
- WHEN COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- ) END AS married_percent,
- 'M' as gender,
- '${REG_ID}' as recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-WHERE
- r.current_recruitment_id IS NOT NULL
- AND r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null
- AND r.gender = 'MALE';
-
- Y
-
-
- 592
+ 352
272
@@ -517,8 +100,107 @@ WHERE
- 800
- 208
+ 880
+ 272
+
+
+
+ Insert / update (total_registered.marital_status)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ Y
+
+
+ 1392
+ 272
@@ -571,13 +253,13 @@ WHERE
- 1008
- 208
+ 1088
+ 272
- Get variables 2 2 2
- GetVariable
+ Table input (person_registry) РФ/все
+ TableInput
Y
@@ -586,167 +268,52 @@ WHERE
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(married), 0) married,
+ COALESCE(SUM(not_married), 0) not_married,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(other) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ COALESCE(SUM(marital_status), 0) total,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Ministry' AS schema
+FROM total_registered.marital_status
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
- 800
- 304
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 1008
- 304
-
-
-
- Get variables 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 800
- 400
-
-
-
- Select values 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 1008
- 400
+ 608
+ 272
diff --git a/mappings/country/total_registered.reg_mil_cat.hpl b/mappings/country/total_registered.reg_mil_cat.hpl
index cc6bf49..50afd53 100644
--- a/mappings/country/total_registered.reg_mil_cat.hpl
+++ b/mappings/country/total_registered.reg_mil_cat.hpl
@@ -21,36 +21,11 @@
-
- Table input (person_registry) РФ/на учете
- Insert / update (total_registered.reg_mil_cat)
- N
-
-
- Table input (person_registry) РФ/не на учете
- Insert / update (total_registered.reg_mil_cat) 2
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
-
- Table input (person_registry) РФ/не на учете
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.reg_mil_cat) 2
- Y
-
Table input (person_registry) РФ/на учете
Get variables 2 2
@@ -61,7 +36,41 @@
Insert / update (total_registered.reg_mil_cat)
Y
+
+ Execute SQL script
+ Table input (person_registry) РФ/на учете
+ Y
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 672
+ 400
+
+
Get variables 2 2
GetVariable
@@ -91,41 +100,8 @@
- 624
- 256
-
-
-
- Get variables 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 624
- 480
+ 1184
+ 400
@@ -152,109 +128,10 @@
mil_reg
mil_reg
- total_registered
-
-
- first_reg_17
- first_reg_17
- Y
-
-
- first_reg_18
- first_reg_18
- Y
-
-
- "mil_spec_W"
- mil_spec_w
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- returned_dep_liberty
- returned_dep_liberty
- Y
-
-
- punished
- punished
- Y
-
-
- received_citizenship
- received_citizenship
- Y
-
-
- first_reg_17_percent
- first_reg_17_percent
- Y
-
-
- first_reg_18_percent
- first_reg_18_percent
- Y
-
-
- returned_dep_liberty_percent
- returned_dep_liberty_percent
- Y
-
-
- "mil_spec_W_percent"
- mil_spec_w_percent
- Y
-
-
- punished_percent
- punished_percent
- Y
-
-
- received_citizenship_percent
- received_citizenship_percent
- Y
-
-
- mil_reg
- mil_reg
- N
-
-
- N
-
-
- 944
- 176
-
-
-
- Insert / update (total_registered.reg_mil_cat) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
=
- recruitment_id
- REG_ID
-
-
- =
- mil_reg
- mil_reg
+ schema
+ schema
total_registered
@@ -328,12 +205,17 @@
mil_reg
N
+
+ schema
+ schema
+ N
+
N
- 944
- 384
+ 1648
+ 400
@@ -386,62 +268,8 @@
- 832
- 256
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 832
- 480
+ 1392
+ 400
@@ -455,223 +283,83 @@
none
- ervu_person_registry
+ ervu-dashboard
N
0
- WITH base_data AS (
- -- Основной набор данных
- SELECT
- r.registration_reasons,
- r.gender,
- r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
- FROM public.recruits r
- WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
-),
-total AS (
- -- Общее количество записей
- SELECT COUNT(*) AS total_count
- FROM base_data
-),
-t1 AS (
- -- Первоначальная постановка 17 лет
- SELECT COUNT(*) AS first_reg_17
- FROM base_data
- WHERE registration_reasons @> '"5"'
-),
-t2 AS (
- -- Первоначальная постановка 18 лет
- SELECT COUNT(*) AS first_reg_18
- FROM base_data
- WHERE registration_reasons @> '"6"'
- OR registration_reasons @> '"3"'
- OR registration_reasons @> '"1"'
- OR registration_reasons @> '"4"'
- OR registration_reasons @> '"2"'
-),
-t3 AS (
- -- Женщины, получившие ВУС
- SELECT COUNT(*) AS mil_spec_w
- FROM base_data
- WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
-),
-t4 AS (
- -- Возвратившиеся из мест лишения свободы
- SELECT COUNT(*) AS returned_dep_liberty
- FROM base_data
- WHERE registration_reasons @> '"1"'
-),
-t5 AS (
- -- Отбывающие наказание в местах лишения свободы
- SELECT COUNT(*) AS punished
- FROM base_data
- WHERE registration_reasons @> '"4"'
-),
-t6 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS received_citizenship
- FROM base_data
- WHERE registration_reasons @> '"2"'
-),
-t7 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS other
- FROM base_data
- WHERE registration_reasons @> '"6"'
- AND NOT registration_reasons @> '"3"'
- AND NOT registration_reasons @> '"1"'
- AND NOT registration_reasons @> '"4"'
- AND NOT registration_reasons @> '"2"'
-)
-SELECT
- total.total_count,
- t1.first_reg_17,
- t2.first_reg_18,
- t3.mil_spec_w,
- t4.returned_dep_liberty,
- t5.punished,
- t6.received_citizenship,
- t7.other,
- -- Вычисление процентов
- ROUND(t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_17_percent,
- ROUND(t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_18_percent,
- ROUND(t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0), 2) AS returned_dep_liberty_percent,
- ROUND(t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0), 2) AS mil_spec_w_percent,
- ROUND(t5.punished * 100.0 / NULLIF(total.total_count, 0), 2) AS punished_percent,
- ROUND(t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0), 2) AS received_citizenship_percent,
- ROUND(t7.other * 100.0 / NULLIF(total.total_count, 0), 2) AS other_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS mil_reg,
- 1 AS org
-FROM total
-FULL OUTER JOIN t1 ON 1 = 1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1;
+ SELECT
+ COALESCE(SUM(first_reg_17), 0) first_reg_17,
+ COALESCE(SUM(first_reg_18), 0) first_reg_18,
+ COALESCE(SUM("mil_spec_W"), 0) mil_spec_w,
+ COALESCE(SUM(returned_dep_liberty), 0) returned_dep_liberty,
+ COALESCE(SUM(punished), 0) punished,
+ COALESCE(SUM(received_citizenship), 0) received_citizenship,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_17) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ first_reg_17_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_18) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ first_reg_18_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(returned_dep_liberty) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ returned_dep_liberty_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM("mil_spec_W") / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ mil_spec_w_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(punished) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ punished_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(received_citizenship) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ )
+ received_citizenship_percent,
+ '${REG_ID}'::uuid AS recruitment_id,
+ mil_reg,
+ 'Ministry' AS schema
+FROM total_registered.reg_mil_cat
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
Y
- 512
- 176
-
-
-
- Table input (person_registry) РФ/не на учете
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH base_data AS (
- -- Основной набор данных
- SELECT
- r.registration_reasons,
- r.gender,
- r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
- FROM public.recruits r
- WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
- AND r.current_recruitment_id IS NOT NULL
- AND r.target_recruitment_id IS NOT NULL
-),
-total AS (
- -- Общее количество записей
- SELECT COUNT(*) AS total_count
- FROM base_data
-),
-t1 AS (
- -- Первоначальная постановка 17 лет
- SELECT COUNT(*) AS first_reg_17
- FROM base_data
- WHERE registration_reasons @> '"5"'
-),
-t2 AS (
- -- Первоначальная постановка 18 лет
- SELECT COUNT(*) AS first_reg_18
- FROM base_data
- WHERE registration_reasons @> '"6"'
- OR registration_reasons @> '"3"'
- OR registration_reasons @> '"1"'
- OR registration_reasons @> '"4"'
- OR registration_reasons @> '"2"'
-),
-t3 AS (
- -- Женщины, получившие ВУС
- SELECT COUNT(*) AS mil_spec_w
- FROM base_data
- WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
-),
-t4 AS (
- -- Возвратившиеся из мест лишения свободы
- SELECT COUNT(*) AS returned_dep_liberty
- FROM base_data
- WHERE registration_reasons @> '"1"'
-),
-t5 AS (
- -- Отбывающие наказание в местах лишения свободы
- SELECT COUNT(*) AS punished
- FROM base_data
- WHERE registration_reasons @> '"4"'
-),
-t6 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS received_citizenship
- FROM base_data
- WHERE registration_reasons @> '"2"'
-),
-t7 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS other
- FROM base_data
- WHERE registration_reasons @> '"6"'
- AND NOT registration_reasons @> '"3"'
- AND NOT registration_reasons @> '"1"'
- AND NOT registration_reasons @> '"4"'
- AND NOT registration_reasons @> '"2"'
-)
-SELECT
- total.total_count,
- t1.first_reg_17,
- t2.first_reg_18,
- t3.mil_spec_w,
- t4.returned_dep_liberty,
- t5.punished,
- t6.received_citizenship,
- t7.other,
- -- Вычисление процентов
- ROUND(t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_17_percent,
- ROUND(t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0), 2) AS first_reg_18_percent,
- ROUND(t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0), 2) AS returned_dep_liberty_percent,
- ROUND(t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0), 2) AS mil_spec_w_percent,
- ROUND(t5.punished * 100.0 / NULLIF(total.total_count, 0), 2) AS punished_percent,
- ROUND(t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0), 2) AS received_citizenship_percent,
- ROUND(t7.other * 100.0 / NULLIF(total.total_count, 0), 2) AS other_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS mil_reg,
- 1 AS org
-FROM total
-FULL OUTER JOIN t1 ON 1 = 1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1;
- Y
-
-
- 512
- 384
+ 944
+ 400
diff --git a/mappings/country/total_registered.removed_registry.hpl b/mappings/country/total_registered.removed_registry.hpl
index ed458ca..18c9336 100644
--- a/mappings/country/total_registered.removed_registry.hpl
+++ b/mappings/country/total_registered.removed_registry.hpl
@@ -21,11 +21,6 @@
-
- Table input (decision-document-service) РФ
- Insert / update (total_registered.removed_registry)
- N
-
Get variables 2 2
Select values 2 2
@@ -41,7 +36,74 @@
Insert / update (total_registered.removed_registry)
Y
+
+ Execute SQL script
+ Table input (decision-document-service) РФ
+ Y
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
+
+
+ 224
+ 224
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+ -1
+ VK_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 224
+
+
Insert / update (total_registered.removed_registry)
InsertUpdate
@@ -60,7 +122,11 @@
=
recruitment_id
REG_ID
-
+
+
+ =
+ schema
+ schema
total_registered
@@ -134,92 +200,19 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
N
- 1072
+ 1136
224
-
- Table input (decision-document-service) РФ
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.decision-document-service
- N
- 0
- SELECT
- COUNT(*) AS removed_registry,
- COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст
- COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть
- '0' AS deprivation_citizenship,
- '0' AS travel_abroad,
- '0' AS living_abroad,
- COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other, -- Количество по другим причинам
- '0' AS deprivation_citizen_percents,
- ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent, -- Процент по причине предельный возраст
- ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent, -- Процент по причине смерть
- '0' AS travel_abroad_percent,
- '0' AS living_abroad_percent,
- ROUND(COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent, -- Процент по другим причинам
- '${REG_ID}' AS recruitment_id
-FROM public.recruit AS r
-JOIN public.decision AS d
- ON d.recruit_id = r.id
-JOIN public.decision_type AS dt
- ON dt.id = d.type_id
-WHERE r.system_pgs_status = '1.3'
- AND r.current_recruitment IS NOT NULL
- AND r.target_recruitment IS NOT NULL
- AND dt.code IN ('9', '10');
- Y
-
-
- 464
- 224
-
-
-
- Get variables 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 656
- 304
-
-
Select values 2 2
SelectValues
@@ -270,8 +263,91 @@ WHERE r.system_pgs_status = '1.3'
- 864
- 304
+ 880
+ 224
+
+
+
+ Table input (decision-document-service) РФ
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(age_limit), 0) age_limit,
+ COALESCE(SUM(death), 0) death,
+ COALESCE(SUM(removed_registry), 0) removed_registry,
+ COALESCE(SUM(deprivation_citizenship), 0) deprivation_citizenship,
+ COALESCE(SUM(travel_abroad), 0) travel_abroad,
+ COALESCE(SUM(living_abroad), 0) living_abroad,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(deprivation_citizenship) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) deprivation_citizen_percents,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(age_limit) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) age_limit_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(death) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) death_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(travel_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) travel_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(living_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) living_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(other) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ '${REG_ID}' AS recruitment_id,
+ 'Ministry' AS schema
+FROM total_registered.removed_registry
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 464
+ 224
diff --git a/mappings/country/total_registered.subpoenas.hpl b/mappings/country/total_registered.subpoenas.hpl
index d3d2dd5..74c2520 100644
--- a/mappings/country/total_registered.subpoenas.hpl
+++ b/mappings/country/total_registered.subpoenas.hpl
@@ -21,26 +21,11 @@
-
- Table input (subpoena)РФ/рег
- Insert / update (total_registered.subpoenas)
- N
-
-
- Table input (subpoena) РФ/не рег
- Insert / update (total_registered.subpoenas) 3
- N
-
Get variables 2 2
Select values 2 2
Y
-
- Get variables 2 2 2
- Select values 2 2 2
- Y
-
Table input (subpoena)РФ/рег
Get variables 2 2
@@ -52,638 +37,38 @@
Y
- Table input (subpoena) РФ/не рег
- Get variables 2 2 2
- Y
-
-
- Select values 2 2 2
- Insert / update (total_registered.subpoenas) 3
+ Execute SQL script
+ Table input (subpoena)РФ/рег
Y
- Insert / update (total_registered.subpoenas)
- InsertUpdate
+ Execute SQL script
+ ExecSql
- Y
+ N
1
none
- 100
+
+
ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- mil_reg
- mil_reg
-
-
- total_registered
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- average_appeared
- average_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- electron
- count_electron
- Y
-
-
- paper
- count_paper
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- mil_reg
- mil_reg
- N
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- electron_percent
- electron_percent
- Y
-
-
- paper_percent
- paper_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
- N
-
-
- 848
- 192
-
-
-
- Insert / update (total_registered.subpoenas) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
-
-
- =
- mil_reg
- mil_reg
-
-
- total_registered
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- average_appeared
- average_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- electron
- count_electron
- Y
-
-
- paper
- count_paper
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- mil_reg
- mil_reg
- N
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- electron_percent
- electron_percent
- Y
-
-
- paper_percent
- paper_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
- N
-
-
- 848
- 352
-
-
-
- Table input (subpoena) РФ/не рег
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
- WHERE sr.type = '1'
- and ssh.code not in ('3.14','3.7','3.72', '3.71')
-),
--- фильтруем только последние статусы для каждой повестки
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
--- Подсчет различных метрик
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS ( -- количество повесток по которым применены ограничения
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS ( -- количество повесток по которым введены меры
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
- FROM last_status
- WHERE d_code is null
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
- )
-SELECT
- t1.count_subpoena,
- t2.average_appeared,
- t3.count_appeared,
- t4.count_not_appeared,
- t5.count_not_ap_good_reason,
- t6.count_ap_not_required,
- t7.count_restrictions_applied,
- t8.count_introduced_measures,
- t9.count_paper,
- t10.count_electron,
- t11.count_restrictions,
- t12.count_not_delivery,
- t13.appear_date_is_good,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
- ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
- ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
- ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 0 AS mil_reg
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1
-FULL OUTER JOIN t8 ON 1 = 1
-FULL OUTER JOIN t9 ON 1 = 1
-FULL OUTER JOIN t10 ON 1 = 1
-FULL OUTER JOIN t11 ON 1 = 1
-FULL OUTER JOIN t12 ON 1 = 1
-FULL OUTER JOIN t13 ON 1 = 1;
- Y
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Ministry'
+ AND recruitment_id = '${REG_ID}'
- 512
- 352
-
-
-
- Table input (subpoena)РФ/рег
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- N
- 0
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
- WHERE sr.type != '1'
- and ssh.code not in ('3.14','3.7','3.72', '3.71')
-),
--- фильтруем только последние статусы для каждой повестки
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
--- Подсчет различных метрик
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS ( -- количество повесток по которым применены ограничения
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS ( -- количество повесток по которым введены меры
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена
- FROM last_status
- WHERE d_code is null
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
- )
-SELECT
- t1.count_subpoena,
- t2.average_appeared,
- t3.count_appeared,
- t4.count_not_appeared,
- t5.count_not_ap_good_reason,
- t6.count_ap_not_required,
- t7.count_restrictions_applied,
- t8.count_introduced_measures,
- t9.count_paper,
- t10.count_electron,
- t11.count_restrictions,
- t12.count_not_delivery,
- t13.appear_date_is_good,
- ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent,
- ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent,
- ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent,
- ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных
- ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 1 AS mil_reg
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1
-FULL OUTER JOIN t7 ON 1 = 1
-FULL OUTER JOIN t8 ON 1 = 1
-FULL OUTER JOIN t9 ON 1 = 1
-FULL OUTER JOIN t10 ON 1 = 1
-FULL OUTER JOIN t11 ON 1 = 1
-FULL OUTER JOIN t12 ON 1 = 1
-FULL OUTER JOIN t13 ON 1 = 1;
- Y
-
-
- 512
- 192
+ 336
+ 256
@@ -715,8 +100,172 @@ FULL OUTER JOIN t13 ON 1 = 1;
- 576
- 272
+ 784
+ 256
+
+
+
+ Insert / update (total_registered.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ mil_reg
+ mil_reg
+
+
+ =
+ schema
+ schema
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1248
+ 256
@@ -769,13 +318,13 @@ FULL OUTER JOIN t13 ON 1 = 1;
- 784
- 272
+ 992
+ 256
- Get variables 2 2 2
- GetVariable
+ Table input (subpoena)РФ/рег
+ TableInput
Y
@@ -784,80 +333,117 @@ FULL OUTER JOIN t13 ON 1 = 1;
none
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(average_appeared), 0) average_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(electron), 0) count_electron,
+ COALESCE(SUM(paper), 0) count_paper,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(electron) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) electron_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(paper) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) paper_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${REG_ID}' AS recruitment_id,
+ mil_reg,
+ 'Ministry' AS schema
+FROM total_registered.subpoenas
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema = 'Region'
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
+ Y
- 576
- 432
-
-
-
- Select values 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 784
- 432
+ 560
+ 256
diff --git a/mappings/info_recruits/child.hpl b/mappings/info_recruits/child.hpl
index 524ed43..77b5063 100644
--- a/mappings/info_recruits/child.hpl
+++ b/mappings/info_recruits/child.hpl
@@ -1,3 +1,4 @@
+
child
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,83 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ full_name
+ full_name
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ birth_az_number
+ birth_az_number
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ death_az_number
+ death_az_number
+ Y
+
+
+ death_date
+ death_date
+ Y
+
+
+ full_name
+ full_name
+ N
+
+
+ kinship_type
+ kinship_type
+ Y
+
+
+ N
+
+
+ 624
+ 256
+
+
Table input
TableInput
@@ -40,11 +112,14 @@
ervu_person_registry
+ N
+ 0
with child as
-(select jsonb_array_elements(ri.info->'svedDeti'->'rebenok') ch,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedDeti'->'rebenok') ch,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+where jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array')
select
r.id::uuid recruit_id,
ch->>'naimRodstvSvyazReb' kinship_type,
@@ -58,20 +133,16 @@ select
NULLIF(ch->'svedSmert'->'dataSmert'->>'mesyacz','')::int,
NULLIF(ch->'svedSmert'->'dataSmert'->>'den','')::int) death_date,
ch->'svedSmert'->>'nomerZapis' death_az_number,
- ch->'svedAZRozhd'->'dataRozhdDok'->>'nomerZapis' birth_az_number
+ ch->'svedAZRozhd'->>'nomerZapis' birth_az_number
from public.recruits r
-join child on r.id = child.recruit_id
- 0
-
- N
- N
- N
+join child on r.id = child.recruit_id
+
+
+ Y
-
- 208
- 208
- Y
+ 400
+ 256
@@ -85,31 +156,27 @@ join child on r.id = child.recruit_id
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 208
- Y
+ 608
+ 400
diff --git a/mappings/info_recruits/citizen_appealing_violations_fz53.hpl b/mappings/info_recruits/citizen_appealing_violations_fz53.hpl
new file mode 100644
index 0000000..8c19980
--- /dev/null
+++ b/mappings/info_recruits/citizen_appealing_violations_fz53.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_appealing_violations_fz53
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:08:11.179
+ -
+ 2025/02/14 13:08:11.179
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_complex_filters.hpl b/mappings/info_recruits/citizen_complex_filters.hpl
new file mode 100644
index 0000000..28e102b
--- /dev/null
+++ b/mappings/info_recruits/citizen_complex_filters.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_complex_filters
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:08:41.773
+ -
+ 2025/02/14 13:08:41.773
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_criminal_liability_fz53.hpl b/mappings/info_recruits/citizen_criminal_liability_fz53.hpl
new file mode 100644
index 0000000..9358a7a
--- /dev/null
+++ b/mappings/info_recruits/citizen_criminal_liability_fz53.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_criminal_liability_fz53
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:07:43.829
+ -
+ 2025/02/14 13:07:43.829
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_criminal_record.hpl b/mappings/info_recruits/citizen_criminal_record.hpl
new file mode 100644
index 0000000..a48ef10
--- /dev/null
+++ b/mappings/info_recruits/citizen_criminal_record.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_criminal_record
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:05:50.389
+ -
+ 2025/02/14 13:05:50.389
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_education_diplomas_received.hpl b/mappings/info_recruits/citizen_education_diplomas_received.hpl
new file mode 100644
index 0000000..7c1593a
--- /dev/null
+++ b/mappings/info_recruits/citizen_education_diplomas_received.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_education_diplomas_received
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:03:35.892
+ -
+ 2025/02/14 13:03:35.892
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_foreign.hpl b/mappings/info_recruits/citizen_foreign.hpl
index f2baf3f..0a7c948 100644
--- a/mappings/info_recruits/citizen_foreign.hpl
+++ b/mappings/info_recruits/citizen_foreign.hpl
@@ -1,3 +1,4 @@
+
citizen_foreign
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,132 @@
Table input
Table output
- Y
+ N
Table input 2
Table output 2
+ N
+
+
+ Table input
+ Insert / update
+ Y
+
+
+ Table input 2
+ Insert / update 2
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ citizenship_date
+ citizenship_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ citizenship_date
+ citizenship_date
+ N
+
+
+ country_name
+ country_name
+ Y
+
+
+ citizenship_basis
+ citizenship_basis
+ Y
+
+
+ N
+
+
+ 672
+ 208
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ residense_right_date
+ residense_right_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ residense_right_date
+ residense_right_date
+ N
+
+
+ country_name
+ country_name
+ Y
+
+
+ residense_right_basis
+ residense_right_basis
+ Y
+
+
+ N
+
+
+ 672
+ 304
+
+
Table input
TableInput
@@ -45,29 +161,30 @@
ervu_person_registry
+ N
+ 0
with citizen as
-(select jsonb_array_elements(ri.info->'svedIGPP'->'svedIG') cit,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedIG') cit,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedIGPP'->'svedIG') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
cit->'oksm'->>'naimOKSM' country_name,
cit->>'osnovPriobrIG' citizenship_basis,
to_date(cit->>'dataPriobrIG', 'YYYY-MM-DD') citizenship_date
from public.recruits r
-join citizen on r.id = citizen.recruit_id;
- 0
-
- N
- N
- N
+join citizen on r.id = citizen.recruit_id
+
+
+ Y
-
208
208
- Y
@@ -82,29 +199,29 @@ join citizen on r.id = citizen.recruit_id;
ervu_person_registry
+ N
+ 0
with citizen as
-(select jsonb_array_elements(ri.info->'svedIGPP'->'svedPP') cit,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedPP') cit,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedIGPP'->'svedPP') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
cit->'oksm'->>'naimOKSM' country_name,
cit->>'osnovPriobrPP' residense_right_basis,
to_date(cit->>'dataPriobrPP', 'YYYY-MM-DD') residense_right_date
from public.recruits r
-join citizen on r.id = citizen.recruit_id;
- 0
-
- N
- N
- N
+join citizen on r.id = citizen.recruit_id
+
+ Y
-
208
304
- Y
@@ -118,31 +235,27 @@ join citizen on r.id = citizen.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
672
- 208
- Y
+ 48
@@ -156,31 +269,27 @@ join citizen on r.id = citizen.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
672
- 304
- Y
+ 512
diff --git a/mappings/info_recruits/citizen_individual_decisions.hpl b/mappings/info_recruits/citizen_individual_decisions.hpl
new file mode 100644
index 0000000..3c7d6e4
--- /dev/null
+++ b/mappings/info_recruits/citizen_individual_decisions.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_individual_decisions
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:09:08.476
+ -
+ 2025/02/14 13:09:08.476
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_information_search.hpl b/mappings/info_recruits/citizen_information_search.hpl
new file mode 100644
index 0000000..19e78a4
--- /dev/null
+++ b/mappings/info_recruits/citizen_information_search.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_information_search
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:06:54.013
+ -
+ 2025/02/14 13:06:54.013
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_sports_categories.hpl b/mappings/info_recruits/citizen_sports_categories.hpl
new file mode 100644
index 0000000..3c3d6c9
--- /dev/null
+++ b/mappings/info_recruits/citizen_sports_categories.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_sports_categories
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:05:06.026
+ -
+ 2025/02/14 13:05:06.026
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_work_activity.hpl b/mappings/info_recruits/citizen_work_activity.hpl
new file mode 100644
index 0000000..b7ebe94
--- /dev/null
+++ b/mappings/info_recruits/citizen_work_activity.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_work_activity
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:02:15.430
+ -
+ 2025/02/14 13:02:15.430
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizenship.hpl b/mappings/info_recruits/citizenship.hpl
index 0a4f535..a825f20 100644
--- a/mappings/info_recruits/citizenship.hpl
+++ b/mappings/info_recruits/citizenship.hpl
@@ -1,3 +1,4 @@
+
citizenship
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,88 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ acquiring_authority
+ acquiring_authority
+ Y
+
+
+ acquiring_basis
+ acquiring_basis
+ Y
+
+
+ acquiring_date
+ acquiring_date
+ Y
+
+
+ acquiring_number
+ acquiring_number
+ Y
+
+
+ renunciation_authority
+ renunciation_authority
+ Y
+
+
+ renunciation_basis
+ renunciation_basis
+ Y
+
+
+ renunciation_date
+ renunciation_date
+ Y
+
+
+ renunciation_number
+ renunciation_number
+ Y
+
+
+ N
+
+
+ 688
+ 224
+
+
Table input
TableInput
@@ -40,30 +117,27 @@
ervu_person_registry
+ N
+ 0
select r.id recruit_id,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'osnPriob' acquiring_basis,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' acquiring_number,
-to_date(ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshPriob', 'YYYY-MM-DD') acquiring_date,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'organReshPriob' acquiring_authority,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' renunciation_basis,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshVyh' renunciation_number,
-to_date(ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshVyh', 'YYYY-MM-DD') renunciation_date,
-ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'organReshVyh' renunciation_authority
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'osnPriob' acquiring_basis,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' acquiring_number,
+to_date(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshPriob', 'YYYY-MM-DD') acquiring_date,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'organReshPriob' acquiring_authority,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' renunciation_basis,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshVyh' renunciation_number,
+to_date(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshVyh', 'YYYY-MM-DD') renunciation_date,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'organReshVyh' renunciation_authority
from public.recruits_info ri
join public.recruits r ON ri.recruit_id = r.id
-where ri.info->'svedGrazhdanRF'->>'prOtsGrazhdanRF' is null and
-(ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' is not null or ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' is not null)
- 0
-
- N
- N
- N
+where ri.info->'svedFL'->'svedGrazhdanRF'->>'prOtsGrazhdanRF' is null and
+(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' is not null or ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' is not null)
+ AND r.system_update_date >= '${UP_D}'
+ Y
-
432
224
- Y
@@ -77,31 +151,27 @@ where ri.info->'svedGrazhdanRF'->>'prOtsGrazhdanRF' is null and
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
672
- 224
- Y
+ 352
diff --git a/mappings/info_recruits/deputy.hpl b/mappings/info_recruits/deputy.hpl
index 92c2ae1..c85c55a 100644
--- a/mappings/info_recruits/deputy.hpl
+++ b/mappings/info_recruits/deputy.hpl
@@ -1,3 +1,4 @@
+
deputy
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,23 +16,144 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
+
+ Table input 2
+ Table output 2
+ N
+
Table input
- Table output
+ Insert / update
Y
+
+ Table input
+ Table output
+ N
+
Table input 2
- Table output 2
+ Insert / update 2
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ deputy
+ deputy
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ end_date
+ end_date
+ Y
+
+
+ information
+ information
+ Y
+
+
+ period_office
+ period_office
+ Y
+
+
+ deputy
+ deputy
+ Y
+
+
+ N
+
+
+ 688
+ 224
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ deputy
+ deputy
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ end_date
+ end_date
+ Y
+
+
+ information
+ information
+ Y
+
+
+ deputy
+ deputy
+ Y
+
+
+ N
+
+
+ 688
+ 320
+
+
Table input
TableInput
@@ -45,24 +166,21 @@
ervu_person_registry
+ N
+ 0
select r.id recruit_id,
-ri.info->'svedDeputat'->'deputat'->>'srokiPolnomochii' period_office,
-to_date(ri.info->'svedDeputat'->'deputat'->>'dataDosrochPrekr', 'YYYY-MM-DD') end_date,
-ri.info->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' information
+ri.info->'svedFL'->'svedDeputat'->'deputat'->>'srokiPolnomochii' period_office,
+to_date(ri.info->'svedFL'->'svedDeputat'->'deputat'->>'dataDosrochPrekr', 'YYYY-MM-DD') end_date,
+ri.info->'svedFL'->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' information
from public.recruits_info ri
join public.recruits r ON ri.recruit_id = r.id
-where ri.info->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' is not null;
- 0
-
- N
- N
- N
+where ri.info->'svedFL'->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' is not null
+ AND r.system_update_date >= '${UP_D}'
+ Y
-
432
224
- Y
@@ -77,24 +195,21 @@ where ri.info->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' is not null;
ervu_person_registry
+ N
+ 0
select r.id recruit_id,
-to_date(ri.info->'svedKandidat'->'kandidat'->>'dataSnyatiyaKandidatury', 'YYYY-MM-DD') end_date,
-ri.info->'svedKandidat'->'kandidat'->>'svedRegKandidata' information,
+to_date(ri.info->'svedFL'->'svedKandidat'->'kandidat'->>'dataSnyatKandidat', 'YYYY-MM-DD') end_date,
+ri.info->'svedFL'->'svedKandidat'->'kandidat'->>'svedRegKandidata' information,
false deputy
from public.recruits_info ri
join public.recruits r ON ri.recruit_id = r.id
-where ri.info->'svedKandidat'->'kandidat'->>'svedRegKandidata' is not null;
- 0
-
- N
- N
- N
+where ri.info->'svedFL'->'svedKandidat'->>'kandidat' is not null
+ AND r.system_update_date >= '${UP_D}'
+ Y
-
432
320
- Y
@@ -108,31 +223,27 @@ where ri.info->'svedKandidat'->'kandidat'->>'svedRegKandidata' is not null;none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 800
- 224
- Y
+ 688
+ 64
@@ -146,31 +257,27 @@ where ri.info->'svedKandidat'->'kandidat'->>'svedRegKandidata' is not null;none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 800
- 320
- Y
+ 688
+ 448
diff --git a/mappings/info_recruits/disability.hpl b/mappings/info_recruits/disability.hpl
index e34b32c..2f15fec 100644
--- a/mappings/info_recruits/disability.hpl
+++ b/mappings/info_recruits/disability.hpl
@@ -1,3 +1,4 @@
+
disability
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,147 @@
Table input
Table output
- Y
+ N
Table input 2
Table output 2
+ N
+
+
+ Table input
+ Insert / update
+ Y
+
+
+ Table input 2
+ Insert / update 2
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ close_date
+ close_date
+ Y
+
+
+ confirmation_date
+ confirmation_date
+ Y
+
+
+ disability
+ disability
+ Y
+
+
+ disability_group
+ disability_group
+ Y
+
+
+ organization_name
+ organization_name
+ Y
+
+
+ start_date
+ start_date
+ Y
+
+
+ N
+
+
+ 432
+ 208
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ close_date
+ close_date
+ Y
+
+
+ organization_name
+ organization_name
+ Y
+
+
+ start_date
+ start_date
+ Y
+
+
+ N
+
+
+ 432
+ 304
+
+
Table input
TableInput
@@ -45,32 +176,29 @@
ervu_person_registry
+ N
+ 0
select
r.id recruit_id,
- case when ri.info->'svedInvalid'->'invalid'->>'gruppa'='1' then 'I группа'
- when ri.info->'svedInvalid'->'invalid'->>'gruppa'='2' then 'II группа'
- when ri.info->'svedInvalid'->'invalid'->>'gruppa'='3' then 'III группа'
- when ri.info->'svedInvalid'->'invalid'->>'gruppa'='4' then 'ребенок-инвалид'
+ case when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='1' then 'I группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='2' then 'II группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='3' then 'III группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='4' then 'ребенок-инвалид'
end disability_group,
- ri.info->'svedInvalid'->'invalid'->>'ustanOrg' organization_name,
- to_date(ri.info->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataUstan', 'YYYY-MM-DD') start_date,
- to_date(ri.info->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataSnyat', 'YYYY-MM-DD') close_date,
- to_date(ri.info->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataPodtverzhdPlan', 'YYYY-MM-DD') confirmation_date,
+ ri.info->'svedFL'->'svedInvalid'->'invalid'->>'ustanOrg' organization_name,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataUstan', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataSnyat', 'YYYY-MM-DD') close_date,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataPodtverzhdPlan', 'YYYY-MM-DD') confirmation_date,
true disability
from public.recruits r
join public.recruits_info ri on r.id = ri.recruit_id
-where ri.info->'svedInvalid'->'invalid'->>'gruppa' is not null;
- 0
-
- N
- N
- N
+where ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa' is not null
+ AND r.system_update_date >= '${UP_D}'
+ Y
-
208
208
- Y
@@ -85,6 +213,8 @@ where ri.info->'svedInvalid'->'invalid'->>'gruppa' is not null;
ervu_person_registry
+ N
+ 0
select
r.id recruit_id,
ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' organization_name,
@@ -92,18 +222,13 @@ where ri.info->'svedInvalid'->'invalid'->>'gruppa' is not null;
to_date(ri.info->'svedNedeesp'->'nedeesposob'->>'dataOtmeny', 'YYYY-MM-DD') close_date
from public.recruits r
join public.recruits_info ri on r.id = ri.recruit_id
-where ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' is not null;
- 0
-
- N
- N
- N
+where ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' is not null
+ AND r.system_update_date >= '${UP_D}'
+ Y
-
208
304
- Y
@@ -117,31 +242,27 @@ where ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
416
- 208
- Y
+ 80
@@ -155,31 +276,27 @@ where ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
416
- 304
- Y
+ 496
diff --git a/mappings/info_recruits/disease.hpl b/mappings/info_recruits/disease.hpl
index 6492bf9..b5dce31 100644
--- a/mappings/info_recruits/disease.hpl
+++ b/mappings/info_recruits/disease.hpl
@@ -1,3 +1,4 @@
+
disease
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,68 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ reg_date
+ reg_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ code
+ code
+ Y
+
+
+ name
+ name
+ Y
+
+
+ reg_date
+ reg_date
+ Y
+
+
+ N
+
+
+ 448
+ 208
+
+
Table input
TableInput
@@ -40,29 +97,27 @@
ervu_person_registry
+ N
+ 0
with zdorov as
-(select jsonb_array_elements(ri.info->'svedSostZdorov'->'svedZdorov'->'sostZdorov') z,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedSostZdorov'->'svedZdorov'->'sostZdorov') z,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedSostZdorov'->'svedZdorov'->'sostZdorov') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+where jsonb_typeof(ri.info->'svedFL'->'svedSostZdorov'->'svedZdorov'->'sostZdorov') = 'array')
select
r.id recruit_id,
z->>'kodZabol' code,
z->>'naimZabol' name,
to_date(z->>'dataDiagn', 'YYYY-MM-DD') reg_date
from public.recruits r
-join zdorov on r.id = zdorov.recruit_id;
- 0
-
- N
- N
- N
+join zdorov on r.id = zdorov.recruit_id
+
+ Y
-
208
208
- Y
@@ -76,31 +131,27 @@ join zdorov on r.id = zdorov.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 208
- Y
+ 464
+ 64
diff --git a/mappings/info_recruits/drivers_licence.hpl b/mappings/info_recruits/drivers_licence.hpl
index bfb7f52..7407d58 100644
--- a/mappings/info_recruits/drivers_licence.hpl
+++ b/mappings/info_recruits/drivers_licence.hpl
@@ -1,3 +1,4 @@
+
drivers_licence
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,174 @@
Table input
Table output
- Y
+ N
Table input 2
Table output 2
+ N
+
+
+ Table input 2
+ Insert / update 2
+ Y
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+
+ =
+ start_date
+ start_date
+
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ categories
+ categories
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ licence_series
+ licence_series
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ N
+
+
+ 416
+ 208
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+
+ =
+ tractor_driver
+ tractor_driver
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ categories
+ categories
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ licence_number
+ licence_number
+ Y
+
+
+ licence_series
+ licence_series
+ Y
+
+
+ replacement_date
+ replacement_date
+ Y
+
+
+ return_date
+ return_date
+ Y
+
+
+ seizure_date
+ seizure_date
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ tractor_driver
+ tractor_driver
+ N
+
+
+ N
+
+
+ 416
+ 416
+
+
Table input
TableInput
@@ -45,30 +203,28 @@
ervu_person_registry
+ N
+ 0
select
- r.id recruit_id,
- ri.info->'svedVoditUdost'->'voditUdost'->>'serVodUd' licence_series,
- ri.info->'svedVoditUdost'->'voditUdost'->>'nomVodUd' licence_number,
- to_date(ri.info->'svedVoditUdost'->'voditUdost'->>'dataVodUd', 'YYYY-MM-DD') start_date,
- to_date(ri.info->'svedVoditUdost'->'voditUdost'->>'srokVodUd', 'YYYY-MM-DD') close_date,
+ ri.recruit_id recruit_id,
+ ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' licence_series,
+ --ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'nomVodUd' licence_number,
+ to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') close_date,
array_to_string(array(
- select kat->>'kategoriya'
- from jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
- where jsonb_typeof(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories
+ select kat->>'naimKatTS'
+ from jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
+ where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories
from public.recruits r
join public.recruits_info ri on r.id = ri.recruit_id
-where ri.info->'svedVoditUdost'->'voditUdost'->>'serVodUd' is not null;
- 0
-
- N
- N
- N
+where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'
+ AND r.system_update_date >= '${UP_D}'
+
+ Y
-
208
208
- Y
@@ -83,35 +239,32 @@ where ri.info->'svedVoditUdost'->'voditUdost'->>'serVodUd' is not null;
ervu_person_registry
+ N
+ 0
select
r.id recruit_id,
- ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'serUTM' licence_series,
- ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'nomUTM' licence_number,
- to_date(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataVydUTM', 'YYYY-MM-DD') start_date,
- to_date(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataOkonchUTM', 'YYYY-MM-DD') close_date,
- to_date(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataIztUTM', 'YYYY-MM-DD') seizure_date,
- to_date(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataZamUTM', 'YYYY-MM-DD') replacement_date,
- to_date(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataVozUTM', 'YYYY-MM-DD') return_date,
+ ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' licence_series,
+ ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' licence_number,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') close_date,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataIztUTM', 'YYYY-MM-DD') seizure_date, --
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') replacement_date,--
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') return_date,--
array_to_string(array(
- select kat->>'kategoriya'
- from jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
- where jsonb_typeof(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories,
+ select kat->>'naimKatTS'
+ from jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
+ where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories,
true tractor_driver
from public.recruits r
join public.recruits_info ri on r.id = ri.recruit_id
-where ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'serUTM' is not null;
+where ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' is not null
+ AND r.system_update_date >= '${UP_D}'
- 0
-
- N
- N
- N
+ Y
-
208
- 304
- Y
+ 416
@@ -125,31 +278,27 @@ where ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'serUTM' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
416
- 208
- Y
+ 64
@@ -163,31 +312,27 @@ where ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'serUTM' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
416
- 304
- Y
+ 544
diff --git a/mappings/info_recruits/incident.hpl b/mappings/info_recruits/incident.hpl
new file mode 100644
index 0000000..830b011
--- /dev/null
+++ b/mappings/info_recruits/incident.hpl
@@ -0,0 +1,27 @@
+
+
+
+ incident
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 13:11:10.022
+ -
+ 2025/02/14 13:11:10.022
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/info_recruits.hpl b/mappings/info_recruits/info_recruits.hpl
index 64ae30d..ff0d5c1 100644
--- a/mappings/info_recruits/info_recruits.hpl
+++ b/mappings/info_recruits/info_recruits.hpl
@@ -18,19 +18,251 @@
2024/08/15 14:02:51.713
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 394
+ 960
+ 16
+ acquired_citizenship
+address_actual
+address_place_stay
+city_birth
+date_info_actual
+date_loss_info_actual
+died_date
+dispensary_registration_code
+email
+end_date_place_stay
+end_date_residence
+inn
+is_in_prison
+medic
+medical_requirements
+region_birth
+residence
+right_deferment
+snils
+source_info_actual
+start_date_place_stay
+start_date_residence
+took_break
+type_place_stay
+ 163
+
Select values 4
Table output
- Y
+ N
Table input
Select values 4
Y
+
+ Select values 4
+ Insert / update
+ Y
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ age
+ age
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ birth_place
+ birth_place
+ Y
+
+
+ contract_service
+ contract_service
+ Y
+
+
+ deferment_liberation
+ deferment_liberation
+ Y
+
+
+ disability_group
+ disability_group
+ Y
+
+
+ driver_license
+ driver_license
+ Y
+
+
+ education
+ education
+ Y
+
+
+ employment
+ employment
+ Y
+
+
+ first_name
+ first_name
+ Y
+
+
+ full_name
+ full_name
+ Y
+
+
+ gender
+ gender
+ Y
+
+
+ is_registered
+ is_registered
+ Y
+
+
+ is_wanted
+ is_wanted
+ Y
+
+
+ issue_date
+ issue_date
+ Y
+
+
+ last_name
+ last_name
+ Y
+
+
+ marital_status
+ marital_status
+ Y
+
+
+ middle_name
+ middle_name
+ Y
+
+
+ mobilization
+ mobilization
+ Y
+
+
+ number_children
+ number_children
+ Y
+
+
+ number_children_18_old
+ number_children_18_old
+ Y
+
+
+ passport_number
+ passport_number
+ Y
+
+
+ passport_series
+ passport_series
+ Y
+
+
+ phone
+ phone
+ Y
+
+
+ reason_registration
+ reason_registration
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ Y
+
+
+ sports_category
+ sports_category
+ Y
+
+
+ tractor_license
+ tractor_license
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ urgent_service
+ urgent_service
+ Y
+
+
+ N
+
+
+ 688
+ 208
+
+
Select values 4
SelectValues
@@ -82,23 +314,299 @@
ervu_person_registry
N
0
- WITH extracted_children AS (
+ WITH
+base_recruit_data AS (
+ SELECT
+ r.full_name,
+ r.last_name,
+ r.first_name,
+ r.middle_name,
+ r.gender,
+ ri.info->'svedFL'->'svedBS'->'snils'->'aktSNILS'->>'snils' AS snils,
+ ri.info->'svedFL'->'svedBS'->'inn'->'aktINN'->>'inn' AS inn,
+ r.birth_date,
+ EXTRACT(YEAR FROM AGE(r.birth_date)) AS age,
+ r.birth_place,
+ r.phone,
+ r.email,
+ ri.recruit_id,
+ ri.info,
+ r.vu_current_info,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozhNaim' AS marital_status,
+ ri.info->'svedFL'->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
+ ri.info->'svedFL'->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
+ ri.info->'svedFL'->'svedVoin'->'voin'->>'dataReg' AS issue_date,
+ r.system_update_date AS update_date,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ COALESCE(r.current_recruitment_id, r.target_recruitment_id) AS recruitment_id,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS deferment_liberation, -- когда фолс отсрочка есть, когда тру или нулл - нет
+
+ CASE
+ WHEN
+ -- Условия для "true" (спортивная категория)
+ ri.info->'svedFL'->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedFL'->'svedSport'->'sport') = 'array' -- Проверяем, что 'sport' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedSport'->'sport') > 0 -- И массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем, что 'sportRazr' существует и срок действия актуален
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ )
+ OR (
+ -- Проверяем, что 'sportZvan' существует и не пусто
+ sport_elem->>'sportZvan' IS NOT NULL
+ AND sport_elem->>'sportZvan' <> ''
+ )
+ OR (
+ -- Проверяем, что 'sportRazr' существует и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') <= CURRENT_DATE
+ )
+ )
+ AND ri.info->'svedFL'->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN true
+
+ WHEN
+ -- Условия для "false" (не является спортивной категорией)
+ (
+ ri.info->'svedFL'->'svedSport'->'sport' IS NULL -- Если 'sport' = NULL
+ OR (
+ ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedFL'->'svedSport'->'sport') = 'array' -- Поле 'sport' должно быть массивом
+ AND jsonb_array_length(ri.info->'svedFL'->'svedSport'->'sport') > 0 -- И массив не пустой
+ )
+ )
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем 'sportZvan' и если оно не существует или пусто
+ sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = ''
+ )
+ OR (
+ -- Проверяем 'sportRazr' и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ -- И 'sportZvan' также не должно существовать или быть пустым
+ AND (sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = '')
+ )
+ )
+ AND ri.info->'svedFL'->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN false
+
+ WHEN
+ -- Условия для "null" (нет информации)
+ ri.info->'svedSport'->>'prOtsSvedSport' = '1'
+ OR ri.info->'svedSport' IS NULL -- Проверяем, что 'svedSport' отсутствует
+ THEN null
+
+ ELSE null -- Неопределенное значение для всех других случаев
+ END AS sports_category,
+
+ mrr.value AS reason_registration,
+
+ CASE
+ WHEN ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa' IS NOT NULL
+ AND ri.info->'svedFL'->'svedInvalid'->>'prOtsSvedInvalid' IS NULL
+ AND (ri.info->'svedFL'->'sportRazr'->>'dataSnyat' IS NULL
+ OR TO_DATE(ri.info->'svedFL'->'sportRazr'->>'dataSnyat', 'YYYY-MM-DD') <= CURRENT_DATE)
+ THEN ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'
+ WHEN ri.info->'svedFL'->'svedInvalid'->>'prOtsSvedInvalid' = '1' THEN 'Нет информации об инвалидности'
+ ELSE 'Нет информации об инвалидности'
+ END AS disability_group,
+
+ CASE
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'udostTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') > CURRENT_DATE
+ THEN true
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'udostTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') <= CURRENT_DATE
+ THEN false
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'prOtsSvedUTM' = '1' THEN null
+ ELSE null
+ END AS tractor_license,
+
+ CASE
+ WHEN
+ jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NULL -- дата прекращения отсутствует
+ )
+ AND ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN true
+
+ WHEN
+ jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NOT NULL -- дата прекращения не отсутствует
+ )
+ AND ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN false
+
+ WHEN
+ ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' = '1'
+ THEN NULL
+
+ ELSE NULL
+ END AS criminal_prosecution,
+
+ COALESCE(
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN 'Обучается'
+ ELSE NULL
+ END ||
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ ) THEN
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN ', Работает'
+ ELSE 'Работает'
+ END
+ ELSE NULL
+ END,
+ CASE
+ WHEN
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' -- Отсутствие сведений о вузе
+ AND info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' -- Отсутствие сведений о колледже
+ AND info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' -- Отсутствие сведений о работе
+ THEN 'Нет информации'
+ ELSE 'Нет информации'
+ END
+ ) AS employment_status,
+
+ CASE
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )) THEN 'Высшее'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' = '10')
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' = '10'
+ )) THEN 'Среднее профессиональное'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )) THEN 'Общее'
+ WHEN ((ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1')) THEN 'Нет данных'
+ ELSE 'Не указано' -- Добавлено условие по умолчанию
+ END AS education,
+
+ (
+ SELECT COUNT(*)
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+ AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) < make_interval(years => 18)
+ ) AS number_children
+
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.military_registration_reason AS mrr ON r.registration_reasons::jsonb @> to_jsonb(mrr.code::text)
+ --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.system_update_date >= '${UP_D}'
+),
+extracted_children AS (
SELECT
ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM base_recruit_data ri
WHERE
- jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+ 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
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
),
children_count AS (
SELECT
@@ -111,273 +619,56 @@ children_count AS (
GROUP BY
recruit_id
),
-registration_reasons AS (
- SELECT mrr.name AS reason_registration,
- r.id AS recruit_id
- FROM public.recruits AS r
- JOIN public.military_registration_reason AS mrr
- ON r.registration_reasons::jsonb @> to_jsonb(mrr.code::text)
-),
driver_license AS (
SELECT
ri.recruit_id,
COALESCE(
- string_agg(sved_vodit->>'kategoriya', ', '),
+ string_agg(sved_vodit->>'naimKatTS', ', '),
'Нет информации'
) AS driver_license
- FROM
- public.recruits_info ri
+ FROM base_recruit_data ri
LEFT JOIN LATERAL
- jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS sved_vodit
+ jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS sved_vodit
ON true
GROUP BY ri.recruit_id
-),
-
-sports_category AS ( -- проверка на наличие спортивного разряда или звания
- SELECT
- ri.recruit_id,
- CASE
- WHEN
- -- Условия для "true" (спортивная категория)
- ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
- AND jsonb_typeof(ri.info->'svedSport'->'sport') = 'array' -- Проверяем, что 'sport' это массив
- AND jsonb_array_length(ri.info->'svedSport'->'sport') > 0 -- И массив не пустой
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedSport'->'sport') AS sport_elem
- WHERE
- (
- -- Проверяем, что 'sportRazr' существует и срок действия актуален
- jsonb_typeof(sport_elem->'sportRazr') = 'object'
- AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
- AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
- )
- OR (
- -- Проверяем, что 'sportZvan' существует и не пусто
- sport_elem->>'sportZvan' IS NOT NULL
- AND sport_elem->>'sportZvan' <> ''
- )
- OR (
- -- Проверяем, что 'sportRazr' существует и срок действия истек
- jsonb_typeof(sport_elem->'sportRazr') = 'object'
- AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
- AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') <= CURRENT_DATE
- )
- )
- AND ri.info->'svedSport'->>'prOtsSvedSport' IS NULL
- THEN true
-
- WHEN
- -- Условия для "false" (не является спортивной категорией)
- (
- ri.info->'svedSport'->'sport' IS NULL -- Если 'sport' = NULL
- OR (
- ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
- AND jsonb_typeof(ri.info->'svedSport'->'sport') = 'array' -- Поле 'sport' должно быть массивом
- AND jsonb_array_length(ri.info->'svedSport'->'sport') > 0 -- И массив не пустой
- )
- )
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedSport'->'sport') AS sport_elem
- WHERE
- (
- -- Проверяем 'sportZvan' и если оно не существует или пусто
- sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = ''
- )
- OR (
- -- Проверяем 'sportRazr' и срок действия истек
- jsonb_typeof(sport_elem->'sportRazr') = 'object'
- AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
- AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
- -- И 'sportZvan' также не должно существовать или быть пустым
- AND (sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = '')
- )
- )
- AND ri.info->'svedSport'->>'prOtsSvedSport' IS NULL
- THEN false
-
- WHEN
- -- Условия для "null" (нет информации)
- ri.info->'svedSport'->>'prOtsSvedSport' = '1'
- OR ri.info->'svedSport' IS NULL -- Проверяем, что 'svedSport' отсутствует
- THEN null
-
- ELSE null -- Неопределенное значение для всех других случаев
- END AS sports_category
- FROM public.recruits_info ri
-),
-
-disability_group AS (
- SELECT
- ri.recruit_id,
- CASE
- WHEN ri.info->'svedInvalid'->'invalid'->>'gruppa' IS NOT NULL
- AND ri.info->'svedInvalid'->>'prOtsSvedInvalid' IS NULL
- AND (ri.info->'sportRazr'->>'dataSnyat' IS NULL
- OR TO_DATE(ri.info->'sportRazr'->>'dataSnyat', 'YYYY-MM-DD') <= CURRENT_DATE)
- THEN ri.info->'svedInvalid'->'invalid'->>'gruppa'
- WHEN ri.info->'svedInvalid'->>'prOtsSvedInvalid' = '1' THEN 'Нет информации об инвалидности'
- ELSE 'Нет информации об инвалидности'
- END AS disability_group
- FROM public.recruits_info ri
-),
-
-tractor_license AS (
- SELECT
- ri.recruit_id,
- CASE
- WHEN ri.info->'svedUdostrTraktMash'->>'udostrTraktMash' IS NOT NULL
- AND TO_DATE(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataOkonchUTM', 'YYYY-MM-DD') > CURRENT_DATE
- THEN true
- WHEN ri.info->'svedUdostrTraktMash'->>'udostrTraktMash' IS NOT NULL
- AND TO_DATE(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataOkonchUTM', 'YYYY-MM-DD') <= CURRENT_DATE
- THEN false
- WHEN ri.info->'svedUdostrTraktMash'->>'prOtsSvedUTM' = '1' THEN null
- ELSE null
- END AS tractor_license
- FROM public.recruits_info ri
-),
-
-is_wanted AS (
- SELECT
- ri.recruit_id,
- CASE
- WHEN
- jsonb_typeof(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
- AND jsonb_array_length(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
- WHERE
- criminal_prosecution->>'dataPrekrashh' IS NULL -- дата прекращения отсутствует
- )
- AND ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
- THEN true
-
- WHEN
- jsonb_typeof(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
- AND jsonb_array_length(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
- WHERE
- criminal_prosecution->>'dataPrekrashh' IS NOT NULL -- дата прекращения не отсутствует
- )
- AND ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
- THEN false
-
- WHEN
- ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' = '1'
- THEN NULL
-
- ELSE NULL
- END AS criminal_prosecution
- FROM public.recruits_info ri
-),
-
-employment AS (
- SELECT
- ri.recruit_id,
- COALESCE(
- CASE
- WHEN (
- jsonb_typeof(info->'svedVUZ'->'vuz') = 'array'
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' IN ('1', '2', '4')
- )
- ) OR (
- jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array'
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
- )
- ) THEN 'Обучается'
- ELSE NULL
- END ||
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array'
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- ) THEN
- CASE
- WHEN (
- jsonb_typeof(info->'svedVUZ'->'vuz') = 'array'
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' IN ('1', '2', '4')
- )
- ) OR (
- jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array'
- AND EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
- )
- ) THEN ', Работает'
- ELSE 'Работает'
- END
- ELSE NULL
- END,
- CASE
- WHEN
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' -- Отсутствие сведений о вузе
- AND info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' -- Отсутствие сведений о колледже
- AND info->'svedTrud'->>'prOtsSvedTrud' = '1' -- Отсутствие сведений о работе
- THEN 'Нет информации'
- ELSE 'Нет информации'
- END
- ) AS employment_status
- FROM public.recruits_info ri
)
-
SELECT
r.full_name,
r.last_name,
r.first_name,
r.middle_name,
- r.gender,
+ r.gender,
+ r.snils,
+ r.inn,
r.birth_date,
- EXTRACT(YEAR FROM AGE(r.birth_date)) AS age,
+ r.age,
r.birth_place,
r.phone,
- r.conscription AS deferment_liberation,
-
+ r.email,
+ r.deferment_liberation,
CASE
- WHEN (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 70 AND r.gender = 'MALE' AND
- (r.conscription IS NULL OR r.conscription = false) AND
- COALESCE(cc.children_under_16, 0) < 5
- AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
- OR
- (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 45 AND r.gender = 'FEMALE' AND
- (r.conscription IS NULL OR r.conscription = false) AND
- COALESCE(cc.children_under_16, 0) < 5
- AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ WHEN (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 30 AND 50 AND r.gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 30 AND 45 AND r.gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
THEN true
ELSE false
END AS mobilization,
- CASE
- WHEN (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
- AND gender = 'MALE' -- мужчины от 18 до 30 лет
- AND (conscription IS NULL OR conscription = false)
- AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ CASE
+ WHEN EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 30
+ AND r.gender = 'MALE'
+ AND r.deferment_liberation IS true -- нет отсрочки и нет освобождения от службы
THEN true
ELSE false
END AS urgent_service,
- CASE WHEN (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' -- признак отсутствия данных о судимости
- AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ CASE
+ WHEN EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 50
+ AND r.gender = 'MALE'
+ AND (r.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd IS false)
+ AND r.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
THEN true
ELSE false
END AS contract_service,
@@ -388,98 +679,34 @@ SELECT
ELSE 'Нет информации'
END AS is_registered,
-CASE
- WHEN (EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5'))
- OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )) THEN 'Высшее'
- WHEN (EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10')
- OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )) THEN 'Среднее профессиональное'
- WHEN (EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9'))
- OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )) THEN 'Общее'
- WHEN ((ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1')) THEN 'Нет данных'
- ELSE 'Не указано' -- Добавлено условие по умолчанию
- END AS education,
-
- ri.info->'svedSemPolozh'->>'semPolozhNaim' AS marital_status,
+ r.education,
+ r.marital_status,
+ r.number_children,
(SELECT COUNT(*)
- FROM jsonb_array_elements(ri.info->'svedDeti'->'rebenok') AS childs
- WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
- AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
- NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
- NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) < make_interval(years => 18)
- ) AS number_children,
-
- (SELECT COUNT(*)
- FROM jsonb_array_elements(ri.info->'svedDeti'->'rebenok') AS childs
- WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+ FROM jsonb_array_elements(r.info->'svedFL'->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(r.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) >= make_interval(years => 18)
) AS number_children_18_old,
-
- ri.info->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
- ri.info->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
- ri.info->'svedVoin'->'voin'->>'dataReg' AS issue_date,
- ri.recruit_id, -- ID рекрута
- r.target_recruitment_id AS recruitment_id,
- rr.reason_registration, -- причина постановки на учет char
- sc.sports_category, -- наличие спортивной категории bool
+ r.passport_number,
+ r.passport_series,
+ r.issue_date,
+ r.recruit_id, -- ID рекрута
+ r.recruitment_id,
+ r.reason_registration, -- причина постановки на учет char
+ r.sports_category, -- наличие спортивной категории bool
dl.driver_license, -- категории водительских удостоверений char
- dg.disability_group, -- группа инвалидности char
- tl.tractor_license, -- наличие удостоверения тракториста bool
- iw.criminal_prosecution AS is_wanted, -- наличие уголовного преследования bool
- em.employment_status AS employment -- занятость char
-FROM
- public.recruits_info ri
-JOIN
- public.recruits r ON ri.recruit_id = r.id
-LEFT JOIN
- children_count cc ON r.id = cc.recruit_id -- Присоединение для получения количества детей
-JOIN
- registration_reasons rr ON rr.recruit_id = ri.recruit_id
-JOIN
- sports_category sc ON sc.recruit_id = ri.recruit_id
-JOIN
- driver_license dl ON dl.recruit_id = ri.recruit_id
-JOIN
- disability_group dg ON dg.recruit_id = ri.recruit_id
-JOIN
- tractor_license tl ON tl.recruit_id = ri.recruit_id
-JOIN
- is_wanted iw ON iw.recruit_id = ri.recruit_id
-JOIN
- employment em ON em.recruit_id = ri.recruit_id
-WHERE
- r.target_recruitment_id IS NOT NULL
- AND r.current_recruitment_id IS NOT NULL;
- N
+ r.disability_group, -- группа инвалидности char
+ r.tractor_license, -- наличие удостоверения тракториста bool
+ r.criminal_prosecution AS is_wanted, -- наличие уголовного преследования bool
+ r.employment_status AS employment, -- занятость char
+ r.update_date
+FROM base_recruit_data r
+LEFT JOIN children_count cc ON r.recruit_id = cc.recruit_id -- Присоединение для получения количества детей
+JOIN driver_license dl ON dl.recruit_id = r.recruit_id
+ Y
208
@@ -516,8 +743,8 @@ WHERE
Y
- 672
- 208
+ 656
+ 64
diff --git a/mappings/info_recruits/job_info_recruits.hwf b/mappings/info_recruits/job_info_recruits.hwf
index f7aa501..4950910 100644
--- a/mappings/info_recruits/job_info_recruits.hwf
+++ b/mappings/info_recruits/job_info_recruits.hwf
@@ -5,12 +5,23 @@
+ 0
-
2024/08/16 15:32:20.489
-
2024/08/16 15:32:20.489
-
+
+ ST_CH_D
+
+
+
+
+ UP_D
+
+
+
+
Start
@@ -25,19 +36,9 @@
N
0
1
- N
- 368
- 624
-
-
-
- Success
-
- SUCCESS
-
- N
- 1056
- 624
+ Y
+ 1328
+ 2112
@@ -48,69 +49,28 @@
N
N
N
- Y
+ N
N
- N
+ Y
${Internal.Entry.Current.Folder}/info_recruits.hpl
-
-
- Basic
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_info_recruits
+ Rowlevel
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 256
-
-
-
- SQL.ri
-
- SQL
-
- ervu-dashboard
- N
- delete from ervu_dashboard.citizen
- N
- N
- N
- 640
- 256
-
-
-
- SQL.opekun
-
- SQL
-
- ervu-dashboard
- N
- delete from ervu_dashboard.citizen_guardianship
- N
- N
- N
- 640
- 192
-
-
-
- SQL.spouse
-
- SQL
-
- ervu-dashboard
- N
- delete from ervu_dashboard.citizen_spouse
- N
- N
- N
- 640
- 320
+ 1856
+ 1664
@@ -124,8 +84,8 @@
N
N
N
- 640
- 384
+ 1216
+ 2400
@@ -138,22 +98,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/opekun.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 192
+ 1856
+ 1728
@@ -166,22 +128,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/spouse.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 320
+ 1856
+ 1792
@@ -194,22 +158,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/child.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 384
+ 1856
+ 1856
@@ -223,8 +189,8 @@
N
N
N
- 640
- 448
+ 1216
+ 2464
@@ -237,22 +203,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/disease.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 448
+ 1856
+ 1920
@@ -266,8 +234,8 @@
N
N
N
- 640
- 512
+ 1216
+ 2528
@@ -280,22 +248,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/medical_authorities.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 512
+ 1856
+ 1984
@@ -309,8 +279,8 @@
N
N
N
- 640
- 576
+ 1216
+ 2592
@@ -323,22 +293,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/disability.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 576
+ 1856
+ 2048
@@ -352,8 +324,8 @@
N
N
N
- 640
- 640
+ 1216
+ 2656
@@ -366,22 +338,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/drivers_licence.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 640
+ 1856
+ 2112
@@ -395,8 +369,8 @@
N
N
N
- 640
- 704
+ 1216
+ 2720
@@ -409,22 +383,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/property.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 704
+ 1856
+ 2176
@@ -438,8 +414,8 @@
N
N
N
- 640
- 768
+ 1216
+ 2784
@@ -452,22 +428,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/citizen_foreign.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 768
+ 1856
+ 2240
@@ -481,8 +459,8 @@
N
N
N
- 640
- 832
+ 1216
+ 2848
@@ -495,22 +473,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/citizenship.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 832
+ 1856
+ 2304
@@ -524,8 +504,8 @@
N
N
N
- 640
- 896
+ 1216
+ 2912
@@ -538,22 +518,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/deputy.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 896
+ 1856
+ 2368
@@ -567,8 +549,8 @@
N
N
N
- 640
- 960
+ 1216
+ 2976
@@ -581,22 +563,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/prosecution.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 960
+ 1856
+ 2432
@@ -610,8 +594,8 @@
N
N
N
- 640
- 1024
+ 1216
+ 3040
@@ -624,22 +608,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/punishment.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 1024
+ 1856
+ 2496
@@ -653,8 +639,8 @@
N
N
N
- 640
- 1088
+ 1216
+ 3104
@@ -667,22 +653,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/passport.hpl
-
-
Basic
+
+ UP_D
+ UPDATE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 1088
+ 1856
+ 2560
@@ -696,8 +684,8 @@
N
N
N
- 640
- 1152
+ 1216
+ 3168
@@ -710,22 +698,24 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/subpoena.hpl
-
-
Basic
+
+ ST_CH_D
+ STATUS_CHANGE_DATE
+
Y
- N
+ Y
local
N
N
Y
N
- 784
- 1152
+ 800
+ 2112
@@ -739,8 +729,8 @@
N
N
N
- 640
- 1216
+ 1216
+ 3232
@@ -753,10 +743,270 @@
N
Y
N
- N
+ Y
${Internal.Entry.Current.Folder}/temporary_measure.hpl
-
-
+ Basic
+
+
+ ST_CH_D
+ STATUS_CHANGE_DATE
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 800
+ 2176
+
+
+
+ select_delta_time.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/select_delta_time.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1488
+ 2112
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1072
+ 2784
+
+
+
+ select_delta_time_subpoena.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/select_delta_time_subpoena.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1120
+ 2112
+
+
+
+ Success opekun
+
+ SUCCESS
+
+ N
+ 2016
+ 1728
+
+
+
+ Success info_recruits
+
+ SUCCESS
+
+ N
+ 2016
+ 1664
+
+
+
+ Success spouse
+
+ SUCCESS
+
+ N
+ 2016
+ 1792
+
+
+
+ Success child
+
+ SUCCESS
+
+ N
+ 2016
+ 1856
+
+
+
+ Success desease
+
+ SUCCESS
+
+ N
+ 2016
+ 1920
+
+
+
+ Success medical_autorities
+
+ SUCCESS
+
+ N
+ 2048
+ 1984
+
+
+
+ Success disability
+
+ SUCCESS
+
+ N
+ 2016
+ 2048
+
+
+
+ Success driver_license
+
+ SUCCESS
+
+ N
+ 2016
+ 2112
+
+
+
+ Success property
+
+ SUCCESS
+
+ N
+ 2016
+ 2176
+
+
+
+ Success citizen_foreign
+
+ SUCCESS
+
+ N
+ 2016
+ 2240
+
+
+
+ Success citizenship
+
+ SUCCESS
+
+ N
+ 2016
+ 2304
+
+
+
+ Success deputy
+
+ SUCCESS
+
+ N
+ 2016
+ 2368
+
+
+
+ Success prosecution
+
+ SUCCESS
+
+ N
+ 2016
+ 2432
+
+
+
+ Success punishment
+
+ SUCCESS
+
+ N
+ 2016
+ 2496
+
+
+
+ Success passport
+
+ SUCCESS
+
+ N
+ 2016
+ 2560
+
+
+
+ Success subpoena
+
+ SUCCESS
+
+ N
+ 496
+ 2112
+
+
+
+ Success temporary_measure
+
+ SUCCESS
+
+ N
+ 496
+ 2176
+
+
+
+ incident.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/incident.hpl
Basic
Y
@@ -767,371 +1017,962 @@
N
Y
N
- 784
- 1216
+ 1856
+ 3264
+
+
+
+ citizen_individual_decisions.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_individual_decisions.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 3200
+
+
+
+ citizen_complex_filters.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_complex_filters.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 3136
+
+
+
+ citizen_appealing_violations_fz53.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_appealing_violations_fz53.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 3072
+
+
+
+ citizen_criminal_liability_fz53.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_criminal_liability_fz53.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 3008
+
+
+
+ citizen_information_search.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_information_search.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 2944
+
+
+
+ citizen_criminal_record.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_criminal_record.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 2880
+
+
+
+ citizen_sports_categories.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_sports_categories.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 2816
+
+
+
+ citizen_education_diplomas_received.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_education_diplomas_received.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 2752
+
+
+
+ citizen_work_activity.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_work_activity.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1856
+ 2688
+
+
+
+ Success citizen_work_activity
+
+ SUCCESS
+
+ N
+ 2256
+ 2688
+
+
+
+ Success citizen_education_diplomas_received
+
+ SUCCESS
+
+ N
+ 2256
+ 2752
+
+
+
+ Success citizen_sports_categories
+
+ SUCCESS
+
+ N
+ 2256
+ 2816
+
+
+
+ Success citizen_criminal_record
+
+ SUCCESS
+
+ N
+ 2256
+ 2880
+
+
+
+ Success citizen_information_search
+
+ SUCCESS
+
+ N
+ 2256
+ 2944
+
+
+
+ Success citizen_criminal_liability_fz53
+
+ SUCCESS
+
+ N
+ 2256
+ 3008
+
+
+
+ Success citizen_appealing_violations_fz53
+
+ SUCCESS
+
+ N
+ 2256
+ 3072
+
+
+
+ Success citizen_complex_filters
+
+ SUCCESS
+
+ N
+ 2256
+ 3136
+
+
+
+ Success citizen_individual_decisions
+
+ SUCCESS
+
+ N
+ 2256
+ 3200
+
+
+
+ Success incident
+
+ SUCCESS
+
+ N
+ 2256
+ 3264
-
- info_recruits
- Success
- Y
- Y
- N
-
-
- Start
- SQL.ri
- Y
- Y
- Y
-
-
- SQL.ri
- info_recruits
- Y
- Y
- N
-
-
- SQL.opekun
- opekun
- Y
- Y
- N
-
-
- SQL.spouse
- spouse
- Y
- Y
- N
-
-
- SQL.child
- child
- Y
- Y
- N
-
-
- child
- Success
- Y
- Y
- N
-
-
- spouse
- Success
- Y
- Y
- N
-
-
- opekun
- Success
- Y
- Y
- N
-
-
- Start
- SQL.opekun
- Y
- Y
- Y
-
-
- Start
- SQL.spouse
- Y
- Y
- Y
-
Start
SQL.child
- Y
+ N
Y
Y
Start
SQL.disease
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.medical_authorities
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.disability
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.drivers_licence
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.property
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.citizen_foreign
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.citizenship
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.deputy
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.prosecution
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.punishment
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.passport
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.subpoena
+ N
+ Y
+ Y
+
+
+ Start
+ SQL.tempmeas
+ N
+ Y
+ Y
+
+
+ Start
+ select_delta_time.hpl
Y
Y
Y
+
+ select_delta_time.hpl
+ spouse
+ Y
+ Y
+ N
+
+
+ select_delta_time.hpl
+ opekun
+ Y
+ Y
+ N
+
+
+ select_delta_time.hpl
+ info_recruits
+ Y
+ Y
+ N
+
+
+ select_delta_time.hpl
+ child
+ Y
+ Y
+ N
+
+
+ SQL.child
+ Success 2
+ N
+ Y
+ N
+
SQL.disease
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.disability
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.property
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.citizen_foreign
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.citizenship
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.deputy
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.prosecution
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.punishment
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.passport
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.subpoena
+ Success 2
+ N
+ Y
+ N
+
+
+ SQL.tempmeas
+ Success 2
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
disease
Y
Y
N
- Start
- SQL.medical_authorities
- Y
- Y
- Y
-
-
- SQL.medical_authorities
- medical_authorities
- Y
- Y
- N
-
-
- disease
- Success
- Y
- Y
- N
-
-
- medical_authorities
- Success
- Y
- Y
- N
-
-
- Start
- SQL.disability
- Y
- Y
- Y
-
-
- SQL.disability
- disability
- Y
- Y
- N
-
-
- disability
- Success
- Y
- Y
- N
-
-
- Start
- SQL.drivers_licence
- Y
- Y
- Y
-
-
- SQL.drivers_licence
+ select_delta_time.hpl
drivers_licence
Y
Y
N
- drivers_licence
- Success
+ select_delta_time.hpl
+ medical_authorities
Y
Y
N
- Start
- SQL.property
+ select_delta_time.hpl
+ disability
Y
Y
- Y
+ N
- SQL.property
+ select_delta_time.hpl
property
Y
Y
N
- property
- Success
- Y
- Y
- N
-
-
- Start
- SQL.citizen_foreign
- Y
- Y
- Y
-
-
- SQL.citizen_foreign
+ select_delta_time.hpl
citizen_foreign
Y
Y
N
- citizen_foreign
- Success
- Y
- Y
- N
-
-
- SQL.citizenship
+ select_delta_time.hpl
citizenship
Y
Y
N
- citizenship
- Success
- Y
- Y
- N
-
-
- Start
- SQL.citizenship
- Y
- Y
- Y
-
-
- SQL.deputy
+ select_delta_time.hpl
deputy
Y
Y
N
- deputy
- Success
- Y
- Y
- N
-
-
- Start
- SQL.deputy
- Y
- Y
- Y
-
-
- SQL.prosecution
+ select_delta_time.hpl
prosecution
Y
Y
N
- Start
- SQL.prosecution
- Y
- Y
- Y
-
-
- prosecution
- Success
- Y
- Y
- N
-
-
- SQL.punishment
+ select_delta_time.hpl
punishment
Y
Y
N
- Start
- SQL.punishment
- Y
- Y
- Y
-
-
- punishment
- Success
- Y
- Y
- N
-
-
- Start
- SQL.passport
- Y
- Y
- Y
-
-
- SQL.passport
+ select_delta_time.hpl
passport
Y
Y
N
- passport
- Success
+ Start
+ select_delta_time_subpoena.hpl
Y
Y
- N
+ Y
- SQL.subpoena
+ select_delta_time_subpoena.hpl
subpoena
Y
Y
N
- subpoena
- Success
- Y
- Y
- N
-
-
- Start
- SQL.subpoena
- Y
- Y
- Y
-
-
- SQL.tempmeas
+ select_delta_time_subpoena.hpl
temporary_measure
Y
Y
N
- Start
- SQL.tempmeas
+ info_recruits
+ Success info_recruits
Y
- Y
+ N
+ Y
+
+
+ opekun
+ Success opekun
+ Y
+ N
+ Y
+
+
+ spouse
+ Success spouse
+ Y
+ N
+ Y
+
+
+ child
+ Success child
+ Y
+ N
+ Y
+
+
+ disease
+ Success desease
+ Y
+ N
+ Y
+
+
+ medical_authorities
+ Success medical_autorities
+ Y
+ N
+ Y
+
+
+ disability
+ Success disability
+ Y
+ N
+ Y
+
+
+ drivers_licence
+ Success driver_license
+ Y
+ N
+ Y
+
+
+ property
+ Success property
+ Y
+ N
+ Y
+
+
+ citizen_foreign
+ Success citizen_foreign
+ Y
+ N
+ Y
+
+
+ citizenship
+ Success citizenship
+ Y
+ N
+ Y
+
+
+ deputy
+ Success deputy
+ Y
+ N
+ Y
+
+
+ prosecution
+ Success prosecution
+ Y
+ N
+ Y
+
+
+ punishment
+ Success punishment
+ Y
+ N
+ Y
+
+
+ passport
+ Success passport
+ Y
+ N
+ Y
+
+
+ subpoena
+ Success subpoena
+ Y
+ N
Y
temporary_measure
- Success
+ Success temporary_measure
Y
+ N
+ Y
+
+
+ incident.hpl
+ Success incident
+ Y
+ N
+ Y
+
+
+ citizen_individual_decisions.hpl
+ Success citizen_individual_decisions
+ Y
+ N
+ Y
+
+
+ citizen_complex_filters.hpl
+ Success citizen_complex_filters
+ Y
+ N
+ Y
+
+
+ citizen_appealing_violations_fz53.hpl
+ Success citizen_appealing_violations_fz53
+ Y
+ N
+ Y
+
+
+ citizen_criminal_liability_fz53.hpl
+ Success citizen_criminal_liability_fz53
+ Y
+ N
+ Y
+
+
+ citizen_information_search.hpl
+ Success citizen_information_search
+ Y
+ N
+ Y
+
+
+ citizen_criminal_record.hpl
+ Success citizen_criminal_record
+ Y
+ N
+ Y
+
+
+ citizen_sports_categories.hpl
+ Success citizen_sports_categories
+ Y
+ N
+ Y
+
+
+ citizen_education_diplomas_received.hpl
+ Success citizen_education_diplomas_received
+ Y
+ N
+ Y
+
+
+ citizen_work_activity.hpl
+ Success citizen_work_activity
+ Y
+ N
+ Y
+
+
+ select_delta_time.hpl
+ citizen_work_activity.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_education_diplomas_received.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_sports_categories.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_criminal_record.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_information_search.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_criminal_liability_fz53.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_appealing_violations_fz53.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_complex_filters.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ citizen_individual_decisions.hpl
+ N
+ Y
+ N
+
+
+ select_delta_time.hpl
+ incident.hpl
+ N
Y
N
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 2336
+ 1552
+ доработать дельту, сделать дельту для остальных таблиц
+ 325
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 2336
+ 1600
+ status_change_date добавить колонку в ervu_dashboard.subpoena
+ 367
+
diff --git a/mappings/info_recruits/job_last_update_date.hwf b/mappings/info_recruits/job_last_update_date.hwf
new file mode 100644
index 0000000..487e2fb
--- /dev/null
+++ b/mappings/info_recruits/job_last_update_date.hwf
@@ -0,0 +1,76 @@
+
+
+ job_last_update_date
+ Y
+
+
+
+ -
+ 2025/01/10 15:06:41.340
+ -
+ 2025/01/10 15:06:41.340
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 480
+ 224
+
+
+
+ Pipeline
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ Basic
+
+ Y
+
+ N
+ N
+ N
+ Y
+ N
+ 848
+ 224
+
+
+
+ SQL
+
+ SQL
+
+ N
+ N
+ N
+ N
+ 656
+ 224
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/medical_authorities.hpl b/mappings/info_recruits/medical_authorities.hpl
index 04877f0..cadb659 100644
--- a/mappings/info_recruits/medical_authorities.hpl
+++ b/mappings/info_recruits/medical_authorities.hpl
@@ -1,3 +1,4 @@
+
medical_authorities
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,132 @@
Table input hiv
Table output
- Y
+ N
Table input 2
Table output 2
+ N
+
+
+ Table input hiv
+ Insert / update
+ Y
+
+
+ Table input 2
+ Insert / update 2
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ close_date
+ close_date
+ Y
+
+
+ hiv
+ hiv
+ Y
+
+
+ start_date
+ start_date
+ Y
+
+
+ N
+
+
+ 448
+ 208
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ change_date
+ change_date
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ start_date
+ start_date
+ Y
+
+
+ N
+
+
+ 448
+ 352
+
+
Table input 2
TableInput
@@ -45,29 +161,28 @@
ervu_person_registry
+ N
+ 0
with uchet as
-(select jsonb_array_elements(ri.info->'svedPND'->'svedUchetDisp'->'svedUchet') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+where jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array')
select
r.id recruit_id,
u->>'dataPostUchet' start_date,
u->>'dataSnyatUchet' close_date,
u->>'dataPlan' change_date
from public.recruits r
-join uchet on r.id = uchet.recruit_id;
- 0
-
- N
- N
- N
+join uchet on r.id = uchet.recruit_id
+
+
+ Y
-
208
352
- Y
@@ -82,29 +197,27 @@ join uchet on r.id = uchet.recruit_id;
ervu_person_registry
+ N
+ 0
with uchet as
-(select jsonb_array_elements(ri.info->'svedUchetVICH'->'uchetVICH') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedUchetVICH'->'uchetVICH') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedUchetVICH'->'uchetVICH') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+where jsonb_typeof(ri.info->'svedFL'->'svedUchetVICH'->'uchetVICH') = 'array')
select
r.id recruit_id,
to_date(u->>'dataPostUchet', 'YYYY-MM-DD') start_date,
to_date(u->>'dataSnyat', 'YYYY-MM-DD') close_date,
true HIV
from public.recruits r
-join uchet on r.id = uchet.recruit_id;
- 0
-
- N
- N
- N
+join uchet on r.id = uchet.recruit_id
+
+ Y
-
208
208
- Y
@@ -118,31 +231,27 @@ join uchet on r.id = uchet.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
416
- 208
- Y
+ 80
@@ -156,31 +265,27 @@ join uchet on r.id = uchet.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 352
- Y
+ 432
+ 480
diff --git a/mappings/info_recruits/opekun.hpl b/mappings/info_recruits/opekun.hpl
index 9d8da56..b42f167 100644
--- a/mappings/info_recruits/opekun.hpl
+++ b/mappings/info_recruits/opekun.hpl
@@ -1,3 +1,4 @@
+
opekun
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,63 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ full_name
+ full_name
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ snils
+ snils
+ Y
+
+
+ N
+
+
+ 560
+ 240
+
+
Table input
TableInput
@@ -40,11 +92,14 @@
ervu_person_registry
+ N
+ 0
with person as
-(select jsonb_array_elements(ri.info->'svedOpekun'->'svedSoczPod') ch,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedOpekun'->'svedSoczPod') ch,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedOpekun'->'svedSoczPod') = 'array')
+join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+where jsonb_typeof(ri.info->'svedFL'->'svedOpekun'->'svedSoczPod') = 'array')
select
r.id recruit_id,
concat_ws(' ', ch->'fioOpek'->>'familiya',
@@ -52,21 +107,15 @@ select
ch->'fioOpek'->>'otchestvo') full_name,
make_date(NULLIF(ch->'dataRozhdDok'->>'god', '')::int,
NULLIF(ch->'dataRozhdDok'->>'mesyacz','')::int,
- NULLIF(ch->'dataRozhdDok'->>'den','')::int) birth_date,
+ NULLIF(ch->'dataRozhdDok'->>'den','')::int) birth_date,
ch->>'snils' snils
from public.recruits r
join person on r.id = person.recruit_id
- 0
-
- N
- N
- N
+ Y
-
- 208
- 208
- Y
+ 288
+ 240
@@ -80,31 +129,27 @@ join person on r.id = person.recruit_id
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 208
- Y
+ 496
+ 112
diff --git a/mappings/info_recruits/passport.hpl b/mappings/info_recruits/passport.hpl
index 04f3564..f83694e 100644
--- a/mappings/info_recruits/passport.hpl
+++ b/mappings/info_recruits/passport.hpl
@@ -1,3 +1,4 @@
+
passport
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,172 @@
Table input
Table output
- Y
+ N
Table input 2
Table output 2
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Table input 2
+ Insert / update 2
+ N
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ passport_number
+ passport_number
+
+
+ =
+ passport_series
+ passport_series
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ actual
+ actual
+ Y
+
+
+ issue_date
+ issue_date
+ Y
+
+
+ organization_name
+ organization_name
+ Y
+
+
+ passport_number
+ passport_number
+ Y
+
+
+ passport_series
+ passport_series
+ Y
+
+
+ unit_code
+ unit_code
+ Y
+
+
+ N
+
+
+ 752
+ 384
+
+
+
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ passport_number
+ passport_number
+
+
+ =
+ passport_series
+ passport_series
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ actual
+ actual
+ Y
+
+
+ issue_date
+ issue_date
+ Y
+
+
+ organization_name
+ organization_name
+ Y
+
+
+ passport_number
+ passport_number
+ Y
+
+
+ passport_series
+ passport_series
+ Y
+
+
+ unit_code
+ unit_code
+ Y
+
+
+ N
+
+
+ 752
+ 480
+
+
Table input
TableInput
@@ -45,29 +201,31 @@
ervu_person_registry
- select r.id recruit_id,
-ri.info->'pasportRF'->'aktPasportRF'->>'nomDok' passport_number,
-ri.info->'pasportRF'->'aktPasportRF'->>'serDok' passport_series,
-ri.info->'pasportRF'->'aktPasportRF'->>'vydDok' organization_name,
-ri.info->'pasportRF'->'aktPasportRF'->>'kodVydDok' unit_code,
-to_date(ri.info->'pasportRF'->'aktPasportRF'->>'dataDok', 'YYYY-MM-DD') issue_date,
-case when ri.info->'pasportRF'->'aktPasportRF'->>'kodStatus'='1' then true
-else false
-end actual
-from public.recruits_info ri
-join public.recruits r ON ri.recruit_id = r.id
-where ri.info->'pasportRF'->'aktPasportRF'->>'nomDok' is not null;
- 0
-
N
- N
- N
+ 0
+ SELECT
+ r.id AS recruit_id,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'vydDok' AS organization_name,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'kodVydDok' AS unit_code,
+ TO_DATE(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'dataDok', 'YYYY-MM-DD') AS issue_date,
+ CASE
+ WHEN ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'kodStatus' = '1'
+ THEN TRUE ELSE FALSE
+ END AS actual
+FROM public.recruits_info ri
+JOIN public.recruits r ON ri.recruit_id = r.id
+WHERE ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok' IS NOT NULL
+AND LENGTH(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'serDok') = 4
+AND LENGTH(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok') = 6
+ AND r.system_update_date >= '${UP_D}'
+
+ Y
-
- 208
- 208
- Y
+ 416
+ 384
@@ -82,6 +240,8 @@ where ri.info->'pasportRF'->'aktPasportRF'->>'nomDok' is not null;
ervu_person_registry
+ N
+ 0
select r.id recruit_id,
ri.info->'pasportRF'->'predPasportRF'->>'nomDok' passport_number,
ri.info->'pasportRF'->'predPasportRF'->>'serDok' passport_series,
@@ -94,17 +254,11 @@ end actual
from public.recruits_info ri
join public.recruits r ON ri.recruit_id = r.id
where ri.info->'pasportRF'->'predPasportRF'->>'nomDok' is not null;
- 0
-
- N
N
- N
-
- 208
- 304
- Y
+ 416
+ 480
@@ -118,31 +272,27 @@ where ri.info->'pasportRF'->'predPasportRF'->>'nomDok' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 672
- 208
- Y
+ 736
+ 144
@@ -156,31 +306,27 @@ where ri.info->'pasportRF'->'predPasportRF'->>'nomDok' is not null;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 672
- 304
- Y
+ 736
+ 704
diff --git a/mappings/info_recruits/property.hpl b/mappings/info_recruits/property.hpl
index 338eb6f..ad43c03 100644
--- a/mappings/info_recruits/property.hpl
+++ b/mappings/info_recruits/property.hpl
@@ -1,3 +1,4 @@
+
property
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,36 +16,54 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
- Table input
+ Table input realty
Table output
- Y
+ N
- Table input 2
+ Table input ground_transportation
Table output 2
- Y
+ N
- Table input 2 2
+ Table input water_vehicles
Table output 2 2
+ N
+
+
+ Table input air_vehicles
+ Table output 2 2 2
+ N
+
+
+ Table input realty
+ Insert / update
Y
- Table input 2 2 2
- Table output 2 2 2
+ Table input air_vehicles
+ Insert / update 2
+ Y
+
+
+ Table input ground_transportation
+ Insert / update 4
+ Y
+
+
+ Table input water_vehicles
+ Insert / update 3
Y
- Table input
- TableInput
+ Insert / update
+ InsertUpdate
Y
@@ -54,36 +72,288 @@
none
- ervu_person_registry
- with prop as
-(select jsonb_array_elements(ri.info->'svedON'->'on') u,
- ri.recruit_id
-from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedON'->'on') = 'array')
-select
- r.id recruit_id,
- u->>'naimVidPrav' kind_right,
- u->'adrObSob'->>'adrObSobTekst' address,
- to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
- to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
- 'realty' type_property
-from public.recruits r
-join prop on r.id = prop.recruit_id;
- 0
-
- N
- N
- N
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+
+ =
+ type_property
+ type_property
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ address
+ address
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ kind_right
+ kind_right
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ type_property
+ type_property
+ N
+
+
+ N
-
- 480
+ 720
208
- Y
- Table input 2
+ Insert / update 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+
+ =
+ type_property
+ type_property
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ type_property
+ type_property
+ N
+
+
+ close_date
+ close_date
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ vehicle_category
+ vehicle_category
+ Y
+
+
+ vehicle_type
+ vehicle_type
+ Y
+
+
+ N
+
+
+ 720
+ 432
+
+
+
+ Insert / update 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ start_date
+ start_date
+
+
+ =
+ type_property
+ type_property
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ close_date
+ close_date
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ type_property
+ type_property
+ N
+
+
+ vehicle_category
+ vehicle_category
+ Y
+
+
+ vehicle_type
+ vehicle_type
+ Y
+
+
+ N
+
+
+ 1200
+ 432
+
+
+
+ Insert / update 4
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ type_property
+ type_property
+
+
+ =
+ start_date
+ start_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ type_property
+ type_property
+ N
+
+
+ brand_model
+ brand_model
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ issue_year
+ issue_year
+ Y
+
+
+ reg_plate
+ reg_plate
+ Y
+
+
+ start_date
+ start_date
+ N
+
+
+ vehicle_type
+ vehicle_type
+ Y
+
+
+ vin
+ vin
+ Y
+
+
+ N
+
+
+ 1200
+ 208
+
+
+
+ Table input air_vehicles
TableInput
Y
@@ -94,11 +364,55 @@ join prop on r.id = prop.recruit_id;
ervu_person_registry
+ N
+ 0
with prop as
-(select jsonb_array_elements(ri.info->'svedNazTS'->'nazTS') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedVozTS'->'vozTS') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedNazTS'->'nazTS') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedVozTS'->'vozTS') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
+select
+ r.id recruit_id,
+ u->>'naimVid' vehicle_type,
+ u->>'naznKat' vehicle_category,
+ to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
+ 'air_vehicles' type_property
+from public.recruits r
+join prop on r.id = prop.recruit_id
+
+ Y
+
+
+ 464
+ 432
+
+
+
+ Table input ground_transportation
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with prop as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedNazTS'->'nazTS') u,
+ ri.recruit_id
+from public.recruits_info ri
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedNazTS'->'nazTS') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
u->>'vidTS' vehicle_type,
@@ -110,22 +424,17 @@ select
to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
'ground_transportation' type_property
from public.recruits r
-join prop on r.id = prop.recruit_id;
- 0
-
- N
- N
- N
+join prop on r.id = prop.recruit_id
+
+ Y
-
- 480
- 304
- Y
+ 928
+ 208
- Table input 2 2
+ Table input realty
TableInput
Y
@@ -136,35 +445,35 @@ join prop on r.id = prop.recruit_id;
ervu_person_registry
+ N
+ 0
with prop as
-(select jsonb_array_elements(ri.info->'svedVozTS'->'vozTS') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedON'->'on') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedVozTS'->'vozTS') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedON'->'on') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
- u->>'naimVid' vehicle_type,
- u->>'naznKat' vehicle_category,
+ u->>'naimVidPrav' kind_right,
+ u->'adrObSob'->>'adrObSobTekst' address,
to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
- 'air_vehicles' type_property
+ 'realty' type_property
from public.recruits r
-join prop on r.id = prop.recruit_id;
- 0
-
- N
- N
- N
+join prop on r.id = prop.recruit_id
+
+ Y
-
480
- 384
- Y
+ 208
- Table input 2 2 2
+ Table input water_vehicles
TableInput
Y
@@ -175,31 +484,32 @@ join prop on r.id = prop.recruit_id;
ervu_person_registry
+ N
+ 0
with prop as
-(select jsonb_array_elements(ri.info->'svedVozTS'->'vozTS') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedVodTS'->'vodTS') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedVozTS'->'vozTS') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedVodTS'->'vodTS') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
u->>'naimVid' vehicle_type,
u->>'naznKat' vehicle_category,
to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
- 'air_vehicles' type_property
+ 'water_vehicles' type_property
from public.recruits r
-join prop on r.id = prop.recruit_id;
- 0
-
- N
- N
- N
+join prop on r.id = prop.recruit_id
+
+
+ Y
-
- 480
- 464
- Y
+ 928
+ 432
@@ -213,31 +523,27 @@ join prop on r.id = prop.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
688
- 208
- Y
+ 80
@@ -251,31 +557,27 @@ join prop on r.id = prop.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 688
- 304
- Y
+ 1136
+ 96
@@ -289,31 +591,27 @@ join prop on r.id = prop.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 688
- 384
- Y
+ 1152
+ 576
@@ -327,31 +625,27 @@ join prop on r.id = prop.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 688
- 464
- Y
+ 672
+ 576
diff --git a/mappings/info_recruits/prosecution.hpl b/mappings/info_recruits/prosecution.hpl
index 3d19252..518f679 100644
--- a/mappings/info_recruits/prosecution.hpl
+++ b/mappings/info_recruits/prosecution.hpl
@@ -1,3 +1,4 @@
+
prosecution
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,83 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ create_date
+ create_date
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ authority_name
+ authority_name
+ Y
+
+
+ close_date
+ close_date
+ Y
+
+
+ create_date
+ create_date
+ Y
+
+
+ kind
+ kind
+ Y
+
+
+ law_point
+ law_point
+ Y
+
+
+ termination_basis
+ termination_basis
+ Y
+
+
+ N
+
+
+ 784
+ 304
+
+
Table input
TableInput
@@ -40,32 +112,34 @@
ervu_person_registry
- with ugol as
-(select jsonb_array_elements(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') u,
- ri.recruit_id
-from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') = 'array')
-select
- r.id recruit_id,
- u->>'vidPreslNaim' kind,
- to_date(u->>'dataSved', 'YYYY-MM-DD') create_date,
- to_date(u->>'dataPrekrashh', 'YYYY-MM-DD') close_date,
- u->>'naimOrgan' authority_name,
- u->>'ugolovZakon' law_point,
- u->>'osnovPrekrashh' termination_basis
-from public.recruits r
-join ugol on r.id = ugol.recruit_id;
- 0
-
N
- N
- N
+ 0
+ WITH ugol AS (
+ SELECT
+ jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS u,
+ ri.recruit_id
+ FROM public.recruits_info ri
+ join public.recruits r ON r.id = ri.recruit_id
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array'
+ AND r.system_update_date >= '${UP_D}'
+)
+SELECT
+ r.id AS recruit_id,
+ u->'sledSud'->>'naimSud' AS kind,
+ TO_DATE(u->'sledSud'->>'dataVozbUD', 'YYYY-MM-DD') AS create_date,
+ TO_DATE(u->'sledSud'->'svedSnyat'->>'dataSnyatSud', 'YYYY-MM-DD') AS close_date,
+ u->'sledSud'->>'naimOrgan' AS authority_name,
+ STRING_AGG(TRIM(BOTH ' "' FROM law.f), ', ') AS law_point,
+ u->'sledSud'->'svedSnyat'->>'osnSnyatSud' AS termination_basis
+FROM public.recruits r
+JOIN ugol ON r.id = ugol.recruit_id
+LEFT JOIN LATERAL jsonb_array_elements_text(u->'sledSud'->'statiUK') AS law(f) ON true
+GROUP BY r.id, kind, create_date, close_date, authority_name, termination_basis
+ Y
-
528
304
- Y
@@ -79,31 +153,27 @@ join ugol on r.id = ugol.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 736
- 304
- Y
+ 752
+ 144
diff --git a/mappings/info_recruits/punishment.hpl b/mappings/info_recruits/punishment.hpl
index 2c7831f..351b222 100644
--- a/mappings/info_recruits/punishment.hpl
+++ b/mappings/info_recruits/punishment.hpl
@@ -1,3 +1,4 @@
+
punishment
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,103 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ authority_name
+ authority_name
+ Y
+
+
+ law_point
+ law_point
+ Y
+
+
+ punishment_code
+ punishment_code
+ Y
+
+
+ punishment_type
+ punishment_type
+ Y
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ release_date
+ release_date
+ Y
+
+
+ release_reason
+ release_reason
+ Y
+
+
+ sentence
+ sentence
+ Y
+
+
+ sentence_changed
+ sentence_changed
+ Y
+
+
+ sentence_place
+ sentence_place
+ Y
+
+
+ sentense_date
+ sentense_date
+ Y
+
+
+ start_date
+ start_date
+ Y
+
+
+ N
+
+
+ 784
+ 304
+
+
Table input
TableInput
@@ -40,11 +132,16 @@
ervu_person_registry
+ N
+ 0
with ugol as
-(select jsonb_array_elements(ri.info->'svedSudim'->'sudim'->'osuzhdenie') u,
+(select jsonb_array_elements(ri.info->'svedFL'->'svedSudim'->'sudim'->'osuzhdenie') u,
ri.recruit_id
from public.recruits_info ri
-where jsonb_typeof(ri.info->'svedSudim'->'sudim'->'osuzhdenie') = 'array')
+ join public.recruits r ON r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedSudim'->'sudim'->'osuzhdenie') = 'array'
+AND r.system_update_date >= '${UP_D}'
+)
select
r.id recruit_id,
u->>'naimSuda' authority_name,
@@ -59,18 +156,12 @@ select
u->>'ugolovZakon' law_point,
u->>'osnovOsvobozhd' release_reason
from public.recruits r
-join ugol on r.id = ugol.recruit_id;
- 0
-
- N
- N
- N
+join ugol on r.id = ugol.recruit_id
+ Y
-
528
304
- Y
@@ -84,31 +175,27 @@ join ugol on r.id = ugol.recruit_id;
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 736
- 304
- Y
+ 752
+ 176
diff --git a/mappings/info_recruits/select_delta_time.hpl b/mappings/info_recruits/select_delta_time.hpl
new file mode 100644
index 0000000..e5cf5f4
--- /dev/null
+++ b/mappings/info_recruits/select_delta_time.hpl
@@ -0,0 +1,100 @@
+
+
+
+ select_delta_time
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/10 14:32:39.906
+ -
+ 2025/01/10 14:32:39.906
+
+
+
+
+
+ Table input
+ Insert / update
+ N
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ select max(update_date) AS UPDATE_DATE
+from ervu_dashboard.citizen
+ N
+
+
+ 464
+ 240
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+
+
+
+
+ N
+
+
+ 768
+ 384
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 768
+ 240
+
+
+
+
+
+
diff --git a/mappings/info_recruits/select_delta_time_subpoena.hpl b/mappings/info_recruits/select_delta_time_subpoena.hpl
new file mode 100644
index 0000000..581126d
--- /dev/null
+++ b/mappings/info_recruits/select_delta_time_subpoena.hpl
@@ -0,0 +1,100 @@
+
+
+
+ select_delta_time_subpoena
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/10 14:32:39.906
+ -
+ 2025/01/10 14:32:39.906
+
+
+
+
+
+ Table input
+ Insert / update
+ N
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 768
+ 240
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+
+
+
+
+ N
+
+
+ 768
+ 384
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ select max(status_change_date) AS STATUS_CHANGE_DATE
+from ervu_dashboard.subpoena
+ N
+
+
+ 464
+ 240
+
+
+
+
+
+
diff --git a/mappings/info_recruits/spouse.hpl b/mappings/info_recruits/spouse.hpl
index 9ba14b4..d89b565 100644
--- a/mappings/info_recruits/spouse.hpl
+++ b/mappings/info_recruits/spouse.hpl
@@ -1,3 +1,4 @@
+
spouse
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,14 +23,108 @@
Select values
Table output
- Y
+ N
Table input
Select values
Y
+
+ Select values
+ Insert / update
+ Y
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ full_name
+ full_name
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ death_az_number
+ death_az_number
+ Y
+
+
+ death_date
+ death_date
+ Y
+
+
+ divorce_az_number
+ divorce_az_number
+ Y
+
+
+ divorce_date
+ divorce_date
+ Y
+
+
+ full_name
+ full_name
+ N
+
+
+ information_excluded
+ information_excluded
+ Y
+
+
+ kinship_type
+ kinship_type
+ Y
+
+
+ marriage_az_number
+ marriage_az_number
+ Y
+
+
+ marriage_date
+ marriage_date
+ Y
+
+
+ N
+
+
+ 704
+ 208
+
+
Select values
SelectValues
@@ -82,11 +174,9 @@
-
448
208
- Y
@@ -101,48 +191,56 @@
ervu_person_registry
- with suprug as
-(select jsonb_array_elements(ri.info->'svedSemPolozh'->'suprugi') supr,
- ri.info->'svedSemPolozh'->'svedAZBrak'->>'nomerZapis' marriage_az_number,
- ri.info->'svedSemPolozh'->'svedAZBrak'->>'dataBrakKalend' marriage_date,
- ri.info->'svedSemPolozh'->'svedAZRazvod'->>'nomerZapis' divorce_az_number,
- ri.info->'svedSemPolozh'->'svedAZRazvod'->>'dataRastBrakKalend' divorce_date,
- case when (ri.info->'svedSemPolozh'->>'svedSuprIskl' = '1') then true
- else false
- end information_excluded,
- ri.recruit_id
-from public.recruits_info ri)
-select
- r.id recruit_id,
- supr->>'rodstvSvyazSuprugNaim' kinship_type,
- concat_ws(' ', supr->'svedFLBS'->'fio'->>'familiya',
- supr->'svedFLBS'->'fio'->>'imya',
- supr->'svedFLBS'->'fio'->>'otchestvo') full_name,
- make_date(NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
- NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
- NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'den','')::int) birth_date,
- make_date(NULLIF(supr->'svedSmert'->>'god', '')::int,
- NULLIF(supr->'svedSmert'->>'mesyacz','')::int,
- NULLIF(supr->'svedSmert'->>'den','')::int) death_date,
- supr->'svedSmert'->>'nomerZapis' death_az_number,
- marriage_az_number,
- marriage_date,
- divorce_az_number,
- divorce_date,
- information_excluded
-from public.recruits r
-join suprug on r.id = suprug.recruit_id
- 0
-
N
- N
- N
+ 0
+ WITH suprug AS (
+ SELECT
+ supr.supri AS supr,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'nomerZapis' AS marriage_az_number,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'dataBrakKalend' AS marriage_date,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'nomerZapis' AS divorce_az_number,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'dataRastBrakKalend' AS divorce_date,
+ CASE
+ WHEN (ri.info->'svedFL'->'svedSemPolozh'->>'svedSuprIskl' = '1') THEN true
+ ELSE false
+ END AS information_excluded,
+ ri.recruit_id
+ FROM public.recruits_info ri
+ join public.recruits r ON r.id = ri.recruit_id AND r.system_update_date >= '${UP_D}'
+ JOIN LATERAL (
+ SELECT jsonb_array_elements(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') AS supri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') = 'array'
+ ) AS supr ON true
+)
+SELECT
+ r.id AS recruit_id,
+ supr->>'rodstvSvyazSuprugNaim' AS kinship_type,
+ CONCAT_WS(' ',
+ supr->'svedFLBS'->'fio'->>'familiya',
+ supr->'svedFLBS'->'fio'->>'imya',
+ supr->'svedFLBS'->'fio'->>'otchestvo'
+ ) AS full_name,
+ MAKE_DATE(
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'den','')::int
+ ) AS birth_date,
+ (supr->'svedSmert'->'extend'->>'dataSmert')::date AS death_date,
+ supr->'svedSmert'->>'nomerZapis' AS death_az_number,
+ marriage_az_number,
+ marriage_date,
+ divorce_az_number,
+ divorce_date,
+ information_excluded
+FROM public.recruits r
+JOIN suprug ON r.id = suprug.recruit_id
+
+
+ Y
-
192
208
- Y
@@ -156,31 +254,27 @@ join suprug on r.id = suprug.recruit_id
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 704
- 208
- Y
+ 688
+ 64
diff --git a/mappings/info_recruits/subpoena.hpl b/mappings/info_recruits/subpoena.hpl
index 22cc79f..7071527 100644
--- a/mappings/info_recruits/subpoena.hpl
+++ b/mappings/info_recruits/subpoena.hpl
@@ -1,3 +1,4 @@
+
subpoena
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,168 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ subpoena_id
+ subpoena_id
+
+
+ =
+ status_change_date
+ status_change_date
+
+ ervu_dashboard
+
+
+ subpoena_id
+ subpoena_id
+ N
+
+
+ status_change_date
+ status_change_date
+ N
+
+
+ act_number
+ act_number
+ Y
+
+
+ address
+ address
+ Y
+
+
+ appearance
+ appearance
+ Y
+
+
+ appearance_status
+ appearance_status
+ Y
+
+
+ create_date
+ create_date
+ Y
+
+
+ delivery_date
+ delivery_date
+ Y
+
+
+ delivery_fio
+ delivery_fio
+ Y
+
+
+ delivery_status
+ delivery_status
+ Y
+
+
+ department_id
+ department_id
+ Y
+
+
+ fio_commiss
+ fio_commiss
+ Y
+
+
+ method_delivery
+ method_delivery
+ Y
+
+
+ method_sending
+ method_sending
+ Y
+
+
+ number
+ number
+ Y
+
+
+ recruit_id
+ recruit_id
+ Y
+
+
+ recruitment_name
+ recruitment_name
+ Y
+
+
+ send_date
+ send_date
+ Y
+
+
+ series
+ series
+ Y
+
+
+ sig_info
+ sig_info
+ Y
+
+
+ subpoena_reason
+ subpoena_reason
+ Y
+
+
+ subpoena_status
+ subpoena_status
+ Y
+
+
+ track_number
+ track_number
+ Y
+
+
+ visit_date
+ visit_date
+ Y
+
+
+ N
+
+
+ 1008
+ 400
+
+
Table input
TableInput
@@ -40,8 +197,11 @@
postgres.subpoena
+ N
+ 0
SELECT
s.id AS subpoena_id, -- идентификатор повестки
+ s.status_change_date,
s.recruit_id, -- идентификатор рекрута
s.department_id, -- идентификатор ВК
s.series, -- серия повестки
@@ -98,18 +258,13 @@ LEFT JOIN public.send_dictionary AS sd
LEFT JOIN public.subpoena_status AS ss
ON ss.id = s.status_id
LEFT JOIN public.subpoena_appearance AS sa
- ON sa.subpoena_id = s.id;
- 0
-
- N
- N
- N
+ ON sa.subpoena_id = s.id
+WHERE s.status_change_date >= '${ST_CH_D}';
+ Y
-
- 208
- 208
- Y
+ 688
+ 400
@@ -123,31 +278,27 @@ LEFT JOIN public.subpoena_appearance AS sa
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 208
- Y
+ 1056
+ 688
diff --git a/mappings/info_recruits/temporary_measure.hpl b/mappings/info_recruits/temporary_measure.hpl
index 9dbe087..1d36358 100644
--- a/mappings/info_recruits/temporary_measure.hpl
+++ b/mappings/info_recruits/temporary_measure.hpl
@@ -1,3 +1,4 @@
+
temporary_measure
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -25,9 +23,108 @@
Table input
Table output
+ N
+
+
+ Table input
+ Insert / update
Y
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ subpoena_id
+ subpoena_id
+
+ ervu_dashboard
+
+
+ applied_fact
+ applied_fact
+ Y
+
+
+ cancel_date
+ cancel_date
+ Y
+
+
+ decision_date_cancel
+ decision_date_cancel
+ Y
+
+
+ decision_date_create
+ decision_date_create
+ Y
+
+
+ decision_number_cancel
+ decision_number_cancel
+ Y
+
+
+ decision_number_create
+ decision_number_create
+ Y
+
+
+ recruit_id
+ recruit_id
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ Y
+
+
+ recruitment_name
+ recruitment_name
+ Y
+
+
+ restriction_name
+ restriction_name
+ Y
+
+
+ status_measure
+ status_measure
+ Y
+
+
+ subpoena_id
+ subpoena_id
+ N
+
+
+ type
+ type
+ Y
+
+
+ N
+
+
+ 480
+ 208
+
+
Table input
TableInput
@@ -40,6 +137,8 @@
postgres.subpoena
+ N
+ 0
SELECT
rd.subpoena_id,
rd.vk_id AS recruitment_id,
@@ -81,18 +180,13 @@ LEFT JOIN public.restriction AS rn
LEFT JOIN public.restriction_document_status AS rds
ON rds.code = rd.status
LEFT JOIN public.subpoena AS s
- ON s.id = rd.subpoena_id
- 0
-
- N
- N
- N
+ ON s.id = rd.subpoena_id
+WHERE s.status_change_date >= '${ST_CH_D}'
+ Y
-
208
208
- Y
@@ -106,31 +200,27 @@ LEFT JOIN public.subpoena AS s
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
- 416
- 208
- Y
+ 432
+ 400
diff --git a/mappings/instruction.txt b/mappings/instruction.txt
new file mode 100644
index 0000000..7787b16
--- /dev/null
+++ b/mappings/instruction.txt
@@ -0,0 +1,2 @@
+/jobs_once_a_day/job_info_recruits.kjb - запустить при старте 1 раз
+/info_recruits/job_info_recruits.kjb - подождать час и запускать раз в 10 минут
\ No newline at end of file
diff --git a/mappings/job_general.hwf b/mappings/job_general.hwf
index 3da75e7..c3fe7c7 100644
--- a/mappings/job_general.hwf
+++ b/mappings/job_general.hwf
@@ -26,7 +26,7 @@
0
1
N
- 320
+ 288
240
@@ -36,7 +36,7 @@
SUCCESS
N
- 1056
+ 1296
240
@@ -60,7 +60,7 @@
N
Y
N
- 688
+ 512
240
@@ -74,7 +74,9 @@
N
N
${Internal.Entry.Current.Folder}/job_recruitments_all.hwf
- Nothing
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_recruitments_all
+ Minimal
Y
@@ -84,7 +86,7 @@
N
Y
N
- 848
+ 720
240
@@ -108,8 +110,32 @@
N
Y
N
- 512
- 368
+ 1120
+ 240
+
+
+
+ job_info_recruits.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/job_info_recruits.hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 928
+ 128
@@ -118,35 +144,42 @@
job_pack.pub_recruitment
job_recruitments_all
Y
- Y
- N
-
-
- job_recruitments_all
- Success
- Y
- Y
- N
+ N
+ Y
Start
- job_last_recording_date
+ job_pack.pub_recruitment
Y
Y
Y
job_last_recording_date
- job_pack.pub_recruitment
+ Success
Y
- Y
- N
+ N
+ Y
- Start
- job_pack.pub_recruitment
+ job_info_recruits.hwf
+ job_last_recording_date
N
- Y
+ N
+ Y
+
+
+ job_recruitments_all
+ job_info_recruits.hwf
+ N
+ N
+ Y
+
+
+ job_recruitments_all
+ job_last_recording_date
+ Y
+ N
Y
diff --git a/mappings/job_pack.pub_recruitment.hwf b/mappings/job_pack.pub_recruitment.hwf
index a233bd5..b31f616 100644
--- a/mappings/job_pack.pub_recruitment.hwf
+++ b/mappings/job_pack.pub_recruitment.hwf
@@ -78,7 +78,7 @@
N
N
240
- 224
+ 112
@@ -104,6 +104,13 @@
Y
Y
+
+ Start
+ pack.pub_recruitment
+ N
+ Y
+ Y
+
diff --git a/mappings/job_recruitments_all.hwf b/mappings/job_recruitments_all.hwf
index 3516cf7..e0e59ed 100644
--- a/mappings/job_recruitments_all.hwf
+++ b/mappings/job_recruitments_all.hwf
@@ -5,12 +5,38 @@
+ 0
-
2024/08/21 15:46:54.029
-
2024/08/21 15:46:54.029
-
+
+ MD_ARRAY
+
+
+
+
+ MD_ID
+
+
+
+
+ PRNT_ID
+
+
+
+
+ REC_ID
+
+
+
+
+ SCM
+
+
+
+
Start
@@ -31,7 +57,7 @@
- job_recruitments_region
+ job_recruitments_region.hwf
WORKFLOW
@@ -39,10 +65,10 @@
N
N
N
- ${Internal.Entry.Current.Folder}/\region\job_recruitments_region.hwf
-
-
- Nothing
+ ${PROJECT_HOME}/region/job_recruitments_region.hwf
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_recruitments_region
+ Basic
Y
@@ -51,13 +77,13 @@
N
N
Y
- N
- 560
- 144
+ Y
+ 704
+ 352
- job_recruitments_country
+ job_recruitments_country.hwf
WORKFLOW
@@ -65,10 +91,10 @@
N
N
N
- ${Internal.Entry.Current.Folder}/\country\job_recruitments_country.hwf
-
-
- Nothing
+ ${PROJECT_HOME}/country/job_recruitments_country.hwf
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_recruitments_country
+ Basic
Y
@@ -78,8 +104,132 @@
N
Y
N
- 560
- 240
+ 1120
+ 352
+
+
+
+ job_recruitments_milcom.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/job_recruitments_milcom.hwf
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_recruitments_milcom
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 352
+
+
+
+ job_recruitments_mildis.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_district/job_recruitments_mildis.hwf
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_recruitments_mildis
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 352
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1520
+ 352
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1072
+ 464
+
+
+
+ job_ratings.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/ratings/job_ratings.hwf
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_ratings
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 464
+
+
+
+ add_schema.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}\mil_com\parameters\add_schema.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 528
+ 352
@@ -88,115 +238,151 @@
SUCCESS
N
- 768
- 240
+ 1024
+ 192
- job_recruitments_mil_com
+ percent_for_waiting_reg.hpl
- WORKFLOW
+ PIPELINE
N
N
+ N
+ N
N
N
- ${Internal.Entry.Current.Folder}/\mil_com\job_recruitments_mil_com.hwf
- Nothing
+ ${PROJECT_HOME}/supportive_jobs/percent_for_waiting_reg.hpl
+ Basic
Y
N
+ local
N
N
Y
N
- 560
- 336
-
-
-
- job_recruitment_mil_district
-
- WORKFLOW
-
- N
- N
- N
- N
- Nothing
-
- Y
-
- N
- N
- N
- Y
- N
- 560
- 416
+ 1344
+ 352
-
- job_recruitments_country
- Success
- Y
- Y
- N
-
-
- job_recruitments_region
- Success
- Y
- Y
- N
-
Start
- job_recruitments_mil_com
- N
- Y
- Y
-
-
- job_recruitments_mil_com
- Success
- N
- Y
- N
-
-
- Start
- job_recruitment_mil_district
- N
- Y
- Y
-
-
- job_recruitment_mil_district
- Success
- N
- Y
- N
-
-
- Start
- job_recruitments_region
+ job_recruitments_milcom.hwf
Y
Y
Y
- Start
- job_recruitments_country
+ job_recruitments_region.hwf
+ job_recruitments_mildis.hwf
+ Y
+ N
+ Y
+
+
+ job_ratings.hwf
+ Success 3
+ Y
+ Y
+ N
+
+
+ job_recruitments_region.hwf
+ job_ratings.hwf
+ Y
+ Y
+ N
+
+
+ job_recruitments_mildis.hwf
+ job_recruitments_country.hwf
+ Y
+ N
+ Y
+
+
+ job_recruitments_milcom.hwf
+ add_schema.hpl
+ Y
+ N
+ Y
+
+
+ add_schema.hpl
+ job_recruitments_region.hwf
+ Y
+ N
+ Y
+
+
+ add_schema.hpl
+ Success
+ N
+ Y
+ N
+
+
+ job_recruitments_region.hwf
+ Success
+ N
+ Y
+ N
+
+
+ job_recruitments_mildis.hwf
+ Success
+ N
+ Y
+ N
+
+
+ job_recruitments_milcom.hwf
+ Success
+ N
+ Y
+ N
+
+
+ job_recruitments_country.hwf
+ percent_for_waiting_reg.hpl
+ Y
+ N
+ Y
+
+
+ percent_for_waiting_reg.hpl
+ Success 2
Y
Y
Y
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 416
+ 544
+ на шаге загрузки данных по регионам заполняется таблица ervu_dashboard.array_reg, рейтинги обращаются в эту таблицу за массивами
+ 766
+
diff --git a/mappings/jobs_once_a_day/child_once.hpl b/mappings/jobs_once_a_day/child_once.hpl
new file mode 100644
index 0000000..5399ceb
--- /dev/null
+++ b/mappings/jobs_once_a_day/child_once.hpl
@@ -0,0 +1,177 @@
+
+
+
+ child_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input
+ Insert / update
+ N
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ birth_az_number
+ birth_az_number
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ death_az_number
+ death_az_number
+ Y
+
+
+ death_date
+ death_date
+ Y
+
+
+ full_name
+ full_name
+ Y
+
+
+ kinship_type
+ kinship_type
+ Y
+
+
+ N
+
+
+ 624
+ 256
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with child as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedDeti'->'rebenok') ch,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array')
+select
+ r.id::uuid recruit_id,
+ ch->>'naimRodstvSvyazReb' kinship_type,
+ concat_ws(' ', ch->'svedFLBS'->'fio'->>'familiya',
+ ch->'svedFLBS'->'fio'->>'imya',
+ ch->'svedFLBS'->'fio'->>'otchestvo') full_name,
+ make_date(NULLIF(ch->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(ch->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(ch->'svedFLBS'->'dataRozhdDok'->>'den','')::int) birth_date,
+ make_date(NULLIF(ch->'svedSmert'->'dataSmert'->>'god', '')::int,
+ NULLIF(ch->'svedSmert'->'dataSmert'->>'mesyacz','')::int,
+ NULLIF(ch->'svedSmert'->'dataSmert'->>'den','')::int) death_date,
+ ch->'svedSmert'->>'nomerZapis' death_az_number,
+ ch->'svedAZRozhd'->>'nomerZapis' birth_az_number
+from public.recruits r
+join child on r.id = child.recruit_id
+ N
+
+
+ 400
+ 256
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 608
+ 400
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_appealing_violations_fz53_once.hpl b/mappings/jobs_once_a_day/citizen_appealing_violations_fz53_once.hpl
new file mode 100644
index 0000000..ec500b4
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_appealing_violations_fz53_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_appealing_violations_fz53_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:29:46.684
+ -
+ 2025/02/14 11:29:46.684
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_complex_filters_once.hpl b/mappings/jobs_once_a_day/citizen_complex_filters_once.hpl
new file mode 100644
index 0000000..f781935
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_complex_filters_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_complex_filters_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 12:08:11.450
+ -
+ 2025/02/14 12:08:11.450
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_criminal_liability_fz53_once.hpl b/mappings/jobs_once_a_day/citizen_criminal_liability_fz53_once.hpl
new file mode 100644
index 0000000..765710c
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_criminal_liability_fz53_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_criminal_liability_fz53_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:26:43.276
+ -
+ 2025/02/14 11:26:43.276
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_criminal_record_once.hpl b/mappings/jobs_once_a_day/citizen_criminal_record_once.hpl
new file mode 100644
index 0000000..7284166
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_criminal_record_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_criminal_record_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:23:58.362
+ -
+ 2025/02/14 11:23:58.362
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_education_diplomas_received_once.hpl b/mappings/jobs_once_a_day/citizen_education_diplomas_received_once.hpl
new file mode 100644
index 0000000..7abeb48
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_education_diplomas_received_once.hpl
@@ -0,0 +1,125 @@
+
+
+
+ citizen_education_diplomas_received_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:15:24.095
+ -
+ 2025/02/14 11:15:24.095
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with vuz as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedVUZ'->'vuz') as vuz,
+ ri.recruit_id recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedVUZ'->'vuz') = 'array' limit 2)
+select
+ r.id recruit_id,
+ --vuz->'svedOrg'->>'kodTipOrg',
+ vuz->'svedOrg'->>'naimTipOrg' as type_organization,
+ vuz->'svedOrg'->>'naimOrg' as name_edu_organization,
+ vuz->'svedOrg'->>'inn' as inn,
+ vuz->'svedOrg'->>'kpp' as kpp,
+ coalesce (vuz->'svedOrg'->>'ogrn', vuz->'svedOrg'->>'ogrnip') as ogrn,
+ vuz->'svedOrg'->>'adresOrg' as address_edu_organization,
+
+ vuz->>'naimStatus' as student_status,
+ vuz->>'naimUrovObr' as education_level_org,
+ vuz->>'nomerKursa' as course_training,
+ vuz->>'dataZachisl' as receipt_date,
+ --vuz->>'prPervObuch' ,
+ vuz->>'nomPrikazZachisl' as order_number,
+ vuz->>'dataPrikazZachisl' as order_date,
+ --vuz->'svedObrProg'->>'prVUSpecz',
+ --vuz->'svedObrProg'->>'dataNachObuch',
+ --vuz->'svedObrProg'->>'kodFormaObuch',
+ --vuz->'svedObrProg'->>'naimFormaObuch',
+ --vuz->'svedObrProg'->>'planDataOkonch',
+ --vuz->'svedObrProg'->'svedSpeczMinobr'->>'kodSpecz',
+ --vuz->'svedObrProg'->'svedSpeczMinobr'->>'naimSpecz',
+ --vuz->'svedObrProg'->'svedSpeczMinprosv'->>'kodSpecz',
+ --vuz->'svedObrProg'->'svedSpeczMinprosv'->>'naimSpecz',
+
+ vuz->'svedVosst'->>'dataVosst' as restore_date,
+ vuz->'svedVosst'->>'nomPrikazVosst' as order_number_restore,
+ vuz->'svedVosst'->>'dataPrikazVosst' as order_date_restore
+from public.recruits r
+join vuz on r.id = vuz.recruit_id
+
+ N
+
+
+ 496
+ 320
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+ citizen_education_diplomas_received
+ N
+ Y
+ N
+ Y
+
+
+ 832
+ 320
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_foreign_once.hpl b/mappings/jobs_once_a_day/citizen_foreign_once.hpl
new file mode 100644
index 0000000..b38f9b4
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_foreign_once.hpl
@@ -0,0 +1,171 @@
+
+
+
+ citizen_foreign_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with citizen as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedIG') cit,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array')
+select
+ r.id recruit_id,
+ cit->'oksm'->>'naimOKSM' country_name,
+ cit->>'osnovPriobrIG' citizenship_basis,
+ to_date(cit->>'dataPriobrIG', 'YYYY-MM-DD') citizenship_date
+from public.recruits r
+join citizen on r.id = citizen.recruit_id;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with citizen as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedPP') cit,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array')
+select
+ r.id recruit_id,
+ cit->'oksm'->>'naimOKSM' country_name,
+ cit->>'osnovPriobrPP' residense_right_basis,
+ to_date(cit->>'dataPriobrPP', 'YYYY-MM-DD') residense_right_date
+from public.recruits r
+join citizen on r.id = citizen.recruit_id;
+ N
+
+
+ 208
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 672
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 672
+ 304
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_individual_decisions_once.hpl b/mappings/jobs_once_a_day/citizen_individual_decisions_once.hpl
new file mode 100644
index 0000000..2be7224
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_individual_decisions_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_individual_decisions_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 12:09:58.568
+ -
+ 2025/02/14 12:09:58.568
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_information_search_once.hpl b/mappings/jobs_once_a_day/citizen_information_search_once.hpl
new file mode 100644
index 0000000..0b8f469
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_information_search_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_information_search_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:25:30.220
+ -
+ 2025/02/14 11:25:30.220
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_sports_categories_once.hpl b/mappings/jobs_once_a_day/citizen_sports_categories_once.hpl
new file mode 100644
index 0000000..d9ef1cd
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_sports_categories_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_sports_categories_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:19:01.880
+ -
+ 2025/02/14 11:19:01.880
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizen_work_activity_once.hpl b/mappings/jobs_once_a_day/citizen_work_activity_once.hpl
new file mode 100644
index 0000000..07baeea
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizen_work_activity_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ citizen_work_activity_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 11:02:25.713
+ -
+ 2025/02/14 11:02:25.713
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/citizenship_once.hpl b/mappings/jobs_once_a_day/citizenship_once.hpl
new file mode 100644
index 0000000..77d27d3
--- /dev/null
+++ b/mappings/jobs_once_a_day/citizenship_once.hpl
@@ -0,0 +1,100 @@
+
+
+
+ citizenship_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select r.id recruit_id,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'osnPriob' acquiring_basis,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' acquiring_number,
+to_date(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshPriob', 'YYYY-MM-DD') acquiring_date,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'organReshPriob' acquiring_authority,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' renunciation_basis,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshVyh' renunciation_number,
+to_date(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'dataReshVyh', 'YYYY-MM-DD') renunciation_date,
+ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'organReshVyh' renunciation_authority
+from public.recruits_info ri
+join public.recruits r ON ri.recruit_id = r.id
+where ri.info->'svedFL'->'svedGrazhdanRF'->>'prOtsGrazhdanRF' is null and
+(ri.info->'svedFL'->'svedGrazhdanRF'->'grazhdanRF'->>'nomReshPriob' is not null or ri.info->'svedGrazhdanRF'->'grazhdanRF'->>'osnVyh' is not null)
+ N
+
+
+ 432
+ 224
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 672
+ 224
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/deputy_once.hpl b/mappings/jobs_once_a_day/deputy_once.hpl
new file mode 100644
index 0000000..56b2f6a
--- /dev/null
+++ b/mappings/jobs_once_a_day/deputy_once.hpl
@@ -0,0 +1,215 @@
+
+
+
+ deputy_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+ Table input
+ Insert / update
+ N
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ end_date
+ end_date
+ Y
+
+
+ information
+ information
+ Y
+
+
+ period_office
+ period_office
+ Y
+
+
+ N
+
+
+ 720
+ 160
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select r.id recruit_id,
+ri.info->'svedFL'->'svedDeputat'->'deputat'->>'srokiPolnomochii' period_office,
+to_date(ri.info->'svedFL'->'svedDeputat'->'deputat'->>'dataDosrochPrekr', 'YYYY-MM-DD') end_date,
+ri.info->'svedFL'->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' information
+from public.recruits_info ri
+join public.recruits r ON ri.recruit_id = r.id
+where ri.info->'svedFL'->'svedDeputat'->'deputat'->>'svedIzbrDeputatom' is not null;
+ N
+
+
+ 432
+ 224
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select r.id recruit_id,
+to_date(ri.info->'svedFL'->'svedKandidat'->'kandidat'->>'dataSnyatKandidat', 'YYYY-MM-DD') end_date,
+ri.info->'svedFL'->'svedKandidat'->'kandidat'->>'svedRegKandidata' information,
+false deputy
+from public.recruits_info ri
+join public.recruits r ON ri.recruit_id = r.id
+where ri.info->'svedFL'->'svedKandidat'->>'kandidat' is not null
+ N
+
+
+ 432
+ 320
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 800
+ 224
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 800
+ 320
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/disability_once.hpl b/mappings/jobs_once_a_day/disability_once.hpl
new file mode 100644
index 0000000..38fc004
--- /dev/null
+++ b/mappings/jobs_once_a_day/disability_once.hpl
@@ -0,0 +1,170 @@
+
+
+
+ disability_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select
+ r.id recruit_id,
+ case when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='1' then 'I группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='2' then 'II группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='3' then 'III группа'
+ when ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'='4' then 'ребенок-инвалид'
+ end disability_group,
+ ri.info->'svedFL'->'svedInvalid'->'invalid'->>'ustanOrg' organization_name,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataUstan', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataSnyat', 'YYYY-MM-DD') close_date,
+ to_date(ri.info->'svedFL'->'svedInvalid'->'invalid'->'ustanInvalid'->>'dataPodtverzhdPlan', 'YYYY-MM-DD') confirmation_date,
+ true disability
+from public.recruits r
+join public.recruits_info ri on r.id = ri.recruit_id
+where ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa' is not null;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select
+ r.id recruit_id,
+ ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' organization_name,
+ to_date(ri.info->'svedNedeesp'->'nedeesposob'->>'dataPrisv', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedNedeesp'->'nedeesposob'->>'dataOtmeny', 'YYYY-MM-DD') close_date
+from public.recruits r
+join public.recruits_info ri on r.id = ri.recruit_id
+where ri.info->'svedNedeesp'->'nedeesposob'->>'naimSud' is not null;
+ N
+
+
+ 208
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 304
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/disease_once.hpl b/mappings/jobs_once_a_day/disease_once.hpl
new file mode 100644
index 0000000..bccfc72
--- /dev/null
+++ b/mappings/jobs_once_a_day/disease_once.hpl
@@ -0,0 +1,99 @@
+
+
+
+ disease_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with zdorov as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedSostZdorov'->'svedZdorov'->'sostZdorov') z,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedSostZdorov'->'svedZdorov'->'sostZdorov') = 'array')
+select
+ r.id recruit_id,
+ z->>'kodZabol' code,
+ z->>'naimZabol' name,
+ to_date(z->>'dataDiagn', 'YYYY-MM-DD') reg_date
+from public.recruits r
+join zdorov on r.id = zdorov.recruit_id;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/drivers_licence_once.hpl b/mappings/jobs_once_a_day/drivers_licence_once.hpl
new file mode 100644
index 0000000..5794925
--- /dev/null
+++ b/mappings/jobs_once_a_day/drivers_licence_once.hpl
@@ -0,0 +1,177 @@
+
+
+
+ drivers_licence_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select
+ ri.recruit_id recruit_id,
+ ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' licence_series,
+ --ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'nomVodUd' licence_number,
+ to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') close_date,
+ array_to_string(array(
+ select kat->>'naimKatTS'
+ from jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
+ where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories
+from public.recruits r
+join public.recruits_info ri on r.id = ri.recruit_id
+where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'
+ N
+
+
+ 208
+ 208
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select
+ r.id recruit_id,
+ ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' licence_series,
+ ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' licence_number,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') start_date,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') close_date,
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataIztUTM', 'YYYY-MM-DD') seizure_date, --
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') replacement_date,--
+ to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') return_date,--
+ array_to_string(array(
+ select kat->>'naimKatTS'
+ from jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') as kat
+ where jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') categories,
+ true tractor_driver
+from public.recruits r
+join public.recruits_info ri on r.id = ri.recruit_id
+where ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' is not null
+ N
+
+
+ 208
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 304
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/incident_once.hpl b/mappings/jobs_once_a_day/incident_once.hpl
new file mode 100644
index 0000000..8ec0b85
--- /dev/null
+++ b/mappings/jobs_once_a_day/incident_once.hpl
@@ -0,0 +1,27 @@
+
+
+
+ incident_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/14 12:11:41.789
+ -
+ 2025/02/14 12:11:41.789
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/info_recruits.hpl b/mappings/jobs_once_a_day/info_recruits.hpl
new file mode 100644
index 0000000..6a044a4
--- /dev/null
+++ b/mappings/jobs_once_a_day/info_recruits.hpl
@@ -0,0 +1,759 @@
+
+
+
+ info_recruits
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 394
+ 960
+ 16
+ acquired_citizenship
+address_actual
+address_place_stay
+city_birth
+date_info_actual
+date_loss_info_actual
+died_date
+dispensary_registration_code
+email
+end_date_place_stay
+end_date_residence
+inn
+is_in_prison
+medic
+medical_requirements
+region_birth
+residence
+right_deferment
+snils
+source_info_actual
+start_date_place_stay
+start_date_residence
+took_break
+type_place_stay
+ 163
+
+
+
+
+ Select values 4
+ Table output
+ N
+
+
+ Table input
+ Select values 4
+ Y
+
+
+ Select values 4
+ Insert / update
+ Y
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ age
+ age
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ birth_place
+ birth_place
+ Y
+
+
+ contract_service
+ contract_service
+ Y
+
+
+ deferment_liberation
+ deferment_liberation
+ Y
+
+
+ disability_group
+ disability_group
+ Y
+
+
+ driver_license
+ driver_license
+ Y
+
+
+ education
+ education
+ Y
+
+
+ employment
+ employment
+ Y
+
+
+ first_name
+ first_name
+ Y
+
+
+ full_name
+ full_name
+ Y
+
+
+ gender
+ gender
+ Y
+
+
+ is_registered
+ is_registered
+ Y
+
+
+ is_wanted
+ is_wanted
+ Y
+
+
+ issue_date
+ issue_date
+ Y
+
+
+ last_name
+ last_name
+ Y
+
+
+ marital_status
+ marital_status
+ Y
+
+
+ middle_name
+ middle_name
+ Y
+
+
+ mobilization
+ mobilization
+ Y
+
+
+ number_children
+ number_children
+ Y
+
+
+ number_children_18_old
+ number_children_18_old
+ Y
+
+
+ passport_number
+ passport_number
+ Y
+
+
+ passport_series
+ passport_series
+ Y
+
+
+ phone
+ phone
+ Y
+
+
+ reason_registration
+ reason_registration
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ Y
+
+
+ sports_category
+ sports_category
+ Y
+
+
+ tractor_license
+ tractor_license
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ urgent_service
+ urgent_service
+ Y
+
+
+ N
+
+
+ 688
+ 208
+
+
+
+ Select values 4
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ issue_date
+ issue_date
+ Date
+ -2
+ -2
+ yyyy-MM-dd
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 448
+ 208
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM
+ public.recruits_info ri
+ WHERE
+ jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM
+ extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM
+ children_birth_dates
+ WHERE
+ AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY
+ recruit_id
+),
+registration_reasons AS (
+ SELECT mrr.value AS reason_registration,
+ r.id AS recruit_id
+ FROM public.recruits AS r
+ JOIN public.military_registration_reason AS mrr
+ ON r.registration_reasons::jsonb @> to_jsonb(mrr.code::text)
+),
+
+driver_license AS (
+ SELECT
+ ri.recruit_id,
+ COALESCE(
+ string_agg(sved_vodit->>'kategoriya', ', '),
+ 'Нет информации'
+ ) AS driver_license
+ FROM
+ public.recruits_info ri
+ LEFT JOIN LATERAL
+ jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS sved_vodit
+ ON true
+ GROUP BY ri.recruit_id
+),
+
+sports_category AS ( -- проверка на наличие спортивного разряда или звания
+ SELECT
+ ri.recruit_id,
+ CASE
+ WHEN
+ -- Условия для "true" (спортивная категория)
+ ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedSport'->'sport') = 'array' -- Проверяем, что 'sport' это массив
+ AND jsonb_array_length(ri.info->'svedSport'->'sport') > 0 -- И массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем, что 'sportRazr' существует и срок действия актуален
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ )
+ OR (
+ -- Проверяем, что 'sportZvan' существует и не пусто
+ sport_elem->>'sportZvan' IS NOT NULL
+ AND sport_elem->>'sportZvan' <> ''
+ )
+ OR (
+ -- Проверяем, что 'sportRazr' существует и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') <= CURRENT_DATE
+ )
+ )
+ AND ri.info->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN true
+
+ WHEN
+ -- Условия для "false" (не является спортивной категорией)
+ (
+ ri.info->'svedSport'->'sport' IS NULL -- Если 'sport' = NULL
+ OR (
+ ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedSport'->'sport') = 'array' -- Поле 'sport' должно быть массивом
+ AND jsonb_array_length(ri.info->'svedSport'->'sport') > 0 -- И массив не пустой
+ )
+ )
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем 'sportZvan' и если оно не существует или пусто
+ sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = ''
+ )
+ OR (
+ -- Проверяем 'sportRazr' и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ -- И 'sportZvan' также не должно существовать или быть пустым
+ AND (sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = '')
+ )
+ )
+ AND ri.info->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN false
+
+ WHEN
+ -- Условия для "null" (нет информации)
+ ri.info->'svedSport'->>'prOtsSvedSport' = '1'
+ OR ri.info->'svedSport' IS NULL -- Проверяем, что 'svedSport' отсутствует
+ THEN null
+
+ ELSE null -- Неопределенное значение для всех других случаев
+ END AS sports_category
+ FROM public.recruits_info ri
+),
+
+disability_group AS (
+ SELECT
+ ri.recruit_id,
+ CASE
+ WHEN ri.info->'svedInvalid'->'invalid'->>'gruppa' IS NOT NULL
+ AND ri.info->'svedInvalid'->>'prOtsSvedInvalid' IS NULL
+ AND (ri.info->'sportRazr'->>'dataSnyat' IS NULL
+ OR TO_DATE(ri.info->'sportRazr'->>'dataSnyat', 'YYYY-MM-DD') <= CURRENT_DATE)
+ THEN ri.info->'svedInvalid'->'invalid'->>'gruppa'
+ WHEN ri.info->'svedInvalid'->>'prOtsSvedInvalid' = '1' THEN 'Нет информации об инвалидности'
+ ELSE 'Нет информации об инвалидности'
+ END AS disability_group
+ FROM public.recruits_info ri
+),
+
+tractor_license AS (
+ SELECT
+ ri.recruit_id,
+ CASE
+ WHEN ri.info->'svedUdostrTraktMash'->>'udostrTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataOkonchUTM', 'YYYY-MM-DD') > CURRENT_DATE
+ THEN true
+ WHEN ri.info->'svedUdostrTraktMash'->>'udostrTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedUdostrTraktMash'->'udostrTraktMash'->>'dataOkonchUTM', 'YYYY-MM-DD') <= CURRENT_DATE
+ THEN false
+ WHEN ri.info->'svedUdostrTraktMash'->>'prOtsSvedUTM' = '1' THEN null
+ ELSE null
+ END AS tractor_license
+ FROM public.recruits_info ri
+),
+
+is_wanted AS (
+ SELECT
+ ri.recruit_id,
+ CASE
+ WHEN
+ jsonb_typeof(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NULL -- дата прекращения отсутствует
+ )
+ AND ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN true
+
+ WHEN
+ jsonb_typeof(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NOT NULL -- дата прекращения не отсутствует
+ )
+ AND ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN false
+
+ WHEN
+ ri.info->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' = '1'
+ THEN NULL
+
+ ELSE NULL
+ END AS criminal_prosecution
+ FROM public.recruits_info ri
+),
+
+employment AS (
+ SELECT
+ ri.recruit_id,
+ COALESCE(
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN 'Обучается'
+ ELSE NULL
+ END ||
+ CASE
+ WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ ) THEN
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN ', Работает'
+ ELSE 'Работает'
+ END
+ ELSE NULL
+ END,
+ CASE
+ WHEN
+ info->'svedVUZ'->>'prOtsSvedVUZ' = '1' -- Отсутствие сведений о вузе
+ AND info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' -- Отсутствие сведений о колледже
+ AND info->'svedTrud'->>'prOtsSvedTrud' = '1' -- Отсутствие сведений о работе
+ THEN 'Нет информации'
+ ELSE 'Нет информации'
+ END
+ ) AS employment_status
+ FROM public.recruits_info ri
+)
+
+SELECT
+ r.full_name,
+ r.last_name,
+ r.first_name,
+ r.middle_name,
+ r.gender,
+ r.birth_date,
+ EXTRACT(YEAR FROM AGE(r.birth_date)) AS age,
+ r.birth_place,
+ r.phone,
+ r.conscription AS deferment_liberation,
+
+ CASE
+ WHEN (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 70 AND r.gender = 'MALE' AND
+ (r.conscription IS NULL OR r.conscription = false) AND
+ COALESCE(cc.children_under_16, 0) < 5
+ AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ OR
+ (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 45 AND r.gender = 'FEMALE' AND
+ (r.conscription IS NULL OR r.conscription = false) AND
+ COALESCE(cc.children_under_16, 0) < 5
+ AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ THEN true
+ ELSE false
+ END AS mobilization,
+
+ CASE
+ WHEN (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE' -- мужчины от 18 до 30 лет
+ AND (conscription IS NULL OR conscription = false)
+ AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ THEN true
+ ELSE false
+ END AS urgent_service,
+
+ CASE WHEN (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' -- признак отсутствия данных о судимости
+ AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true')
+ THEN true
+ ELSE false
+ END AS contract_service,
+
+ CASE
+ WHEN r.vu_current_info ->> 'isMilitaryRegistered' = 'true' THEN 'Состоит на воинском учете'
+ WHEN r.vu_current_info ->> 'isMilitaryRegistered' = 'false' THEN 'Не состоит на воинском учете'
+ ELSE 'Нет информации'
+ END AS is_registered,
+
+CASE
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )) THEN 'Высшее'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' = '10')
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' = '10'
+ )) THEN 'Среднее профессиональное'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )) THEN 'Общее'
+ WHEN ((ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1')) THEN 'Нет данных'
+ ELSE 'Не указано' -- Добавлено условие по умолчанию
+ END AS education,
+
+ ri.info->'svedSemPolozh'->>'semPolozhNaim' AS marital_status,
+
+ (SELECT COUNT(*)
+ FROM jsonb_array_elements(ri.info->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+ AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) < make_interval(years => 18)
+ ) AS number_children,
+
+ (SELECT COUNT(*)
+ FROM jsonb_array_elements(ri.info->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+ AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) >= make_interval(years => 18)
+ ) AS number_children_18_old,
+
+ ri.info->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
+ ri.info->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
+ ri.info->'svedVoin'->'voin'->>'dataReg' AS issue_date,
+ ri.recruit_id, -- ID рекрута
+ r.target_recruitment_id AS recruitment_id,
+ rr.reason_registration, -- причина постановки на учет char
+ sc.sports_category, -- наличие спортивной категории bool
+ dl.driver_license, -- категории водительских удостоверений char
+ dg.disability_group, -- группа инвалидности char
+ tl.tractor_license, -- наличие удостоверения тракториста bool
+ iw.criminal_prosecution AS is_wanted, -- наличие уголовного преследования bool
+ em.employment_status AS employment, -- занятость char
+ r.system_update_date AS update_date
+FROM
+ public.recruits_info ri
+JOIN
+ public.recruits r ON ri.recruit_id = r.id
+LEFT JOIN
+ children_count cc ON r.id = cc.recruit_id -- Присоединение для получения количества детей
+JOIN
+ registration_reasons rr ON rr.recruit_id = ri.recruit_id
+JOIN
+ sports_category sc ON sc.recruit_id = ri.recruit_id
+JOIN
+ driver_license dl ON dl.recruit_id = ri.recruit_id
+JOIN
+ disability_group dg ON dg.recruit_id = ri.recruit_id
+JOIN
+ tractor_license tl ON tl.recruit_id = ri.recruit_id
+JOIN
+ is_wanted iw ON iw.recruit_id = ri.recruit_id
+JOIN
+ employment em ON em.recruit_id = ri.recruit_id
+WHERE
+ r.target_recruitment_id IS NOT NULL
+ AND r.current_recruitment_id IS NOT NULL;
+ Y
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 656
+ 64
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/info_recruits_once.hpl b/mappings/jobs_once_a_day/info_recruits_once.hpl
new file mode 100644
index 0000000..0954caf
--- /dev/null
+++ b/mappings/jobs_once_a_day/info_recruits_once.hpl
@@ -0,0 +1,780 @@
+
+
+
+ info_recruits_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 394
+ 960
+ 16
+ acquired_citizenship
+address_actual
+address_place_stay
+city_birth
+date_info_actual
+date_loss_info_actual
+died_date
+dispensary_registration_code
+email
+end_date_place_stay
+end_date_residence
+inn
+is_in_prison
+medic
+medical_requirements
+region_birth
+residence
+right_deferment
+snils
+source_info_actual
+start_date_place_stay
+start_date_residence
+took_break
+type_place_stay
+ 163
+
+
+
+
+ Select values 4
+ Table output
+ Y
+
+
+ Table input (info_recruits_once)
+ Select values 4
+ Y
+
+
+ Select values 4
+ Insert / update
+ N
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ age
+ age
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ birth_place
+ birth_place
+ Y
+
+
+ contract_service
+ contract_service
+ Y
+
+
+ deferment_liberation
+ deferment_liberation
+ Y
+
+
+ disability_group
+ disability_group
+ Y
+
+
+ driver_license
+ driver_license
+ Y
+
+
+ education
+ education
+ Y
+
+
+ employment
+ employment
+ Y
+
+
+ first_name
+ first_name
+ Y
+
+
+ full_name
+ full_name
+ Y
+
+
+ gender
+ gender
+ Y
+
+
+ is_registered
+ is_registered
+ Y
+
+
+ is_wanted
+ is_wanted
+ Y
+
+
+ issue_date
+ issue_date
+ Y
+
+
+ last_name
+ last_name
+ Y
+
+
+ marital_status
+ marital_status
+ Y
+
+
+ middle_name
+ middle_name
+ Y
+
+
+ mobilization
+ mobilization
+ Y
+
+
+ number_children
+ number_children
+ Y
+
+
+ number_children_18_old
+ number_children_18_old
+ Y
+
+
+ passport_number
+ passport_number
+ Y
+
+
+ passport_series
+ passport_series
+ Y
+
+
+ phone
+ phone
+ Y
+
+
+ reason_registration
+ reason_registration
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ Y
+
+
+ sports_category
+ sports_category
+ Y
+
+
+ tractor_license
+ tractor_license
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ urgent_service
+ urgent_service
+ Y
+
+
+ N
+
+
+ 688
+ 208
+
+
+
+ Select values 4
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ issue_date
+ issue_date
+ Date
+ -2
+ -2
+ yyyy-MM-dd
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 448
+ 208
+
+
+
+ Table input (info_recruits_once)
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+base_recruit_data AS (
+ SELECT
+ distinct
+ r.full_name,
+ r.last_name,
+ r.first_name,
+ r.middle_name,
+ r.gender,
+ ri.info->'svedFL'->'svedBS'->'snils'->'aktSNILS'->>'snils' AS snils,
+ ri.info->'svedFL'->'svedBS'->'inn'->'aktINN'->>'inn' AS inn,
+ r.birth_date,
+ EXTRACT(YEAR FROM AGE(r.birth_date)) AS age,
+ r.birth_place,
+ r.phone,
+ r.email,
+ ri.recruit_id,
+ ri.info,
+ r.vu_current_info,
+ r.military_registration_date AS date_registration,
+ r.vu_unset_date AS date_deregistration,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozhNaim' AS marital_status,
+ ri.info->'svedFL'->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
+ ri.info->'svedFL'->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
+ ri.info->'svedFL'->'svedVoin'->'voin'->>'dataReg' AS issue_date,
+ r.system_update_date AS update_date,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ COALESCE(r.current_recruitment_id, r.target_recruitment_id) AS recruitment_id,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false then ddd.hidden
+ ELSE true END AS deferment_liberation,-- когда hidden ис фолс отсрочка есть, когда тру или нулл - нет
+ CASE
+ WHEN
+ -- Условия для "true" (спортивная категория)
+ ri.info->'svedFL'->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedFL'->'svedSport'->'sport') = 'array' -- Проверяем, что 'sport' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedSport'->'sport') > 0 -- И массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем, что 'sportRazr' существует и срок действия актуален
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ )
+ OR (
+ -- Проверяем, что 'sportZvan' существует и не пусто
+ sport_elem->>'sportZvan' IS NOT NULL
+ AND sport_elem->>'sportZvan' <> ''
+ )
+ OR (
+ -- Проверяем, что 'sportRazr' существует и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') <= CURRENT_DATE
+ )
+ )
+ AND ri.info->'svedFL'->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN true
+
+ WHEN
+ -- Условия для "false" (не является спортивной категорией)
+ (
+ ri.info->'svedFL'->'svedSport'->'sport' IS NULL -- Если 'sport' = NULL
+ OR (
+ ri.info->'svedSport' ? 'sport' -- Проверяем, что ключ 'sport' существует
+ AND jsonb_typeof(ri.info->'svedFL'->'svedSport'->'sport') = 'array' -- Поле 'sport' должно быть массивом
+ AND jsonb_array_length(ri.info->'svedFL'->'svedSport'->'sport') > 0 -- И массив не пустой
+ )
+ )
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedSport'->'sport') AS sport_elem
+ WHERE
+ (
+ -- Проверяем 'sportZvan' и если оно не существует или пусто
+ sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = ''
+ )
+ OR (
+ -- Проверяем 'sportRazr' и срок действия истек
+ jsonb_typeof(sport_elem->'sportRazr') = 'object'
+ AND sport_elem->'sportRazr'->>'dataDeistvSportRazr' IS NOT NULL
+ AND TO_DATE(sport_elem->'sportRazr'->>'dataDeistvSportRazr', 'YYYY-MM-DD') > CURRENT_DATE
+ -- И 'sportZvan' также не должно существовать или быть пустым
+ AND (sport_elem->>'sportZvan' IS NULL OR sport_elem->>'sportZvan' = '')
+ )
+ )
+ AND ri.info->'svedFL'->'svedSport'->>'prOtsSvedSport' IS NULL
+ THEN false
+
+ WHEN
+ -- Условия для "null" (нет информации)
+ ri.info->'svedSport'->>'prOtsSvedSport' = '1'
+ OR ri.info->'svedSport' IS NULL -- Проверяем, что 'svedSport' отсутствует
+ THEN null
+
+ ELSE null -- Неопределенное значение для всех других случаев
+ END AS sports_category,
+
+ mrr.value AS reason_registration,
+
+ CASE
+ WHEN ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa' IS NOT NULL
+ AND ri.info->'svedFL'->'svedInvalid'->>'prOtsSvedInvalid' IS NULL
+ AND (ri.info->'svedFL'->'sportRazr'->>'dataSnyat' IS NULL
+ OR TO_DATE(ri.info->'svedFL'->'sportRazr'->>'dataSnyat', 'YYYY-MM-DD') <= CURRENT_DATE)
+ THEN ri.info->'svedFL'->'svedInvalid'->'invalid'->>'gruppa'
+ WHEN ri.info->'svedFL'->'svedInvalid'->>'prOtsSvedInvalid' = '1' THEN 'Нет информации об инвалидности'
+ ELSE 'Нет информации об инвалидности'
+ END AS disability_group,
+
+ CASE
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'udostTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') > CURRENT_DATE
+ THEN true
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'udostTraktMash' IS NOT NULL
+ AND TO_DATE(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') <= CURRENT_DATE
+ THEN false
+ WHEN ri.info->'svedFL'->'svedUdostTraktMash'->>'prOtsSvedUTM' = '1' THEN null
+ ELSE null
+ END AS tractor_license,
+
+ CASE
+ WHEN
+ jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NULL -- дата прекращения отсутствует
+ )
+ AND ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN true
+
+ WHEN
+ jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array' -- проверяем, что 'faktyUgolovPresl' это массив
+ AND jsonb_array_length(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') > 0 -- массив не пустой
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS criminal_prosecution
+ WHERE
+ criminal_prosecution->>'dataPrekrashh' IS NOT NULL -- дата прекращения не отсутствует
+ )
+ AND ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' IS NULL
+ THEN false
+
+ WHEN
+ ri.info->'svedFL'->'svedUgolovPresl'->>'prOtsSvedUgolovPresl' = '1'
+ THEN NULL
+
+ ELSE NULL
+ END AS criminal_prosecution,
+
+ COALESCE(
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN 'Обучается'
+ ELSE NULL
+ END ||
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ ) THEN
+ CASE
+ WHEN (
+ jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) OR (
+ jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array'
+ AND EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN ('1', '2', '4')
+ )
+ ) THEN ', Работает'
+ ELSE 'Работает'
+ END
+ ELSE NULL
+ END,
+ CASE
+ WHEN
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' -- Отсутствие сведений о вузе
+ AND info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' -- Отсутствие сведений о колледже
+ AND info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' -- Отсутствие сведений о работе
+ THEN 'Нет информации'
+ ELSE 'Нет информации'
+ END
+ ) AS employment_status,
+
+ CASE
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )) THEN 'Высшее'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' = '10')
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' = '10'
+ )) THEN 'Среднее профессиональное'
+ WHEN (EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9'))
+ OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )) THEN 'Общее'
+ WHEN ((ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1')) THEN 'Нет данных'
+ ELSE 'Не указано' -- Добавлено условие по умолчанию
+ END AS education,
+ (
+ SELECT COUNT(*)
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+ AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) < make_interval(years => 18)
+ ) AS number_children
+ FROM public.recruits AS r
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id and ddd.hidden is false
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.military_registration_reason AS mrr ON r.registration_reasons::jsonb @> to_jsonb(mrr.code::text)
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+),
+adresses as (
+SELECT
+ r.id as recruit_id,
+ MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'reg' END) AS actualAddress,
+ MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'regDateStart' END) AS actualAddress_regDateStart,
+ MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'regDateEnd' END) AS actualAddress_regDateEnd,
+ MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'reg' END) AS residenceAddress,
+ MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'regDateStart' END) AS residenceAddress_regDateStart,
+ MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'regDateEnd' END) AS residenceAddress_regDateEnd,
+ MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) AS residenceAddress_kodTipReg
+FROM
+ public.recruits AS r
+LEFT JOIN
+ LATERAL jsonb_array_elements(r.addresses) AS addr ON true
+GROUP BY
+ r.id
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM base_recruit_data ri
+ WHERE
+ jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM
+ children_birth_dates
+ WHERE
+ AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY
+ recruit_id
+),
+
+driver_license AS (
+ SELECT
+ ri.recruit_id,
+ COALESCE(
+ string_agg(sved_vodit->>'naimKatTS', ', '),
+ 'Нет информации'
+ ) AS driver_license
+ FROM base_recruit_data ri
+ LEFT JOIN LATERAL
+ jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS sved_vodit
+ ON true
+ GROUP BY ri.recruit_id
+)
+SELECT
+ r.full_name,
+ r.last_name,
+ r.first_name,
+ r.middle_name,
+ r.gender,
+ r.snils,
+ r.inn,
+ r.birth_date,
+ r.age,
+ r.birth_place,
+ r.phone,
+ r.email,
+ r.deferment_liberation,
+ CASE
+ WHEN (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 30 AND 50 AND r.gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 30 AND 45 AND r.gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ THEN true
+ ELSE false
+ END AS mobilization,
+
+ CASE
+ WHEN EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 30
+ AND r.gender = 'MALE'
+ AND r.deferment_liberation IS true -- нет отсрочки и нет освобождения от службы
+ THEN true
+ ELSE false
+ END AS urgent_service,
+
+ CASE
+ WHEN EXTRACT(YEAR FROM AGE(NOW(), r.birth_date)) BETWEEN 18 AND 50
+ AND r.gender = 'MALE'
+ AND (r.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd IS false)
+ AND r.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ THEN true
+ ELSE false
+ END AS contract_service,
+
+ CASE
+ WHEN r.vu_current_info ->> 'isMilitaryRegistered' = 'true' THEN 'Состоит на воинском учете'
+ WHEN r.vu_current_info ->> 'isMilitaryRegistered' = 'false' THEN 'Не состоит на воинском учете'
+ ELSE 'Нет информации'
+ END AS is_registered,
+
+ r.education,
+ r.marital_status,
+ r.number_children,
+
+ (SELECT COUNT(*)
+ FROM jsonb_array_elements(r.info->'svedFL'->'svedDeti'->'rebenok') AS childs
+ WHERE jsonb_typeof(r.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+ AND age(make_date(NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(childs->'svedFLBS'->'dataRozhdDok'->>'den','')::int)) >= make_interval(years => 18)
+ ) AS number_children_18_old,
+ r.passport_number,
+ r.passport_series,
+ r.issue_date,
+ r.recruit_id, -- ID рекрута
+ r.recruitment_id,
+ r.reason_registration, -- причина постановки на учет char
+ r.date_registration, -- дата постановки на учет date
+ r.date_deregistration, -- дата снятия с учета date
+ r.sports_category, -- наличие спортивной категории bool
+ dl.driver_license, -- категории водительских удостоверений char
+ r.disability_group, -- группа инвалидности char
+ r.tractor_license, -- наличие удостоверения тракториста bool
+ r.criminal_prosecution AS is_wanted, -- наличие уголовного преследования bool
+ r.employment_status AS employment, -- занятость char
+ r.update_date,
+ adr.actualAddress as residence,
+ adr.actualAddress_regDateStart as start_date_residence,
+ adr.actualAddress_regDateEnd as end_date_residence,
+ adr.residenceAddress as address_place_stay,
+ adr.residenceAddress_regDateStart as start_date_place_stay,
+ adr.residenceAddress_regDateEnd as end_date_place_stay,
+ case when adr.residenceAddress_kodTipReg='1' then 'В жилом помещении, не являющимся местом жительства физического лица'
+ when adr.residenceAddress_kodTipReg='2' then 'В учреждении уголовно-исполнительной системы'
+ else null end as type_place_stay
+FROM base_recruit_data r
+LEFT JOIN children_count cc ON r.recruit_id = cc.recruit_id -- Присоединение для получения количества детей
+JOIN driver_license dl ON dl.recruit_id = r.recruit_id
+join adresses adr ON r.recruit_id=adr.recruit_id
+ Y
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 656
+ 64
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/job_info_recruits_once.hwf b/mappings/jobs_once_a_day/job_info_recruits_once.hwf
new file mode 100644
index 0000000..e50e46f
--- /dev/null
+++ b/mappings/jobs_once_a_day/job_info_recruits_once.hwf
@@ -0,0 +1,1985 @@
+
+
+ job_info_recruits_once
+ Y
+
+
+
+ -
+ 2025/01/10 15:49:30.690
+ -
+ 2025/01/10 15:49:30.690
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 176
+ 944
+
+
+
+ info_recruits_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/info_recruits_once.hpl
+ txt
+ ${PROJECT_HOME}/log_jobs/log_job_info_recruits_once
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 192
+
+
+
+ SQL.citizen
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen
+ N
+ N
+ N
+ 640
+ 192
+
+
+
+ Success opekun_once
+
+ SUCCESS
+
+ N
+ 1408
+ 96
+
+
+
+ SQL.spouse
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_spouse
+ N
+ N
+ N
+ 640
+ 272
+
+
+
+ SQL.child
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_child
+ N
+ N
+ N
+ 640
+ 352
+
+
+
+ spouse_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/spouse_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 272
+
+
+
+ child_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/child_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 352
+
+
+
+ SQL.disease
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.disease
+ N
+ N
+ N
+ 640
+ 432
+
+
+
+ disease_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/disease_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 432
+
+
+
+ SQL.medical_authorities
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.medical_authorities
+ N
+ N
+ N
+ 640
+ 496
+
+
+
+ medical_authorities_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/medical_authorities_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 496
+
+
+
+ SQL.disability
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.disability
+ N
+ N
+ N
+ 640
+ 560
+
+
+
+ disability_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/disability_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 560
+
+
+
+ SQL.drivers_licence
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.drivers_licence
+ N
+ N
+ N
+ 640
+ 624
+
+
+
+ drivers_licence_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/drivers_licence_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 624
+
+
+
+ SQL.property
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.property
+ N
+ N
+ N
+ 640
+ 688
+
+
+
+ property_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/property_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 688
+
+
+
+ SQL.citizen_foreign
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizenship_foreign
+ N
+ N
+ N
+ 640
+ 752
+
+
+
+ citizen_foreign_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_foreign_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 752
+
+
+
+ SQL.citizenship
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizenship
+ N
+ N
+ N
+ 640
+ 816
+
+
+
+ citizenship_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizenship_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 816
+
+
+
+ SQL.deputy
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.deputy
+ N
+ N
+ N
+ 640
+ 880
+
+
+
+ deputy_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/deputy_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 880
+
+
+
+ SQL.prosecution
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.prosecution
+ N
+ N
+ N
+ 640
+ 944
+
+
+
+ prosecution_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/prosecution_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 944
+
+
+
+ SQL.punishment
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.punishment
+ N
+ N
+ N
+ 640
+ 1008
+
+
+
+ punishment_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/punishment_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1008
+
+
+
+ SQL.passport
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.passport
+ N
+ N
+ N
+ 640
+ 1072
+
+
+
+ passport_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/passport_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1072
+
+
+
+ SQL.subpoena
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.subpoena
+ N
+ N
+ N
+ 640
+ 1136
+
+
+
+ subpoena_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/subpoena_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1136
+
+
+
+ SQL.tempmeas
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.temporary_measures
+ N
+ N
+ N
+ 640
+ 1200
+
+
+
+ temporary_measure_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/temporary_measure_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1200
+
+
+
+ opekun_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/opekun_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 96
+
+
+
+ SQL.opekun
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_guardianship
+ N
+ N
+ N
+ 640
+ 96
+
+
+
+ Success info_recruits_once
+
+ SUCCESS
+
+ N
+ 1408
+ 192
+
+
+
+ Success spouse_once
+
+ SUCCESS
+
+ N
+ 1408
+ 272
+
+
+
+ Success child_once
+
+ SUCCESS
+
+ N
+ 1408
+ 352
+
+
+
+ Success desease_once
+
+ SUCCESS
+
+ N
+ 1408
+ 432
+
+
+
+ Success medical_autorities_once
+
+ SUCCESS
+
+ N
+ 1408
+ 496
+
+
+
+ Success disability_once
+
+ SUCCESS
+
+ N
+ 1408
+ 560
+
+
+
+ Success driver_license_once
+
+ SUCCESS
+
+ N
+ 1408
+ 624
+
+
+
+ Success property_once
+
+ SUCCESS
+
+ N
+ 1408
+ 688
+
+
+
+ Success citizen_foreign_once
+
+ SUCCESS
+
+ N
+ 1408
+ 752
+
+
+
+ Success citizenship_once
+
+ SUCCESS
+
+ N
+ 1408
+ 816
+
+
+
+ Success deputy_once
+
+ SUCCESS
+
+ N
+ 1408
+ 880
+
+
+
+ Success prosecution_once
+
+ SUCCESS
+
+ N
+ 1408
+ 944
+
+
+
+ Success punishment_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1008
+
+
+
+ Success passport_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1072
+
+
+
+ Success subpoena_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1136
+
+
+
+ Success temporary_measure_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1200
+
+
+
+ incident_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/incident_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 2032
+
+
+
+ citizen_individual_decisions_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_individual_decisions_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1968
+
+
+
+ citizen_complex_filters_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_complex_filters_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1904
+
+
+
+ citizen_appealing_violations_fz53_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_appealing_violations_fz53_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1840
+
+
+
+ citizen_criminal_liability_fz53_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_criminal_liability_fz53_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1776
+
+
+
+ citizen_information_search_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_information_search_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1712
+
+
+
+ citizen_criminal_record_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_criminal_record_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1648
+
+
+
+ citizen_sports_categories_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_sports_categories_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1584
+
+
+
+ citizen_education_diplomas_received_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_education_diplomas_received_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1520
+
+
+
+ citizen_work_activity_once.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ Y
+ N
+ N
+ ${PROJECT_HOME}/jobs_once_a_day/citizen_work_activity_once.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1008
+ 1456
+
+
+
+ Success citizen_work_activity_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1456
+
+
+
+ Success citizen_education_diplomas_received_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1520
+
+
+
+ Success citizen_sports_categories_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1584
+
+
+
+ Success citizen_criminal_record_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1648
+
+
+
+ Success citizen_information_search_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1712
+
+
+
+ Success citizen_criminal_liability_fz53_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1776
+
+
+
+ Success citizen_appealing_violations_fz53_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1840
+
+
+
+ Success citizen_complex_filters_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1904
+
+
+
+ Success citizen_individual_decisions_once
+
+ SUCCESS
+
+ N
+ 1408
+ 1968
+
+
+
+ Success incident_once
+
+ SUCCESS
+
+ N
+ 1408
+ 2032
+
+
+
+ SQL.citizen_work_activity
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_work_activity
+ N
+ N
+ N
+ 640
+ 1456
+
+
+
+ SQL.citizen_education_diplomas_received
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_education_diplomas_received
+ N
+ N
+ N
+ 640
+ 1520
+
+
+
+ SQL.citizen_sports_categories
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_sports_categories
+ N
+ N
+ N
+ 640
+ 1584
+
+
+
+ SQL.citizen_criminal_record
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_criminal_record
+ N
+ N
+ N
+ 640
+ 1648
+
+
+
+ SQL.citizen_information_search
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_information_search
+ N
+ N
+ N
+ 640
+ 1712
+
+
+
+ SQL.citizen_criminal_liability_fz53
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_criminal_liability_fz53
+ N
+ N
+ N
+ 640
+ 1776
+
+
+
+ SQL.citizen_appealing_violations_fz53
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_appealing_violations_fz53
+ N
+ N
+ N
+ 640
+ 1840
+
+
+
+ SQL.citizen_complex_filters
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_complex_filters
+ N
+ N
+ N
+ 640
+ 1904
+
+
+
+ SQL.citizen_individual_decisions
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.citizen_individual_decisions
+ N
+ N
+ N
+ 640
+ 1968
+
+
+
+ SQL.incident
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.incident
+ N
+ N
+ N
+ 640
+ 2032
+
+
+
+
+
+ Start
+ SQL.citizen
+ Y
+ Y
+ Y
+
+
+ SQL.citizen
+ info_recruits_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.spouse
+ spouse_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.child
+ child_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.disease
+ disease_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.medical_authorities
+ medical_authorities_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.disability
+ disability_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.drivers_licence
+ drivers_licence_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.property
+ property_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.citizen_foreign
+ citizen_foreign_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.citizenship
+ citizenship_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.deputy
+ deputy_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.prosecution
+ prosecution_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.punishment
+ punishment_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.passport
+ passport_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.subpoena
+ subpoena_once.hpl
+ Y
+ Y
+ N
+
+
+ SQL.tempmeas
+ temporary_measure_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.opekun
+ Y
+ Y
+ Y
+
+
+ SQL.opekun
+ opekun_once.hpl
+ Y
+ Y
+ N
+
+
+ opekun_once.hpl
+ Success opekun_once
+ Y
+ N
+ Y
+
+
+ Start
+ SQL.spouse
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.child
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.disease
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.medical_authorities
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.property
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.disability
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.drivers_licence
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.citizen_foreign
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.citizenship
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.deputy
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.prosecution
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.punishment
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.passport
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.subpoena
+ Y
+ Y
+ Y
+
+
+ Start
+ SQL.tempmeas
+ Y
+ Y
+ Y
+
+
+ info_recruits_once.hpl
+ Success info_recruits_once
+ Y
+ N
+ Y
+
+
+ spouse_once.hpl
+ Success spouse_once
+ Y
+ N
+ Y
+
+
+ child_once.hpl
+ Success child_once
+ Y
+ N
+ Y
+
+
+ disease_once.hpl
+ Success desease_once
+ Y
+ N
+ Y
+
+
+ medical_authorities_once.hpl
+ Success medical_autorities_once
+ Y
+ N
+ Y
+
+
+ disability_once.hpl
+ Success disability_once
+ Y
+ N
+ Y
+
+
+ drivers_licence_once.hpl
+ Success driver_license_once
+ Y
+ N
+ Y
+
+
+ property_once.hpl
+ Success property_once
+ Y
+ N
+ Y
+
+
+ citizen_foreign_once.hpl
+ Success citizen_foreign_once
+ Y
+ N
+ Y
+
+
+ citizenship_once.hpl
+ Success citizenship_once
+ Y
+ N
+ Y
+
+
+ deputy_once.hpl
+ Success deputy_once
+ Y
+ N
+ Y
+
+
+ prosecution_once.hpl
+ Success prosecution_once
+ Y
+ N
+ Y
+
+
+ punishment_once.hpl
+ Success punishment_once
+ Y
+ N
+ Y
+
+
+ passport_once.hpl
+ Success passport_once
+ Y
+ N
+ Y
+
+
+ subpoena_once.hpl
+ Success subpoena_once
+ Y
+ N
+ Y
+
+
+ temporary_measure_once.hpl
+ Success temporary_measure_once
+ Y
+ N
+ Y
+
+
+ citizen_work_activity_once.hpl
+ Success citizen_work_activity_once
+ Y
+ N
+ Y
+
+
+ citizen_education_diplomas_received_once.hpl
+ Success citizen_education_diplomas_received_once
+ Y
+ N
+ Y
+
+
+ citizen_sports_categories_once.hpl
+ Success citizen_sports_categories_once
+ Y
+ N
+ Y
+
+
+ citizen_criminal_record_once.hpl
+ Success citizen_criminal_record_once
+ Y
+ N
+ Y
+
+
+ citizen_information_search_once.hpl
+ Success citizen_information_search_once
+ Y
+ N
+ Y
+
+
+ citizen_criminal_liability_fz53_once.hpl
+ Success citizen_criminal_liability_fz53_once
+ Y
+ N
+ Y
+
+
+ citizen_appealing_violations_fz53_once.hpl
+ Success citizen_appealing_violations_fz53_once
+ Y
+ N
+ Y
+
+
+ citizen_complex_filters_once.hpl
+ Success citizen_complex_filters_once
+ Y
+ N
+ Y
+
+
+ citizen_individual_decisions_once.hpl
+ Success citizen_individual_decisions_once
+ Y
+ N
+ Y
+
+
+ incident_once.hpl
+ Success incident_once
+ Y
+ N
+ Y
+
+
+ SQL.citizen_work_activity
+ citizen_work_activity_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_work_activity
+ N
+ Y
+ Y
+
+
+ SQL.citizen_education_diplomas_received
+ citizen_education_diplomas_received_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_education_diplomas_received
+ Y
+ Y
+ Y
+
+
+ SQL.citizen_sports_categories
+ citizen_sports_categories_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_sports_categories
+ N
+ Y
+ Y
+
+
+ SQL.citizen_criminal_record
+ citizen_criminal_record_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_criminal_record
+ N
+ Y
+ Y
+
+
+ SQL.citizen_information_search
+ citizen_information_search_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_information_search
+ N
+ Y
+ Y
+
+
+ SQL.citizen_criminal_liability_fz53
+ citizen_criminal_liability_fz53_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_criminal_liability_fz53
+ N
+ Y
+ Y
+
+
+ SQL.citizen_appealing_violations_fz53
+ citizen_appealing_violations_fz53_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_appealing_violations_fz53
+ N
+ Y
+ Y
+
+
+ SQL.citizen_complex_filters
+ citizen_complex_filters_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_complex_filters
+ N
+ Y
+ Y
+
+
+ SQL.citizen_individual_decisions
+ citizen_individual_decisions_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.citizen_individual_decisions
+ N
+ Y
+ Y
+
+
+ SQL.incident
+ incident_once.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL.incident
+ N
+ Y
+ Y
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/medical_authorities_once.hpl b/mappings/jobs_once_a_day/medical_authorities_once.hpl
new file mode 100644
index 0000000..5fd6ecd
--- /dev/null
+++ b/mappings/jobs_once_a_day/medical_authorities_once.hpl
@@ -0,0 +1,171 @@
+
+
+
+ medical_authorities_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input hiv
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with uchet as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array')
+select
+ r.id recruit_id,
+ u->>'dataPostUchet' start_date,
+ u->>'dataSnyatUchet' close_date,
+ u->>'dataPlan' change_date
+from public.recruits r
+join uchet on r.id = uchet.recruit_id;
+ N
+
+
+ 208
+ 352
+
+
+
+ Table input hiv
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with uchet as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedUchetVICH'->'uchetVICH') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedUchetVICH'->'uchetVICH') = 'array')
+select
+ r.id recruit_id,
+ to_date(u->>'dataPostUchet', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataSnyat', 'YYYY-MM-DD') close_date,
+ true HIV
+from public.recruits r
+join uchet on r.id = uchet.recruit_id;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 352
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/opekun_once.hpl b/mappings/jobs_once_a_day/opekun_once.hpl
new file mode 100644
index 0000000..afa81c0
--- /dev/null
+++ b/mappings/jobs_once_a_day/opekun_once.hpl
@@ -0,0 +1,157 @@
+
+
+
+ opekun_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input
+ Insert / update
+ N
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ full_name
+ full_name
+ Y
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ snils
+ snils
+ Y
+
+
+ N
+
+
+ 560
+ 240
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with person as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedOpekun'->'svedSoczPod') ch,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedOpekun'->'svedSoczPod') = 'array')
+select
+ r.id recruit_id,
+ concat_ws(' ', ch->'fioOpek'->>'familiya',
+ ch->'fioOpek'->>'imya',
+ ch->'fioOpek'->>'otchestvo') full_name,
+ make_date(NULLIF(ch->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(ch->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(ch->'dataRozhdDok'->>'den','')::int) birth_date,
+ ch->>'snils' snils
+from public.recruits r
+join person on r.id = person.recruit_id
+ N
+
+
+ 288
+ 240
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 480
+ 112
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/passport_once.hpl b/mappings/jobs_once_a_day/passport_once.hpl
new file mode 100644
index 0000000..ba464fc
--- /dev/null
+++ b/mappings/jobs_once_a_day/passport_once.hpl
@@ -0,0 +1,175 @@
+
+
+
+ passport_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ N
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ SELECT
+ r.id AS recruit_id,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok' AS passport_number,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'serDok' AS passport_series,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'vydDok' AS organization_name,
+ ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'kodVydDok' AS unit_code,
+ TO_DATE(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'dataDok', 'YYYY-MM-DD') AS issue_date,
+ CASE
+ WHEN ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'kodStatus' = '1'
+ THEN TRUE ELSE FALSE
+ END AS actual
+FROM public.recruits_info ri
+JOIN public.recruits r ON ri.recruit_id = r.id
+WHERE ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok' IS NOT NULL
+AND LENGTH(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'serDok') = 4
+AND LENGTH(ri.info->'svedFL'->'svedBS'->'pasportRF'->'aktPasportRF'->>'nomDok') = 6;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ select r.id recruit_id,
+ri.info->'pasportRF'->'predPasportRF'->>'nomDok' passport_number,
+ri.info->'pasportRF'->'predPasportRF'->>'serDok' passport_series,
+ri.info->'pasportRF'->'predPasportRF'->>'vydDok' organization_name,
+ri.info->'pasportRF'->'predPasportRF'->>'kodVydDok' unit_code,
+to_date(ri.info->'pasportRF'->'predPasportRF'->>'dataDok', 'YYYY-MM-DD') issue_date,
+case when ri.info->'pasportRF'->'predPasportRF'->>'kodStatus'='1' then true
+else false
+end actual
+from public.recruits_info ri
+join public.recruits r ON ri.recruit_id = r.id
+where ri.info->'pasportRF'->'predPasportRF'->>'nomDok' is not null;
+ N
+
+
+ 528
+ 480
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 672
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 992
+ 480
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/property_once.hpl b/mappings/jobs_once_a_day/property_once.hpl
new file mode 100644
index 0000000..d7046bf
--- /dev/null
+++ b/mappings/jobs_once_a_day/property_once.hpl
@@ -0,0 +1,326 @@
+
+
+
+ property_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+ Table input 2
+ Table output 2
+ Y
+
+
+ Table input 2 2
+ Table output 2 2
+ Y
+
+
+ Table input 2 2 2
+ Table output 2 2 2
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with prop as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedON'->'on') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedON'->'on') = 'array')
+select
+ r.id recruit_id,
+ u->>'naimVidPrav' kind_right,
+ u->'adrObSob'->>'adrObSobTekst' address,
+ to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
+ 'realty' type_property
+from public.recruits r
+join prop on r.id = prop.recruit_id;
+ N
+
+
+ 480
+ 208
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with prop as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedNazTS'->'nazTS') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedNazTS'->'nazTS') = 'array')
+select
+ r.id recruit_id,
+ u->>'vidTS' vehicle_type,
+ u->>'godVyp' issue_year,
+ u->>'markaTS' brand_model,
+ u->>'gosRegZn' reg_plate,
+ u->>'idenNom' vin,
+ to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
+ 'ground_transportation' type_property
+from public.recruits r
+join prop on r.id = prop.recruit_id;
+ N
+
+
+ 480
+ 304
+
+
+
+ Table input 2 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with prop as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedVozTS'->'vozTS') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedVozTS'->'vozTS') = 'array')
+select
+ r.id recruit_id,
+ u->>'naimVid' vehicle_type,
+ u->>'naznKat' vehicle_category,
+ to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
+ 'air_vehicles' type_property
+from public.recruits r
+join prop on r.id = prop.recruit_id;
+ N
+
+
+ 480
+ 384
+
+
+
+ Table input 2 2 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with prop as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedVodTS'->'vodTS') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedVodTS'->'vodTS') = 'array')
+select
+ r.id recruit_id,
+ u->>'naimVid' vehicle_type,
+ u->>'naznKat' vehicle_category,
+ to_date(u->>'dataRegPrav', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataPrekPrav', 'YYYY-MM-DD') close_date,
+ 'water_vehicles' type_property
+from public.recruits r
+join prop on r.id = prop.recruit_id
+ N
+
+
+ 480
+ 464
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 688
+ 208
+
+
+
+ Table output 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 688
+ 304
+
+
+
+ Table output 2 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 688
+ 384
+
+
+
+ Table output 2 2 2
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 688
+ 464
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/prosecution_once.hpl b/mappings/jobs_once_a_day/prosecution_once.hpl
new file mode 100644
index 0000000..9a02792
--- /dev/null
+++ b/mappings/jobs_once_a_day/prosecution_once.hpl
@@ -0,0 +1,106 @@
+
+
+
+ prosecution_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH ugol AS (
+ SELECT
+ jsonb_array_elements(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') AS u,
+ ri.recruit_id
+ FROM public.recruits_info ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedUgolovPresl'->'faktyUgolovPresl') = 'array'
+)
+SELECT
+ r.id AS recruit_id,
+ u->'sledSud'->>'naimSud' AS kind,
+ TO_DATE(u->'sledSud'->>'dataVozbUD', 'YYYY-MM-DD') AS create_date,
+ TO_DATE(u->'sledSud'->'svedSnyat'->>'dataSnyatSud', 'YYYY-MM-DD') AS close_date,
+ u->'sledSud'->>'naimOrgan' AS authority_name,
+ STRING_AGG(TRIM(BOTH ' "' FROM law.f), ', ') AS law_point,
+ u->'sledSud'->'svedSnyat'->>'osnSnyatSud' AS termination_basis
+FROM public.recruits r
+JOIN ugol ON r.id = ugol.recruit_id
+LEFT JOIN LATERAL jsonb_array_elements_text(u->'sledSud'->'statiUK') AS law(f) ON true
+GROUP BY r.id, kind, create_date, close_date, authority_name, termination_basis;
+ N
+
+
+ 528
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 736
+ 304
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/punishment_once.hpl b/mappings/jobs_once_a_day/punishment_once.hpl
new file mode 100644
index 0000000..5b741dd
--- /dev/null
+++ b/mappings/jobs_once_a_day/punishment_once.hpl
@@ -0,0 +1,107 @@
+
+
+
+ punishment_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ with ugol as
+(select jsonb_array_elements(ri.info->'svedFL'->'svedSudim'->'sudim'->'osuzhdenie') u,
+ ri.recruit_id
+from public.recruits_info ri
+where jsonb_typeof(ri.info->'svedFL'->'svedSudim'->'sudim'->'osuzhdenie') = 'array')
+select
+ r.id recruit_id,
+ u->>'naimSuda' authority_name,
+ u->>'srokNakaz' sentence,
+ u->>'adresNakaz' sentence_place,
+ u->>'kodVidNakaz' punishment_code,
+ u->>'izmSrokNakaz' sentence_changed,
+ u->>'naimVidNakaz' punishment_type,
+ to_date(u->>'dataNachSrok', 'YYYY-MM-DD') start_date,
+ to_date(u->>'dataOsvobozhd', 'YYYY-MM-DD') release_date,
+ to_date(u->>'dataOsuzhd', 'YYYY-MM-DD') sentense_date,
+ u->>'ugolovZakon' law_point,
+ u->>'osnovOsvobozhd' release_reason
+from public.recruits r
+join ugol on r.id = ugol.recruit_id;
+ N
+
+
+ 528
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 736
+ 304
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/spouse_once.hpl b/mappings/jobs_once_a_day/spouse_once.hpl
new file mode 100644
index 0000000..4f85c87
--- /dev/null
+++ b/mappings/jobs_once_a_day/spouse_once.hpl
@@ -0,0 +1,292 @@
+
+
+
+ spouse_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Select values
+ Table output
+ Y
+
+
+ Table input
+ Select values
+ Y
+
+
+ Select values
+ Insert / update
+ N
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruit_id
+ recruit_id
+
+
+ =
+ full_name
+ full_name
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ birth_date
+ birth_date
+ Y
+
+
+ death_az_number
+ divorce_az_number
+ Y
+
+
+ death_date
+ death_date
+ Y
+
+
+ divorce_az_number
+ divorce_az_number
+ Y
+
+
+ divorce_date
+ divorce_date
+ Y
+
+
+ full_name
+ full_name
+ Y
+
+
+ information_excluded
+ information_excluded
+ Y
+
+
+ kinship_type
+ kinship_type
+ Y
+
+
+ marriage_az_number
+ marriage_az_number
+ Y
+
+
+ marriage_date
+ marriage_date
+ Y
+
+
+ N
+
+
+ 704
+ 208
+
+
+
+ Select values
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ marriage_date
+ marriage_date
+ Date
+ -2
+ -2
+ yyyy-MM-dd
+ false
+
+
+ false
+
+
+
+
+
+
+
+ divorce_date
+ divorce_date
+ Date
+ -2
+ -2
+ yyyy-MM-dd
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 448
+ 208
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH suprug AS (
+ SELECT
+ supr.supri AS supr,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'nomerZapis' AS marriage_az_number,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'dataBrakKalend' AS marriage_date,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'nomerZapis' AS divorce_az_number,
+ ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'dataRastBrakKalend' AS divorce_date,
+ CASE
+ WHEN (ri.info->'svedFL'->'svedSemPolozh'->>'svedSuprIskl' = '1') THEN true
+ ELSE false
+ END AS information_excluded,
+ ri.recruit_id
+ FROM public.recruits_info ri
+ JOIN LATERAL (
+ SELECT jsonb_array_elements(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') AS supri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') = 'array'
+ ) AS supr ON true
+)
+SELECT
+ r.id AS recruit_id,
+ supr->>'rodstvSvyazSuprugNaim' AS kinship_type,
+ CONCAT_WS(' ',
+ supr->'svedFLBS'->'fio'->>'familiya',
+ supr->'svedFLBS'->'fio'->>'imya',
+ supr->'svedFLBS'->'fio'->>'otchestvo'
+ ) AS full_name,
+ MAKE_DATE(
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'god', '')::int,
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'mesyacz','')::int,
+ NULLIF(supr->'svedFLBS'->'dataRozhdDok'->>'den','')::int
+ ) AS birth_date,
+ (supr->'svedSmert'->'extend'->>'dataSmert')::date AS death_date,
+ supr->'svedSmert'->>'nomerZapis' AS death_az_number,
+ marriage_az_number,
+ marriage_date,
+ divorce_az_number,
+ divorce_date,
+ information_excluded
+FROM public.recruits r
+JOIN suprug ON r.id = suprug.recruit_id
+ N
+
+
+ 192
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
+
+
+ 688
+ 64
+
+
+
+
+ Select values
+
+ N
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/subpoena_once.hpl b/mappings/jobs_once_a_day/subpoena_once.hpl
new file mode 100644
index 0000000..f491e40
--- /dev/null
+++ b/mappings/jobs_once_a_day/subpoena_once.hpl
@@ -0,0 +1,150 @@
+
+
+
+ subpoena_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ SELECT
+ s.id AS subpoena_id, -- идентификатор повестки
+ s.status_change_date,
+ s.recruit_id, -- идентификатор рекрута
+ s.department_id, -- идентификатор ВК
+ s.series, -- серия повестки
+ s.create_date, -- дата создания повестки
+ s.number, -- номер повестки
+ s.send_date, -- дата направления повестки
+ s.sig_info, -- открепленная ЭП
+ sr.name AS subpoena_reason, -- причина вызова по повестке
+ s.full_name_responsible_user AS fio_commiss, -- фио комиссара
+ s.recruitment_name, -- наименование военного комиссариата, направившего повестку
+ rt.address, -- адрес, по которому нужно явиться по повестке
+ s.visit_date, -- дата и время явки в ВК
+ ssi.track_number, -- уникальный номер заказного почтового отправления, которым направлена повестка
+ ss.name AS subpoena_status, -- статус повестки
+ ssi.act_number, -- номер акта об отказе во вручении повестки
+ ssi.delivery_fio, -- фио лица, оповестившего гражданина о последствиях отказа от получения повестки
+ CASE
+ WHEN ssi.is_delivered = true THEN ssi.delivery_date
+ ELSE NULL
+ END AS delivery_date, -- дата вручения
+ CASE
+ WHEN ssi.is_delivered = true THEN 'Вручена'
+ WHEN ssi.is_delivered = false THEN 'Не вручена'
+ ELSE 'Нет информации'
+ END AS delivery_status, -- признак вручения повестки
+ CASE
+ WHEN sd.type = 'DIRECTION' THEN sd.name
+ ELSE NULL
+ END AS method_sending, -- способ направления повестки
+ CASE
+ WHEN sd.type = 'DELIVERY' THEN sd.name
+ ELSE NULL
+ END AS method_delivery, -- способ вручения повестки
+ CASE
+ WHEN sa.fact_appearance = true THEN 'Явился'
+ WHEN sa.fact_appearance = false THEN 'Не явился'
+ ELSE 'Нет информации'
+ END AS appearance_status, -- признак явки или неявки
+ CASE
+ WHEN ss.code = '5.1' THEN 'Неявка по уважительной причине'
+ WHEN ss.code = '5' THEN 'Гражданин не явился'
+ ELSE NULL
+ END AS appearance -- уважительная или нет причина
+-- нет версии повестки
+FROM public.subpoena AS s
+LEFT JOIN public.subpoena_reason AS sr
+ ON sr.id = s.reason_id
+LEFT JOIN public.recruitment AS rt
+ ON rt.id = s.department_id
+LEFT JOIN public.subpoena_send_info AS ssi
+ ON ssi.subpoena_id = s.id
+LEFT JOIN public.send_dictionary AS sd
+ ON sd.code = ssi.send_code
+LEFT JOIN public.subpoena_status AS ss
+ ON ss.id = s.status_id
+LEFT JOIN public.subpoena_appearance AS sa
+ ON sa.subpoena_id = s.id;
+ N
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ ervu_dashboard
+ N
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+
+
+
diff --git a/mappings/jobs_once_a_day/temporary_measure_once.hpl b/mappings/jobs_once_a_day/temporary_measure_once.hpl
new file mode 100644
index 0000000..d64eb89
--- /dev/null
+++ b/mappings/jobs_once_a_day/temporary_measure_once.hpl
@@ -0,0 +1,132 @@
+
+
+
+ temporary_measure_once
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:02:51.713
+ -
+ 2024/08/15 14:02:51.713
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ SELECT
+ rd.subpoena_id,
+ rd.vk_id AS recruitment_id,
+ s.recruit_id,
+ rds.name AS status_measure, -- статус временной меры
+ rd.recruitment_name, -- наименоване ВК
+ rdi.cancel_date, -- дата, с которой отменена временная мера
+ rn.name AS restriction_name, -- наименование ограничения (тип временной меры)
+ CASE
+ WHEN rd.type='CREATE' THEN 'Применение временной меры'
+ WHEN rd.type='CANCEL' THEN 'Отмена временной меры'
+ END AS type, -- тип документа ограничения
+ CASE
+ WHEN rd.type='CREATE' THEN rd.decision_number
+ ELSE NULL
+ END AS decision_number_create, -- номер решения о применении временной меры
+ CASE
+ WHEN rd.type='CANCEL' THEN rd.decision_number
+ ELSE NULL
+ END AS decision_number_cancel, -- номер решения об отмене временной меры
+ CASE
+ WHEN rd.type='CREATE' THEN rd.decision_date
+ ELSE NULL
+ END AS decision_date_create, -- дата решения о применении временной меры
+ CASE
+ WHEN rd.type='CANCEL' THEN rd.decision_date
+ ELSE NULL
+ END AS decision_date_cancel, -- дата решения об отмене временной меры
+ CASE
+ WHEN rdi.applied_fact = 'true' THEN 'Временная мера применена'
+ WHEN rdi.applied_fact = 'false' THEN 'Временная мера не применена'
+ ELSE 'Нет информации'
+ END AS applied_fact -- факт применения временной меры
+FROM public.restriction_document AS rd
+LEFT JOIN public.restriction_document_item AS rdi
+ ON rdi.restriction_document_create_id = rd.id
+LEFT JOIN public.restriction AS rn
+ ON rn.id = rdi.restriction_id
+LEFT JOIN public.restriction_document_status AS rds
+ ON rds.code = rd.status
+LEFT JOIN public.subpoena AS s
+ ON s.id = rd.subpoena_id
+ N
+
+
+ 208
+ 208
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 50000
+ ervu-dashboard
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ ervu_dashboard
+ N
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 416
+ 208
+
+
+
+
+
+
diff --git a/mappings/log.txt b/mappings/log.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_info_recruits.txt b/mappings/log_jobs/log_job_info_recruits.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_info_recruits_once.txt b/mappings/log_jobs/log_job_info_recruits_once.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_ratings.txt b/mappings/log_jobs/log_job_ratings.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_recruitments_all.txt b/mappings/log_jobs/log_job_recruitments_all.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_recruitments_country.txt b/mappings/log_jobs/log_job_recruitments_country.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_recruitments_milcom.txt b/mappings/log_jobs/log_job_recruitments_milcom.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_recruitments_mildis.txt b/mappings/log_jobs/log_job_recruitments_mildis.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/log_jobs/log_job_recruitments_region.txt b/mappings/log_jobs/log_job_recruitments_region.txt
new file mode 100644
index 0000000..e69de29
diff --git a/mappings/metadata/rdbms/118_ervu-person-registry.json b/mappings/metadata/rdbms/118_ervu-person-registry.json
new file mode 100644
index 0000000..f58b973
--- /dev/null
+++ b/mappings/metadata/rdbms/118_ervu-person-registry.json
@@ -0,0 +1,26 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "ervu-person-registry",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "10.10.31.118",
+ "password": "Encrypted 2be98afc86aa7f2e4b11ba562feabf7eb",
+ "pluginName": "PostgreSQL",
+ "port": "5432",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "postgres"
+ }
+ },
+ "name": "118_ervu-person-registry"
+}
\ No newline at end of file
diff --git a/mappings/metadata/rdbms/118_ervu-subpoena-registry.json b/mappings/metadata/rdbms/118_ervu-subpoena-registry.json
new file mode 100644
index 0000000..f2bd116
--- /dev/null
+++ b/mappings/metadata/rdbms/118_ervu-subpoena-registry.json
@@ -0,0 +1,26 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "ervu-subpoena-registry",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "10.10.31.118",
+ "password": "Encrypted 2be98afc86aa7f2e4b11ba562feabf7eb",
+ "pluginName": "PostgreSQL",
+ "port": "5432",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "postgres"
+ }
+ },
+ "name": "118_ervu-subpoena-registry"
+}
\ No newline at end of file
diff --git a/mappings/metadata/rdbms/119_ervu-dashboard-copy.json b/mappings/metadata/rdbms/119_ervu-dashboard-copy.json
new file mode 100644
index 0000000..25ade15
--- /dev/null
+++ b/mappings/metadata/rdbms/119_ervu-dashboard-copy.json
@@ -0,0 +1,27 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "ervu-dashboard-copy",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "10.10.31.119",
+ "password": "Encrypted 2be98caba1cd2df80aa0aa672d193bdde",
+ "pluginName": "PostgreSQL",
+ "port": "5432",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "EXTRA_OPTION_POSTGRESQL.stringtype": "unspecified",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "ervu-dashboard"
+ }
+ },
+ "name": "119_ervu-dashboard-copy"
+}
\ No newline at end of file
diff --git a/mappings/metadata/rdbms/ervu-journal.json b/mappings/metadata/rdbms/ervu-journal.json
new file mode 100644
index 0000000..da61575
--- /dev/null
+++ b/mappings/metadata/rdbms/ervu-journal.json
@@ -0,0 +1,26 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "${DB_JOURNAL_NAME}",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "${DB_JOURNAL_HOST}",
+ "password": "${DB_JOURNAL_PASSWORD}",
+ "pluginName": "PostgreSQL",
+ "port": "${DB_JOURNAL_PORT}",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "${DB_JOURNAL_USERNAME}"
+ }
+ },
+ "name": "ervu-journal"
+}
\ No newline at end of file
diff --git a/mappings/metadata/rdbms/incident.json b/mappings/metadata/rdbms/incident.json
new file mode 100644
index 0000000..3cb4185
--- /dev/null
+++ b/mappings/metadata/rdbms/incident.json
@@ -0,0 +1,26 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "${DB_INCIDENTS_NAME}",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "${DB_INCIDENTS_HOST}",
+ "password": "${DB_INCIDENTS_PASSWORD}",
+ "pluginName": "PostgreSQL",
+ "port": "${DB_INCIDENTS_PORT}",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "${DB_INCIDENTS_USERNAME}"
+ }
+ },
+ "name": "incident"
+}
\ No newline at end of file
diff --git a/mappings/metadata/rdbms/metrics.json b/mappings/metadata/rdbms/metrics.json
new file mode 100644
index 0000000..fe7601d
--- /dev/null
+++ b/mappings/metadata/rdbms/metrics.json
@@ -0,0 +1,27 @@
+{
+ "rdbms": {
+ "POSTGRESQL": {
+ "databaseName": "${DB_METRICS_NAME}",
+ "pluginId": "POSTGRESQL",
+ "accessType": 0,
+ "hostname": "${DB_METRICS_HOST}",
+ "password": "${DB_METRICS_PASSWORD}",
+ "pluginName": "PostgreSQL",
+ "port": "${DB_METRICS_PORT}",
+ "attributes": {
+ "SUPPORTS_TIMESTAMP_DATA_TYPE": "Y",
+ "QUOTE_ALL_FIELDS": "N",
+ "EXTRA_OPTION_POSTGRESQL.stringtype": "unspecified",
+ "SUPPORTS_BOOLEAN_DATA_TYPE": "Y",
+ "FORCE_IDENTIFIERS_TO_LOWERCASE": "N",
+ "PRESERVE_RESERVED_WORD_CASE": "Y",
+ "SQL_CONNECT": "",
+ "FORCE_IDENTIFIERS_TO_UPPERCASE": "N",
+ "PREFERRED_SCHEMA_NAME": ""
+ },
+ "manualUrl": "",
+ "username": "${DB_METRICS_USERNAME}"
+ }
+ },
+ "name": "metrics"
+}
\ No newline at end of file
diff --git a/mappings/mil_com/job_recruitments_milcom.hwf b/mappings/mil_com/job_recruitments_milcom.hwf
new file mode 100644
index 0000000..6fb1a77
--- /dev/null
+++ b/mappings/mil_com/job_recruitments_milcom.hwf
@@ -0,0 +1,2336 @@
+
+
+ job_recruitments_milcom
+ Y
+
+
+
+ 0
+ -
+ 2024/08/15 16:02:12.821
+ -
+ 2024/08/15 16:02:12.821
+
+
+ ARR_MC
+
+
+
+
+ REC_ID
+
+
+
+
+ SCM
+
+
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 1008
+ 1552
+
+
+
+ main_dashboard.appeals(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.appeals(m_c).hpl
+ txt
+ ${Internal.Entry.Current.Folder}/\logs\appeals
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1840
+ 944
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 2048
+ 944
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 2592
+ 1152
+
+
+
+ main_dashboard.total_registered(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hpl
+ txt
+ ${PROJECT_HOME}/log
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1248
+
+
+
+ Success main_dashboard.total_registered(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1312
+
+
+
+ Success main_dashboard.waiting_registration(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1232
+
+
+
+ Success 6
+
+ SUCCESS
+
+ N
+ 2592
+ 1072
+
+
+
+ total_registered.reg_mil_cat(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1312
+
+
+
+ Success 7
+
+ SUCCESS
+
+ N
+ 0
+ 1312
+
+
+
+ total_registered.removed_registry(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1376
+
+
+
+ Success 8
+
+ SUCCESS
+
+ N
+ 0
+ 1376
+
+
+
+ total_registered.subpoenas(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1440
+
+
+
+ Success 9
+
+ SUCCESS
+
+ N
+ 0
+ 1440
+
+
+
+ total_registered.driver_license(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1504
+
+
+
+ Success 10
+
+ SUCCESS
+
+ N
+ 0
+ 1504
+
+
+
+ total_registered.child_minor(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hpl
+ txt
+ C:\Users\acer\Desktop\лог
+ Rowlevel
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1568
+
+
+
+ Success 11
+
+ SUCCESS
+
+ N
+ 0
+ 1568
+
+
+
+ total_registered.age(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1632
+
+
+
+ Success 12
+
+ SUCCESS
+
+ N
+ 0
+ 1632
+
+
+
+ total_registered.marital_status(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1696
+
+
+
+ Success 13
+
+ SUCCESS
+
+ N
+ 0
+ 1696
+
+
+
+ total_registered.education_level(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1760
+
+
+
+ Success 14
+
+ SUCCESS
+
+ N
+ 0
+ 1760
+
+
+
+ total_registered.busyness(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1824
+
+
+
+ Success 15
+
+ SUCCESS
+
+ N
+ 0
+ 1824
+
+
+
+ recruitment_campaign.appeals(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.appeals(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1968
+
+
+
+ Success 16
+
+ SUCCESS
+
+ N
+ 0
+ 1968
+
+
+
+ array_recruitments.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/array_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 848
+ 1552
+
+
+
+ Dummy
+
+ DUMMY
+
+ N
+ 1648
+ 944
+
+
+
+ SQL total_registered.reg_mil_cat
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1312
+
+
+
+ SQL main_dashboard.total_registered
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1248
+
+
+
+ SQL total_registered.removed_registry
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 624
+ 1376
+
+
+
+ SQL total_registered.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1440
+
+
+
+ SQL total_registered.driver_license
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 624
+ 1504
+
+
+
+ SQL total_registered.child_minor
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1568
+
+
+
+ SQL total_registered.age
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1632
+
+
+
+ SQL total_registered.marital_status
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1696
+
+
+
+ SQL total_registered.education_level
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 624
+ 1760
+
+
+
+ SQL total_registered.busyness
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1824
+
+
+
+ SQL recruitment_campaign.appeals
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 624
+ 1968
+
+
+
+ main_dashboard.recruitment_campaign(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c).hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1712
+ 1152
+
+
+
+ SQL main_dashboard.recruitment_campaign clearing null
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+AND new_recruits IS NULL
+AND subpoenas_sent IS NULL
+AND appeared_on_subpoenas IS NULL
+AND postponement_have_right IS NULL
+AND postponement_granted IS NULL;
+ N
+ N
+ N
+ 2336
+ 1152
+
+
+
+ postponement_percents.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/postponement_percents.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1152
+
+
+
+ recruitment_campaign.subpoenas(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1712
+ 1072
+
+
+
+ main_dashboard.waiting_registration(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1232
+
+
+
+ SQL main_dashboard.waiting_registration
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 624
+ 1184
+
+
+
+ Success main_dashboard.waiting_registration(m_c)
+
+ SUCCESS
+
+ N
+ 0
+ 1184
+
+
+
+ main_dashboard.waiting_registration(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 320
+ 1184
+
+
+
+ Success main_dashboard.total_registered(m_c)
+
+ SUCCESS
+
+ N
+ 0
+ 1248
+
+
+
+ array_recruitment_for_parallel.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/array_recruitment_for_parallel.hpl
+ txt
+ C:\Users\acer\Desktop\logii
+ Rowlevel
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1152
+ 1552
+
+
+
+ SQL main_dashboard.waiting_registration 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1232
+
+
+
+ main_dashboard.total_registered(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1312
+
+
+
+ SQL main_dashboard.total_registered 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1312
+
+
+
+ SQL total_registered.reg_mil_cat 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1392
+
+
+
+ total_registered.reg_mil_cat(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1392
+
+
+
+ Success total_registered.reg_mil_cat(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1392
+
+
+
+ SQL total_registered.removed_registry 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 1712
+ 1472
+
+
+
+ total_registered.removed_registry(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1472
+
+
+
+ Success total_registered.removed_registry(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1472
+
+
+
+ SQL total_registered.subpoenas 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1552
+
+
+
+ total_registered.subpoenas(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1552
+
+
+
+ Success total_registered.subpoenas(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1552
+
+
+
+ total_registered.driver_license(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1632
+
+
+
+ SQL total_registered.driver_license 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 1712
+ 1632
+
+
+
+ Success total_registered.driver_license(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1632
+
+
+
+ SQL total_registered.child_minor 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1712
+
+
+
+ total_registered.child_minor(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1712
+
+
+
+ Success total_registered.child_minor(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1712
+
+
+
+ SQL total_registered.age 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1792
+
+
+
+ total_registered.age(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1792
+
+
+
+ Success total_registered.age(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1792
+
+
+
+ SQL total_registered.marital_status 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 1872
+
+
+
+ total_registered.marital_status(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1872
+
+
+
+ Success total_registered.marital_status(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1872
+
+
+
+ SQL total_registered.education_level 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ N
+ 1712
+ 1952
+
+
+
+ total_registered.education_level(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 1952
+
+
+
+ Success total_registered.education_level(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 1952
+
+
+
+ SQL total_registered.busyness 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+
+ N
+ N
+ N
+ 1712
+ 2032
+
+
+
+ total_registered.busyness(m_c).hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hwf
+ Nothing
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2032
+ 2032
+
+
+
+ Success total_registered.busyness(m_c)_pll
+
+ SUCCESS
+
+ N
+ 2592
+ 2032
+
+
+
+
+
+ total_registered.reg_mil_cat(m_c).hpl
+ Success 7
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry(m_c).hpl
+ Success 8
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas(m_c).hpl
+ Success 9
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license(m_c).hpl
+ Success 10
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor(m_c).hpl
+ Success 11
+ Y
+ Y
+ N
+
+
+ total_registered.age(m_c).hpl
+ Success 12
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status(m_c).hpl
+ Success 13
+ Y
+ Y
+ N
+
+
+ total_registered.education_level(m_c).hpl
+ Success 14
+ Y
+ Y
+ N
+
+
+ total_registered.busyness(m_c).hpl
+ Success 15
+ Y
+ Y
+ N
+
+
+ recruitment_campaign.appeals(m_c).hpl
+ Success 16
+ Y
+ Y
+ N
+
+
+ main_dashboard.appeals(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ Start
+ array_recruitments.hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ Dummy
+ N
+ Y
+ N
+
+
+ Dummy
+ main_dashboard.appeals(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.reg_mil_cat
+ N
+ Y
+ N
+
+
+ SQL total_registered.reg_mil_cat
+ total_registered.reg_mil_cat(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL main_dashboard.total_registered
+ N
+ Y
+ N
+
+
+ SQL main_dashboard.total_registered
+ main_dashboard.total_registered(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.removed_registry
+ N
+ Y
+ N
+
+
+ SQL total_registered.removed_registry
+ total_registered.removed_registry(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.subpoenas
+ N
+ Y
+ N
+
+
+ SQL total_registered.subpoenas
+ total_registered.subpoenas(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.driver_license
+ N
+ Y
+ N
+
+
+ SQL total_registered.driver_license
+ total_registered.driver_license(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.child_minor
+ N
+ Y
+ N
+
+
+ SQL total_registered.child_minor
+ total_registered.child_minor(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.age
+ N
+ Y
+ N
+
+
+ SQL total_registered.age
+ total_registered.age(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.marital_status
+ N
+ Y
+ N
+
+
+ SQL total_registered.marital_status
+ total_registered.marital_status(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.education_level
+ N
+ Y
+ N
+
+
+ SQL total_registered.education_level
+ total_registered.education_level(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitments.hpl
+ SQL total_registered.busyness
+ N
+ Y
+ N
+
+
+ SQL total_registered.busyness
+ total_registered.busyness(m_c).hpl
+ Y
+ N
+ Y
+
+
+ array_recruitments.hpl
+ SQL recruitment_campaign.appeals
+ N
+ Y
+ N
+
+
+ SQL recruitment_campaign.appeals
+ recruitment_campaign.appeals(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.recruitment_campaign(m_c).hwf
+ Y
+ Y
+ Y
+
+
+ SQL main_dashboard.recruitment_campaign clearing null
+ Success 2
+ Y
+ Y
+ Y
+
+
+ main_dashboard.recruitment_campaign(m_c).hwf
+ postponement_percents.hpl
+ Y
+ N
+ Y
+
+
+ postponement_percents.hpl
+ SQL main_dashboard.recruitment_campaign clearing null
+ Y
+ Y
+ Y
+
+
+ Start
+ recruitment_campaign.subpoenas(m_c).hwf
+ Y
+ Y
+ Y
+
+
+ recruitment_campaign.subpoenas(m_c).hwf
+ Success 6
+ Y
+ N
+ Y
+
+
+ main_dashboard.waiting_registration(m_c).hwf
+ Success main_dashboard.waiting_registration(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitments.hpl
+ SQL main_dashboard.waiting_registration
+ N
+ Y
+ N
+
+
+ SQL main_dashboard.waiting_registration
+ main_dashboard.waiting_registration(m_c).hpl
+ Y
+ N
+ Y
+
+
+ main_dashboard.waiting_registration(m_c).hpl
+ Success main_dashboard.waiting_registration(m_c)
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered(m_c).hpl
+ Success main_dashboard.total_registered(m_c)
+ Y
+ Y
+ N
+
+
+ Start
+ array_recruitment_for_parallel.hpl
+ Y
+ Y
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL main_dashboard.waiting_registration 2
+ Y
+ Y
+ Y
+
+
+ SQL main_dashboard.waiting_registration 2
+ main_dashboard.waiting_registration(m_c).hwf
+ Y
+ Y
+ Y
+
+
+ SQL main_dashboard.total_registered 2
+ main_dashboard.total_registered(m_c).hwf
+ Y
+ N
+ Y
+
+
+ main_dashboard.total_registered(m_c).hwf
+ Success main_dashboard.total_registered(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL main_dashboard.total_registered 2
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.reg_mil_cat 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.reg_mil_cat 2
+ total_registered.reg_mil_cat(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.reg_mil_cat(m_c).hwf
+ Success total_registered.reg_mil_cat(m_c)_pll
+ Y
+ N
+ Y
+
+
+ SQL total_registered.removed_registry 2
+ total_registered.removed_registry(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.removed_registry(m_c).hwf
+ Success total_registered.removed_registry(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.removed_registry 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.subpoenas 2
+ total_registered.subpoenas(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.subpoenas(m_c).hwf
+ Success total_registered.subpoenas(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.subpoenas 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.driver_license 2
+ total_registered.driver_license(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.driver_license(m_c).hwf
+ Success total_registered.driver_license(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.driver_license 2
+ Y
+ Y
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.child_minor 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.child_minor 2
+ total_registered.child_minor(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.child_minor(m_c).hwf
+ Success total_registered.child_minor(m_c)_pll
+ Y
+ N
+ Y
+
+
+ SQL total_registered.age 2
+ total_registered.age(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.age(m_c).hwf
+ Success total_registered.age(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.age 2
+ Y
+ Y
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.marital_status 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.marital_status 2
+ total_registered.marital_status(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.marital_status(m_c).hwf
+ Success total_registered.marital_status(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.education_level 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.education_level 2
+ total_registered.education_level(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.education_level(m_c).hwf
+ Success total_registered.education_level(m_c)_pll
+ Y
+ N
+ Y
+
+
+ array_recruitment_for_parallel.hpl
+ SQL total_registered.busyness 2
+ Y
+ Y
+ Y
+
+
+ SQL total_registered.busyness 2
+ total_registered.busyness(m_c).hwf
+ Y
+ N
+ Y
+
+
+ total_registered.busyness(m_c).hwf
+ Success total_registered.busyness(m_c)_pll
+ Y
+ N
+ Y
+
+
+
+
+
+
+ METASTORE.pentaho
+
+ Default Run Configuration
+ {"namespace":"pentaho","id":"Default Run Configuration","name":"Default Run Configuration","description":"Defines a default run configuration","metaStoreName":null}
+
+
+
+ {"_":"Embedded MetaStore Elements","namespace":"pentaho","type":"Default Run Configuration"}
+
+ Pentaho local
+ {"children":[{"children":[],"id":"server","value":null},{"children":[],"id":"clustered","value":"N"},{"children":[],"id":"name","value":"Pentaho local"},{"children":[],"id":"description","value":null},{"children":[],"id":"pentaho","value":"N"},{"children":[],"id":"readOnly","value":"Y"},{"children":[],"id":"sendResources","value":"N"},{"children":[],"id":"logRemoteExecutionLocally","value":"N"},{"children":[],"id":"remote","value":"N"},{"children":[],"id":"local","value":"Y"},{"children":[],"id":"showTransformations","value":"N"}],"id":"Pentaho local","value":null,"name":"Pentaho local","owner":null,"ownerPermissionsList":[]}
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.appeals(m_c).hpl b/mappings/mil_com/main_dashboard.appeals(m_c).hpl
new file mode 100644
index 0000000..91bc951
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.appeals(m_c).hpl
@@ -0,0 +1,314 @@
+
+
+
+ main_dashboard.appeals(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ N
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals) 2
+ N
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ N
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+
+ N
+
+ N
+
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty')
+
+
+
+
+ 224
+ 192
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REС_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 384
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+ main_dashboard
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ average_to_face
+ average_to_face
+ Y
+
+
+ "average_EPGU"
+ average_epgu
+ Y
+
+
+ average_to_face_percent
+ average_to_face_percent
+ Y
+
+
+ "average_EPGU_percent"
+ average_epgu_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ Y
+
+
+ 1024
+ 192
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REС_ID
+ REС_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 816
+ 384
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ postgres.appeal-document-service
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+t1 AS (
+ SELECT
+ COUNT(*) AS total_appeals,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document
+ WHERE vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY vk_id
+),
+t2 AS (
+ SELECT
+ ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document ad
+ WHERE vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ AND ad.extra_info ->> 'resultDate' IS NOT NULL
+ AND ad.extra_info ->> 'resultDate' != ''
+ GROUP BY vk_id
+),
+resolved AS (
+ SELECT
+ COUNT(*) AS resolved,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document ad
+ WHERE ad.extra_info ->> 'result' = '1'
+ AND vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY vk_id
+)
+SELECT
+ COALESCE(t1.total_appeals, 0) AS total_appeals,
+ COALESCE(t2.average_consideration, 0) AS average_consideration,
+ COALESCE(resolved.resolved, 0) AS resolved,
+ ids.recruitment_id,
+ current_date AS recording_date,
+ 0 AS average_rating,
+ 0 AS average_to_face,
+ 0 AS average_epgu,
+ 0 AS average_to_face_percent,
+ 0 AS average_epgu_percent
+FROM ids
+LEFT JOIN t1 ON ids.recruitment_id = t1.recruitment_id
+LEFT JOIN t2 ON ids.recruitment_id = t2.recruitment_id
+LEFT JOIN resolved ON ids.recruitment_id = resolved.recruitment_id;
+ Y
+
+
+ 448
+ 192
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hpl
new file mode 100644
index 0000000..e6ad3a7
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hpl
@@ -0,0 +1,378 @@
+
+
+
+ main_dashboard.recruitment_campaign(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ N
+
+
+ Table input (subpoena) регион/осень
+ Get variables 4 3
+ N
+
+
+ Select values 4 3
+ Insert / update (main_dashboard.recruitment_campaign)
+ N
+
+
+ Table input (subpoena) регион/осень
+ Insert / update (main_dashboard.recruitment_campaign)
+ Y
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 432
+ 416
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ main_dashboard
+
+
+ subpoenas_sent
+ count_subpoena
+ Y
+
+
+ appeared_on_subpoenas
+ count_appeared
+ Y
+
+
+ not_appeared_on_subpoenas
+ count_not_appeared
+ Y
+
+
+ new_recruits
+ new_recruits
+ Y
+
+
+ postponement_have_right
+ postponement_have_right
+ Y
+
+
+ postponement_granted
+ postponement_granted
+ Y
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+ Y
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+ Y
+
+
+ postponement_have_right_percent
+ postponement_have_right_percent
+ Y
+
+
+ postponement_granted_percent
+ postponement_granted_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ N
+
+
+ 720
+ 320
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 608
+ 416
+
+
+
+ Table input (subpoena) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.department_id AS recruitment_id,
+ s.status_id,
+ sr.type,
+ 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,
+ 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
+ JOIN public.subpoena_status AS ss ON ss.id = s.status_id
+ JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
+ JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
+ LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
+ 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 s.department_id::uuid IN (SELECT recruitment_id FROM ids)
+),
+last_status AS (
+ SELECT *
+ FROM subpoena_data
+ 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 <= 31 декабря прошлого года)
+
+Если текущий период с 1 октября по 31 декабря текущего года ТО
+create_date >= 1 октября текущего года
+create_date <= 31 декабря текущего года)
+должно быть что-то похожее, но данных пока нет на текущие периоды
+*/
+ SELECT
+ ls.recruitment_id,
+ ls.create_date,
+ 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
+),
+t1 AS (
+ SELECT
+ ss.recruitment_id,
+ 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
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ 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
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ 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
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(t1.count_subpoena, 0) AS count_subpoena,
+ COALESCE(t2.count_appeared, 0) AS count_appeared,
+ COALESCE(t3.count_not_appeared, 0) AS count_not_appeared,
+ COALESCE(ROUND(COALESCE(t2.count_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS appeared_on_subpoenas_percent,
+ COALESCE(ROUND(COALESCE(t3.count_not_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS not_appeared_on_subpoenas_percent,
+ 0 AS new_recruits,
+ 0 AS postponement_have_right,
+ 0 AS postponement_granted,
+ 0 AS postponement_have_right_percent,
+ 0 AS postponement_granted_percent,
+ ss.spring_autumn,
+ ss.recruitment_id
+FROM season_separations 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;
+ Y
+
+
+ 336
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hwf b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hwf
new file mode 100644
index 0000000..25924ce
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c).hwf
@@ -0,0 +1,769 @@
+
+
+ main_dashboard.recruitment_campaign(m_c)
+ Y
+
+
+
+ -
+ 2025/03/19 10:26:06.313
+ -
+ 2025/03/19 10:26:06.313
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 48
+ 256
+
+
+
+ m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1104
+ 0
+
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1648
+ 112
+
+
+
+ m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 2000
+ 112
+
+
+
+ recruitment_season_combination_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 672
+ 112
+
+
+
+ array_season_recruitments_all.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 416
+ 368
+
+
+
+ array_season_recruitments.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 416
+ 112
+
+
+
+ m_d.rec_cam(m_c)_to_person_registry.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry.hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 480
+
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1408
+ 368
+
+
+
+ m_d.rec_cam(m_c)_to_decision_service.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service.hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1808
+ 368
+
+
+
+ recruitment_season_combination.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination.hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 672
+ 368
+
+
+
+ Success all
+
+ SUCCESS
+
+ N
+ 2064
+ 368
+
+
+
+ SQL main_dashboard.recruitment_campaign
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ Y
+ 256
+ 256
+
+
+
+ Success uniq
+
+ SUCCESS
+
+ N
+ 2256
+ 112
+
+
+
+ array_season_recruitments_all.hpl 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 768
+ 480
+
+
+
+ array_season_recruitments_all.hpl 2 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 480
+
+
+
+ array_season_recruitments_all.hpl 2 2 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1616
+ 480
+
+
+
+ array_season_recruitments.hpl 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 800
+ 0
+
+
+
+ array_season_recruitments.hpl 3
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1408
+ 0
+
+
+
+ array_season_recruitments.hpl 4
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1840
+ 16
+
+
+
+
+
+ m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ N
+ N
+ Y
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
+ N
+ N
+ Y
+
+
+ recruitment_season_combination_uniq.hpl
+ m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+ N
+ Y
+ Y
+
+
+ array_season_recruitments.hpl
+ recruitment_season_combination_uniq.hpl
+ Y
+ Y
+ Y
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ m_d.rec_cam(m_c)_to_decision_service.hpl
+ N
+ N
+ Y
+
+
+ recruitment_season_combination.hpl
+ m_d.rec_cam(m_c)_to_person_registry.hpl
+ N
+ N
+ Y
+
+
+ array_season_recruitments_all.hpl
+ recruitment_season_combination.hpl
+ Y
+ N
+ Y
+
+
+ m_d.rec_cam(m_c)_to_decision_service.hpl
+ Success all
+ Y
+ Y
+ N
+
+
+ Start
+ SQL main_dashboard.recruitment_campaign
+ Y
+ Y
+ Y
+
+
+ recruitment_season_combination.hpl
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ N
+ N
+ Y
+
+
+ recruitment_season_combination_uniq.hpl
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ N
+ N
+ Y
+
+
+ SQL main_dashboard.recruitment_campaign
+ array_season_recruitments.hpl
+ Y
+ N
+ Y
+
+
+ SQL main_dashboard.recruitment_campaign
+ array_season_recruitments_all.hpl
+ Y
+ Y
+ Y
+
+
+ m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
+ Success uniq
+ Y
+ Y
+ N
+
+
+ m_d.rec_cam(m_c)_to_person_registry.hpl
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ N
+ Y
+ N
+
+
+ recruitment_season_combination.hpl
+ array_season_recruitments_all.hpl 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl 2
+ m_d.rec_cam(m_c)_to_person_registry.hpl
+ Y
+ Y
+ N
+
+
+ m_d.rec_cam(m_c)_to_person_registry.hpl
+ array_season_recruitments_all.hpl 2 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl 2 2
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ Y
+ Y
+ N
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry.hpl
+ array_season_recruitments_all.hpl 2 2 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl 2 2 2
+ m_d.rec_cam(m_c)_to_decision_service.hpl
+ Y
+ Y
+ N
+
+
+ recruitment_season_combination_uniq.hpl
+ array_season_recruitments.hpl 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments.hpl 2
+ m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+ Y
+ Y
+ N
+
+
+ m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
+ array_season_recruitments.hpl 3
+ Y
+ Y
+ N
+
+
+ array_season_recruitments.hpl 3
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ Y
+ Y
+ N
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
+ array_season_recruitments.hpl 4
+ Y
+ Y
+ N
+
+
+ array_season_recruitments.hpl 4
+ m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
+ Y
+ Y
+ N
+
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 0
+ 112
+ особенные регионы
+ 123
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 0
+ 400
+ обычные регионы
+ 113
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service.hpl
new file mode 100644
index 0000000..965c3c7
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service.hpl
@@ -0,0 +1,145 @@
+
+
+
+ m_d.rec_cam(m_c)_to_decision_service
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input отчрочки из decisions
+ Update
+ Y
+
+
+
+ Table input отчрочки из decisions
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.decision-document-service
+ N
+ 0
+ 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,
+ dd.postponement_date,
+ 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
+ COALESCE(COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'true'), 0) AS postponement_have_right,
+ COALESCE(COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'false'), 0) AS postponement_granted,
+ --COALESCE((COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'true') * 100 / NULLIF(COUNT(ls.postponement), 0)), 0) AS postponement_have_right_percent,
+ --COALESCE((COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'false') * 100 / NULLIF(COUNT(ls.postponement), 0)), 0) AS postponement_granted_percent,
+ CASE
+ WHEN (ls.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '6 months' + INTERVAL '14 days')
+ THEN 'Весна'
+ WHEN (ls.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '12 months')
+ 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) + INTERVAL '12 months'
+GROUP BY spring_autumn, ls.recruitment_id
+ Y
+
+
+ 400
+ 320
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ postponement_have_right
+ postponement_have_right
+
+
+ postponement_granted
+ postponement_granted
+
+
+ N
+ Y
+
+
+ 1024
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service_uniq.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
new file mode 100644
index 0000000..522ade4
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_decision_service_uniq.hpl
@@ -0,0 +1,178 @@
+
+
+
+ m_d.rec_cam(m_c)_to_decision_service_uniq
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input отчрочки из decisions
+ Update
+ Y
+
+
+
+ Table input отчрочки из decisions
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.decision-document-service
+ N
+ 0
+ WITH
+ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+),
+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,
+ 'Весна' AS season,
+ dd.postponement_date,
+ 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 WHERE spring_autumn = 'Весна')
+
+ UNION ALL
+
+ 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,
+ 'Осень' AS season,
+ dd.postponement_date,
+ 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 WHERE spring_autumn = 'Осень')
+),
+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,
+ 'Весна' 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) + INTERVAL '6 months' + INTERVAL '14 days' -- 15 июля текущего года
+ AND ls.season = 'Весна'
+GROUP BY ls.recruitment_id
+
+UNION ALL
+
+SELECT
+ COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'true') AS postponement_have_right,
+ COUNT(ls.postponement) FILTER (WHERE ls.postponement = 'false') AS postponement_granted,
+ 'Осень' 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) + INTERVAL '12 months' -- 1 января следующего года
+ AND ls.season = 'Осень'
+GROUP BY ls.recruitment_id;
+ Y
+
+
+ 400
+ 320
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ postponement_have_right
+ postponement_have_right
+
+
+ postponement_granted
+ postponement_granted
+
+
+ N
+ Y
+
+
+ 1024
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry.hpl
new file mode 100644
index 0000000..d1c7da3
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry.hpl
@@ -0,0 +1,159 @@
+
+
+
+ m_d.rec_cam(m_c)_to_person_registry
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Update
+ Y
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ r.gender,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ CASE
+ WHEN (r.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
+ THEN 'Весна'
+ WHEN (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30'))
+ THEN 'Осень'
+ END AS spring_autumn,
+ r.birth_date,
+ 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.gender = 'MALE' AND
+ 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.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
+ OR
+ (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30')))
+)
+SELECT
+ ri.recruitment_id,
+ ri.spring_autumn,
+ current_date AS recording_date,
+ COUNT(DISTINCT ri.recruit_id) FILTER (
+ WHERE
+ ri.hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS recruit
+FROM vse AS ri
+GROUP BY ri.recruitment_id, ri.spring_autumn
+ Y
+
+
+ 464
+ 320
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ new_recruits
+ recruit
+
+
+ N
+ Y
+
+
+ 1056
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry_uniq.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
new file mode 100644
index 0000000..31c3d57
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_person_registry_uniq.hpl
@@ -0,0 +1,185 @@
+
+
+
+ m_d.rec_cam(m_c)_to_person_registry_uniq
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Update
+ Y
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+),
+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
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ r.gender,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ 'Весна' AS spring_autumn,
+ r.birth_date,
+ 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.gender = 'MALE' AND
+ 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 WHERE spring_autumn = 'Весна')
+ AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
+
+
+ UNION ALL
+
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ r.gender,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ 'Осень' AS spring_autumn,
+ r.birth_date,
+ 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.gender = 'MALE' AND
+ 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 WHERE spring_autumn = 'Осень')
+ AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30'))
+)
+SELECT
+ ri.recruitment_id,
+ ri.spring_autumn,
+ current_date AS recording_date,
+ COUNT(DISTINCT ri.recruit_id) FILTER (
+ WHERE
+ ri.hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS recruit
+FROM vse AS ri
+GROUP BY ri.recruitment_id, ri.spring_autumn
+ Y
+
+
+ 464
+ 320
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ N
+
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ main_dashboard
+
+
+ new_recruits
+ recruit
+
+
+ N
+ N
+
+
+ 1024
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry.hpl
new file mode 100644
index 0000000..fc6f589
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry.hpl
@@ -0,0 +1,258 @@
+
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/осень
+ Update
+ Y
+
+
+
+ Table input (subpoena) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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
+ 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 = '3'
+ 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')
+ )
+),
+season_separations AS (
+ SELECT DISTINCT
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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 (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ THEN 'Весна'
+ WHEN (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days')
+ THEN 'Осень'
+ END AS spring_autumn
+ FROM subpoena_data ls
+ WHERE --ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+ ((ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ or
+ (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days'))
+),
+season_separations_clean AS (
+ SELECT DISTINCT recruitment_id, spring_autumn FROM season_separations
+),
+t1 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_subpoena
+ FROM season_separations ss
+ WHERE sub_stat_hist IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist IN ('4.1', '4.2')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_not_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(t1.count_subpoena, 0) AS count_subpoena,
+ COALESCE(t2.count_appeared, 0) AS count_appeared,
+ COALESCE(t3.count_not_appeared, 0) AS count_not_appeared,
+ COALESCE(ROUND(COALESCE(t2.count_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS appeared_on_subpoenas_percent,
+ COALESCE(ROUND(COALESCE(t3.count_not_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS not_appeared_on_subpoenas_percent,
+ 0 AS new_recruits,
+ 0 AS postponement_have_right,
+ 0 AS postponement_granted,
+ 0 AS postponement_have_right_percent,
+ 0 AS postponement_granted_percent,
+ ss.spring_autumn,
+ ss.recruitment_id
+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
+ Y
+
+
+ 288
+ 320
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ subpoenas_sent
+ count_subpoena
+
+
+ appeared_on_subpoenas
+ count_appeared
+
+
+ not_appeared_on_subpoenas
+ count_not_appeared
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+
+
+ N
+ Y
+
+
+ 928
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
new file mode 100644
index 0000000..37ee0e4
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/m_d.rec_cam(m_c)_to_subpoena_registry_uniq.hpl
@@ -0,0 +1,341 @@
+
+
+
+ m_d.rec_cam(m_c)_to_subpoena_registry_uniq
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/осень
+ Update
+ Y
+
+
+
+ Table input (subpoena) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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,
+ 'Весна' AS season
+ 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 = '3'
+ 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 WHERE spring_autumn = 'Весна')
+ 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')
+ )
+ UNION ALL
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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,
+ 'Осень' AS season
+ 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 = '3'
+ 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 WHERE spring_autumn = 'Осень')
+ 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')
+ )
+),
+season_separations AS (
+ SELECT DISTINCT
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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,
+ ls.season AS spring_autumn
+ FROM subpoena_data ls
+ WHERE (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '4 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '7 months' + INTERVAL '14 days')
+ AND ls.season = 'Весна'
+
+ --WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+
+ UNION ALL
+
+ SELECT DISTINCT
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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,
+ ls.season AS spring_autumn
+ FROM subpoena_data ls
+ WHERE (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '10 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '30 days')
+ AND ls.season = 'Осень'
+
+ --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
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_subpoena
+ FROM season_separations ss
+ WHERE sub_stat_hist IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist IN ('4.1', '4.2')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT subpoena_id) AS count_not_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(t1.count_subpoena, 0) AS count_subpoena,
+ COALESCE(t2.count_appeared, 0) AS count_appeared,
+ COALESCE(t3.count_not_appeared, 0) AS count_not_appeared,
+ COALESCE(ROUND(COALESCE(t2.count_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS appeared_on_subpoenas_percent,
+ COALESCE(ROUND(COALESCE(t3.count_not_appeared, 0) * 100.0 / NULLIF(COALESCE(t1.count_subpoena, 0), 0), 2), 0) AS not_appeared_on_subpoenas_percent,
+ 0 AS new_recruits,
+ 0 AS postponement_have_right,
+ 0 AS postponement_granted,
+ 0 AS postponement_have_right_percent,
+ 0 AS postponement_granted_percent,
+ ss.spring_autumn,
+ ss.recruitment_id
+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;
+ Y
+
+
+ 656
+ 336
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ subpoenas_sent
+ count_subpoena
+
+
+ appeared_on_subpoenas
+ count_appeared
+
+
+ not_appeared_on_subpoenas
+ count_not_appeared
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+
+
+ N
+ Y
+
+
+ 1056
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/postponement_percents.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/postponement_percents.hpl
new file mode 100644
index 0000000..c2efea3
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/postponement_percents.hpl
@@ -0,0 +1,112 @@
+
+
+
+ postponement_percents
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/21 14:21:43.089
+ -
+ 2025/03/21 14:21:43.089
+
+
+
+
+
+ Table input
+ Update
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ current_date AS recording_date,
+ spring_autumn,
+ recruitment_id,
+ ROUND(COALESCE(SUM(postponement_have_right) * 100 / NULLIF(SUM(new_recruits), 0), 0), 1) AS postponement_have_right_percent,
+ ROUND(COALESCE(SUM(postponement_granted) * 100 / NULLIF(SUM(new_recruits), 0), 0), 1) AS postponement_granted_percent
+FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'empty'
+GROUP BY recruitment_id, spring_autumn;
+ N
+
+
+ 480
+ 256
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ postponement_have_right_percent
+ postponement_have_right_percent
+
+
+ postponement_granted_percent
+ postponement_granted_percent
+
+
+ N
+ Y
+
+
+ 800
+ 256
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination.hpl
new file mode 100644
index 0000000..9d5387b
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination.hpl
@@ -0,0 +1,126 @@
+
+
+
+ recruitment_season_combination
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 14:06:15.043
+ -
+ 2025/03/20 14:06:15.043
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Insert / update (main_dashboard.recruitment_campaign)
+ Y
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 1168
+ 304
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+season_separations AS (
+ SELECT 'Весна' AS spring_autumn
+ UNION ALL
+ SELECT 'Осень' AS spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ i.recruitment_id AS recruitment_id,
+ ss.spring_autumn
+FROM ids i
+CROSS JOIN season_separations ss
+ Y
+
+
+ 624
+ 304
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination_uniq.hpl b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination_uniq.hpl
new file mode 100644
index 0000000..9d87a89
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.recruitment_campaign(m_c)/recruitment_season_combination_uniq.hpl
@@ -0,0 +1,124 @@
+
+
+
+ recruitment_season_combination_uniq
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 14:06:15.043
+ -
+ 2025/03/20 14:06:15.043
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Insert / update (main_dashboard.recruitment_campaign)
+ Y
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 1056
+ 320
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ i.recruitment_id AS recruitment_id,
+ i.spring_autumn
+FROM ids i;
+ Y
+
+
+ 512
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c).hpl
new file mode 100644
index 0000000..a0cb3fa
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c).hpl
@@ -0,0 +1,429 @@
+
+
+
+ main_dashboard.total_registered(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ N
+
+
+ Select values 2 2
+ Insert / update (main_dashboard.total_registered) 2
+ N
+
+
+ Table input (person_registry) регион
+ Get variables 2 2
+ N
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 704
+ 480
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 912
+ 480
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hpl
new file mode 100644
index 0000000..a0cb3fa
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hpl
@@ -0,0 +1,429 @@
+
+
+
+ main_dashboard.total_registered(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ N
+
+
+ Select values 2 2
+ Insert / update (main_dashboard.total_registered) 2
+ N
+
+
+ Table input (person_registry) регион
+ Get variables 2 2
+ N
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 704
+ 480
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 912
+ 480
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hwf b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hwf
new file mode 100644
index 0000000..2f9cedc
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ main_dashboard.total_registered(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 14:43:03.816
+ -
+ 2025/03/31 14:43:03.816
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 544
+ 304
+
+
+
+ main_dashboard.total_registered_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 144
+
+
+
+ main_dashboard.total_registered_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 224
+
+
+
+ main_dashboard.total_registered_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 304
+
+
+
+ main_dashboard.total_registered_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 384
+
+
+
+ main_dashboard.total_registered_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 464
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1392
+ 144
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1392
+ 224
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1392
+ 304
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1392
+ 384
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1392
+ 464
+
+
+
+
+
+ Start
+ main_dashboard.total_registered_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.total_registered_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.total_registered_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.total_registered_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.total_registered_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ main_dashboard.total_registered_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr1(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr1(m_c).hpl
new file mode 100644
index 0000000..04c8bcc
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr1(m_c).hpl
@@ -0,0 +1,327 @@
+
+
+
+ main_dashboard.total_registered_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id
+),
+/*
+last_status as (select recruit_id,
+ max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
+ from recruits_history
+ where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
+ group by recruit_id),
+registered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr2(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr2(m_c).hpl
new file mode 100644
index 0000000..64c6703
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr2(m_c).hpl
@@ -0,0 +1,327 @@
+
+
+
+ main_dashboard.total_registered_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id
+),
+/*
+last_status as (select recruit_id,
+ max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
+ from recruits_history
+ where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
+ group by recruit_id),
+registered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr3(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr3(m_c).hpl
new file mode 100644
index 0000000..327401a
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr3(m_c).hpl
@@ -0,0 +1,327 @@
+
+
+
+ main_dashboard.total_registered_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id
+),
+/*
+last_status as (select recruit_id,
+ max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
+ from recruits_history
+ where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
+ group by recruit_id),
+registered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr4(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr4(m_c).hpl
new file mode 100644
index 0000000..d123618
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr4(m_c).hpl
@@ -0,0 +1,327 @@
+
+
+
+ main_dashboard.total_registered_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id
+),
+/*
+last_status as (select recruit_id,
+ max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
+ from recruits_history
+ where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
+ group by recruit_id),
+registered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr5(m_c).hpl b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr5(m_c).hpl
new file mode 100644
index 0000000..3168f5d
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.total_registered(m_c)/main_dashboard.total_registered_pr5(m_c).hpl
@@ -0,0 +1,327 @@
+
+
+
+ main_dashboard.total_registered_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1168
+ 320
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id
+),
+/*
+last_status as (select recruit_id,
+ max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
+ from recruits_history
+ where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
+ group by recruit_id),
+registered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
+ --and rh.source is not null
+ ),
+*/
+vse AS (
+ SELECT
+ --distinct
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
+ r.current_recruitment_id AS r_current_recruitment_id,
+ r.gender,
+ r.birth_date,
+ --r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ --JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE r.current_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
+/*
+ r.id in (SELECT recruit_id FROM registered) and
+ rh.id in (SELECT recruit_history_id FROM registered) and
+ coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_current_recruitment_id::uuid AS recruitment_id,
+ ri.convicts,
+ COUNT(distinct ri.recruit_id) AS total_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_current_recruitment_id, ri.convicts
+),
+recruit_data_all AS (
+ SELECT
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total_count) AS total_count,
+ SUM(male_count) AS male_count,
+ SUM(female_count) AS female_count,
+ SUM(mobilization_criterion) AS mobilization_criterion,
+ SUM(volunteer_criterion) AS volunteer_criterion,
+ SUM(contract_criterion) AS contract_criterion
+ FROM recruit_data
+ GROUP BY recruitment_id
+)
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
+
+UNION ALL
+
+SELECT
+ ids.recruitment_id,
+ rd.convicts,
+ current_date AS recording_date,
+ COALESCE(rd.total_count, 0) AS total_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM ids
+JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id
+ Y
+
+
+ 496
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c).hpl
new file mode 100644
index 0000000..1ac7202
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c).hpl
@@ -0,0 +1,369 @@
+
+
+
+ main_dashboard.waiting_registration(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 5
+ Select values 5
+ N
+
+
+ Select values 5
+ Insert / update (main_dashboard.waiting_registration) 2
+ N
+
+
+ Table input 2 (person_registry) регион
+ Get variables 5
+ N
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Get variables 5
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 576
+ 416
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Select values 5
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 720
+ 416
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+last_status as (select recruit_id,
+ max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history rh
+ join recruits r on r.id = rh.recruit_id
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+ and r.current_recruitment_id is null
+ group by rh.recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ --AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hpl
new file mode 100644
index 0000000..48a9f11
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+last_status as (select recruit_id,
+ max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf
new file mode 100644
index 0000000..70f7f97
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ main_dashboard.waiting_registration(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 10:12:19.214
+ -
+ 2025/03/31 10:12:19.214
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 688
+ 416
+
+
+
+ main_dashboard.waiting_registration_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1568
+ 256
+
+
+
+ main_dashboard.waiting_registration_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1568
+ 336
+
+
+
+ main_dashboard.waiting_registration_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1568
+ 416
+
+
+
+ main_dashboard.waiting_registration_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1568
+ 496
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1808
+ 256
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1808
+ 336
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1808
+ 416
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1808
+ 496
+
+
+
+ main_dashboard.waiting_registration_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1568
+ 576
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1808
+ 576
+
+
+
+
+
+ main_dashboard.waiting_registration_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+ Start
+ main_dashboard.waiting_registration_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.waiting_registration_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.waiting_registration_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.waiting_registration_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ main_dashboard.waiting_registration_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl
new file mode 100644
index 0000000..27531bc
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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 in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl
new file mode 100644
index 0000000..5a66932
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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 in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl
new file mode 100644
index 0000000..6cf641c
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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 in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl
new file mode 100644
index 0000000..208c357
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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 in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl
new file mode 100644
index 0000000..e37554e
--- /dev/null
+++ b/mappings/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl
@@ -0,0 +1,265 @@
+
+
+
+ main_dashboard.waiting_registration_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input 2 (person_registry) регион
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1024
+ 240
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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 in ('1', '12.7', '8.2', '8.3')) max_date_time
+ from recruits_history
+ where status in ('1', '12.7', '8.2', '8.3')
+ group by recruit_id),
+notregistered as (
+ select
+ distinct rh.recruit_id,
+ rh.id as recruit_history_id
+ from recruits_history rh
+ join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
+ where rh.status in ('1', '12.7', '8.2', '8.3')
+--and rh.source is not null
+),
+vse AS (
+ SELECT
+ r.id AS r_id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
+ r.gender,
+ r.birth_date,
+ -- r.conscription,
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd
+ WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text
+ )
+ ELSE
+ false
+ END AS uchet_pnd,
+ CASE
+ WHEN ddd.hidden IS false THEN ddd.hidden
+ ELSE true
+ END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
+ ri.info
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri
+ ON ri.recruit_id = r.id
+ JOIN public.recruits_history rh on rh.recruit_id=r.id
+ LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
+ WHERE
+ r.id in (SELECT recruit_id FROM notregistered) and
+ rh.id in (SELECT recruit_history_id FROM notregistered) and
+ coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+extracted_children AS (
+ SELECT
+ ri.recruit_id,
+ jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
+ FROM vse ri
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
+),
+children_birth_dates AS (
+ SELECT
+ recruit_id,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
+ (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
+ FROM extracted_children
+),
+children_count AS (
+ SELECT
+ recruit_id,
+ COUNT(*) AS children_under_16
+ FROM children_birth_dates
+ WHERE AGE(make_date(year, month, day)) < interval '16 years'
+ GROUP BY recruit_id
+),
+recruit_data AS (
+ SELECT
+ ri.r_target_recruitment_id::uuid AS recruitment_id,
+ COUNT(distinct ri.recruit_id) AS waiting_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
+ COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
+ OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
+ AND COALESCE(cc.children_under_16, 0) < 5
+ ) AS mobilization_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
+ AND gender = 'MALE'
+ AND hidden IS true -- нет отсрочки и нет освобождения от службы
+ ) AS volunteer_criterion, -- критерии от 03.06.2025
+
+ COUNT(distinct ri.recruit_id) FILTER (
+ WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
+ AND gender = 'MALE'
+ AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
+ OR uchet_pnd is false)
+ AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ
+ --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
+ ) AS contract_criterion -- критерии от 03.06.2025
+ FROM vse AS ri
+ LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
+ GROUP BY ri.r_target_recruitment_id
+)
+SELECT
+ rd.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(rd.waiting_count, 0) AS waiting_count,
+ COALESCE(rd.male_count, 0) AS male_count,
+ COALESCE(rd.female_count, 0) AS female_count,
+ COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
+ COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
+ COALESCE(rd.contract_criterion, 0) AS contract_criterion,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS mobilization_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS volunteer_criterion_percent,
+ CASE
+ WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
+ ELSE 0
+ END AS contract_criterion_percent
+FROM recruit_data AS rd
+ Y
+
+
+ 336
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/add_schema.hpl b/mappings/mil_com/parameters/add_schema.hpl
new file mode 100644
index 0000000..30303dd
--- /dev/null
+++ b/mappings/mil_com/parameters/add_schema.hpl
@@ -0,0 +1,1801 @@
+
+
+
+ add_schema
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/17 12:24:07.728
+ -
+ 2025/01/17 12:24:07.728
+
+
+
+
+
+ Table input
+ Insert / update (main_dashboard.total_registered)
+ N
+
+
+ Table input
+ Insert / update (main_dashboard.waiting_registration)
+ N
+
+
+ Table input
+ Insert / update (total_registered.reg_mil_cat)
+ N
+
+
+ Table input
+ Insert / update (total_registered.removed_registry)
+ N
+
+
+ Table input
+ Insert / update (total_registered.subpoenas)
+ N
+
+
+ Table input
+ Insert / update (total_registered.driver_license)
+ N
+
+
+ Table input
+ Insert / update (total_registered.child_minor)
+ N
+
+
+ Table input
+ Insert / update (total_registered.age)
+ N
+
+
+ Table input
+ Insert / update (total_registered.marital_status)
+ N
+
+
+ Table input
+ Insert / update (total_registered.education_level)
+ N
+
+
+ Table input
+ Insert / update (recruitment_campaign.appeals)
+ N
+
+
+ Table input
+ Dummy (do nothing)
+ N
+
+
+ Dummy (do nothing)
+ Insert / update (main_dashboard.appeals)
+ N
+
+
+ Table input main_dashboard.recruitment_campaign
+ Insert / update (main_dashboard.recruitment_campaign)
+ N
+
+
+ Table input recruitment_campaign.subpoenas
+ Insert / update (recruitment_campaign.subpoenas)
+ N
+
+
+ Table input
+ Insert / update (total_registered.busyness)
+ N
+
+
+ Table input
+ Update (total_registered.driver_license)
+ Y
+
+
+ Table input
+ Update (total_registered.child_minor)
+ Y
+
+
+ Table input
+ Update (total_registered.age)
+ Y
+
+
+ Table input
+ Update (total_registered.marital_status)
+ Y
+
+
+ Table input
+ Update (total_registered.busyness)
+ Y
+
+
+ Table input
+ Update (total_registered.education_level)
+ Y
+
+
+ Table input
+ Update (total_registered.subpoenas)
+ Y
+
+
+ Table input
+ Update (total_registered.removed_registry)
+ Y
+
+
+ Table input
+ Update (total_registered.reg_mil_cat)
+ Y
+
+
+ Table input
+ Update (main_dashboard.waiting_registration)
+ Y
+
+
+ Table input
+ Update (main_dashboard.total_registered)
+ Y
+
+
+ Table input
+ Update (recruitment_campaign.appeals)
+ Y
+
+
+ Table input
+ Update (recruitment_campaign.subpoenas)
+ Y
+
+
+ Table input
+ Update (main_dashboard.recruitment_campaign)
+ Y
+
+
+
+ Dummy (do nothing)
+ Dummy
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 176
+ 464
+
+
+
+ Insert / update (main_dashboard.appeals)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 416
+ 464
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ appeared_on_subpoenas
+ appeared_on_subpoenas
+ N
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+ N
+
+
+ new_recruits
+ new_recruits
+ N
+
+
+ not_appeared_on_subpoenas
+ not_appeared_on_subpoenas
+ N
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+ N
+
+
+ postponement_granted
+ postponement_granted
+ N
+
+
+ postponement_granted_percent
+ postponement_granted_percent
+ N
+
+
+ postponement_have_right
+ postponement_have_right
+ N
+
+
+ postponement_have_right_percent
+ postponement_have_right_percent
+ N
+
+
+ subpoenas_sent
+ subpoenas_sent
+ N
+
+
+ spring_autumn
+ spring_autumn
+ Y
+
+
+ N
+
+
+ 448
+ 272
+
+
+
+ Insert / update (main_dashboard.total_registered)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 176
+ 592
+
+
+
+ Insert / update (main_dashboard.waiting_registration)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 176
+ 672
+
+
+
+ Insert / update (recruitment_campaign.appeals)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 2016
+
+
+
+ Insert / update (recruitment_campaign.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ recruitment_campaign
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ ap_not_required
+ ap_not_required
+ N
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ N
+
+
+ appear_date_is_good
+ appear_date_is_good
+ N
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ N
+
+
+ appeared
+ appeared
+ N
+
+
+ appeared_percent
+ appeared_percent
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ N
+
+
+ introduced_measures
+ introduced_measures
+ N
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ N
+
+
+ not_ap_good_reason
+ not_ap_good_reason
+ N
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ N
+
+
+ not_appeared
+ not_appeared
+ N
+
+
+ not_appeared_percent
+ not_appeared_percent
+ N
+
+
+ not_delivery_percent
+ not_delivery_percent
+ N
+
+
+ rest
+ rest
+ N
+
+
+ restrictions_applied
+ restrictions_applied
+ N
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ N
+
+
+ subpoena
+ subpoena
+ N
+
+
+ spring_autumn
+ spring_autumn
+ Y
+
+
+ N
+
+
+ 448
+ 352
+
+
+
+ Insert / update (total_registered.age)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1616
+
+
+
+ Insert / update (total_registered.busyness)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1776
+
+
+
+ Insert / update (total_registered.child_minor)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1536
+
+
+
+ Insert / update (total_registered.driver_license)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1456
+
+
+
+ Insert / update (total_registered.education_level)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1856
+
+
+
+ Insert / update (total_registered.marital_status)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 0
+ 1696
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 176
+ 752
+
+
+
+ Insert / update (total_registered.removed_registry)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 176
+ 832
+
+
+
+ Insert / update (total_registered.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 176
+ 912
+
+
+
+ Table input
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ idm_id AS recruitment_id,
+ -- parent_id AS PARENT_ID,
+ CASE
+ WHEN schema = 'Department' THEN 'Department'
+ WHEN schema = 'Organization' THEN 'REG_LVL'
+ WHEN schema = 'Region' THEN 'MD_LVL'
+ WHEN schema = 'Ministry' THEN 'Ministry'
+ ELSE schema -- на случай, если появится неизвестное значение
+ END AS schema,
+ current_date AS recording_date
+FROM
+ ervu_dashboard.recruitment
+WHERE schema in ('Department', 'Organization', 'Region')
+ N
+
+
+ 608
+ 928
+
+
+
+ Table input main_dashboard.recruitment_campaign
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH
+season_separations AS (
+ SELECT 'Осень' AS spring_autumn
+ UNION ALL
+ SELECT 'Весна' AS spring_autumn
+)
+ SELECT
+ 0 AS new_recruits,
+ 0 AS subpoenas_sent,
+ 0 AS appeared_on_subpoenas,
+ 0 AS not_appeared_on_subpoenas,
+ 0 AS postponement_have_right,
+ 0 AS postponement_granted,
+ 0 AS appeared_on_subpoenas_percent,
+ 0 AS not_appeared_on_subpoenas_percent,
+ 0 AS postponement_have_right_percent,
+ 0 AS postponement_granted_percent,
+ ss.spring_autumn,
+ idm_id AS recruitment_id,
+ -- parent_id AS PARENT_ID,
+ CASE
+ WHEN schema = 'Department' THEN 'Department'
+ WHEN schema = 'Organization' THEN 'REG_LVL'
+ WHEN schema = 'Region' THEN 'MD_LVL'
+ WHEN schema = 'Ministry' THEN 'Ministry'
+ ELSE schema -- на случай, если появится неизвестное значение
+ END AS schema,
+ current_date AS recording_date
+FROM
+ ervu_dashboard.recruitment
+CROSS JOIN season_separations ss
+WHERE schema in ('Department', 'Organization', 'Region')
+ N
+
+
+ 80
+ 272
+
+
+
+ Table input recruitment_campaign.subpoenas
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH
+season_separations AS (
+ SELECT 'Осень' AS spring_autumn
+ UNION ALL
+ SELECT 'Весна' AS spring_autumn
+)
+ SELECT
+ 0 AS subpoena,
+ 0 AS appeared,
+ 0 AS not_appeared,
+ 0 AS not_ap_good_reason,
+ 0 AS ap_not_required,
+ 0 AS restrictions_applied,
+ 0 AS appeared_percent,
+ 0 AS not_appeared_percent,
+ 0 AS not_ap_good_reason_percent,
+ 0 AS ap_not_required_percent,
+ 0 AS restrictions_applied_percent,
+ 0 AS introduced_measures,
+ 0 AS introduced_measures_percent,
+ 0 AS rest,
+ 0 AS count_not_delivery,
+ 0 AS not_delivery_percent,
+ 0 AS appear_date_is_good,
+ 0 AS appear_date_is_good_percent,
+ ss.spring_autumn,
+ idm_id AS recruitment_id,
+ -- parent_id AS PARENT_ID,
+ CASE
+ WHEN schema = 'Department' THEN 'Department'
+ WHEN schema = 'Organization' THEN 'REG_LVL'
+ WHEN schema = 'Region' THEN 'MD_LVL'
+ WHEN schema = 'Ministry' THEN 'Ministry'
+ ELSE schema -- на случай, если появится неизвестное значение
+ END AS schema,
+ current_date AS recording_date
+FROM
+ ervu_dashboard.recruitment
+CROSS JOIN season_separations ss
+WHERE schema in ('Department', 'Organization', 'Region')
+ N
+
+
+ 80
+ 352
+
+
+
+ Update (main_dashboard.recruitment_campaign)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ main_dashboard
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 320
+
+
+
+ Update (main_dashboard.total_registered)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 480
+
+
+
+ Update (main_dashboard.waiting_registration)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ main_dashboard
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 560
+
+
+
+ Update (recruitment_campaign.appeals)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 1376
+
+
+
+ Update (recruitment_campaign.subpoenas)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 400
+
+
+
+ Update (total_registered.age)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 1040
+
+
+
+ Update (total_registered.busyness)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 1200
+
+
+
+ Update (total_registered.child_minor)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 960
+
+
+
+ Update (total_registered.driver_license)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 880
+
+
+
+ Update (total_registered.education_level)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 1280
+
+
+
+ Update (total_registered.marital_status)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 1120
+
+
+
+ Update (total_registered.reg_mil_cat)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 640
+
+
+
+ Update (total_registered.removed_registry)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 720
+
+
+
+ Update (total_registered.subpoenas)
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ schema
+ schema
+
+
+ N
+ Y
+
+
+ 1200
+ 800
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/array_recruitment_for_parallel.hpl b/mappings/mil_com/parameters/array_recruitment_for_parallel.hpl
new file mode 100644
index 0000000..396b2c5
--- /dev/null
+++ b/mappings/mil_com/parameters/array_recruitment_for_parallel.hpl
@@ -0,0 +1,113 @@
+
+
+
+ array_recruitment_for_parallel
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/31 10:14:04.435
+ -
+ 2025/03/31 10:14:04.435
+
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 1040
+ 384
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH ids AS (
+ SELECT idm_id,
+ NTILE(5) OVER (ORDER BY idm_id) AS part -- Разбиваем на 5 частей
+ FROM ervu_dashboard.recruitment
+ WHERE schema IN ('Department', 'Organization', 'Region')
+),
+grouped AS (
+ SELECT
+ array_agg(idm_id) FILTER (WHERE part = 1) AS part_1,
+ array_agg(idm_id) FILTER (WHERE part = 2) AS part_2,
+ array_agg(idm_id) FILTER (WHERE part = 3) AS part_3,
+ array_agg(idm_id) FILTER (WHERE part = 4) AS part_4,
+ array_agg(idm_id) FILTER (WHERE part = 5) AS part_5
+ FROM ids
+),
+split_parts AS (
+ SELECT
+ gs.row_num,
+ (SELECT array_agg(val) FROM unnest(part_1) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_1, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_1, 1) * gs.row_num / 2) AS PART_RECRUITMENT_1,
+ (SELECT array_agg(val) FROM unnest(part_2) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_2, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_2, 1) * gs.row_num / 2) AS PART_RECRUITMENT_2,
+ (SELECT array_agg(val) FROM unnest(part_3) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_3, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_3, 1) * gs.row_num / 2) AS PART_RECRUITMENT_3,
+ (SELECT array_agg(val) FROM unnest(part_4) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_4, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_4, 1) * gs.row_num / 2) AS PART_RECRUITMENT_4,
+ (SELECT array_agg(val) FROM unnest(part_5) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_5, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_5, 1) * gs.row_num / 2) AS PART_RECRUITMENT_5
+ FROM grouped
+ CROSS JOIN generate_series(1, 2) gs(row_num)
+)
+SELECT
+PART_RECRUITMENT_1,
+PART_RECRUITMENT_2,
+PART_RECRUITMENT_3,
+PART_RECRUITMENT_4,
+PART_RECRUITMENT_5
+FROM split_parts;
+ N
+
+
+ 672
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/array_recruitments.hpl b/mappings/mil_com/parameters/array_recruitments.hpl
new file mode 100644
index 0000000..b691c7f
--- /dev/null
+++ b/mappings/mil_com/parameters/array_recruitments.hpl
@@ -0,0 +1,101 @@
+
+
+
+ array_recruitments
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/17 10:29:53.663
+ -
+ 2025/01/17 10:29:53.663
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 42
+ 768
+ 203
+ ARRAY_MIL_COM - алиас (массив idm_id всех военкоматов)
+ARR_MC - параметр
+ 339
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 768
+ 336
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ WITH ids AS (
+ SELECT idm_id,
+ (ROW_NUMBER() OVER ()) - 1 AS rn
+ FROM ervu_dashboard.recruitment
+ WHERE schema IN ('Department', 'Organization', 'Region')
+ --LIMIT 200
+)
+SELECT array_agg(idm_id) AS ARRAY_MIL_COM
+FROM ids
+GROUP BY rn / 100;
+ N
+
+
+ 512
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/ft_main_dashboard.appeals(m_c).hpl b/mappings/mil_com/parameters/ft_main_dashboard.appeals(m_c).hpl
new file mode 100644
index 0000000..0189b69
--- /dev/null
+++ b/mappings/mil_com/parameters/ft_main_dashboard.appeals(m_c).hpl
@@ -0,0 +1,310 @@
+
+
+
+ ft_main_dashboard.appeals(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ N
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals) 2
+ N
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ N
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL')
+
+
+
+ 208
+ 192
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REС_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 432
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ main_dashboard
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ average_to_face
+ average_to_face
+ Y
+
+
+ "average_EPGU"
+ average_epgu
+ Y
+
+
+ average_to_face_percent
+ average_to_face_percent
+ Y
+
+
+ "average_EPGU_percent"
+ average_epgu_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ Y
+
+
+ 1024
+ 192
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REС_ID
+ REС_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 800
+ 432
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ postgres.appeal-document-service
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+t1 AS (
+ SELECT
+ COUNT(*) AS total_appeals,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document
+ WHERE vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY vk_id
+),
+t2 AS (
+ SELECT
+ ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document ad
+ WHERE vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ AND ad.extra_info ->> 'resultDate' IS NOT NULL
+ AND ad.extra_info ->> 'resultDate' != ''
+ GROUP BY vk_id
+),
+resolved AS (
+ SELECT
+ COUNT(*) AS resolved,
+ vk_id::uuid AS recruitment_id
+ FROM public.appeal_document ad
+ WHERE ad.extra_info ->> 'result' = '1'
+ AND vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY vk_id
+)
+SELECT
+ COALESCE(t1.total_appeals, 0) AS total_appeals,
+ COALESCE(t2.average_consideration, 0) AS average_consideration,
+ COALESCE(resolved.resolved, 0) AS resolved,
+ ids.recruitment_id,
+ 0 AS average_rating,
+ 0 AS average_to_face,
+ 0 AS average_epgu,
+ 0 AS average_to_face_percent,
+ 0 AS average_epgu_percent
+FROM ids
+LEFT JOIN t1 ON ids.recruitment_id = t1.recruitment_id
+LEFT JOIN t2 ON ids.recruitment_id = t2.recruitment_id
+LEFT JOIN resolved ON ids.recruitment_id = resolved.recruitment_id;
+ Y
+
+
+ 448
+ 192
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/row_idm_schema.hpl b/mappings/mil_com/parameters/row_idm_schema.hpl
new file mode 100644
index 0000000..558ea9b
--- /dev/null
+++ b/mappings/mil_com/parameters/row_idm_schema.hpl
@@ -0,0 +1,74 @@
+
+
+
+ row_idm_schema
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/17 12:15:03.930
+ -
+ 2025/01/17 12:15:03.930
+
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT idm_id AS ROW_ID_MIL_COM,
+schema AS ROW_SCHEMA
+FROM ervu_dashboard.recruitment
+
+ N
+
+
+ 512
+ 336
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 800
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/season_separation/array_season_recruitments.hpl b/mappings/mil_com/parameters/season_separation/array_season_recruitments.hpl
new file mode 100644
index 0000000..58e9e3a
--- /dev/null
+++ b/mappings/mil_com/parameters/season_separation/array_season_recruitments.hpl
@@ -0,0 +1,114 @@
+
+
+
+ array_season_recruitments
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 10:44:35.298
+ -
+ 2025/03/20 10:44:35.298
+
+
+
+
+
+ Table input определенные вк
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 832
+ 240
+
+
+
+ Table input определенные вк
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ ARRAY[
+ '55158cc6-1342-4701-ab2b-855a6389906d'::UUID, -- Военный комиссариат Провиденского и Чукотского районов Чукотского автономного округа
+ 'd35584cf-8405-42ea-9944-25bfe5725347', -- Военный комиссариат Охотского Аяно-Майского и Тугуро-Чумиканского районов Хабаровского края
+ 'b960d9a3-97c5-42ff-9fa7-1843114392a0', -- Военный комиссариат Тигильского Карагинского Олюторского и Пенжинского районов Камчатского края
+ 'ab335d7b-7966-470d-89b3-72cee950839d', -- Военный комиссариат Оймяконского и Момского улусов Республики Саха (Якутия)
+ '1dea48be-40fb-42bd-9df8-14d0cfd3fd12', -- Военный комиссариат Нижнеколымского и Среднеколымского улусов Республики Саха (Якутия)
+ '018b8e04-2714-402a-961b-39877b9ee698', -- Военный комиссариат Верхоянского и Эвено-Бытантайского улусов Республики Саха (Якутия)
+ '18e818af-ef45-49ee-aea2-d0f3516ddf1d', -- Военный комиссариат Верхнеколымского улуса Республики Саха (Якутия)
+ 'b2ec295c-47a4-4be9-a6f8-827096f9857d', -- Военный комиссариат Булунского и Жиганского улусов Республики Саха (Якутия)
+ 'eaffdb79-767f-405c-a1b1-b48bdc63add8' -- Военный комиссариат Усть-Янского Аллаиховского и Абыйского улусов Республики Саха (Якутия)
+ ] AS ARRAY_MIL_COM_SP, -- 1.05-15.07
+ ARRAY[
+ '354f7fbd-467f-4f41-aaad-f0e2e139527e'::UUID, -- Военный комиссариат города Воркута Республики Коми
+ 'ce2b0297-d1e8-422a-8367-b7e3a5cc7a40', -- Военный комиссариат города Инта Республики Коми
+ 'c023af4a-ad27-4539-a1f9-7a3251634fdb', -- Военный комиссариат города Печора и Печорского района Республики Коми
+ '0e44335f-02db-43ac-b713-f09532e675a3', -- Военный комиссариат городов Ухта Вуктыл и Сосногорск Вуктыльского и Сосногорского районов Республики Коми
+ 'e55859e6-9d34-47b7-a969-efc8ceea708b', -- Военный комиссариат Ижемского района Республики Коми
+ 'b9d1002f-d2a7-4d2f-910b-637b2cf332dd', -- Военный комиссариат Княжпогостского и Усть-Вымского районов Республики Коми
+ 'ef2da2e5-0cc1-479c-b2de-c334c95b5514', -- Военный комиссариат Сысольского Койгородского и Прилузского районов Республики Коми
+ '53851a38-fc95-400b-9ff7-00b4dcad2918', -- Военный комиссариат города Сыктывкар Сыктывдинского и Корткеросского районов Республики Коми
+ '2dc1de3a-712a-4376-8baf-7833a43f6678', -- Военный комиссариат Троицко-Печорского района Республики Коми
+ 'a6db3dba-65e3-4ad9-a76e-a846efec2a2d', -- Военный комиссариат Удорского района Республики Коми
+ '630ba6cd-c979-4d35-b128-f6e2527949ef', -- Военный комиссариат города Усинск и Усинского района Республики Коми
+ '231361d3-3d34-4409-8a30-20c4b013d62c', -- Военный комиссариат Усть-Куломского района Республики Коми
+ '6466af82-e8be-416d-88c9-cef02f99fef0', -- Военный комиссариат Усть-Цилемского района Республики Коми
+ '83c89e3d-aa69-43bc-857c-59ce405b9e1e', -- Военный комиссариат Туруханского района и города Игарка Красноярского края
+ 'ec2c03cd-9c13-4980-9f6d-ba4a93a9a411', -- Военный комиссариат города Лесосибирск и Мотыгинского района Красноярского края
+ 'd386bf1f-42bd-436f-8b14-288b2cbe1046', -- какой то Северо-Енисейский безымянный военкомат
+ '61b5758c-c72b-426e-a96f-e146d89197c2', -- Военный комиссариат города Норильск и Таймырского Долгано-Ненецкого района Красноярского края
+ '9f1a1e68-2fd2-478c-b6ba-b04cc6b752b3', -- Военный комиссариат Эвенкийского района Красноярского края
+ '7cb704d4-b600-4ce9-bddf-723e1b024f98', -- Военный комиссариат Гайнского района Пермского края
+ 'be515915-26e8-41c8-af21-3b53d991d632', -- Военный комиссариат Кочевского и Косинского районов Пермского края
+ '28061db5-22ef-46f6-a2af-043c47288885', -- Военный комиссариат Ненецкого автономного округа
+ 'ce08e909-5a14-480f-b931-bff172872ac6', -- ВК городских округов Курильский и Северо-Курильский Сахалинской области
+ 'f578c2c0-72fe-4f3b-bcf7-659bda20f511', -- Военный комиссариат города Губкинский Пуровского и Красноселькупского районов Ямало-Ненецкого автономного округа
+ '5a0c4a0c-1d00-4528-9dcc-73c8d6dd52b9', -- Военный комиссариат города Лабытнанги и Шурышкарского района Ямало-Ненецкого автономного округа
+ '50af0e45-872b-48e8-bf74-c13b2162e3ce', -- Военный комиссариат городов Ноябрьск и Муравленко Ямало-Ненецкого автономного округа
+ 'a8852d04-516d-4ea4-9979-5eb149e9ac7e', -- Военный комиссариат города Новый Уренгой Ямало-Ненецкого автономного округа
+ '9464d4df-9402-4eb2-abb2-c68b079ad5cf', -- Военный комиссариат города Салехард и Приуральского района Ямало-Ненецкого автономного округа
+ 'b778245a-0257-4d93-a51c-fa7005e4a480', -- Военный комиссариат города Надым и Надымского района Ямало-Ненецкого автономного округа
+ '2e18cd11-bbca-406d-a2b8-0a89cbb2046e', -- Военный комиссариат Тазовского района Ямало-Ненецкого автономного округа
+ 'a4126a2d-3412-47cd-aa90-caa62e202c7f' -- Военный комиссариат Ямальского района Ямало-Ненецкого автономного округа
+ ] AS ARRAY_MIL_COM_AU -- 1.11-31.12
+ N
+
+
+ 512
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/season_separation/array_season_recruitments_all.hpl b/mappings/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
new file mode 100644
index 0000000..b2dbe45
--- /dev/null
+++ b/mappings/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
@@ -0,0 +1,121 @@
+
+
+
+ array_season_recruitments_all
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 10:44:35.298
+ -
+ 2025/03/20 10:44:35.298
+
+
+
+
+
+ Table input остальные
+ Copy rows to result 2
+ Y
+
+
+
+ Copy rows to result 2
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 832
+ 352
+
+
+
+ Table input остальные
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ WITH ids AS (
+ SELECT idm_id,
+ (ROW_NUMBER() OVER ()) - 1 AS rn
+ FROM ervu_dashboard.recruitment
+ WHERE schema IN ('Department', 'Organization', 'Region')
+ --LIMIT 200
+ AND idm_id NOT IN (
+ '55158cc6-1342-4701-ab2b-855a6389906d'::UUID, -- Военный комиссариат Провиденского и Чукотского районов Чукотского автономного округа
+ 'd35584cf-8405-42ea-9944-25bfe5725347', -- Военный комиссариат Охотского Аяно-Майского и Тугуро-Чумиканского районов Хабаровского края
+ 'b960d9a3-97c5-42ff-9fa7-1843114392a0', -- Военный комиссариат Тигильского Карагинского Олюторского и Пенжинского районов Камчатского края
+ 'ab335d7b-7966-470d-89b3-72cee950839d', -- Военный комиссариат Оймяконского и Момского улусов Республики Саха (Якутия)
+ '1dea48be-40fb-42bd-9df8-14d0cfd3fd12', -- Военный комиссариат Нижнеколымского и Среднеколымского улусов Республики Саха (Якутия)
+ '018b8e04-2714-402a-961b-39877b9ee698', -- Военный комиссариат Верхоянского и Эвено-Бытантайского улусов Республики Саха (Якутия)
+ '18e818af-ef45-49ee-aea2-d0f3516ddf1d', -- Военный комиссариат Верхнеколымского улуса Республики Саха (Якутия)
+ 'b2ec295c-47a4-4be9-a6f8-827096f9857d', -- Военный комиссариат Булунского и Жиганского улусов Республики Саха (Якутия)
+ 'eaffdb79-767f-405c-a1b1-b48bdc63add8', -- Военный комиссариат Усть-Янского Аллаиховского и Абыйского улусов Республики Саха (Якутия)
+ '354f7fbd-467f-4f41-aaad-f0e2e139527e', -- Военный комиссариат города Воркута Республики Коми
+ 'ce2b0297-d1e8-422a-8367-b7e3a5cc7a40', -- Военный комиссариат города Инта Республики Коми
+ 'c023af4a-ad27-4539-a1f9-7a3251634fdb', -- Военный комиссариат города Печора и Печорского района Республики Коми
+ '0e44335f-02db-43ac-b713-f09532e675a3', -- Военный комиссариат городов Ухта Вуктыл и Сосногорск Вуктыльского и Сосногорского районов Республики Коми
+ 'e55859e6-9d34-47b7-a969-efc8ceea708b', -- Военный комиссариат Ижемского района Республики Коми
+ 'b9d1002f-d2a7-4d2f-910b-637b2cf332dd', -- Военный комиссариат Княжпогостского и Усть-Вымского районов Республики Коми
+ 'ef2da2e5-0cc1-479c-b2de-c334c95b5514', -- Военный комиссариат Сысольского Койгородского и Прилузского районов Республики Коми
+ '53851a38-fc95-400b-9ff7-00b4dcad2918', -- Военный комиссариат города Сыктывкар Сыктывдинского и Корткеросского районов Республики Коми
+ '2dc1de3a-712a-4376-8baf-7833a43f6678', -- Военный комиссариат Троицко-Печорского района Республики Коми
+ 'a6db3dba-65e3-4ad9-a76e-a846efec2a2d', -- Военный комиссариат Удорского района Республики Коми
+ '630ba6cd-c979-4d35-b128-f6e2527949ef', -- Военный комиссариат города Усинск и Усинского района Республики Коми
+ '231361d3-3d34-4409-8a30-20c4b013d62c', -- Военный комиссариат Усть-Куломского района Республики Коми
+ '6466af82-e8be-416d-88c9-cef02f99fef0', -- Военный комиссариат Усть-Цилемского района Республики Коми
+ '83c89e3d-aa69-43bc-857c-59ce405b9e1e', -- Военный комиссариат Туруханского района и города Игарка Красноярского края
+ 'ec2c03cd-9c13-4980-9f6d-ba4a93a9a411', -- Военный комиссариат города Лесосибирск и Мотыгинского района Красноярского края
+ 'd386bf1f-42bd-436f-8b14-288b2cbe1046', -- какой то Северо-Енисейский безымянный военкомат
+ '61b5758c-c72b-426e-a96f-e146d89197c2', -- Военный комиссариат города Норильск и Таймырского Долгано-Ненецкого района Красноярского края
+ '9f1a1e68-2fd2-478c-b6ba-b04cc6b752b3', -- Военный комиссариат Эвенкийского района Красноярского края
+ '7cb704d4-b600-4ce9-bddf-723e1b024f98', -- Военный комиссариат Гайнского района Пермского края
+ 'be515915-26e8-41c8-af21-3b53d991d632', -- Военный комиссариат Кочевского и Косинского районов Пермского края
+ '28061db5-22ef-46f6-a2af-043c47288885', -- Военный комиссариат Ненецкого автономного округа
+ 'ce08e909-5a14-480f-b931-bff172872ac6', -- ВК городских округов Курильский и Северо-Курильский Сахалинской области
+ 'f578c2c0-72fe-4f3b-bcf7-659bda20f511', -- Военный комиссариат города Губкинский Пуровского и Красноселькупского районов Ямало-Ненецкого автономного округа
+ '5a0c4a0c-1d00-4528-9dcc-73c8d6dd52b9', -- Военный комиссариат города Лабытнанги и Шурышкарского района Ямало-Ненецкого автономного округа
+ '50af0e45-872b-48e8-bf74-c13b2162e3ce', -- Военный комиссариат городов Ноябрьск и Муравленко Ямало-Ненецкого автономного округа
+ 'a8852d04-516d-4ea4-9979-5eb149e9ac7e', -- Военный комиссариат города Новый Уренгой Ямало-Ненецкого автономного округа
+ '9464d4df-9402-4eb2-abb2-c68b079ad5cf', -- Военный комиссариат города Салехард и Приуральского района Ямало-Ненецкого автономного округа
+ 'b778245a-0257-4d93-a51c-fa7005e4a480', -- Военный комиссариат города Надым и Надымского района Ямало-Ненецкого автономного округа
+ '2e18cd11-bbca-406d-a2b8-0a89cbb2046e', -- Военный комиссариат Тазовского района Ямало-Ненецкого автономного округа
+ 'a4126a2d-3412-47cd-aa90-caa62e202c7f' -- Военный комиссариат Ямальского района Ямало-Ненецкого автономного округа
+ )
+)
+SELECT array_agg(idm_id) AS ARRAY_MIL_COM
+FROM ids
+GROUP BY rn / 200;
+ N
+
+
+ 512
+ 352
+
+
+
+
+
+
diff --git a/mappings/mil_com/parameters/season_separation/array_season_recruitments_all_parallel.hpl b/mappings/mil_com/parameters/season_separation/array_season_recruitments_all_parallel.hpl
new file mode 100644
index 0000000..b2d6ede
--- /dev/null
+++ b/mappings/mil_com/parameters/season_separation/array_season_recruitments_all_parallel.hpl
@@ -0,0 +1,154 @@
+
+
+
+ array_season_recruitments_all_parallel
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 10:44:35.298
+ -
+ 2025/03/20 10:44:35.298
+
+
+
+
+
+ Table input остальные
+ Copy rows to result 2
+ Y
+
+
+
+ Copy rows to result 2
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 832
+ 352
+
+
+
+ Table input остальные
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ WITH ids AS (
+ SELECT idm_id,
+ NTILE(5) OVER (ORDER BY idm_id) AS part -- Разбиваем на 5 частей
+ FROM ervu_dashboard.recruitment
+ WHERE schema IN ('Department', 'Organization', 'Region')
+ AND idm_id NOT IN (
+ '55158cc6-1342-4701-ab2b-855a6389906d'::UUID, -- Военный комиссариат Провиденского и Чукотского районов Чукотского автономного округа
+ 'd35584cf-8405-42ea-9944-25bfe5725347', -- Военный комиссариат Охотского Аяно-Майского и Тугуро-Чумиканского районов Хабаровского края
+ 'b960d9a3-97c5-42ff-9fa7-1843114392a0', -- Военный комиссариат Тигильского Карагинского Олюторского и Пенжинского районов Камчатского края
+ 'ab335d7b-7966-470d-89b3-72cee950839d', -- Военный комиссариат Оймяконского и Момского улусов Республики Саха (Якутия)
+ '1dea48be-40fb-42bd-9df8-14d0cfd3fd12', -- Военный комиссариат Нижнеколымского и Среднеколымского улусов Республики Саха (Якутия)
+ '018b8e04-2714-402a-961b-39877b9ee698', -- Военный комиссариат Верхоянского и Эвено-Бытантайского улусов Республики Саха (Якутия)
+ '18e818af-ef45-49ee-aea2-d0f3516ddf1d', -- Военный комиссариат Верхнеколымского улуса Республики Саха (Якутия)
+ 'b2ec295c-47a4-4be9-a6f8-827096f9857d', -- Военный комиссариат Булунского и Жиганского улусов Республики Саха (Якутия)
+ 'eaffdb79-767f-405c-a1b1-b48bdc63add8', -- Военный комиссариат Усть-Янского Аллаиховского и Абыйского улусов Республики Саха (Якутия)
+ '354f7fbd-467f-4f41-aaad-f0e2e139527e', -- Военный комиссариат города Воркута Республики Коми
+ 'ce2b0297-d1e8-422a-8367-b7e3a5cc7a40', -- Военный комиссариат города Инта Республики Коми
+ 'c023af4a-ad27-4539-a1f9-7a3251634fdb', -- Военный комиссариат города Печора и Печорского района Республики Коми
+ '0e44335f-02db-43ac-b713-f09532e675a3', -- Военный комиссариат городов Ухта Вуктыл и Сосногорск Вуктыльского и Сосногорского районов Республики Коми
+ 'e55859e6-9d34-47b7-a969-efc8ceea708b', -- Военный комиссариат Ижемского района Республики Коми
+ 'b9d1002f-d2a7-4d2f-910b-637b2cf332dd', -- Военный комиссариат Княжпогостского и Усть-Вымского районов Республики Коми
+ 'ef2da2e5-0cc1-479c-b2de-c334c95b5514', -- Военный комиссариат Сысольского Койгородского и Прилузского районов Республики Коми
+ '53851a38-fc95-400b-9ff7-00b4dcad2918', -- Военный комиссариат города Сыктывкар Сыктывдинского и Корткеросского районов Республики Коми
+ '2dc1de3a-712a-4376-8baf-7833a43f6678', -- Военный комиссариат Троицко-Печорского района Республики Коми
+ 'a6db3dba-65e3-4ad9-a76e-a846efec2a2d', -- Военный комиссариат Удорского района Республики Коми
+ '630ba6cd-c979-4d35-b128-f6e2527949ef', -- Военный комиссариат города Усинск и Усинского района Республики Коми
+ '231361d3-3d34-4409-8a30-20c4b013d62c', -- Военный комиссариат Усть-Куломского района Республики Коми
+ '6466af82-e8be-416d-88c9-cef02f99fef0', -- Военный комиссариат Усть-Цилемского района Республики Коми
+ '83c89e3d-aa69-43bc-857c-59ce405b9e1e', -- Военный комиссариат Туруханского района и города Игарка Красноярского края
+ 'ec2c03cd-9c13-4980-9f6d-ba4a93a9a411', -- Военный комиссариат города Лесосибирск и Мотыгинского района Красноярского края
+ 'd386bf1f-42bd-436f-8b14-288b2cbe1046', -- какой то Северо-Енисейский безымянный военкомат
+ '61b5758c-c72b-426e-a96f-e146d89197c2', -- Военный комиссариат города Норильск и Таймырского Долгано-Ненецкого района Красноярского края
+ '9f1a1e68-2fd2-478c-b6ba-b04cc6b752b3', -- Военный комиссариат Эвенкийского района Красноярского края
+ '7cb704d4-b600-4ce9-bddf-723e1b024f98', -- Военный комиссариат Гайнского района Пермского края
+ 'be515915-26e8-41c8-af21-3b53d991d632', -- Военный комиссариат Кочевского и Косинского районов Пермского края
+ '28061db5-22ef-46f6-a2af-043c47288885', -- Военный комиссариат Ненецкого автономного округа
+ 'ce08e909-5a14-480f-b931-bff172872ac6', -- ВК городских округов Курильский и Северо-Курильский Сахалинской области
+ 'f578c2c0-72fe-4f3b-bcf7-659bda20f511', -- Военный комиссариат города Губкинский Пуровского и Красноселькупского районов Ямало-Ненецкого автономного округа
+ '5a0c4a0c-1d00-4528-9dcc-73c8d6dd52b9', -- Военный комиссариат города Лабытнанги и Шурышкарского района Ямало-Ненецкого автономного округа
+ '50af0e45-872b-48e8-bf74-c13b2162e3ce', -- Военный комиссариат городов Ноябрьск и Муравленко Ямало-Ненецкого автономного округа
+ 'a8852d04-516d-4ea4-9979-5eb149e9ac7e', -- Военный комиссариат города Новый Уренгой Ямало-Ненецкого автономного округа
+ '9464d4df-9402-4eb2-abb2-c68b079ad5cf', -- Военный комиссариат города Салехард и Приуральского района Ямало-Ненецкого автономного округа
+ 'b778245a-0257-4d93-a51c-fa7005e4a480', -- Военный комиссариат города Надым и Надымского района Ямало-Ненецкого автономного округа
+ '2e18cd11-bbca-406d-a2b8-0a89cbb2046e', -- Военный комиссариат Тазовского района Ямало-Ненецкого автономного округа
+ 'a4126a2d-3412-47cd-aa90-caa62e202c7f' -- Военный комиссариат Ямальского района Ямало-Ненецкого автономного округа
+ )
+),
+grouped AS (
+ SELECT
+ array_agg(idm_id) FILTER (WHERE part = 1) AS part_1,
+ array_agg(idm_id) FILTER (WHERE part = 2) AS part_2,
+ array_agg(idm_id) FILTER (WHERE part = 3) AS part_3,
+ array_agg(idm_id) FILTER (WHERE part = 4) AS part_4,
+ array_agg(idm_id) FILTER (WHERE part = 5) AS part_5
+ FROM ids
+),
+split_parts AS (
+ SELECT
+ gs.row_num,
+ (SELECT array_agg(val) FROM unnest(part_1) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_1, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_1, 1) * gs.row_num / 2) AS PART_RECRUITMENT_1,
+ (SELECT array_agg(val) FROM unnest(part_2) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_2, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_2, 1) * gs.row_num / 2) AS PART_RECRUITMENT_2,
+ (SELECT array_agg(val) FROM unnest(part_3) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_3, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_3, 1) * gs.row_num / 2) AS PART_RECRUITMENT_3,
+ (SELECT array_agg(val) FROM unnest(part_4) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_4, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_4, 1) * gs.row_num / 2) AS PART_RECRUITMENT_4,
+ (SELECT array_agg(val) FROM unnest(part_5) WITH ORDINALITY AS t(val, ord)
+ WHERE ord > array_length(part_5, 1) * (gs.row_num - 1) / 2
+ AND ord <= array_length(part_5, 1) * gs.row_num / 2) AS PART_RECRUITMENT_5
+ FROM grouped
+ CROSS JOIN generate_series(1, 2) gs(row_num)
+)
+SELECT
+PART_RECRUITMENT_1,
+PART_RECRUITMENT_2,
+PART_RECRUITMENT_3,
+PART_RECRUITMENT_4,
+PART_RECRUITMENT_5
+FROM split_parts;
+ N
+
+
+ 512
+ 352
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.appeals(m_c).hpl b/mappings/mil_com/recruitment_campaign.appeals(m_c).hpl
new file mode 100644
index 0000000..fcdb9a8
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.appeals(m_c).hpl
@@ -0,0 +1,284 @@
+
+
+
+ recruitment_campaign.appeals(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ N
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ N
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals)
+ N
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals)
+ Y
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 960
+ 416
+
+
+
+ Insert / update (main_dashboard.appeals)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ not_resolved
+ not_resolved
+ Y
+
+
+ not_resolved_percent
+ not_resolved_percent
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ resolved_percent
+ resolved_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ N
+
+
+ 1200
+ 336
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1088
+ 416
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ postgres.appeal-document-service
+ N
+ 0
+ -- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
+WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+season_separations AS (
+ SELECT 'Осень' AS spring_autumn
+ UNION ALL
+ SELECT 'Весна' AS spring_autumn
+),
+data_combinations AS (
+ -- Создаём все комбинации target_recruitment_id и spring_autumn
+ SELECT
+ i.recruitment_id AS recruitment_id,
+ ss.spring_autumn
+ FROM ids i
+ CROSS JOIN season_separations ss
+),
+appeals_data AS (
+ SELECT
+ vk_id AS recruitment_id,
+ COUNT(*) AS total_appeals,
+ ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
+ COUNT(CASE WHEN ad.extra_info->>'result' in ('1', '2') THEN 1 ELSE 0 END) AS resolved,
+ COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 ELSE 0 END) AS not_resolved
+ FROM public.appeal_document ad
+ WHERE vk_id::uuid IN (SELECT recruitment_id FROM ids)
+ AND ad.extra_info ->> 'resultDate' IS NOT NULL AND ad.extra_info ->> 'resultDate'!=''
+ GROUP BY vk_id
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ad.total_appeals, 0) AS total_appeals,
+ COALESCE(ad.average_consideration, 0) AS average_consideration,
+ COALESCE(ad.resolved, 0) AS resolved,
+ COALESCE(ad.not_resolved, 0) AS not_resolved,
+ COALESCE(ROUND(COALESCE(ad.resolved, 0) * 100.0 / NULLIF(ad.total_appeals, 0), 2), 0) AS resolved_percent,
+ COALESCE(ROUND(COALESCE(ad.not_resolved, 0) * 100.0 / NULLIF(ad.total_appeals, 0), 2), 0) AS not_resolved_percent,
+ dc.recruitment_id,
+ 0 AS average_rating,
+ dc.spring_autumn
+FROM data_combinations dc
+LEFT JOIN appeals_data AS ad
+ ON ad.recruitment_id = dc.recruitment_id;
+ Y
+
+
+ 848
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c).hpl b/mappings/mil_com/recruitment_campaign.subpoenas(m_c).hpl
new file mode 100644
index 0000000..f09b272
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c).hpl
@@ -0,0 +1,685 @@
+
+
+
+ recruitment_campaign.subpoenas(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/09 13:13:59.825
+ -
+ 2024/08/09 13:13:59.825
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Get variables 4 3
+ N
+
+
+ Select values 4 3
+ Insert / update (recruitment_campaign.subpoenas) 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Insert / update (recruitment_campaign.subpoenas) 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Update recruitment_campaign.subpoenas
+ Y
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 592
+ 624
+
+
+
+ Insert / update (recruitment_campaign.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ rest
+ rest
+ Y
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1040
+ 624
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 768
+ 624
+
+
+
+ Table input (subpoena) осень/регионы
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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
+ 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 = '3'
+ 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')
+ )
+),
+season_separations AS (
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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 (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ THEN 'Весна'
+ WHEN (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days')
+ THEN 'Осень'
+ END AS spring_autumn
+ FROM subpoena_data ls
+ WHERE --ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+ --AND
+ ((ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ OR
+ (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days'))
+),
+season_separations_clean AS (
+ SELECT DISTINCT recruitment_id, spring_autumn FROM season_separations
+),
+t1 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_subpoena
+ FROM season_separations ss
+ WHERE sub_stat_hist IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ ROUND(
+ AVG(
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ GREATEST(EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp)), 0)
+ ELSE
+ GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp)), 0)
+ END
+ ) FILTER (WHERE
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp))
+ ELSE
+ EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp))
+ END > 0
+ ), 1
+ ) AS average_appeared
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_appeared
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t4 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t5 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_ap_good_reason
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5.1'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t6 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_ap_not_required
+ FROM season_separations ss
+ WHERE sub_stat_hist IN ('3.8', '5.2')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t7 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_restrictions_applied
+ FROM season_separations ss
+ WHERE restr_dc IS NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t8 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_introduced_measures
+ FROM season_separations ss
+ WHERE restr_dc IS NULL AND ap_date IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t9 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_paper
+ FROM season_separations ss
+ WHERE d_code != '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t10 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_electron
+ FROM season_separations ss
+ WHERE d_code = '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t11 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT (DISTINCT ss.rdi_id) AS count_restrictions
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t12 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_delivery
+ FROM season_separations ss
+ WHERE ss.act_number IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t13 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS appear_date_is_good
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ 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,
+ ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
+ ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
+ ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
+ ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
+ ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
+ ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
+ ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
+ ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
+ ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
+ ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
+ ss.recruitment_id,
+ 0 AS rest,
+ ss.spring_autumn
+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
+LEFT JOIN t4 ON ss.recruitment_id = t4.recruitment_id AND ss.spring_autumn = t4.spring_autumn
+LEFT JOIN t5 ON ss.recruitment_id = t5.recruitment_id AND ss.spring_autumn = t5.spring_autumn
+LEFT JOIN t6 ON ss.recruitment_id = t6.recruitment_id AND ss.spring_autumn = t6.spring_autumn
+LEFT JOIN t7 ON ss.recruitment_id = t7.recruitment_id AND ss.spring_autumn = t7.spring_autumn
+LEFT JOIN t8 ON ss.recruitment_id = t8.recruitment_id AND ss.spring_autumn = t8.spring_autumn
+LEFT JOIN t9 ON ss.recruitment_id = t9.recruitment_id AND ss.spring_autumn = t9.spring_autumn
+LEFT JOIN t10 ON ss.recruitment_id = t10.recruitment_id AND ss.spring_autumn = t10.spring_autumn
+LEFT JOIN t11 ON ss.recruitment_id = t11.recruitment_id AND ss.spring_autumn = t11.spring_autumn
+LEFT JOIN t12 ON ss.recruitment_id = t12.recruitment_id AND ss.spring_autumn = t12.spring_autumn
+LEFT JOIN t13 ON ss.recruitment_id = t13.recruitment_id AND ss.spring_autumn = t13.spring_autumn
+ Y
+
+
+ 464
+ 400
+
+
+
+ Update recruitment_campaign.subpoenas
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+
+
+ appeared
+ count_appeared
+
+
+ not_appeared
+ count_not_appeared
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+
+
+ ap_not_required
+ count_ap_not_required
+
+
+ restrictions_applied
+ count_restrictions_applied
+
+
+ appeared_percent
+ appeared_percent
+
+
+ not_appeared_percent
+ not_appeared_percent
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+
+
+ introduced_measures
+ count_introduced_measures
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+
+
+ count_not_delivery
+ count_not_delivery
+
+
+ appear_date_is_good
+ appear_date_is_good
+
+
+ not_delivery_percent
+ not_delivery_percent
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+
+
+ N
+ Y
+
+
+ 1040
+ 400
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hpl b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hpl
new file mode 100644
index 0000000..68e3c38
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hpl
@@ -0,0 +1,567 @@
+
+
+
+ recruitment_campaign.subpoenas(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/09 13:13:59.825
+ -
+ 2024/08/09 13:13:59.825
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Get variables 4 3
+ N
+
+
+ Select values 4 3
+ Insert / update (recruitment_campaign.subpoenas) 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Insert / update (recruitment_campaign.subpoenas) 3
+ Y
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 592
+ 512
+
+
+
+ Insert / update (recruitment_campaign.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ rest
+ rest
+ Y
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 960
+ 400
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 768
+ 512
+
+
+
+ Table input (subpoena) осень/регионы
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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
+ 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 = '3'
+ 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')
+ )
+),
+season_separations AS (
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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 (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ THEN 'Весна'
+ WHEN (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days')
+ THEN 'Осень'
+ END AS spring_autumn
+ FROM subpoena_data ls
+ WHERE --ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+ --AND
+ ((ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '3 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '6 months' + INTERVAL '15 days')
+ OR
+ (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '9 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '31 days'))
+),
+season_separations_clean AS (
+ SELECT DISTINCT recruitment_id, spring_autumn FROM season_separations
+),
+t1 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_subpoena
+ FROM season_separations ss
+ WHERE sub_stat_hist IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ ROUND(
+ AVG(
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ GREATEST(EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp)), 0)
+ ELSE
+ GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp)), 0)
+ END
+ ) FILTER (WHERE
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp))
+ ELSE
+ EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp))
+ END > 0
+ ), 1
+ ) AS average_appeared
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_appeared
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t4 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t5 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_ap_good_reason
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5.1'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t6 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_ap_not_required
+ FROM season_separations ss
+ WHERE sub_stat_hist IN ('3.8', '5.2')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t7 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_restrictions_applied
+ FROM season_separations ss
+ WHERE restr_dc IS NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t8 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_introduced_measures
+ FROM season_separations ss
+ WHERE restr_dc IS NULL AND ap_date IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t9 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_paper
+ FROM season_separations ss
+ WHERE d_code != '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t10 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_electron
+ FROM season_separations ss
+ WHERE d_code = '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t11 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT (DISTINCT ss.rdi_id) AS count_restrictions
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t12 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_delivery
+ FROM season_separations ss
+ WHERE ss.act_number IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t13 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS appear_date_is_good
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ 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,
+ ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
+ ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
+ ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
+ ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
+ ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
+ ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
+ ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
+ ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
+ ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
+ ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
+ ss.recruitment_id,
+ 0 AS rest,
+ ss.spring_autumn
+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
+LEFT JOIN t4 ON ss.recruitment_id = t4.recruitment_id AND ss.spring_autumn = t4.spring_autumn
+LEFT JOIN t5 ON ss.recruitment_id = t5.recruitment_id AND ss.spring_autumn = t5.spring_autumn
+LEFT JOIN t6 ON ss.recruitment_id = t6.recruitment_id AND ss.spring_autumn = t6.spring_autumn
+LEFT JOIN t7 ON ss.recruitment_id = t7.recruitment_id AND ss.spring_autumn = t7.spring_autumn
+LEFT JOIN t8 ON ss.recruitment_id = t8.recruitment_id AND ss.spring_autumn = t8.spring_autumn
+LEFT JOIN t9 ON ss.recruitment_id = t9.recruitment_id AND ss.spring_autumn = t9.spring_autumn
+LEFT JOIN t10 ON ss.recruitment_id = t10.recruitment_id AND ss.spring_autumn = t10.spring_autumn
+LEFT JOIN t11 ON ss.recruitment_id = t11.recruitment_id AND ss.spring_autumn = t11.spring_autumn
+LEFT JOIN t12 ON ss.recruitment_id = t12.recruitment_id AND ss.spring_autumn = t12.spring_autumn
+LEFT JOIN t13 ON ss.recruitment_id = t13.recruitment_id AND ss.spring_autumn = t13.spring_autumn
+ Y
+
+
+ 464
+ 400
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hwf b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hwf
new file mode 100644
index 0000000..4c2f5d9
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hwf
@@ -0,0 +1,487 @@
+
+
+ recruitment_campaign.subpoenas(m_c)
+ Y
+
+
+
+ -
+ 2025/03/28 13:41:42.903
+ -
+ 2025/03/28 13:41:42.903
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 416
+ 304
+
+
+
+ SQL recruitment_campaign.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region')
+ N
+ N
+ Y
+ 624
+ 304
+
+
+
+ array_season_recruitments.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 832
+ 176
+
+
+
+ array_season_recruitments_all.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 832
+ 416
+
+
+
+ recruitment_season_combination_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 176
+
+
+
+ recruitment_season_combination.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination.hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1120
+ 416
+
+
+
+ recruitment_campaign.subpoenas(m_c)_uniq.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c)_uniq.hpl
+ Basic
+
+
+ ARR_MC_SP
+ ARRAY_MIL_COM_SP
+
+
+ ARR_MC_AU
+ ARRAY_MIL_COM_AU
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1408
+ 112
+
+
+
+ recruitment_campaign.subpoenas(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c).hpl
+ Basic
+
+
+ ARR_MC
+ ARRAY_MIL_COM
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1408
+ 464
+
+
+
+ Success uniq
+
+ SUCCESS
+
+ N
+ 1696
+ 112
+
+
+
+ Success all
+
+ SUCCESS
+
+ N
+ 1696
+ 464
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 992
+ 304
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1248
+ 304
+
+
+
+ array_season_recruitments.hpl 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1264
+ 80
+
+
+
+ array_season_recruitments_all.hpl 2
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_com/parameters/season_separation/array_season_recruitments_all.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1216
+ 528
+
+
+
+
+
+ Start
+ SQL recruitment_campaign.subpoenas
+ Y
+ Y
+ Y
+
+
+ SQL recruitment_campaign.subpoenas
+ array_season_recruitments.hpl
+ Y
+ Y
+ N
+
+
+ SQL recruitment_campaign.subpoenas
+ array_season_recruitments_all.hpl
+ Y
+ Y
+ N
+
+
+ array_season_recruitments.hpl
+ recruitment_season_combination_uniq.hpl
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl
+ recruitment_season_combination.hpl
+ Y
+ Y
+ N
+
+
+ recruitment_season_combination_uniq.hpl
+ recruitment_campaign.subpoenas(m_c)_uniq.hpl
+ N
+ Y
+ N
+
+
+ recruitment_season_combination.hpl
+ recruitment_campaign.subpoenas(m_c).hpl
+ N
+ Y
+ N
+
+
+ recruitment_campaign.subpoenas(m_c).hpl
+ Success all
+ Y
+ Y
+ N
+
+
+ recruitment_campaign.subpoenas(m_c)_uniq.hpl
+ Success uniq
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl
+ Success
+ N
+ N
+ Y
+
+
+ array_season_recruitments.hpl
+ Success
+ N
+ N
+ Y
+
+
+ recruitment_season_combination.hpl
+ Success 2
+ N
+ N
+ Y
+
+
+ recruitment_season_combination_uniq.hpl
+ Success 2
+ N
+ N
+ Y
+
+
+ recruitment_season_combination.hpl
+ array_season_recruitments_all.hpl 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments_all.hpl 2
+ recruitment_campaign.subpoenas(m_c).hpl
+ Y
+ Y
+ N
+
+
+ recruitment_season_combination_uniq.hpl
+ array_season_recruitments.hpl 2
+ Y
+ Y
+ N
+
+
+ array_season_recruitments.hpl 2
+ recruitment_campaign.subpoenas(m_c)_uniq.hpl
+ Y
+ Y
+ N
+
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 400
+ 176
+ уникальные
+ 78
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 400
+ 448
+ остальные
+ 70
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c)_uniq.hpl b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c)_uniq.hpl
new file mode 100644
index 0000000..373ae3e
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_campaign.subpoenas(m_c)_uniq.hpl
@@ -0,0 +1,759 @@
+
+
+
+ recruitment_campaign.subpoenas(m_c)_uniq
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/09 13:13:59.825
+ -
+ 2024/08/09 13:13:59.825
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Get variables 4 3
+ N
+
+
+ Select values 4 3
+ Insert / update (recruitment_campaign.subpoenas) 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Insert / update (recruitment_campaign.subpoenas) 3
+ N
+
+
+ Table input (subpoena) осень/регионы
+ Update recruitment_campaign.subpoenas
+ Y
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 592
+ 624
+
+
+
+ Insert / update (recruitment_campaign.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ rest
+ rest
+ Y
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1040
+ 624
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 768
+ 624
+
+
+
+ Table input (subpoena) осень/регионы
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+),
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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,
+ 'Весна' AS season
+ 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 = '3'
+ 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 WHERE spring_autumn = 'Весна')
+ 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')
+ )
+ UNION ALL
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.visit_date,
+ s.department_id::uuid AS recruitment_id,
+ s.status_id,
+ 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,
+ 'Осень' AS season
+ 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 = '3'
+ 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 WHERE spring_autumn = 'Осень')
+ 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')
+ )
+),
+season_separations AS (
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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,
+ 'Весна' AS spring_autumn
+ FROM subpoena_data ls
+ WHERE (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '4 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '7 months' + INTERVAL '14 days')
+ AND ls.season = 'Весна'
+
+ UNION ALL
+
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.visit_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,
+ 'Осень' AS spring_autumn
+ FROM subpoena_data ls
+ WHERE (ls.visit_date BETWEEN DATE_TRUNC('year', ls.visit_date) + INTERVAL '10 months' + INTERVAL '1 day'
+ AND DATE_TRUNC('year', ls.visit_date) + INTERVAL '12 months' + INTERVAL '30 days')
+ AND ls.season = 'Осень'
+),
+season_separations_clean AS (
+ SELECT DISTINCT recruitment_id, spring_autumn FROM season_separations
+),
+t1 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_subpoena
+ FROM season_separations ss
+ WHERE sub_stat_hist IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t2 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ ROUND(
+ AVG(
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ GREATEST(EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp)), 0)
+ ELSE
+ GREATEST(EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp)), 0)
+ END
+ ) FILTER (WHERE
+ CASE
+ WHEN ss.sub_stat_hist = '4.2' THEN
+ EXTRACT(DAY FROM (ss.history_date::timestamp - ss.visit_date::timestamp))
+ ELSE
+ EXTRACT(DAY FROM (CURRENT_DATE::timestamp - ss.visit_date::timestamp))
+ END > 0
+ ), 1
+ ) AS average_appeared
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t3 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_appeared
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('4.1', '4.2') -- снесен 4 статус от 14.03.2025
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t4 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_appeared
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t5 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_ap_good_reason
+ FROM season_separations ss
+ WHERE sub_stat_hist = '5.1'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t6 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_ap_not_required
+ FROM season_separations ss
+ WHERE sub_stat_hist IN ('3.8', '5.2')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t7 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_restrictions_applied
+ FROM season_separations ss
+ WHERE restr_dc IS NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t8 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_introduced_measures
+ FROM season_separations ss
+ WHERE restr_dc IS NULL AND ap_date IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t9 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_paper
+ FROM season_separations ss
+ WHERE d_code != '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t10 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_electron
+ FROM season_separations ss
+ WHERE d_code = '7'
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t11 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT (DISTINCT ss.rdi_id) AS count_restrictions
+ FROM season_separations ss
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t12 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS count_not_delivery
+ FROM season_separations ss
+ WHERE ss.act_number IS NOT NULL
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+),
+t13 AS (
+ SELECT
+ ss.recruitment_id,
+ ss.spring_autumn,
+ COUNT(DISTINCT ss.subpoena_id) AS appear_date_is_good
+ FROM season_separations ss
+ WHERE ss.sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
+ GROUP BY ss.recruitment_id, ss.spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ 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,
+ ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
+ ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
+ ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
+ ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
+ ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
+ ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
+ ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
+ ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
+ ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
+ ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
+ ss.recruitment_id,
+ 0 AS rest,
+ ss.spring_autumn
+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
+LEFT JOIN t4 ON ss.recruitment_id = t4.recruitment_id AND ss.spring_autumn = t4.spring_autumn
+LEFT JOIN t5 ON ss.recruitment_id = t5.recruitment_id AND ss.spring_autumn = t5.spring_autumn
+LEFT JOIN t6 ON ss.recruitment_id = t6.recruitment_id AND ss.spring_autumn = t6.spring_autumn
+LEFT JOIN t7 ON ss.recruitment_id = t7.recruitment_id AND ss.spring_autumn = t7.spring_autumn
+LEFT JOIN t8 ON ss.recruitment_id = t8.recruitment_id AND ss.spring_autumn = t8.spring_autumn
+LEFT JOIN t9 ON ss.recruitment_id = t9.recruitment_id AND ss.spring_autumn = t9.spring_autumn
+LEFT JOIN t10 ON ss.recruitment_id = t10.recruitment_id AND ss.spring_autumn = t10.spring_autumn
+LEFT JOIN t11 ON ss.recruitment_id = t11.recruitment_id AND ss.spring_autumn = t11.spring_autumn
+LEFT JOIN t12 ON ss.recruitment_id = t12.recruitment_id AND ss.spring_autumn = t12.spring_autumn
+LEFT JOIN t13 ON ss.recruitment_id = t13.recruitment_id AND ss.spring_autumn = t13.spring_autumn
+ Y
+
+
+ 464
+ 400
+
+
+
+ Update recruitment_campaign.subpoenas
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ =
+ recording_date
+ recording_date
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+
+
+ appeared
+ count_appeared
+
+
+ not_appeared
+ count_not_appeared
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+
+
+ ap_not_required
+ count_ap_not_required
+
+
+ restrictions_applied
+ count_restrictions_applied
+
+
+ appeared_percent
+ appeared_percent
+
+
+ not_appeared_percent
+ not_appeared_percent
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+
+
+ introduced_measures
+ count_introduced_measures
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+
+
+ count_not_delivery
+ count_not_delivery
+
+
+ appear_date_is_good
+ appear_date_is_good
+
+
+ not_delivery_percent
+ not_delivery_percent
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+
+
+ N
+ Y
+
+
+ 1040
+ 400
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination.hpl b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination.hpl
new file mode 100644
index 0000000..70e64bc
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination.hpl
@@ -0,0 +1,126 @@
+
+
+
+ recruitment_season_combination
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 14:06:15.043
+ -
+ 2025/03/20 14:06:15.043
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Insert / update (recruitment_campaign.subpoenas)
+ Y
+
+
+
+ Insert / update (recruitment_campaign.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ recruitment_campaign
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 1168
+ 304
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
+),
+season_separations AS (
+ SELECT 'Весна' AS spring_autumn
+ UNION ALL
+ SELECT 'Осень' AS spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ i.recruitment_id AS recruitment_id,
+ ss.spring_autumn
+FROM ids i
+CROSS JOIN season_separations ss
+ Y
+
+
+ 624
+ 304
+
+
+
+
+
+
diff --git a/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination_uniq.hpl b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination_uniq.hpl
new file mode 100644
index 0000000..63a90b4
--- /dev/null
+++ b/mappings/mil_com/recruitment_campaign.subpoenas(m_c)/recruitment_season_combination_uniq.hpl
@@ -0,0 +1,124 @@
+
+
+
+ recruitment_season_combination_uniq
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/20 14:06:15.043
+ -
+ 2025/03/20 14:06:15.043
+
+
+
+
+
+ Table input (person_registry) регион/осень
+ Insert / update (recruitment_campaign.subpoenas)
+ Y
+
+
+
+ Insert / update (recruitment_campaign.subpoenas)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+ recruitment_campaign
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 1056
+ 320
+
+
+
+ Table input (person_registry) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH ids AS (
+ -- Весенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_SP}'), ''), ','))::uuid AS recruitment_id,
+ 'Весна' AS spring_autumn
+ UNION ALL
+ -- Осенние ID
+ SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
+ 'Осень' AS spring_autumn
+)
+SELECT
+ current_date AS recording_date,
+ i.recruitment_id AS recruitment_id,
+ i.spring_autumn
+FROM ids i;
+ Y
+
+
+ 512
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/select_recruitments_milcom(m_c).hpl b/mappings/mil_com/select_recruitments_milcom(m_c).hpl
new file mode 100644
index 0000000..85a6d98
--- /dev/null
+++ b/mappings/mil_com/select_recruitments_milcom(m_c).hpl
@@ -0,0 +1,83 @@
+
+
+
+ select_recruitments_milcom(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:58:19.728
+ -
+ 2024/08/15 14:58:19.728
+
+
+
+
+
+ Table input/регион
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 512
+ 208
+
+
+
+ Table input/регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ SELECT
+ idm_id AS RECRUITMENT_ID,
+ parent_id AS PARENT_ID,
+ CASE
+ WHEN schema = 'Department' THEN 'Department'
+ WHEN schema = 'Organization' THEN 'REG_LVL'
+ WHEN schema = 'Region' THEN 'MD_LVL'
+ ELSE schema -- на случай, если появится неизвестное значение
+ END AS SCHEMA
+FROM
+ ervu_dashboard.recruitment
+WHERE schema = 'Department' OR schema = 'Organization' OR schema = 'Region'
+ N
+
+
+ 336
+ 208
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c).hpl b/mappings/mil_com/total_registered.age(m_c).hpl
new file mode 100644
index 0000000..b3e8207
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c).hpl
@@ -0,0 +1,548 @@
+
+
+
+ total_registered.age(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) регион/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.age) 2
+ N
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1536
+ 800
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1680
+ 800
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hpl
new file mode 100644
index 0000000..b3e8207
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hpl
@@ -0,0 +1,548 @@
+
+
+
+ total_registered.age(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) регион/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.age) 2
+ N
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1536
+ 800
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1680
+ 800
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hwf b/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hwf
new file mode 100644
index 0000000..ebf664d
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age(m_c).hwf
@@ -0,0 +1,312 @@
+
+
+ total_registered.age(m_c)
+ Y
+
+
+
+ -
+ 2025/04/01 09:55:15.265
+ -
+ 2025/04/01 09:55:15.265
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 544
+ 400
+
+
+
+ total_registered.age_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 992
+ 240
+
+
+
+ total_registered.age_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 992
+ 320
+
+
+
+ total_registered.age_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 992
+ 400
+
+
+
+ total_registered.age_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 992
+ 480
+
+
+
+ total_registered.age_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.age(m_c)/total_registered.age_pr5(m_c).hpl
+
+
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 992
+ 560
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1200
+ 240
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1200
+ 320
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1200
+ 400
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1200
+ 480
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1200
+ 560
+
+
+
+
+
+ Start
+ total_registered.age_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.age_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.age_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.age_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.age_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.age_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.age_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.age_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.age_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.age_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr1(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr1(m_c).hpl
new file mode 100644
index 0000000..7c7627d
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr1(m_c).hpl
@@ -0,0 +1,446 @@
+
+
+
+ total_registered.age_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr2(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr2(m_c).hpl
new file mode 100644
index 0000000..b5ad7ee
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr2(m_c).hpl
@@ -0,0 +1,446 @@
+
+
+
+ total_registered.age_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr3(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr3(m_c).hpl
new file mode 100644
index 0000000..3e7ed5b
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr3(m_c).hpl
@@ -0,0 +1,446 @@
+
+
+
+ total_registered.age_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr4(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr4(m_c).hpl
new file mode 100644
index 0000000..e618ef4
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr4(m_c).hpl
@@ -0,0 +1,446 @@
+
+
+
+ total_registered.age_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr5(m_c).hpl b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr5(m_c).hpl
new file mode 100644
index 0000000..d016ad4
--- /dev/null
+++ b/mappings/mil_com/total_registered.age(m_c)/total_registered.age_pr5(m_c).hpl
@@ -0,0 +1,446 @@
+
+
+
+ total_registered.age_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регион/мужчины
+ Insert / update (total_registered.age) 2
+ Y
+
+
+
+ Insert / update (total_registered.age) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 41-45_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1920
+ 720
+
+
+
+ Table input (person_registry) регион/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+recruit_data AS (
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'false' AS registered,
+ r.birth_date
+ 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
+
+ UNION ALL
+
+ SELECT
+ r.id,
+ ri.recruit_id AS recruit_id,
+ r.current_recruitment_id AS recruitment_id,
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ 'ALL' AS convicts,
+ 'true' AS registered,
+ r.birth_date
+ 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)
+*/
+
+),
+total_count AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+total_count_all AS (
+ SELECT
+ rd.recruitment_id,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.registered, rd.convicts
+),
+age_counts AS (
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.registered,
+ rd.convicts,
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
+),
+age_counts_all AS (
+ SELECT
+ r.recruitment_id,
+ r.registered,
+ r.convicts,
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
+ COUNT(distinct r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
+ FROM recruit_data r
+ GROUP BY r.recruitment_id, r.registered, r.convicts
+)
+SELECT
+ current_date AS recording_date,
+ COALESCE(ac."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tc.total, 0) AS total_count,
+ tc.recruitment_id,
+ (CASE
+ WHEN tc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END)::text AS gender,
+ tc.convicts,
+ tc.registered::text
+FROM total_count tc
+LEFT JOIN age_counts ac
+ ON ac.recruitment_id = tc.recruitment_id
+ AND ac.gender = tc.gender
+ AND ac.registered = tc.registered
+ AND ac.convicts = tc.convicts
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ COALESCE(aca."17_year_count", 0) AS "17_year_count",
+ COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
+ COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
+ COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
+ COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
+ COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
+ COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
+ COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
+ COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
+ COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
+ COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
+ COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
+ COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
+ COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
+ COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
+ COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
+ COALESCE(tca.total, 0) AS total_count,
+ tca.recruitment_id,
+ 'ALL' AS gender,
+ tca.convicts,
+ tca.registered::text
+FROM total_count_all tca
+LEFT JOIN age_counts_all aca
+ ON aca.recruitment_id = tca.recruitment_id
+ AND aca.registered = tca.registered
+ AND aca.convicts = tca.convicts
+ Y
+
+
+ 1296
+ 720
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c).hpl
new file mode 100644
index 0000000..7d13e7a
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c).hpl
@@ -0,0 +1,691 @@
+
+
+
+ total_registered.busyness(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.busyness) 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1568
+ 624
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1712
+ 624
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hpl
new file mode 100644
index 0000000..7d13e7a
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hpl
@@ -0,0 +1,691 @@
+
+
+
+ total_registered.busyness(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.busyness) 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1568
+ 624
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1712
+ 624
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hwf b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hwf
new file mode 100644
index 0000000..8c60f83
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ total_registered.busyness(m_c)
+ Y
+
+
+
+ -
+ 2025/04/01 10:45:43.074
+ -
+ 2025/04/01 10:45:43.074
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 704
+ 432
+
+
+
+ total_registered.busyness_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 272
+
+
+
+ total_registered.busyness_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 352
+
+
+
+ total_registered.busyness_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 432
+
+
+
+ total_registered.busyness_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 512
+
+
+
+ total_registered.busyness_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 592
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1360
+ 272
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1360
+ 352
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1360
+ 432
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1360
+ 512
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1360
+ 592
+
+
+
+
+
+ Start
+ total_registered.busyness_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.busyness_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.busyness_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.busyness_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.busyness_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.busyness_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.busyness_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.busyness_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.busyness_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.busyness_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr1(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr1(m_c).hpl
new file mode 100644
index 0000000..0903778
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr1(m_c).hpl
@@ -0,0 +1,589 @@
+
+
+
+ total_registered.busyness_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr2(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr2(m_c).hpl
new file mode 100644
index 0000000..875eb9c
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr2(m_c).hpl
@@ -0,0 +1,589 @@
+
+
+
+ total_registered.busyness_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr3(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr3(m_c).hpl
new file mode 100644
index 0000000..fac1d1f
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr3(m_c).hpl
@@ -0,0 +1,589 @@
+
+
+
+ total_registered.busyness_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr4(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr4(m_c).hpl
new file mode 100644
index 0000000..d7232f1
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr4(m_c).hpl
@@ -0,0 +1,589 @@
+
+
+
+ total_registered.busyness_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr5(m_c).hpl b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr5(m_c).hpl
new file mode 100644
index 0000000..acd579b
--- /dev/null
+++ b/mappings/mil_com/total_registered.busyness(m_c)/total_registered.busyness_pr5(m_c).hpl
@@ -0,0 +1,589 @@
+
+
+
+ total_registered.busyness_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.busyness) 2
+ Y
+
+
+
+ Insert / update (total_registered.busyness) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1968
+ 544
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ -- Преобразуем строковый массив в таблицу UUID
+ 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
+),
+status_info AS (
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ AND kolledzh->'svedObrProg'->>'kodFormaObuch'='1'
+ )
+
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ --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,
+ 'true' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ --JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ r.id AS recruit_id,
+ -- Проверка на обучение в вузе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedVUZ'->'vuz') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedVUZ'->'vuz') AS vuz
+ WHERE vuz->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_vuz,
+
+ -- Проверка на обучение в колледже (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedKolledzh'->'kolledzh') AS kolledzh
+ WHERE kolledzh->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_college,
+
+ -- Проверка на обучение в школе (есть информация и обучается)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedSHkola'->'shkola') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedSHkola'->'shkola') AS school
+ WHERE school->>'kodStatus' IN (
+ '1', -- Обучается
+ '2', -- Восстановлен
+ '4' -- Отпуск
+ )
+ )
+ ELSE false
+ END
+ ) AS is_studying_in_school,
+
+ -- Проверка на работу (есть информация и работает)
+ (
+ CASE
+ WHEN jsonb_typeof(info->'svedFL'->'svedTrud'->'trudDeyat') = 'array' THEN
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(info->'svedFL'->'svedTrud'->'trudDeyat') AS trud
+ WHERE trud->>'prAktMestRab' = '1'
+ )
+ ELSE false
+ END
+ ) AS is_working,
+
+ -- Проверка на самозанятого (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedNPD'->'npd'->'aktNPD' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_samozanyat,
+
+ -- Проверка на ИП (есть информация)
+ (
+ CASE
+ WHEN jsonb_typeof(ri.info->'svedFL'->'svedRegIP'->'regIP'->'aktRegIP') = 'array' THEN true
+ ELSE false
+ END
+ ) AS is_ip,
+
+ -- Проверка на КФХ (есть информация)
+ (
+ CASE
+ WHEN ri.info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' != 'null' THEN true
+ ELSE false
+ END
+ ) AS is_kfh,
+
+
+ -- Проверка на отсутствие сведений о вузе
+ info->'svedFL'->'svedVUZ'->>'prOtsSvedVUZ' = '1' AND jsonb_typeof(info->'svedFL'->'svedVUZ') != 'array' AS no_info_vuz,
+
+ -- Проверка на отсутствие сведений о колледже
+ info->'svedFL'->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AND jsonb_typeof(info->'svedFL'->'svedKolledzh'->'kolledzh') != 'array' AS no_info_college,
+
+ -- Проверка на отсутствие сведений о школе
+ info->'svedFL'->'svedSHkola'->>'prOtsSvedSHkola' = '1' AND jsonb_typeof(info->'svedFL'->'svedSHkola') != 'array' AS no_info_school,
+
+ -- Проверка на отсутствие сведений о работе
+ info->'svedFL'->'svedTrud'->>'prOtsSvedTrud' = '1' AND jsonb_typeof(info->'svedFL'->'svedTrud') != 'array' AS no_info_work,
+
+ -- Проверка на отсутствие сведений о самозанятых
+ info->'svedFL'->'svedNPD'->'npd'->'aktNPD' is null OR info->'svedFL'->'svedNPD'->'npd'->'aktNPD' = 'null' AS no_info_samozanyat,
+
+ -- Проверка на отсутствие сведений об ip
+ info->'svedFL'->'svedRegIP'->>'prOtsRegIP' = '1' AND jsonb_typeof(info->'svedFL'->'svedRegIP') != 'array' AS no_info_ip,
+
+ -- Проверка на отсутствие сведений о KFH
+ info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' = 'null' OR info->'svedFL'->'svedRabotodat'->'rabotodat'->'aktRabotodat'->'svedGlKFH' is null AS no_info_kfh,
+
+ coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ 'false' AS registered
+ FROM public.recruits AS r
+ JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
+ JOIN public.recruits_history AS 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 r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+ AND r.current_recruitment_id is null
+),
+summary AS (
+ SELECT
+ si.recruitment_id,
+ CASE WHEN si.gender = 'MALE' THEN 'M' ELSE 'W' END AS gender,
+ si.convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.convicts, si.registered
+
+ UNION ALL
+
+ SELECT
+ si.recruitment_id,
+ CASE
+ WHEN si.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ 'ALL' AS convicts,
+ si.registered,
+
+ -- Количество людей, которые учатся
+ COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school THEN 1 END) AS study,
+
+ -- Количество людей, которые работают (но не учатся)
+ COUNT(CASE WHEN (is_working OR is_samozanyat OR is_ip OR is_kfh)
+ AND NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school)
+ THEN 1 END) AS work,
+
+ /*-- Количество людей, для которых отсутствуют сведения о вузе, колледже, школе и работе
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR is_working OR is_samozanyat OR is_ip OR is_kfh) THEN 1 END) AS no_info,
+*/
+ -- Количество людей, для которых нет информации
+ COUNT(CASE WHEN NOT (is_studying_in_vuz OR is_studying_in_college OR is_studying_in_school OR
+ is_working OR is_samozanyat OR is_ip OR is_kfh)
+ THEN 1 END) AS no_info,
+
+ -- Общее количество людей
+ COUNT(si.recruit_id) AS total_people
+ FROM status_info si
+ GROUP BY si.recruitment_id, si.gender, si.registered
+),
+summary_all AS (
+ SELECT
+ recruitment_id,
+ registered,
+ convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered, convicts
+
+ UNION ALL
+
+ SELECT
+ recruitment_id,
+ registered,
+ 'ALL' AS convicts,
+ 'ALL' AS gender,
+ SUM(study) AS study,
+ SUM(work) AS work,
+ SUM(no_info) AS no_info,
+ SUM(total_people) AS total_people
+ FROM summary
+ GROUP BY recruitment_id, registered
+)
+SELECT
+ current_date AS recording_date,
+ s.convicts,
+ s.gender,
+ s.registered,
+ s.recruitment_id,
+ s.study,
+ s.work,
+ s.no_info,
+ s.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
+FROM summary s
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ sa.convicts,
+ sa.gender,
+ sa.registered,
+ sa.recruitment_id,
+ sa.study,
+ sa.work,
+ sa.no_info,
+ sa.total_people,
+
+ -- Процент людей, которые учатся
+ ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
+
+ -- Процент людей, которые работают
+ ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
+
+ -- Процент людей, для которых отсутствуют сведения
+ ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
+FROM summary_all sa
+ Y
+
+
+ 1328
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c).hpl
new file mode 100644
index 0000000..dd5a08b
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c).hpl
@@ -0,0 +1,423 @@
+
+
+
+ total_registered.child_minor(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ N
+
+
+ Table input (person_registry)регион/все
+ Get variables 4 2
+ N
+
+
+ Select values 4 2
+ Insert / update (total_registered.child_minor) 3
+ N
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1056
+ 480
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1248
+ 480
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hpl
new file mode 100644
index 0000000..dd5a08b
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hpl
@@ -0,0 +1,423 @@
+
+
+
+ total_registered.child_minor(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ N
+
+
+ Table input (person_registry)регион/все
+ Get variables 4 2
+ N
+
+
+ Select values 4 2
+ Insert / update (total_registered.child_minor) 3
+ N
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1056
+ 480
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1248
+ 480
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hwf b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hwf
new file mode 100644
index 0000000..a5570dd
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor(m_c).hwf
@@ -0,0 +1,312 @@
+
+
+ total_registered.child_minor(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 17:47:01.214
+ -
+ 2025/03/31 17:47:01.214
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 640
+ 496
+
+
+
+ total_registered.child_minor_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 336
+
+
+
+ total_registered.child_minor_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 416
+
+
+
+ total_registered.child_minor_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 496
+
+
+
+ total_registered.child_minor_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 576
+
+
+
+ total_registered.child_minor_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr5(m_c).hpl
+
+
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 656
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1280
+ 336
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1280
+ 416
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1280
+ 496
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1280
+ 576
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1280
+ 656
+
+
+
+
+
+ Start
+ total_registered.child_minor_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.child_minor_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.child_minor_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.child_minor_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.child_minor_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.child_minor_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr1(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr1(m_c).hpl
new file mode 100644
index 0000000..90721d4
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr1(m_c).hpl
@@ -0,0 +1,321 @@
+
+
+
+ total_registered.child_minor_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr2(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr2(m_c).hpl
new file mode 100644
index 0000000..2b5fce0
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr2(m_c).hpl
@@ -0,0 +1,321 @@
+
+
+
+ total_registered.child_minor_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr3(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr3(m_c).hpl
new file mode 100644
index 0000000..63bc4e2
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr3(m_c).hpl
@@ -0,0 +1,321 @@
+
+
+
+ total_registered.child_minor_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr4(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr4(m_c).hpl
new file mode 100644
index 0000000..69af111
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr4(m_c).hpl
@@ -0,0 +1,321 @@
+
+
+
+ total_registered.child_minor_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr5(m_c).hpl b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr5(m_c).hpl
new file mode 100644
index 0000000..d9990a0
--- /dev/null
+++ b/mappings/mil_com/total_registered.child_minor(m_c)/total_registered.child_minor_pr5(m_c).hpl
@@ -0,0 +1,321 @@
+
+
+
+ total_registered.child_minor_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry)регион/все
+ Insert / update (total_registered.child_minor) 3
+ Y
+
+
+
+ Insert / update (total_registered.child_minor) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1504
+ 368
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 816
+ 368
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c).hpl
new file mode 100644
index 0000000..06ee25d
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c).hpl
@@ -0,0 +1,414 @@
+
+
+
+ total_registered.driver_license(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ N
+
+
+ Select values 3 2
+ Insert / update (total_registered.driver_license) 2
+ N
+
+
+ Table input (driver_license) регионы/все
+ Get variables 3 2
+ N
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 960
+ 496
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1104
+ 496
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hpl
new file mode 100644
index 0000000..06ee25d
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hpl
@@ -0,0 +1,414 @@
+
+
+
+ total_registered.driver_license(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ N
+
+
+ Select values 3 2
+ Insert / update (total_registered.driver_license) 2
+ N
+
+
+ Table input (driver_license) регионы/все
+ Get variables 3 2
+ N
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 960
+ 496
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1104
+ 496
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hwf b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hwf
new file mode 100644
index 0000000..a5e579d
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ total_registered.driver_license(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 17:29:01.571
+ -
+ 2025/03/31 17:29:01.571
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 592
+ 400
+
+
+
+ total_registered.driver_license_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 240
+
+
+
+ total_registered.driver_license_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 320
+
+
+
+ total_registered.driver_license_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 400
+
+
+
+ total_registered.driver_license_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 480
+
+
+
+ total_registered.driver_license_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 560
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1520
+ 240
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1520
+ 320
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1520
+ 400
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1520
+ 480
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1520
+ 560
+
+
+
+
+
+ Start
+ total_registered.driver_license_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.driver_license_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.driver_license_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.driver_license_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.driver_license_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.driver_license_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr1(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr1(m_c).hpl
new file mode 100644
index 0000000..499784b
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr1(m_c).hpl
@@ -0,0 +1,312 @@
+
+
+
+ total_registered.driver_license_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr2(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr2(m_c).hpl
new file mode 100644
index 0000000..123f382
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr2(m_c).hpl
@@ -0,0 +1,312 @@
+
+
+
+ total_registered.driver_license_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr3(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr3(m_c).hpl
new file mode 100644
index 0000000..a80fbf3
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr3(m_c).hpl
@@ -0,0 +1,312 @@
+
+
+
+ total_registered.driver_license_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr4(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr4(m_c).hpl
new file mode 100644
index 0000000..b8ebe8a
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr4(m_c).hpl
@@ -0,0 +1,312 @@
+
+
+
+ total_registered.driver_license_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr5(m_c).hpl b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr5(m_c).hpl
new file mode 100644
index 0000000..33620bb
--- /dev/null
+++ b/mappings/mil_com/total_registered.driver_license(m_c)/total_registered.driver_license_pr5(m_c).hpl
@@ -0,0 +1,312 @@
+
+
+
+ total_registered.driver_license_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (driver_license) регионы/все
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ nope_repcent
+ nope_percent
+ Y
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 384
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+ Y
+
+
+ 800
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c).hpl
new file mode 100644
index 0000000..39bed0f
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c).hpl
@@ -0,0 +1,452 @@
+
+
+
+ total_registered.education_level(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.education_level) 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1328
+ 624
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1472
+ 624
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hpl
new file mode 100644
index 0000000..39bed0f
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hpl
@@ -0,0 +1,452 @@
+
+
+
+ total_registered.education_level(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.education_level) 2
+ N
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1328
+ 624
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1472
+ 624
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hwf b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hwf
new file mode 100644
index 0000000..d2032bb
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ total_registered.education_level(m_c)
+ Y
+
+
+
+ -
+ 2025/04/01 10:26:22.205
+ -
+ 2025/04/01 10:26:22.205
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 624
+ 432
+
+
+
+ total_registered.education_level_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 272
+
+
+
+ total_registered.education_level_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 352
+
+
+
+ total_registered.education_level_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 432
+
+
+
+ total_registered.education_level_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 512
+
+
+
+ total_registered.education_level_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1088
+ 592
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1360
+ 272
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1360
+ 352
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1360
+ 432
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1360
+ 512
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1360
+ 592
+
+
+
+
+
+ Start
+ total_registered.education_level_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.education_level_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ Start
+ total_registered.education_level_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.education_level_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ Start
+ total_registered.education_level_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.education_level_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ Start
+ total_registered.education_level_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.education_level_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.education_level_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+ Start
+ total_registered.education_level_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr1(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr1(m_c).hpl
new file mode 100644
index 0000000..625f5ac
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr1(m_c).hpl
@@ -0,0 +1,350 @@
+
+
+
+ total_registered.education_level_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr2(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr2(m_c).hpl
new file mode 100644
index 0000000..01c5120
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr2(m_c).hpl
@@ -0,0 +1,350 @@
+
+
+
+ total_registered.education_level_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr3(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr3(m_c).hpl
new file mode 100644
index 0000000..2d28874
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr3(m_c).hpl
@@ -0,0 +1,350 @@
+
+
+
+ total_registered.education_level_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr4(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr4(m_c).hpl
new file mode 100644
index 0000000..9e18fa4
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr4(m_c).hpl
@@ -0,0 +1,350 @@
+
+
+
+ total_registered.education_level_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr5(m_c).hpl b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr5(m_c).hpl
new file mode 100644
index 0000000..e5cb4e6
--- /dev/null
+++ b/mappings/mil_com/total_registered.education_level(m_c)/total_registered.education_level_pr5(m_c).hpl
@@ -0,0 +1,350 @@
+
+
+
+ total_registered.education_level_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) РФ/мужчины
+ Insert / update (total_registered.education_level) 2
+ Y
+
+
+
+ Insert / update (total_registered.education_level) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1728
+ 496
+
+
+
+ Table input (person_registry) РФ/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+education_status AS (
+ SELECT
+ ri.id,
+ ri.recruit_id AS recruit_id,
+ coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ -- Высшее образование (российское или иностранное)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
+ )
+ ) AS has_higher,
+
+ -- Среднее профессиональное образование (если нет высшего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('6', '8', '10', '11')
+ )
+ ) AS has_average_prof,
+
+ -- Общее образование (если нет высшего и среднего)
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ AND education->>'kodUrObr' IN ('7', '9')
+ )
+ ) AS has_only_general,
+
+ -- Нет данных об образовании (российское или иностранное)
+ (
+ NOT (
+ (
+ EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedRObr'->'robr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedRObr'->'robr') = 'array'
+ ) OR EXISTS (
+ SELECT 1
+ FROM jsonb_array_elements(ri.info->'svedFL'->'svedInObr'->'inObr') AS education
+ WHERE jsonb_typeof(ri.info->'svedFL'->'svedInObr'->'inObr') = 'array'
+ )
+ )
+ ) AND (
+ ri.info->'svedFL'->'svedRObr'->>'prOtsRObr' = '1'
+ OR ri.info->'svedFL'->'svedInObr'->>'prOtsInObr' = '1'
+ )
+ ) AS has_no_data
+
+ 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.gender IN ('MALE', 'FEMALE')
+ AND r.id in (SELECT recruit_id FROM registered)
+ AND rh.id in (SELECT recruit_history_id FROM registered)
+ -- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+),
+final_counts AS (
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ es.convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender, es.convicts
+
+ UNION ALL
+
+ SELECT
+ es.gender,
+ es.recruitment_id,
+ 'ALL' AS convicts,
+ COUNT(DISTINCT es.id) AS total,
+ COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
+ COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
+ COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
+ FROM education_status es
+ GROUP BY es.recruitment_id, es.gender
+),
+final_counts_all AS (
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id, convicts
+
+ UNION ALL
+
+ SELECT
+ 'ALL' AS gender,
+ recruitment_id,
+ 'ALL' AS convicts,
+ SUM(total) AS total,
+ SUM(higher) AS higher,
+ SUM(average_prof) AS average_prof,
+ SUM(only_general) AS only_general,
+ SUM(count_nodata) AS count_nodata
+ FROM final_counts
+ GROUP BY recruitment_id
+)
+SELECT
+ current_date AS recording_date,
+ CASE
+ WHEN fc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ fc.convicts,
+ fc.recruitment_id,
+ fc.higher,
+ fc.average_prof,
+ fc.only_general,
+ fc.count_nodata,
+ fc.total,
+ COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts fc
+UNION ALL
+SELECT
+ current_date AS recording_date,
+ fca.gender,
+ fca.convicts,
+ fca.recruitment_id,
+ fca.higher,
+ fca.average_prof,
+ fca.only_general,
+ fca.count_nodata,
+ fca.total,
+ COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
+ COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
+ COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
+ COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
+FROM final_counts_all fca
+ Y
+
+
+ 1072
+ 496
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c).hpl
new file mode 100644
index 0000000..e285fa4
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c).hpl
@@ -0,0 +1,372 @@
+
+
+
+ total_registered.marital_status(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) регионы/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.marital_status) 2
+ N
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1280
+ 624
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1424
+ 624
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hpl
new file mode 100644
index 0000000..e285fa4
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hpl
@@ -0,0 +1,372 @@
+
+
+
+ total_registered.marital_status(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2 2
+ Select values 3 2 2
+ N
+
+
+ Table input (person_registry) регионы/мужчины
+ Get variables 3 2 2
+ N
+
+
+ Select values 3 2 2
+ Insert / update (total_registered.marital_status) 2
+ N
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Get variables 3 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1280
+ 624
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Select values 3 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1424
+ 624
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hwf b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hwf
new file mode 100644
index 0000000..85f6e93
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status(m_c).hwf
@@ -0,0 +1,312 @@
+
+
+ total_registered.marital_status(m_c)
+ Y
+
+
+
+ -
+ 2025/04/01 10:07:53.719
+ -
+ 2025/04/01 10:07:53.719
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 512
+ 416
+
+
+
+ total_registered.marital_status_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 256
+
+
+
+ total_registered.marital_status_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 336
+
+
+
+ total_registered.marital_status_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 416
+
+
+
+ total_registered.marital_status_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 496
+
+
+
+ total_registered.marital_status_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr5(m_c).hpl
+
+
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 896
+ 576
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1264
+ 256
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1264
+ 336
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1264
+ 416
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1264
+ 496
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1264
+ 576
+
+
+
+
+
+ Start
+ total_registered.marital_status_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.marital_status_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.marital_status_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.marital_status_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.marital_status_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.marital_status_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr1(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr1(m_c).hpl
new file mode 100644
index 0000000..cdf8016
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr1(m_c).hpl
@@ -0,0 +1,270 @@
+
+
+
+ total_registered.marital_status_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr2(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr2(m_c).hpl
new file mode 100644
index 0000000..af10c10
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr2(m_c).hpl
@@ -0,0 +1,270 @@
+
+
+
+ total_registered.marital_status_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr3(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr3(m_c).hpl
new file mode 100644
index 0000000..1dc80e3
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr3(m_c).hpl
@@ -0,0 +1,270 @@
+
+
+
+ total_registered.marital_status_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr4(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr4(m_c).hpl
new file mode 100644
index 0000000..2401073
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr4(m_c).hpl
@@ -0,0 +1,270 @@
+
+
+
+ total_registered.marital_status_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr5(m_c).hpl b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr5(m_c).hpl
new file mode 100644
index 0000000..47b4635
--- /dev/null
+++ b/mappings/mil_com/total_registered.marital_status(m_c)/total_registered.marital_status_pr5(m_c).hpl
@@ -0,0 +1,270 @@
+
+
+
+ total_registered.marital_status_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) регионы/мужчины
+ Insert / update (total_registered.marital_status) 2
+ Y
+
+
+
+ Insert / update (total_registered.marital_status) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1680
+ 544
+
+
+
+ Table input (person_registry) регионы/мужчины
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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
+),
+*/
+recruit_data AS (
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ CASE
+ WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
+ ELSE 'NOTCONVICT'
+ END AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+
+ UNION ALL
+
+ SELECT
+ ri.recruit_id,
+ ri.info->'svedFL'->'svedSemPolozh'->>'semPolozh' AS sem_pol,
+ r.gender,
+ 'ALL' AS convicts,
+ r.current_recruitment_id AS recruitment_id
+ --coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
+ 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)
+ AND r.gender IN ('MALE', 'FEMALE')
+/*
+ AND r.id in (SELECT recruit_id FROM registered)
+ and rh.id in (SELECT recruit_history_id FROM registered)
+ --and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
+ and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
+*/
+),
+married_counts AS (
+ -- Считаем значения для каждого гендера
+ SELECT
+ rd.recruitment_id,
+ rd.gender,
+ rd.convicts,
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IN ('2', '3')) AS not_married, -- в расзводе/вдова/вдовец
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol = '1') AS married, -- статус в браке
+ COUNT(rd.recruit_id) FILTER (WHERE rd.sem_pol IS NULL) AS other,
+ COUNT(rd.recruit_id) AS total
+ FROM recruit_data rd
+ GROUP BY rd.recruitment_id, rd.gender, rd.convicts -- изменено 12.03.2025
+),
+all_counts AS (
+ -- Считаем значения для ALL, суммируя данные по всем гендерам
+ SELECT
+ recruitment_id,
+ 'ALL' AS gender,
+ convicts,
+ SUM(not_married) AS not_married,
+ SUM(married) AS married,
+ SUM(other) AS other,
+ SUM(total) AS total
+ FROM married_counts
+ GROUP BY recruitment_id, convicts
+)
+-- Финальное объединение
+SELECT
+ mc.not_married,
+ mc.married,
+ mc.total,
+ mc.other,
+ mc.convicts,
+ COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
+ CASE
+ WHEN mc.gender = 'MALE' THEN 'M'
+ ELSE 'W'
+ END AS gender,
+ current_date AS recording_date,
+ mc.recruitment_id
+FROM married_counts mc
+UNION ALL
+SELECT
+ ac.not_married,
+ ac.married,
+ ac.total,
+ ac.other,
+ ac.convicts,
+ COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
+ COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
+ COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
+ ac.gender,
+ current_date AS recording_date,
+ ac.recruitment_id
+FROM all_counts ac
+ Y
+
+
+ 1040
+ 544
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c).hpl
new file mode 100644
index 0000000..c26f394
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c).hpl
@@ -0,0 +1,453 @@
+
+
+
+ total_registered.reg_mil_cat(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3
+ Select values 3
+ N
+
+
+ Table input (person_registry) военком/рег
+ Get variables 3
+ N
+
+
+ Select values 3
+ Insert / update (total_registered.reg_mil_cat)
+ N
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Get variables 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1008
+ 464
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Select values 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1152
+ 464
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hpl
new file mode 100644
index 0000000..c26f394
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hpl
@@ -0,0 +1,453 @@
+
+
+
+ total_registered.reg_mil_cat(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3
+ Select values 3
+ N
+
+
+ Table input (person_registry) военком/рег
+ Get variables 3
+ N
+
+
+ Select values 3
+ Insert / update (total_registered.reg_mil_cat)
+ N
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Get variables 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1008
+ 464
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Select values 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1152
+ 464
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hwf b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hwf
new file mode 100644
index 0000000..56a73fb
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat(m_c).hwf
@@ -0,0 +1,309 @@
+
+
+ total_registered.reg_mil_cat(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 15:05:31.181
+ -
+ 2025/03/31 15:05:31.181
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 400
+ 368
+
+
+
+ total_registered.reg_mil_cat_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 816
+ 208
+
+
+
+ total_registered.reg_mil_cat_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 816
+ 288
+
+
+
+ total_registered.reg_mil_cat_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 816
+ 368
+
+
+
+ total_registered.reg_mil_cat_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 816
+ 448
+
+
+
+ total_registered.reg_mil_cat_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 816
+ 528
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1136
+ 208
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1136
+ 288
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1136
+ 368
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1136
+ 448
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1136
+ 528
+
+
+
+
+
+ Start
+ total_registered.reg_mil_cat_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.reg_mil_cat_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.reg_mil_cat_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.reg_mil_cat_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.reg_mil_cat_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.reg_mil_cat_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr1(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr1(m_c).hpl
new file mode 100644
index 0000000..10a37aa
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr1(m_c).hpl
@@ -0,0 +1,351 @@
+
+
+
+ total_registered.reg_mil_cat_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr2(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr2(m_c).hpl
new file mode 100644
index 0000000..5b82156
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr2(m_c).hpl
@@ -0,0 +1,351 @@
+
+
+
+ total_registered.reg_mil_cat_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr3(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr3(m_c).hpl
new file mode 100644
index 0000000..dfd56ef
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr3(m_c).hpl
@@ -0,0 +1,351 @@
+
+
+
+ total_registered.reg_mil_cat_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr4(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr4(m_c).hpl
new file mode 100644
index 0000000..d3bba44
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr4(m_c).hpl
@@ -0,0 +1,351 @@
+
+
+
+ total_registered.reg_mil_cat_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr5(m_c).hpl b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr5(m_c).hpl
new file mode 100644
index 0000000..0cd012d
--- /dev/null
+++ b/mappings/mil_com/total_registered.reg_mil_cat(m_c)/total_registered.reg_mil_cat_pr5(m_c).hpl
@@ -0,0 +1,351 @@
+
+
+
+ total_registered.reg_mil_cat_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (person_registry) военком/рег
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ N
+
+
+ 1392
+ 288
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 736
+ 288
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c).hpl
new file mode 100644
index 0000000..2a0d1b3
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c).hpl
@@ -0,0 +1,348 @@
+
+
+
+ total_registered.removed_registry(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ N
+
+
+ Select values 2 2
+ Insert / update (total_registered.removed_registry) 2
+ N
+
+
+ Table input (decision-document-service) регион 2
+ Get variables 2 2
+ N
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 992
+ 464
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1120
+ 464
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hpl
new file mode 100644
index 0000000..2a0d1b3
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hpl
@@ -0,0 +1,348 @@
+
+
+
+ total_registered.removed_registry(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ N
+
+
+ Select values 2 2
+ Insert / update (total_registered.removed_registry) 2
+ N
+
+
+ Table input (decision-document-service) регион 2
+ Get variables 2 2
+ N
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 992
+ 464
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1120
+ 464
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hwf b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hwf
new file mode 100644
index 0000000..840ccdf
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry(m_c).hwf
@@ -0,0 +1,312 @@
+
+
+ total_registered.removed_registry(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 15:23:08.216
+ -
+ 2025/03/31 15:23:08.216
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 800
+ 368
+
+
+
+ total_registered.removed_registry_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 208
+
+
+
+ total_registered.removed_registry_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 288
+
+
+
+ total_registered.removed_registry_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 448
+
+
+
+ total_registered.removed_registry_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr3(m_c).hpl
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 368
+
+
+
+ total_registered.removed_registry_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr5(m_c).hpl
+
+
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1312
+ 528
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1664
+ 208
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1664
+ 288
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1664
+ 368
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1664
+ 448
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1664
+ 528
+
+
+
+
+
+ Start
+ total_registered.removed_registry_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.removed_registry_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.removed_registry_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.removed_registry_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.removed_registry_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.removed_registry_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr1(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr1(m_c).hpl
new file mode 100644
index 0000000..ae952b2
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr1(m_c).hpl
@@ -0,0 +1,246 @@
+
+
+
+ total_registered.removed_registry_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr2(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr2(m_c).hpl
new file mode 100644
index 0000000..81d9f8a
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr2(m_c).hpl
@@ -0,0 +1,246 @@
+
+
+
+ total_registered.removed_registry_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr3(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr3(m_c).hpl
new file mode 100644
index 0000000..18a8ede
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr3(m_c).hpl
@@ -0,0 +1,246 @@
+
+
+
+ total_registered.removed_registry_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr4(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr4(m_c).hpl
new file mode 100644
index 0000000..36e59b5
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr4(m_c).hpl
@@ -0,0 +1,246 @@
+
+
+
+ total_registered.removed_registry_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr5(m_c).hpl b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr5(m_c).hpl
new file mode 100644
index 0000000..1303b08
--- /dev/null
+++ b/mappings/mil_com/total_registered.removed_registry(m_c)/total_registered.removed_registry_pr5(m_c).hpl
@@ -0,0 +1,246 @@
+
+
+
+ total_registered.removed_registry_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 904
+ 118
+ на 12.03.2025 статус 1.3 на тесте рубит все результаты
+ 303
+
+
+
+
+ Table input (decision-document-service) регион 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ travel_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ N
+
+
+ 1408
+ 320
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu_person_registry
+ N
+ 0
+ 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;
+ Y
+
+
+ 752
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c).hpl
new file mode 100644
index 0000000..54fab14
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c).hpl
@@ -0,0 +1,576 @@
+
+
+
+ total_registered.subpoenas(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ N
+
+
+ Table input (subpoena) регион/рег
+ Get variables 4 2
+ N
+
+
+ Select values 4 2
+ Insert / update (total_registered.subpoenas) 3
+ N
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1040
+ 496
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1216
+ 496
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hpl
new file mode 100644
index 0000000..54fab14
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hpl
@@ -0,0 +1,576 @@
+
+
+
+ total_registered.subpoenas(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ N
+
+
+ Table input (subpoena) регион/рег
+ Get variables 4 2
+ N
+
+
+ Select values 4 2
+ Insert / update (total_registered.subpoenas) 3
+ N
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REC_ID
+ -1
+ none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
+
+
+
+
+ 1040
+ 496
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REC_ID
+ REC_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1216
+ 496
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hwf b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hwf
new file mode 100644
index 0000000..9ed662b
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas(m_c).hwf
@@ -0,0 +1,312 @@
+
+
+ total_registered.subpoenas(m_c)
+ Y
+
+
+
+ -
+ 2025/03/31 16:22:00.652
+ -
+ 2025/03/31 16:22:00.652
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 624
+ 384
+
+
+
+ total_registered.subpoenas_pr1(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr1(m_c).hpl
+ Basic
+
+
+ ARR_PR_1
+ PART_RECRUITMENT_1
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 224
+
+
+
+ total_registered.subpoenas_pr2(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr2(m_c).hpl
+ Basic
+
+
+ ARR_PR_2
+ PART_RECRUITMENT_2
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 304
+
+
+
+ total_registered.subpoenas_pr3(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr3(m_c).hpl
+
+
+ Basic
+
+
+ ARR_PR_3
+ PART_RECRUITMENT_3
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 384
+
+
+
+ total_registered.subpoenas_pr4(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr4(m_c).hpl
+ Basic
+
+
+ ARR_PR_4
+ PART_RECRUITMENT_4
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 464
+
+
+
+ total_registered.subpoenas_pr5(m_c).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr5(m_c).hpl
+ Basic
+
+
+ ARR_PR_5
+ PART_RECRUITMENT_5
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1040
+ 544
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1392
+ 224
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1392
+ 304
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1392
+ 384
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1392
+ 464
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1392
+ 544
+
+
+
+
+
+ Start
+ total_registered.subpoenas_pr1(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.subpoenas_pr2(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.subpoenas_pr3(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.subpoenas_pr4(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ Start
+ total_registered.subpoenas_pr5(m_c).hpl
+ Y
+ Y
+ Y
+
+
+ total_registered.subpoenas_pr1(m_c).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas_pr2(m_c).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas_pr3(m_c).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas_pr4(m_c).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas_pr5(m_c).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr1(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr1(m_c).hpl
new file mode 100644
index 0000000..9b88a23
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr1(m_c).hpl
@@ -0,0 +1,474 @@
+
+
+
+ total_registered.subpoenas_pr1(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ 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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr2(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr2(m_c).hpl
new file mode 100644
index 0000000..e7df2a9
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr2(m_c).hpl
@@ -0,0 +1,474 @@
+
+
+
+ total_registered.subpoenas_pr2(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ 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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr3(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr3(m_c).hpl
new file mode 100644
index 0000000..32248e4
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr3(m_c).hpl
@@ -0,0 +1,474 @@
+
+
+
+ total_registered.subpoenas_pr3(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ 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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr4(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr4(m_c).hpl
new file mode 100644
index 0000000..fb40e64
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr4(m_c).hpl
@@ -0,0 +1,474 @@
+
+
+
+ total_registered.subpoenas_pr4(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ 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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr5(m_c).hpl b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr5(m_c).hpl
new file mode 100644
index 0000000..f9a4075
--- /dev/null
+++ b/mappings/mil_com/total_registered.subpoenas(m_c)/total_registered.subpoenas_pr5(m_c).hpl
@@ -0,0 +1,474 @@
+
+
+
+ total_registered.subpoenas_pr5(m_c)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Table input (subpoena) регион/рег
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ N
+
+
+ 1472
+ 384
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ 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;
+ Y
+
+
+ 816
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_district/appeals.reasons_appeal(m_d).hpl b/mappings/mil_district/appeals.reasons_appeal(m_d).hpl
new file mode 100644
index 0000000..c6e04d0
--- /dev/null
+++ b/mappings/mil_district/appeals.reasons_appeal(m_d).hpl
@@ -0,0 +1,351 @@
+
+
+
+ appeals.reasons_appeal(m_d)
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/28 10:29:54.859
+ -
+ 2025/01/28 10:29:54.859
+
+
+
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Insert / update (main_dashboard.appeals) 2
+ Execute SQL script 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.reasons_appeal
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 320
+ 256
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.reasons_appeal
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1344
+ 256
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 752
+ 256
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+ appeals
+
+
+ appeal
+ appeal
+ Y
+
+
+ incorrect_inf
+ incorrect_inf
+ Y
+
+
+ incorrect_inf_percent
+ incorrect_inf_percent
+ Y
+
+
+ sending_documents
+ sending_documents
+ Y
+
+
+ sending_documents_percent
+ sending_documents_percent
+ Y
+
+
+ decision_disagreement
+ decision_disagreement
+ Y
+
+
+ decision_disagreement_persent
+ decision_disagreement_persent
+ Y
+
+
+ complaint_withdrawal
+ complaint_withdrawal
+ Y
+
+
+ complaint_withdrawal_percent
+ complaint_withdrawal_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ Y
+
+
+ 1104
+ 256
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 896
+ 256
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ 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
+ THEN ROUND((SUM(incorrect_inf) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) incorrect_inf_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appeal) > 0
+ THEN ROUND((SUM(sending_documents) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) sending_documents_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appeal) > 0
+ THEN ROUND((SUM(decision_disagreement) / SUM(appeal) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) 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
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 528
+ 256
+
+
+
+
+
+
diff --git a/mappings/mil_district/appeals.topic_appeal(m_d).hpl b/mappings/mil_district/appeals.topic_appeal(m_d).hpl
new file mode 100644
index 0000000..03ef672
--- /dev/null
+++ b/mappings/mil_district/appeals.topic_appeal(m_d).hpl
@@ -0,0 +1,334 @@
+
+
+
+ appeals.topic_appeal(m_d)
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/28 10:29:54.859
+ -
+ 2025/01/28 10:29:54.859
+
+
+
+
+
+ Execute SQL script
+ Table input (appeals.topic_appeal(m_d))
+ Y
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Insert / update (appeals.topic_appeal)
+ Execute SQL script 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (appeals.topic_appeal)
+ Y
+
+
+ Table input (appeals.topic_appeal(m_d))
+ Get variables 3 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.topic_appeal
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 320
+ 256
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.topic_appeal
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1344
+ 256
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 752
+ 256
+
+
+
+ Insert / update (appeals.topic_appeal)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+
+ =
+ schema
+ schema
+
+
+ appeals
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ registration
+ registration
+ Y
+
+
+ registration_percent
+ registration_percent
+ Y
+
+
+ sabpoena
+ sabpoena
+ Y
+
+
+ sabpoena_percent
+ sabpoena_percent
+ Y
+
+
+ temporary_measures
+ temporary_measures
+ Y
+
+
+ temporary_measures_percent
+ temporary_measures_percent
+ Y
+
+
+ appear
+ appear
+ Y
+
+
+ Y
+
+
+ 1104
+ 256
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 896
+ 256
+
+
+
+ Table input (appeals.topic_appeal(m_d))
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(appear), 0) appear,
+ COALESCE(SUM(registration), 0) registration,
+ COALESCE(SUM(sabpoena), 0) sabpoena,
+ COALESCE(SUM(temporary_measures), 0) temporary_measures,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(registration) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) registration_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(sabpoena) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) sabpoena_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(appear) > 0
+ THEN ROUND((SUM(temporary_measures) / SUM(appear) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) temporary_measures_percent,
+ '${MD_ID}' AS recruitment_id,
+ 'Region' AS schema
+FROM appeals.topic_appeal
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 528
+ 256
+
+
+
+
+
+
diff --git a/mappings/mil_district/array_mildis.hwf b/mappings/mil_district/array_mildis.hwf
new file mode 100644
index 0000000..0f583c3
--- /dev/null
+++ b/mappings/mil_district/array_mildis.hwf
@@ -0,0 +1,156 @@
+
+
+ array_mildis
+ Y
+
+
+
+ 0
+ -
+ 2024/12/10 09:44:55.162
+ -
+ 2024/12/10 09:44:55.162
+
+
+ ORG_ROW
+
+
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 400
+ 304
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1152
+ 304
+
+
+
+ select_recruitments_mildis(m_d)rows.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_district/select_recruitments_mildis(m_d)rows.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 720
+ 304
+
+
+
+ select_recruitments_mildis(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/select_recruitments_mildis(m_d).hpl
+ txt
+ C:\Users\acer\Desktop\лог
+ Rowlevel
+
+
+ MILDIS_ROW
+ MIL_DISTRICT_ROW
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 304
+
+
+
+ SQL
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.array_mildis
+ N
+ N
+ N
+ 560
+ 304
+
+
+
+
+
+ select_recruitments_mildis(m_d)rows.hpl
+ select_recruitments_mildis(m_d).hpl
+ Y
+ Y
+ N
+
+
+ select_recruitments_mildis(m_d).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ Start
+ SQL
+ Y
+ Y
+ Y
+
+
+ SQL
+ select_recruitments_mildis(m_d)rows.hpl
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_district/job_get_rows_mildis.hwf b/mappings/mil_district/job_get_rows_mildis.hwf
new file mode 100644
index 0000000..4c2d639
--- /dev/null
+++ b/mappings/mil_district/job_get_rows_mildis.hwf
@@ -0,0 +1,122 @@
+
+
+ job_get_rows_mildis
+ Y
+
+
+
+ -
+ 2024/12/10 12:37:22.616
+ -
+ 2024/12/10 12:37:22.616
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 432
+ 336
+
+
+
+ array_mildis.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_district/array_mildis.hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 592
+ 336
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 912
+ 336
+
+
+
+ rows_id-array_mildis.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_district/rows_id-array_mildis.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 768
+ 336
+
+
+
+
+
+ Start
+ array_mildis.hwf
+ Y
+ Y
+ Y
+
+
+ array_mildis.hwf
+ rows_id-array_mildis.hpl
+ Y
+ Y
+ N
+
+
+ rows_id-array_mildis.hpl
+ Success
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/mil_district/job_recruitments_mildis.hwf b/mappings/mil_district/job_recruitments_mildis.hwf
new file mode 100644
index 0000000..e31db7e
--- /dev/null
+++ b/mappings/mil_district/job_recruitments_mildis.hwf
@@ -0,0 +1,1091 @@
+
+
+ job_recruitments_mildis
+ Y
+
+
+
+ 0
+ -
+ 2024/08/15 16:02:12.821
+ -
+ 2024/08/15 16:02:12.821
+
+
+ MD_ARRAY
+
+
+
+
+ REG_ID
+
+
+
+
+ VK_ARRAY
+
+
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 208
+ 1152
+
+
+
+ main_dashboard.appeals(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/main_dashboard.appeals(m_d).hpl
+ txt
+ ${Internal.Entry.Current.Folder}/\logs\appeals
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 688
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1552
+ 688
+
+
+
+ main_dashboard.recruitment_campaign(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/main_dashboard.recruitment_campaign(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 752
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1552
+ 752
+
+
+
+ main_dashboard.total_registered(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/main_dashboard.total_registered(m_d).hpl
+ txt
+ C:\Users\acer\Desktop\лог
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 816
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1552
+ 816
+
+
+
+ main_dashboard.waiting_registration(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/main_dashboard.waiting_registration(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 880
+
+
+
+ Success 4
+
+ SUCCESS
+
+ N
+ 1552
+ 880
+
+
+
+ recruitment_campaign.subpoenas(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/recruitment_campaign.subpoenas(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 944
+
+
+
+ Success 6
+
+ SUCCESS
+
+ N
+ 1552
+ 944
+
+
+
+ total_registered.reg_mil_cat(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.reg_mil_cat(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1008
+
+
+
+ Success 7
+
+ SUCCESS
+
+ N
+ 1552
+ 1008
+
+
+
+ total_registered.removed_registry(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.removed_registry(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1072
+
+
+
+ Success 8
+
+ SUCCESS
+
+ N
+ 1552
+ 1072
+
+
+
+ total_registered.subpoenas(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.subpoenas(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1136
+
+
+
+ Success 9
+
+ SUCCESS
+
+ N
+ 1552
+ 1136
+
+
+
+ total_registered.driver_license(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.driver_license(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1216
+
+
+
+ Success 10
+
+ SUCCESS
+
+ N
+ 1552
+ 1216
+
+
+
+ total_registered.child_minor(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.child_minor(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1280
+
+
+
+ Success 11
+
+ SUCCESS
+
+ N
+ 1552
+ 1280
+
+
+
+ total_registered.age(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.age(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1360
+
+
+
+ Success 12
+
+ SUCCESS
+
+ N
+ 1552
+ 1360
+
+
+
+ total_registered.marital_status(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.marital_status(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1440
+
+
+
+ Success 13
+
+ SUCCESS
+
+ N
+ 1552
+ 1440
+
+
+
+ total_registered.education_level(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.education_level(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1520
+
+
+
+ Success 14
+
+ SUCCESS
+
+ N
+ 1552
+ 1520
+
+
+
+ total_registered.busyness(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/total_registered.busyness(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1600
+
+
+
+ Success 15
+
+ SUCCESS
+
+ N
+ 1552
+ 1600
+
+
+
+ recruitment_campaign.appeals(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/recruitment_campaign.appeals(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 1680
+
+
+
+ Success 16
+
+ SUCCESS
+
+ N
+ 1552
+ 1680
+
+
+
+ job_get_rows_mildis.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/mil_district/job_get_rows_mildis.hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 416
+ 1152
+
+
+
+ appeals.reasons_appeal(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/appeals.reasons_appeal(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 624
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1552
+ 624
+
+
+
+ appeals.topic_appeal(m_d).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/mil_district/appeals.topic_appeal(m_d).hpl
+ Basic
+
+
+ MD_ARRAY
+ MD_ARRAY_ID
+
+
+ MD_ID
+ RECRUITMENT_MD_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1296
+ 544
+
+
+
+ Success 17
+
+ SUCCESS
+
+ N
+ 1552
+ 544
+
+
+
+
+
+ Start
+ job_get_rows_mildis.hwf
+ Y
+ Y
+ Y
+
+
+ job_get_rows_mildis.hwf
+ main_dashboard.appeals(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ main_dashboard.total_registered(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ main_dashboard.recruitment_campaign(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ main_dashboard.waiting_registration(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ recruitment_campaign.subpoenas(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.reg_mil_cat(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.removed_registry(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.subpoenas(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.driver_license(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.child_minor(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.age(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.marital_status(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.education_level(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ total_registered.busyness(m_d).hpl
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ recruitment_campaign.appeals(m_d).hpl
+ Y
+ Y
+ N
+
+
+ main_dashboard.appeals(m_d).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ main_dashboard.recruitment_campaign(m_d).hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered(m_d).hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration(m_d).hpl
+ Success 4
+ Y
+ Y
+ N
+
+
+ recruitment_campaign.subpoenas(m_d).hpl
+ Success 6
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat(m_d).hpl
+ Success 7
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry(m_d).hpl
+ Success 8
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas(m_d).hpl
+ Success 9
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license(m_d).hpl
+ Success 10
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor(m_d).hpl
+ Success 11
+ Y
+ Y
+ N
+
+
+ total_registered.age(m_d).hpl
+ Success 12
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status(m_d).hpl
+ Success 13
+ Y
+ Y
+ N
+
+
+ total_registered.education_level(m_d).hpl
+ Success 14
+ Y
+ Y
+ N
+
+
+ total_registered.busyness(m_d).hpl
+ Success 15
+ Y
+ Y
+ N
+
+
+ recruitment_campaign.appeals(m_d).hpl
+ Success 16
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ appeals.reasons_appeal(m_d).hpl
+ Y
+ Y
+ N
+
+
+ appeals.reasons_appeal(m_d).hpl
+ Success 5
+ Y
+ Y
+ N
+
+
+ appeals.topic_appeal(m_d).hpl
+ Success 17
+ Y
+ Y
+ N
+
+
+ job_get_rows_mildis.hwf
+ appeals.topic_appeal(m_d).hpl
+ Y
+ Y
+ N
+
+
+
+
+
+
+ METASTORE.pentaho
+
+ Default Run Configuration
+ {"namespace":"pentaho","id":"Default Run Configuration","name":"Default Run Configuration","description":"Defines a default run configuration","metaStoreName":null}
+
+
+
+ {"_":"Embedded MetaStore Elements","namespace":"pentaho","type":"Default Run Configuration"}
+
+ Pentaho local
+ {"children":[{"children":[],"id":"server","value":null},{"children":[],"id":"clustered","value":"N"},{"children":[],"id":"name","value":"Pentaho local"},{"children":[],"id":"description","value":null},{"children":[],"id":"pentaho","value":"N"},{"children":[],"id":"readOnly","value":"Y"},{"children":[],"id":"sendResources","value":"N"},{"children":[],"id":"logRemoteExecutionLocally","value":"N"},{"children":[],"id":"remote","value":"N"},{"children":[],"id":"local","value":"Y"},{"children":[],"id":"showTransformations","value":"N"}],"id":"Pentaho local","value":null,"name":"Pentaho local","owner":null,"ownerPermissionsList":[]}
+
+
+
+
diff --git a/mappings/mil_district/main_dashboard.appeals(m_d).hpl b/mappings/mil_district/main_dashboard.appeals(m_d).hpl
new file mode 100644
index 0000000..781f3f4
--- /dev/null
+++ b/mappings/mil_district/main_dashboard.appeals(m_d).hpl
@@ -0,0 +1,332 @@
+
+
+
+ main_dashboard.appeals(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ Y
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Insert / update (main_dashboard.appeals) 2
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 240
+ 192
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1264
+ 192
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 192
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+ main_dashboard
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ average_to_face
+ average_to_face
+ Y
+
+
+ "average_EPGU"
+ average_epgu
+ Y
+
+
+ average_to_face_percent
+ average_to_face_percent
+ Y
+
+
+ "average_EPGU_percent"
+ average_epgu_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ Y
+
+
+ 1024
+ 192
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 816
+ 192
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_appeals), 0) total_appeals,
+ COALESCE(SUM(resolved), 0) resolved,
+ COALESCE(SUM(average_consideration), 0) average_consideration,
+ COALESCE(SUM(average_rating), 0) average_rating,
+ COALESCE(SUM(average_to_face), 0) average_to_face,
+ COALESCE(SUM("average_EPGU"), 0) average_epgu,
+ COALESCE(
+ CASE
+ WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
+ THEN ROUND((SUM(average_to_face) / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_to_face_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(average_to_face) + SUM("average_EPGU")) > 0
+ THEN ROUND((SUM("average_EPGU") / (SUM(average_to_face) + SUM("average_EPGU")) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_epgu_percent,
+ '${MD_ID}' AS recruitment_id,
+ 'Region' AS schema
+FROM main_dashboard.appeals
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 448
+ 192
+
+
+
+
+
+
diff --git a/mappings/mil_district/main_dashboard.recruitment_campaign(m_d).hpl b/mappings/mil_district/main_dashboard.recruitment_campaign(m_d).hpl
new file mode 100644
index 0000000..c7d7ffe
--- /dev/null
+++ b/mappings/mil_district/main_dashboard.recruitment_campaign(m_d).hpl
@@ -0,0 +1,370 @@
+
+
+
+ main_dashboard.recruitment_campaign(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ Y
+
+
+ Select values 4 3
+ Insert / update (main_dashboard.recruitment_campaign)
+ Y
+
+
+ Table input (subpoena) регион/осень
+ Get variables 4 3
+ Y
+
+
+ Execute SQL script
+ Table input (subpoena) регион/осень
+ Y
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 336
+ 384
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1520
+ 384
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 784
+ 384
+
+
+
+ Insert / update (main_dashboard.recruitment_campaign)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ main_dashboard
+
+
+ subpoenas_sent
+ count_subpoena
+ Y
+
+
+ appeared_on_subpoenas
+ count_appeared
+ Y
+
+
+ not_appeared_on_subpoenas
+ count_not_appeared
+ Y
+
+
+ new_recruits
+ new_recruits
+ Y
+
+
+ postponement_have_right
+ postponement_have_right
+ Y
+
+
+ postponement_granted
+ postponement_granted
+ Y
+
+
+ appeared_on_subpoenas_percent
+ appeared_on_subpoenas_percent
+ Y
+
+
+ not_appeared_on_subpoenas_percent
+ not_appeared_on_subpoenas_percent
+ Y
+
+
+ postponement_have_right_percent
+ postponement_have_right_percent
+ Y
+
+
+ postponement_granted_percent
+ postponement_granted_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1280
+ 384
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 960
+ 384
+
+
+
+ Table input (subpoena) регион/осень
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoenas_sent), 0) count_subpoena,
+ COALESCE(SUM(appeared_on_subpoenas), 0) count_appeared,
+ COALESCE(SUM(not_appeared_on_subpoenas), 0) count_not_appeared,
+ COALESCE(SUM(new_recruits), 0) new_recruits,
+ COALESCE(SUM(postponement_have_right), 0) postponement_have_right,
+ COALESCE(SUM(postponement_granted), 0) postponement_granted,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(not_appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_have_right) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_have_right_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_granted) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_granted_percent,
+ '${MD_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Region' AS schema
+FROM main_dashboard.recruitment_campaign
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
+
+
+ 528
+ 384
+
+
+
+
+
+
diff --git a/mappings/mil_district/main_dashboard.total_registered(m_d).hpl b/mappings/mil_district/main_dashboard.total_registered(m_d).hpl
new file mode 100644
index 0000000..732607d
--- /dev/null
+++ b/mappings/mil_district/main_dashboard.total_registered(m_d).hpl
@@ -0,0 +1,357 @@
+
+
+
+ main_dashboard.total_registered(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ Y
+
+
+ Select values 2 2
+ Insert / update (main_dashboard.total_registered) 2
+ Y
+
+
+ Table input (person_registry) регион
+ Get variables 2 2
+ Y
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ Execute SQL script 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) регион
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 160
+ 304
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1280
+ 304
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 560
+ 304
+
+
+
+ Insert / update (main_dashboard.total_registered) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ main_dashboard
+
+
+ total_registered
+ total_count
+ Y
+
+
+ "total_registered_M"
+ male_count
+ Y
+
+
+ "total_registered_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1024
+ 304
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 768
+ 304
+
+
+
+ Table input (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_registered), 0) total_count,
+ COALESCE(SUM("total_registered_M"), 0) male_count,
+ COALESCE(SUM("total_registered_W"), 0) female_count,
+ COALESCE(SUM(mobilization_criterion), 0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion), 0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion), 0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
+ '${MD_ID}' AS recruitment_id,
+ convicts,
+ 'Region' AS schema
+FROM main_dashboard.total_registered
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY convicts;
+ Y
+
+
+ 352
+ 304
+
+
+
+
+
+
diff --git a/mappings/mil_district/main_dashboard.waiting_registration(m_d).hpl b/mappings/mil_district/main_dashboard.waiting_registration(m_d).hpl
new file mode 100644
index 0000000..69bc685
--- /dev/null
+++ b/mappings/mil_district/main_dashboard.waiting_registration(m_d).hpl
@@ -0,0 +1,347 @@
+
+
+
+ main_dashboard.waiting_registration(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 5
+ Select values 5
+ Y
+
+
+ Select values 5
+ Insert / update (main_dashboard.waiting_registration) 2
+ Y
+
+
+ Table input 2 (person_registry) регион
+ Get variables 5
+ Y
+
+
+ Execute SQL script
+ Table input 2 (person_registry) регион
+ Y
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 320
+ 336
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1504
+ 336
+
+
+
+ Get variables 5
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 768
+ 336
+
+
+
+ Insert / update (main_dashboard.waiting_registration) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+
+ =
+ schema
+ schema
+
+
+ main_dashboard
+
+
+ waiting_registration
+ waiting_count
+ Y
+
+
+ "waiting_registration_M"
+ male_count
+ Y
+
+
+ "waiting_registration_W"
+ female_count
+ Y
+
+
+ mobilization_criterion
+ mobilization_criterion
+ Y
+
+
+ volunteer_criterion
+ volunteer_criterion
+ Y
+
+
+ contract_criterion
+ contract_criterion
+ Y
+
+
+ mobilization_criterion_percent
+ mobilization_criterion_percent
+ Y
+
+
+ volunteer_criterion_percent
+ volunteer_criterion_percent
+ Y
+
+
+ contract_criterion_percent
+ contract_criterion_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1216
+ 336
+
+
+
+ Select values 5
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 912
+ 336
+
+
+
+ Table input 2 (person_registry) регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(waiting_registration), 0) waiting_count,
+ COALESCE(SUM("waiting_registration_M"), 0) male_count,
+ COALESCE(SUM("waiting_registration_W"), 0) female_count,
+ COALESCE(SUM(mobilization_criterion), 0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion), 0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion), 0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
+ '${MD_ID}' AS recruitment_id,
+ 'Region' AS schema
+FROM main_dashboard.waiting_registration
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 528
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_district/recruitment_campaign.appeals(m_d).hpl b/mappings/mil_district/recruitment_campaign.appeals(m_d).hpl
new file mode 100644
index 0000000..923f697
--- /dev/null
+++ b/mappings/mil_district/recruitment_campaign.appeals(m_d).hpl
@@ -0,0 +1,335 @@
+
+
+
+ recruitment_campaign.appeals(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (main_dashboard.appeals)
+ Y
+
+
+ Table input (appeal_document) регионы
+ Get variables 3 2
+ Y
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Insert / update (main_dashboard.appeals)
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 304
+ 352
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1360
+ 352
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 736
+ 352
+
+
+
+ Insert / update (main_dashboard.appeals)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+ recruitment_campaign
+
+
+ total_appeals
+ total_appeals
+ Y
+
+
+ average_consideration
+ average_consideration
+ Y
+
+
+ resolved
+ resolved
+ Y
+
+
+ not_resolved
+ not_resolved
+ Y
+
+
+ not_resolved_percent
+ not_resolved_percent
+ Y
+
+
+ average_rating
+ average_rating
+ Y
+
+
+ resolved_percent
+ resolved_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1104
+ 352
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 880
+ 352
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_appeals), 0) total_appeals,
+ COALESCE(SUM(average_consideration), 0) average_consideration,
+ COALESCE(SUM(resolved), 0) resolved,
+ COALESCE(SUM(not_resolved), 0) not_resolved,
+ COALESCE(
+ CASE
+ WHEN SUM(total_appeals) > 0
+ THEN ROUND((SUM(not_resolved) / SUM(total_appeals) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_resolved_percent,
+
+ COALESCE(SUM(average_rating), 0) average_rating,
+ COALESCE(
+ CASE
+ WHEN SUM(total_appeals) > 0
+ THEN ROUND((SUM(resolved) / SUM(total_appeals) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) resolved_percent,
+
+ '${MD_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Region' AS schema
+FROM recruitment_campaign.appeals
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
+
+
+ 512
+ 352
+
+
+
+
+
+
diff --git a/mappings/mil_district/recruitment_campaign.subpoenas(m_d).hpl b/mappings/mil_district/recruitment_campaign.subpoenas(m_d).hpl
new file mode 100644
index 0000000..c4548f8
--- /dev/null
+++ b/mappings/mil_district/recruitment_campaign.subpoenas(m_d).hpl
@@ -0,0 +1,454 @@
+
+
+
+ recruitment_campaign.subpoenas(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/09 13:13:59.825
+ -
+ 2024/08/09 13:13:59.825
+
+
+
+
+
+ Get variables 4 3
+ Select values 4 3
+ Y
+
+
+ Select values 4 3
+ Insert / update (recruitment_campaign.subpoenas) 3
+ Y
+
+
+ Table input (subpoena) осень/регионы
+ Get variables 4 3
+ Y
+
+
+ Execute SQL script
+ Table input (subpoena) осень/регионы
+ Y
+
+
+ Insert / update (recruitment_campaign.subpoenas) 3
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 384
+ 320
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1616
+ 320
+
+
+
+ Get variables 4 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 864
+ 320
+
+
+
+ Insert / update (recruitment_campaign.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ recruitment_campaign
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ rest
+ rest
+ Y
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1344
+ 320
+
+
+
+ Select values 4 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1040
+ 320
+
+
+
+ Table input (subpoena) осень/регионы
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+ COALESCE(SUM(rest), 0) rest,
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${MD_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Region' AS schema
+FROM recruitment_campaign.subpoenas
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
+ Y
+
+
+ 608
+ 320
+
+
+
+
+
+
diff --git a/mappings/mil_district/rows_id-array_mildis.hpl b/mappings/mil_district/rows_id-array_mildis.hpl
new file mode 100644
index 0000000..f893561
--- /dev/null
+++ b/mappings/mil_district/rows_id-array_mildis.hpl
@@ -0,0 +1,74 @@
+
+
+
+ rows_id-array_mildis
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/10 12:40:41.832
+ -
+ 2024/12/10 12:40:41.832
+
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 672
+ 256
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+recruitment_dstr_id AS RECRUITMENT_MD_ID,
+string_to_array(trim(both '{}' FROM replace(reg_array_id, ' ', '')), ',')::uuid[] AS MD_ARRAY_ID
+FROM ervu_dashboard.array_mildis
+ N
+
+
+ 448
+ 256
+
+
+
+
+
+
diff --git a/mappings/mil_district/select_recruitments_mildis(m_d).hpl b/mappings/mil_district/select_recruitments_mildis(m_d).hpl
new file mode 100644
index 0000000..48e805c
--- /dev/null
+++ b/mappings/mil_district/select_recruitments_mildis(m_d).hpl
@@ -0,0 +1,193 @@
+
+
+
+ select_recruitments_mildis(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ ORG_ROW
+
+
+
+
+ SCM
+
+
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/15 14:58:19.728
+ -
+ 2024/08/15 14:58:19.728
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Table input/регион
+ Get variables 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update
+ Y
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MILDIS_ROW
+ -1
+ none
+ String
+
+
+
+
+ 656
+ 208
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_dstr_id
+ MILDIS_ROW
+
+
+ ervu_dashboard
+
+
+ reg_array_id
+ reg_array_id
+ Y
+
+
+ recruitment_dstr_id
+ recruitment_dstr_id
+ Y
+
+
+ N
+
+
+ 992
+ 208
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MILDIS_ROW
+ MILDIS_ROW
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 800
+ 208
+
+
+
+ Table input/регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ SELECT
+ '${MILDIS_ROW}' AS recruitment_dstr_id,
+ ARRAY(
+ SELECT idm_id
+ FROM (
+ SELECT idm_id
+ FROM ervu_dashboard.recruitment
+ WHERE schema = 'Organization' AND parent_id = '${MILDIS_ROW}'
+ UNION ALL
+ SELECT idm_id
+ FROM ervu_dashboard.recruitment
+ WHERE idm_id = '${MILDIS_ROW}'
+ ) subquery
+ ) AS reg_array_id
+FROM ervu_dashboard.recruitment
+WHERE idm_id = '${MILDIS_ROW}';
+ Y
+
+
+ 528
+ 208
+
+
+
+
+
+
diff --git a/mappings/mil_district/select_recruitments_mildis(m_d)rows.hpl b/mappings/mil_district/select_recruitments_mildis(m_d)rows.hpl
new file mode 100644
index 0000000..6420254
--- /dev/null
+++ b/mappings/mil_district/select_recruitments_mildis(m_d)rows.hpl
@@ -0,0 +1,82 @@
+
+
+
+ select_recruitments_mildis(m_d)rows
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/10 10:43:22.293
+ -
+ 2024/12/10 10:43:22.293
+
+
+
+
+
+ Table input/Военный округ
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 688
+ 240
+
+
+
+ Table input/Военный округ
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ SELECT
+ idm_id AS MIL_DISTRICT_ROW
+FROM
+ ervu_dashboard.recruitment
+WHERE schema = 'Region'
+AND idm_id in (
+ 'b23f384f-b114-4003-9277-2eaa2d9ae180', -- главный ВК Восточного военного округа (уровень ВО)
+ '25633423-52e6-45bb-9d54-7f85b74a3f7d', -- главный ВК Ленинградского военного округа (уровень ВО)
+ '30a01af9-a871-411a-90e3-d81592bb074f', -- главный ВК Московского военного округа (уровень ВО)
+ '58ef9cdc-8a9d-429e-89a5-1c49e2684a98', -- главный ВК Центрального военного округа (уровень ВО)
+ 'b00de68d-2e09-4776-9b48-1566a7222dca' -- главный ВК Южного военного округа (уровень ВО)
+)
+ N
+
+
+ 512
+ 240
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.age(m_d).hpl b/mappings/mil_district/total_registered.age(m_d).hpl
new file mode 100644
index 0000000..d7d6863
--- /dev/null
+++ b/mappings/mil_district/total_registered.age(m_d).hpl
@@ -0,0 +1,463 @@
+
+
+
+ total_registered.age(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (total_registered.age)
+ Y
+
+
+ Table input (person_registry) регион/все
+ Get variables 3 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) регион/все
+ Y
+
+
+ Insert / update (total_registered.age)
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 208
+ 624
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1376
+ 624
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 624
+
+
+
+ Insert / update (total_registered.age)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "17_years"
+ 17_year_count
+ Y
+
+
+ "18-26_years"
+ 18-26_year_count
+ Y
+
+
+ "27-30_years"
+ 27-30_year_count
+ Y
+
+
+ "31-35_years"
+ 31-35_year_count
+ Y
+
+
+ "36-40_years"
+ 36-40_year_count
+ Y
+
+
+ "41-45_years"
+ 41-45_year_count
+ Y
+
+
+ "51+_years"
+ 51+_year_count
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ "46-50_years"
+ 46-50_year_count
+ Y
+
+
+ "17_years_percent"
+ 17_year_percent
+ Y
+
+
+ "18-26_years_percent"
+ 18-26_year_percent
+ Y
+
+
+ "27-30_years_percent"
+ 27-30_year_percent
+ Y
+
+
+ "31-35_years_percent"
+ 31-35_year_percent
+ Y
+
+
+ "36-40_years_percent"
+ 36-40_year_percent
+ Y
+
+
+ "41-45_years_percent"
+ 41-45_year_percent
+ Y
+
+
+ "46-50_years_percent"
+ 46-50_year_percent
+ Y
+
+
+ "51+_years_percent"
+ 51+_year_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ schema
+ schema
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1056
+ 624
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 816
+ 624
+
+
+
+ Table input (person_registry) регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM("17_years"), 0) "17_year_count",
+ COALESCE(SUM("18-26_years"), 0) "18-26_year_count",
+ COALESCE(SUM("27-30_years"), 0) "27-30_year_count",
+ COALESCE(SUM("31-35_years"), 0) "31-35_year_count",
+ COALESCE(SUM("36-40_years"), 0) "36-40_year_count",
+ COALESCE(SUM("41-45_years"), 0) "41-45_year_count",
+ COALESCE(SUM("51+_years"), 0) "51+_year_count",
+ COALESCE(SUM("46-50_years"), 0) "46-50_year_count",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("17_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "17_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("18-26_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "18-26_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("27-30_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "27-30_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("31-35_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "31-35_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("36-40_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "36-40_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("41-45_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "41-45_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("46-50_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "46-50_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("51+_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "51+_year_percent",
+
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ registered,
+ 'Region' AS schema
+FROM total_registered.age
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
+ Y
+
+
+ 432
+ 624
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.busyness(m_d).hpl b/mappings/mil_district/total_registered.busyness(m_d).hpl
new file mode 100644
index 0000000..0c2a07a
--- /dev/null
+++ b/mappings/mil_district/total_registered.busyness(m_d).hpl
@@ -0,0 +1,371 @@
+
+
+
+ total_registered.busyness(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (total_registered.busyness)
+ Y
+
+
+ Table input (person_registry) РФ/все
+ Get variables 3 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) РФ/все
+ Y
+
+
+ Insert / update (total_registered.busyness)
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+
+ 368
+ 752
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+
+ 1552
+ 752
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 864
+ 752
+
+
+
+ Insert / update (total_registered.busyness)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ registered
+ registered
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ study
+ study
+ Y
+
+
+ work
+ work
+ Y
+
+
+ study_percent
+ study_percent
+ Y
+
+
+ work_percent
+ work_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ registered
+ registered
+ N
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ not_work
+ no_info
+ Y
+
+
+ not_work_percent
+ no_info_percent
+ Y
+
+
+ busyness
+ total_people
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1264
+ 752
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 1008
+ 752
+
+
+
+ Table input (person_registry) РФ/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(study), 0) study,
+ COALESCE(SUM(work), 0) work,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) study_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) work_percent,
+
+ COALESCE(SUM(not_work), 0) no_info,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_info_percent,
+
+ COALESCE(SUM(busyness), 0) total_people,
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ registered,
+ convicts,
+ 'Region' AS schema
+FROM total_registered.busyness
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
+ Y
+
+
+ 624
+ 752
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.child_minor(m_d).hpl b/mappings/mil_district/total_registered.child_minor(m_d).hpl
new file mode 100644
index 0000000..ebb6a49
--- /dev/null
+++ b/mappings/mil_district/total_registered.child_minor(m_d).hpl
@@ -0,0 +1,394 @@
+
+
+
+ total_registered.child_minor(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ Y
+
+
+ Select values 4 2
+ Insert / update (total_registered.child_minor)
+ Y
+
+
+ Table input (person_registry)регион/все
+ Get variables 4 2
+ Y
+
+
+ Insert / update (total_registered.child_minor)
+ Execute SQL script 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry)регион/все
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 336
+ 416
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1488
+ 416
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 800
+ 416
+
+
+
+ Insert / update (total_registered.child_minor)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ no_child
+ no_children
+ Y
+
+
+ "1_child"
+ one_child
+ Y
+
+
+ "2_child"
+ two_children
+ Y
+
+
+ "3_child"
+ three_children
+ Y
+
+
+ "4_more_child"
+ four_or_more_children
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ no_child_percent
+ no_children_percent
+ Y
+
+
+ "1_child_percent"
+ one_child_percent
+ Y
+
+
+ "2_child_percent"
+ two_children_percent
+ Y
+
+
+ "3_child_percent"
+ three_children_percent
+ Y
+
+
+ "4_more_child_percent"
+ four_or_more_children_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ N
+
+
+ 1248
+ 416
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 992
+ 416
+
+
+
+ Table input (person_registry)регион/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM(no_child), 0) no_children,
+ COALESCE(SUM("1_child"), 0) one_child,
+ COALESCE(SUM("2_child"), 0) two_children,
+ COALESCE(SUM("3_child"), 0) three_children,
+ COALESCE(SUM("4_more_child"), 0) four_or_more_children,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) one_child_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) two_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) three_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) four_or_more_children_percent,
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Region' AS schema
+FROM total_registered.child_minor
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
+
+
+ 560
+ 416
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.driver_license(m_d).hpl b/mappings/mil_district/total_registered.driver_license(m_d).hpl
new file mode 100644
index 0000000..9e6cbec
--- /dev/null
+++ b/mappings/mil_district/total_registered.driver_license(m_d).hpl
@@ -0,0 +1,403 @@
+
+
+
+ total_registered.driver_license(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (total_registered.driver_license) 2
+ Y
+
+
+ Table input (driver_license) регионы/все
+ Get variables 3 2
+ Y
+
+
+ Insert / update (total_registered.driver_license) 2
+ Execute SQL script 2
+ Y
+
+
+ Execute SQL script
+ Table input (driver_license) регионы/все
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 240
+ 480
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1504
+ 480
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 752
+ 480
+
+
+
+ Insert / update (total_registered.driver_license) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ "A"
+ a
+ Y
+
+
+ "B"
+ b
+ Y
+
+
+ "C"
+ c
+ Y
+
+
+ "D"
+ d
+ Y
+
+
+ "E"
+ e
+ Y
+
+
+ nope
+ nope
+ Y
+
+
+ "A_repcent"
+ a_percent
+ Y
+
+
+ "B_repcent"
+ b_percent
+ Y
+
+
+ "C_repcent"
+ c_percent
+ Y
+
+
+ "D_repcent"
+ d_percent
+ Y
+
+
+ "E_repcent"
+ e_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1152
+ 480
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 896
+ 480
+
+
+
+ Table input (driver_license) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total,
+ COALESCE(SUM("A"), 0) a,
+ COALESCE(SUM("B"), 0) b,
+ COALESCE(SUM("C"), 0) c,
+ COALESCE(SUM("D"), 0) d,
+ COALESCE(SUM("E"), 0) e,
+ COALESCE(SUM(nope), 0) nope,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) a_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) b_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) c_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) d_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) e_percent, -- нет такой категории
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) nope_percent,
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Region' AS schema
+FROM total_registered.driver_license
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
+
+
+ 528
+ 480
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.education_level(m_d).hpl b/mappings/mil_district/total_registered.education_level(m_d).hpl
new file mode 100644
index 0000000..759415a
--- /dev/null
+++ b/mappings/mil_district/total_registered.education_level(m_d).hpl
@@ -0,0 +1,377 @@
+
+
+
+ total_registered.education_level(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (total_registered.education_level)
+ Y
+
+
+ Table input (person_registry) РФ/все
+ Get variables 3 2
+ Y
+
+
+ Insert / update (total_registered.education_level)
+ Execute SQL script 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) РФ/все
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 304
+ 416
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1472
+ 416
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 784
+ 416
+
+
+
+ Insert / update (total_registered.education_level)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+
+ total_registered
+
+
+ higher
+ higher
+ Y
+
+
+ average
+ average_prof
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ only_general
+ only_general
+ Y
+
+
+ no_data
+ count_nodata
+ Y
+
+
+ higher_percent
+ higher_percentage
+ Y
+
+
+ average_percent
+ average_prof_percentage
+ Y
+
+
+ only_general_percent
+ only_general_percentage
+ Y
+
+
+ no_data_percent
+ count_nodata_percentage
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ education_level
+ total
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ Y
+
+
+ 1184
+ 416
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 928
+ 416
+
+
+
+ Table input (person_registry) РФ/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(higher), 0) higher,
+ COALESCE(SUM(average), 0) average_prof,
+ COALESCE(SUM(only_general), 0) only_general,
+ COALESCE(SUM(no_data), 0) count_nodata,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) higher_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_prof_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) only_general_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) count_nodata_percentage,
+
+ COALESCE(SUM(education_level), 0) total,
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Region' AS schema
+FROM total_registered.education_level
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
+
+
+ 512
+ 416
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.marital_status(m_d).hpl b/mappings/mil_district/total_registered.marital_status(m_d).hpl
new file mode 100644
index 0000000..d9b0404
--- /dev/null
+++ b/mappings/mil_district/total_registered.marital_status(m_d).hpl
@@ -0,0 +1,356 @@
+
+
+
+ total_registered.marital_status(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update (total_registered.marital_status)
+ Y
+
+
+ Table input (person_registry) регионы/все
+ Get variables 3 2
+ Y
+
+
+ Insert / update (total_registered.marital_status)
+ Execute SQL script 2
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) регионы/все
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 320
+ 416
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1472
+ 416
+
+
+
+ Get variables 3 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 784
+ 416
+
+
+
+ Insert / update (total_registered.marital_status)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
+ total_registered
+
+
+ married
+ married
+ Y
+
+
+ not_married
+ not_married
+ Y
+
+
+ married_percent
+ married_percent
+ Y
+
+
+ not_married_percent
+ not_married_percent
+ Y
+
+
+ "all_M_W"
+ gender
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ marital_status
+ total
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ Y
+
+
+ 1184
+ 416
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 928
+ 416
+
+
+
+ Table input (person_registry) регионы/все
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(married), 0) married,
+ COALESCE(SUM(not_married), 0) not_married,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(other) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ COALESCE(SUM(marital_status), 0) total,
+ '${MD_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Region' AS schema
+FROM total_registered.marital_status
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
+ Y
+
+
+ 560
+ 416
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.reg_mil_cat(m_d).hpl b/mappings/mil_district/total_registered.reg_mil_cat(m_d).hpl
new file mode 100644
index 0000000..c93c29e
--- /dev/null
+++ b/mappings/mil_district/total_registered.reg_mil_cat(m_d).hpl
@@ -0,0 +1,396 @@
+
+
+
+ total_registered.reg_mil_cat(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 3
+ Select values 3
+ Y
+
+
+ Select values 3
+ Insert / update (total_registered.reg_mil_cat)
+ Y
+
+
+ Table input (person_registry) военком/рег
+ Get variables 3
+ Y
+
+
+ Execute SQL script
+ Table input (person_registry) военком/рег
+ Y
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 192
+ 336
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1312
+ 336
+
+
+
+ Get variables 3
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 672
+ 336
+
+
+
+ Insert / update (total_registered.reg_mil_cat)
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ first_reg_17
+ first_reg_17
+ Y
+
+
+ first_reg_18
+ first_reg_18
+ Y
+
+
+ "mil_spec_W"
+ mil_spec_w
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ returned_dep_liberty
+ returned_dep_liberty
+ Y
+
+
+ punished
+ punished
+ Y
+
+
+ received_citizenship
+ received_citizenship
+ Y
+
+
+ first_reg_17_percent
+ first_reg_17_percent
+ Y
+
+
+ first_reg_18_percent
+ first_reg_18_percent
+ Y
+
+
+ returned_dep_liberty_percent
+ returned_dep_liberty_percent
+ Y
+
+
+ "mil_spec_W_percent"
+ mil_spec_w_percent
+ Y
+
+
+ punished_percent
+ punished_percent
+ Y
+
+
+ received_citizenship_percent
+ received_citizenship_percent
+ Y
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1072
+ 336
+
+
+
+ Select values 3
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 816
+ 336
+
+
+
+ Table input (person_registry) военком/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(COALESCE(SUM(first_reg_17), 0), 0) first_reg_17,
+ COALESCE(COALESCE(SUM(first_reg_18), 0), 0) first_reg_18,
+ COALESCE(COALESCE(SUM("mil_spec_W"), 0), 0) mil_spec_w,
+ COALESCE(COALESCE(SUM(returned_dep_liberty), 0), 0) returned_dep_liberty,
+ COALESCE(COALESCE(SUM(punished), 0), 0) punished,
+ COALESCE(COALESCE(SUM(received_citizenship), 0), 0) received_citizenship,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_17) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) first_reg_17_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_18) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) first_reg_18_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(returned_dep_liberty) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) returned_dep_liberty_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM("mil_spec_W") / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mil_spec_w_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(punished) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) punished_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(received_citizenship) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) received_citizenship_percent,
+ '${MD_ID}'::uuid AS recruitment_id,
+ mil_reg,
+ 'Region' AS schema
+FROM total_registered.reg_mil_cat
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
+ Y
+
+
+ 416
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.removed_registry(m_d).hpl b/mappings/mil_district/total_registered.removed_registry(m_d).hpl
new file mode 100644
index 0000000..d005ac1
--- /dev/null
+++ b/mappings/mil_district/total_registered.removed_registry(m_d).hpl
@@ -0,0 +1,390 @@
+
+
+
+ total_registered.removed_registry(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 2 2
+ Select values 2 2
+ Y
+
+
+ Select values 2 2
+ Insert / update (total_registered.removed_registry) 2
+ Y
+
+
+ Table input (decision-document-service) регион 2
+ Get variables 2 2
+ Y
+
+
+ Execute SQL script
+ Table input (decision-document-service) регион 2
+ Y
+
+
+ Insert / update (total_registered.removed_registry) 2
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 224
+ 336
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1392
+ 336
+
+
+
+ Get variables 2 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 752
+ 336
+
+
+
+ Insert / update (total_registered.removed_registry) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+ total_registered
+
+
+ age_limit
+ age_limit
+ Y
+
+
+ death
+ death
+ Y
+
+
+ removed_registry
+ removed_registry
+ Y
+
+
+ deprivation_citizenship
+ deprivation_citizenship
+ Y
+
+
+ travel_abroad
+ travel_abroad
+ Y
+
+
+ living_abroad
+ living_abroad
+ Y
+
+
+ other
+ other
+ Y
+
+
+ deprivation_citizen_percents
+ deprivation_citizen_percents
+ Y
+
+
+ age_limit_percent
+ age_limit_percent
+ Y
+
+
+ death_percent
+ death_percent
+ Y
+
+
+ travel_abroad_percent
+ travel_abroad_percent
+ Y
+
+
+ living_abroad_percent
+ living_abroad_percent
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1120
+ 336
+
+
+
+ Select values 2 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 880
+ 336
+
+
+
+ Table input (decision-document-service) регион 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(age_limit), 0) age_limit,
+ COALESCE(SUM(death), 0) death,
+ COALESCE(SUM(removed_registry), 0) removed_registry,
+ COALESCE(SUM(deprivation_citizenship), 0) deprivation_citizenship,
+ COALESCE(SUM(travel_abroad), 0) travel_abroad,
+ COALESCE(SUM(living_abroad), 0) living_abroad,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(deprivation_citizenship) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) deprivation_citizen_percents,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(age_limit) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) age_limit_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(death) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) death_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(travel_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) travel_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(living_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) living_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(other) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ '${MD_ID}' AS recruitment_id,
+ 'Region' AS schema
+FROM total_registered.removed_registry
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE;
+ Y
+
+
+ 464
+ 336
+
+
+
+
+
+
diff --git a/mappings/mil_district/total_registered.subpoenas(m_d).hpl b/mappings/mil_district/total_registered.subpoenas(m_d).hpl
new file mode 100644
index 0000000..0bb2dd4
--- /dev/null
+++ b/mappings/mil_district/total_registered.subpoenas(m_d).hpl
@@ -0,0 +1,486 @@
+
+
+
+ total_registered.subpoenas(m_d)
+ Y
+
+
+
+ Normal
+ 0
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/08/02 11:56:22.507
+ -
+ 2024/08/02 11:56:22.507
+
+
+
+
+
+ Get variables 4 2
+ Select values 4 2
+ Y
+
+
+ Select values 4 2
+ Insert / update (total_registered.subpoenas) 3
+ Y
+
+
+ Table input (subpoena) регион/рег
+ Get variables 4 2
+ Y
+
+
+ Execute SQL script
+ Table input (subpoena) регион/рег
+ Y
+
+
+ Insert / update (total_registered.subpoenas) 3
+ Execute SQL script 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Region'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 272
+ 400
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'MD_LVL'
+ AND recruitment_id = '${MD_ID}'
+
+
+ 1376
+ 400
+
+
+
+ Get variables 4 2
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ MD_ID
+ -1
+ none
+ String
+
+
+ -1
+ MD_ARRAY
+ -1
+ none
+ String
+
+
+
+
+ 688
+ 400
+
+
+
+ Insert / update (total_registered.subpoenas) 3
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ MD_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ mil_reg
+ mil_reg
+
+ total_registered
+
+
+ subpoena
+ count_subpoena
+ Y
+
+
+ appeared
+ count_appeared
+ Y
+
+
+ average_appeared
+ average_appeared
+ Y
+
+
+ not_appeared
+ count_not_appeared
+ Y
+
+
+ not_ap_good_reason
+ count_not_ap_good_reason
+ Y
+
+
+ introduced_measures
+ count_introduced_measures
+ Y
+
+
+ ap_not_required
+ count_ap_not_required
+ Y
+
+
+ electron
+ count_electron
+ Y
+
+
+ paper
+ count_paper
+ Y
+
+
+ restrictions_applied
+ count_restrictions_applied
+ Y
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ mil_reg
+ mil_reg
+ N
+
+
+ appeared_percent
+ appeared_percent
+ Y
+
+
+ not_appeared_percent
+ not_appeared_percent
+ Y
+
+
+ not_ap_good_reason_percent
+ not_ap_good_reason_percent
+ Y
+
+
+ ap_not_required_percent
+ ap_not_required_percent
+ Y
+
+
+ electron_percent
+ electron_percent
+ Y
+
+
+ paper_percent
+ paper_percent
+ Y
+
+
+ restrictions_applied_percent
+ restrictions_applied_percent
+ Y
+
+
+ introduced_measures_percent
+ introduced_measures_percent
+ Y
+
+
+ count_not_delivery
+ count_not_delivery
+ Y
+
+
+ appear_date_is_good
+ appear_date_is_good
+ Y
+
+
+ not_delivery_percent
+ not_delivery_percent
+ Y
+
+
+ appear_date_is_good_percent
+ appear_date_is_good_percent
+ Y
+
+
+ schema
+ schema
+ N
+
+
+ N
+
+
+ 1136
+ 400
+
+
+
+ Select values 4 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ MD_ID
+ MD_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+ MD_ARRAY
+ MD_ARRAY
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 864
+ 400
+
+
+
+ Table input (subpoena) регион/рег
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(average_appeared), 0) average_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(electron), 0) count_electron,
+ COALESCE(SUM(paper), 0) count_paper,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(electron) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) electron_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(paper) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) paper_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${MD_ID}' AS recruitment_id,
+ mil_reg,
+ 'Region' AS schema
+FROM total_registered.subpoenas
+WHERE recruitment_id = ANY ('${MD_ARRAY}')
+AND schema = 'Organization'
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
+ Y
+
+
+ 480
+ 400
+
+
+
+
+
+
diff --git a/mappings/pack.pub_recruitment.hpl b/mappings/pack.pub_recruitment.hpl
index d2190ee..90331f4 100644
--- a/mappings/pack.pub_recruitment.hpl
+++ b/mappings/pack.pub_recruitment.hpl
@@ -1,3 +1,4 @@
+
pack.pub_recruitment
@@ -6,7 +7,6 @@
Normal
- /
N
@@ -16,8 +16,6 @@
2024/08/15 14:02:51.713
-
2024/08/15 14:02:51.713
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -27,7 +25,71 @@
Table output
Y
+
+ Table input
+ Insert / update
+ N
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ idm_id
+ idm_id
+
+ ervu_dashboard
+
+
+ id
+ id
+ Y
+
+
+ parent_id
+ parent_id
+ Y
+
+
+ schema
+ schema
+ Y
+
+
+ shortname
+ shortname
+ Y
+
+
+ updated_at
+ updated_at
+ Y
+
+
+ idm_id
+ idm_id
+ N
+
+
+ N
+
+
+ 512
+ 208
+
+
Table input
TableInput
@@ -40,30 +102,33 @@
postgres.subpoena
- select
-rt2.id,
-rt2.shortname,
-rt2.parent_id,
-rt2.idm_id,
-case
-when rt.idm_id='bb7aa36f-446e-4262-a609-28694ca2e398' then '12'
-when rt.idm_id='092d6963-287c-454e-8d73-8e09ebee972e' then '62'
-when rt.idm_id='84bc45ab-c032-410e-9dc5-07e92719ede4' then '65'
-end as code
-from recruitment rt
-left join recruitment rt2 on rt2.parent_id=rt.idm_id::text
-where rt.idm_id in ('bb7aa36f-446e-4262-a609-28694ca2e398','092d6963-287c-454e-8d73-8e09ebee972e','84bc45ab-c032-410e-9dc5-07e92719ede4')
- 0
-
N
+ 0
+ SELECT
+ rt.id,
+ rt.fullname as shortname,
+ rt.parent_id,
+ rt.idm_id,
+ rt.schema,
+ rt.updated_at
+FROM public.recruitment rt
+WHERE
+ rt.idm_id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
+ AND (rt.schema = 'Ministry' OR (rt.schema IS NOT NULL AND rt.parent_id IS NOT NULL))
+ AND rt.hidden IS NOT TRUE
+ AND (
+ rt.fullname ILIKE '%военный%'
+ OR
+ rt.fullname ILIKE '%округ%'
+ OR
+ rt.fullname ILIKE '%министерство%'
+)
+ AND rt.fullname NOT ILIKE '%тест%'
N
- N
-
208
208
- Y
@@ -77,31 +142,27 @@ where rt.idm_id in ('bb7aa36f-446e-4262-a609-28694ca2e398','092d6963-287c-454e-8
none
- ervu-dashboard
- ervu_dashboard
-
1000
- N
- N
- Y
- N
- N
-
- N
- Y
- N
-
- Y
- N
-
+ ervu-dashboard
-
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ N
+
+ N
+ Y
+ N
+ Y
-
480
- 208
- Y
+ 320
diff --git a/mappings/predictive_metrics/data_collection.hpl b/mappings/predictive_metrics/data_collection.hpl
new file mode 100644
index 0000000..167c31c
--- /dev/null
+++ b/mappings/predictive_metrics/data_collection.hpl
@@ -0,0 +1,203 @@
+
+
+
+ data_collection
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/27 12:45:14.184
+ -
+ 2025/02/27 12:45:14.184
+
+
+
+
+
+ Table input
+ Merge join
+ Y
+
+
+ Table input 2
+ Merge join
+ Y
+
+
+ Merge join
+ Table output
+ Y
+
+
+
+ Merge join
+ MergeJoin
+
+ Y
+
+ 1
+
+ none
+
+
+ INNER
+
+ recruitment_id
+
+
+ idm_id
+
+ Table input
+ Table input 2
+
+
+ 768
+ 368
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.person_registry
+ N
+ 0
+ WITH year_series AS (
+ SELECT generate_series(
+ date_trunc('year', CURRENT_DATE) - INTERVAL '54 years',
+ date_trunc('year', CURRENT_DATE) - INTERVAL '1 year',
+ INTERVAL '1 year'
+ )::date AS year_date
+)
+SELECT
+ COALESCE(r.target_recruitment_id, r.current_recruitment_id) as recruitment_id,
+ ys.year_date AS year,
+ COALESCE(COUNT(r.id) FILTER (
+ WHERE r.military_registration_date >= ys.year_date
+ AND r.military_registration_date < ys.year_date + INTERVAL '1 year'
+ ), 0) AS count_all,
+ COALESCE(COUNT(r.id) FILTER (
+ WHERE r.military_registration_date >= ys.year_date
+ AND r.military_registration_date < ys.year_date + INTERVAL '1 year'
+ AND DATE_PART('year', AGE(r.system_create_date, r.birth_date)) < 18
+ ), 0) AS reaching_17_age,
+ COALESCE(COUNT(r.id) FILTER (
+ WHERE r.military_registration_date >= ys.year_date
+ AND r.military_registration_date < ys.year_date + INTERVAL '1 year'
+ AND r.gender = 'FEMALE'
+ ), 0) AS women_military_specialty,
+ 'Department' as schema
+FROM year_series ys
+LEFT JOIN recruits r ON 1=1
+GROUP BY ys.year_date, COALESCE(r.target_recruitment_id, r.current_recruitment_id)
+ORDER BY recruitment_id, year DESC;
+ N
+
+
+ 544
+ 304
+
+
+
+ Table input 2
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ -- Берем только записи с максимальной версией для каждого idm_id
+SELECT DISTINCT ON (idm_id) idm_id
+FROM ervu_dashboard.recruitment
+WHERE schema = 'Department'
+ORDER BY idm_id, updated_at DESC
+
+ N
+
+
+ 544
+ 496
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+ ervu-dashboard
+
+
+ recruitment_id
+ recruitment_id
+
+
+ recording_date
+ year
+
+
+ count_all
+ count_all
+
+
+ reaching_17_age
+ reaching_17_age
+
+
+ women_military_specialty
+ women_military_specialty
+
+
+ schema
+ schema
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ forecast
+ Y
+
+ N
+ Y
+ Y
+ Y
+
+
+ 960
+ 368
+
+
+
+
+
+
diff --git a/mappings/predictive_metrics/next_lvl_org_pm.hpl b/mappings/predictive_metrics/next_lvl_org_pm.hpl
new file mode 100644
index 0000000..d868ab0
--- /dev/null
+++ b/mappings/predictive_metrics/next_lvl_org_pm.hpl
@@ -0,0 +1,177 @@
+
+
+
+ next_lvl_org_pm
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/27 12:55:12.966
+ -
+ 2025/02/27 12:55:12.966
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH latest_hierarchy AS (
+ -- Берем только записи с максимальной версией для каждого idm_id
+ SELECT DISTINCT ON (idm_id) *
+ FROM ervu_dashboard.recruitment
+ ORDER BY idm_id, updated_at DESC
+),
+hierarchy_cte AS (
+ -- Строим связи между уровнями (Department → Organization → Region → Ministry)
+ SELECT
+ h.idm_id AS department_id,
+ h.parent_id AS organization_id,
+ h2.parent_id AS region_id,
+ h3.parent_id AS ministry_id
+ FROM latest_hierarchy h
+ LEFT JOIN latest_hierarchy h2 ON h.parent_id = h2.idm_id -- Organization
+ LEFT JOIN latest_hierarchy h3 ON h2.parent_id = h3.idm_id -- Region
+ WHERE h.schema = 'Department' -- Начинаем с Department
+),
+aggregated_counts AS (
+ -- Агрегируем для Organization
+ SELECT
+ h.organization_id AS level_id,
+ SUM(r.reaching_17_age) AS total_reaching_17_age,
+ SUM(r.women_military_specialty) AS total_women_military_specialty,
+ SUM(r.count_all) AS total_count_all,
+ recording_date AS recording_date,
+ 'Organization' AS level
+ FROM forecast.registered_citizens r
+ JOIN hierarchy_cte h ON r.recruitment_id = h.department_id
+ WHERE h.organization_id IS NOT NULL
+ GROUP BY h.organization_id, recording_date
+
+ UNION ALL
+
+ -- Агрегируем для Region
+ SELECT
+ h.region_id AS level_id,
+ SUM(r.reaching_17_age) AS total_reaching_17_age,
+ SUM(r.women_military_specialty) AS total_women_military_specialty,
+ SUM(r.count_all) AS total_count_all,
+ recording_date AS recording_date,
+ 'Region' AS level
+ FROM forecast.registered_citizens r
+ JOIN hierarchy_cte h ON r.recruitment_id = h.department_id
+ WHERE h.region_id IS NOT NULL
+ GROUP BY h.region_id, recording_date
+
+ UNION ALL
+
+ -- Агрегируем для Ministry
+ SELECT
+ h.ministry_id AS level_id,
+ SUM(r.reaching_17_age) AS total_reaching_17_age,
+ SUM(r.women_military_specialty) AS total_women_military_specialty,
+ SUM(r.count_all) AS total_count_all,
+ recording_date AS recording_date,
+ 'Ministry' AS level
+ FROM forecast.registered_citizens r
+ JOIN hierarchy_cte h ON r.recruitment_id = h.department_id
+ WHERE h.ministry_id IS NOT NULL
+ GROUP BY h.ministry_id, recording_date
+)
+SELECT * FROM aggregated_counts;
+ N
+
+
+ 672
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+ ervu-dashboard
+
+
+ recruitment_id
+ level_id
+
+
+ reaching_17_age
+ total_reaching_17_age
+
+
+ women_military_specialty
+ total_women_military_specialty
+
+
+ count_all
+ total_count_all
+
+
+ recording_date
+ recording_date
+
+
+ schema
+ level
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ forecast
+ Y
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 912
+ 304
+
+
+
+
+
+
diff --git a/mappings/predictive_metrics/predictive.hwf b/mappings/predictive_metrics/predictive.hwf
new file mode 100644
index 0000000..a307c17
--- /dev/null
+++ b/mappings/predictive_metrics/predictive.hwf
@@ -0,0 +1,165 @@
+
+
+ predictive
+ Y
+
+
+
+ -
+ 2025/02/27 13:51:40.861
+ -
+ 2025/02/27 13:51:40.861
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 304
+ 352
+
+
+
+ data_collection.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/predictive_metrics/data_collection.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 448
+ 352
+
+
+
+ next_lvl_org_pm.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/predictive_metrics/next_lvl_org_pm.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 592
+ 352
+
+
+
+ predictive_data.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/predictive_metrics/predictive_data.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 736
+ 352
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 880
+ 352
+
+
+
+
+
+ Start
+ data_collection.hpl
+ Y
+ Y
+ Y
+
+
+ data_collection.hpl
+ next_lvl_org_pm.hpl
+ Y
+ Y
+ N
+
+
+ next_lvl_org_pm.hpl
+ predictive_data.hpl
+ Y
+ Y
+ N
+
+
+ predictive_data.hpl
+ Success
+ Y
+ Y
+ N
+
+
+
+
+
+
+ debug_plugin
+
+
+
diff --git a/mappings/predictive_metrics/predictive_data.hpl b/mappings/predictive_metrics/predictive_data.hpl
new file mode 100644
index 0000000..14e9197
--- /dev/null
+++ b/mappings/predictive_metrics/predictive_data.hpl
@@ -0,0 +1,461 @@
+
+
+
+ predictive_data
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/02/27 13:48:40.269
+ -
+ 2025/02/27 13:48:40.269
+
+
+
+
+
+ Table input
+ Table output
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ -- Адаптированный запрос для таблицы forecast.registered_citizens с учетом указанной структуры
+-- recording_date - год наблюдения
+-- recruitment_id - идентификатор военкомата
+-- count_all - всего на учете
+-- reaching_17_age - поставлено на учет по достижении 17 лет
+-- women_military_specialty - женщины, получившие ВУС
+-- schema - уровень военкомата
+
+-- 1. Проверяем наличие данных за весь необходимый период и создаем полную сетку лет
+
+WITH RECURSIVE years AS ( -- Теперь синтаксис правильный
+ SELECT
+ EXTRACT(YEAR FROM CURRENT_DATE)::int AS year,
+ 'Текущий год' AS prediction_type
+ UNION ALL
+ SELECT
+ year + 1,
+ 'Прогнозный год'
+ FROM years
+ WHERE year < EXTRACT(YEAR FROM CURRENT_DATE)::int + 49 -- +49, т.к. первый год уже включён
+),
+year_range AS (
+ SELECT
+ EXTRACT(YEAR FROM CURRENT_DATE) - 54 AS min_year, -- Для первых двух показателей
+ EXTRACT(YEAR FROM CURRENT_DATE) - 34 AS min_year_females, -- Для женщин с ВУС
+ EXTRACT(YEAR FROM CURRENT_DATE) AS max_year
+),
+
+all_years AS (
+ SELECT generate_series(min_year, max_year) AS year
+ FROM year_range
+),
+
+all_years_females AS (
+ SELECT generate_series(min_year_females, max_year) AS year
+ FROM year_range
+),
+
+all_regions AS (
+ SELECT DISTINCT recruitment_id, schema FROM forecast.registered_citizens
+),
+
+-- 2. Создаем полную сетку регион-год для всех показателей
+full_grid_males AS (
+ SELECT
+ r.recruitment_id,
+ r.schema,
+ y.year
+ FROM all_regions r
+ CROSS JOIN all_years y
+),
+
+full_grid_females AS (
+ SELECT
+ r.recruitment_id,
+ r.schema,
+ y.year
+ FROM all_regions r
+ CROSS JOIN all_years_females y
+),
+
+-- 3. Объединяем сетку с имеющимися данными, чтобы выявить пропуски
+males_data AS (
+ SELECT
+ g.recruitment_id,
+ g.schema,
+ g.year,
+ COALESCE(h.count_all, NULL) AS count_all,
+ COALESCE(h.reaching_17_age, NULL) AS reaching_17_age
+ FROM full_grid_males g
+ LEFT JOIN forecast.registered_citizens h ON g.recruitment_id = h.recruitment_id AND g.year = EXTRACT(YEAR FROM h.recording_date)
+),
+
+females_data AS (
+ SELECT
+ g.recruitment_id,
+ g.schema,
+ g.year,
+ COALESCE(h.women_military_specialty, NULL) AS women_military_specialty
+ FROM full_grid_females g
+ LEFT JOIN forecast.registered_citizens h ON g.recruitment_id = h.recruitment_id AND g.year = EXTRACT(YEAR FROM h.recording_date)
+),
+
+-- 4. Рассчитываем статистики для выявления выбросов
+males_stats AS (
+ SELECT
+ recruitment_id,
+ schema,
+ AVG(count_all) AS avg_count_all,
+ STDDEV(count_all) AS stddev_count_all, -- σ для фильтрации выбросов
+ AVG(reaching_17_age) AS avg_reaching_17_age,
+ STDDEV(reaching_17_age) AS stddev_reaching_17_age -- σ для фильтрации выбросов
+ FROM males_data
+ WHERE count_all IS NOT NULL AND reaching_17_age IS NOT NULL
+ GROUP BY recruitment_id, schema
+),
+
+females_stats AS (
+ SELECT
+ recruitment_id,
+ schema,
+ AVG(women_military_specialty) AS avg_women_military_specialty,
+ STDDEV(women_military_specialty) AS stddev_women_military_specialty -- σ для фильтрации выбросов
+ FROM females_data
+ WHERE women_military_specialty IS NOT NULL
+ GROUP BY recruitment_id, schema
+),
+
+-- 5. Выявляем выбросы и помечаем их для интерполяции
+males_outliers AS (
+ SELECT
+ m.recruitment_id,
+ m.schema,
+ m.year,
+ m.count_all,
+ CASE
+ WHEN m.count_all IS NULL OR ABS(m.count_all - s.avg_count_all) > s.stddev_count_all
+ THEN TRUE ELSE FALSE
+ END AS count_all_is_outlier,
+ m.reaching_17_age,
+ CASE
+ WHEN m.reaching_17_age IS NULL OR ABS(m.reaching_17_age - s.avg_reaching_17_age) > s.stddev_reaching_17_age
+ THEN TRUE ELSE FALSE
+ END AS reaching_17_age_is_outlier
+ FROM males_data m
+ JOIN males_stats s ON m.recruitment_id = s.recruitment_id AND m.schema = s.schema
+),
+
+females_outliers AS (
+ SELECT
+ f.recruitment_id,
+ f.schema,
+ f.year,
+ f.women_military_specialty,
+ CASE
+ WHEN f.women_military_specialty IS NULL OR ABS(f.women_military_specialty - s.avg_women_military_specialty) > s.stddev_women_military_specialty
+ THEN TRUE ELSE FALSE
+ END AS women_military_specialty_is_outlier
+ FROM females_data f
+ JOIN females_stats s ON f.recruitment_id = s.recruitment_id AND f.schema = s.schema
+),
+
+-- 6. Подготовка данных для интерполяции (находим ближайшие НЕ выбросы)
+males_interpolation_prep AS (
+ SELECT
+ mo.recruitment_id,
+ mo.schema,
+ mo.year,
+ mo.count_all,
+ mo.count_all_is_outlier,
+ mo.reaching_17_age,
+ mo.reaching_17_age_is_outlier,
+ -- Для интерполяции "Всего на учете" ищем ближайшие не-выбросы
+ (SELECT MAX(year) FROM males_outliers
+ WHERE recruitment_id = mo.recruitment_id AND schema = mo.schema AND year < mo.year AND NOT count_all_is_outlier) AS prev_year_count_all,
+ (SELECT MIN(year) FROM males_outliers
+ WHERE recruitment_id = mo.recruitment_id AND schema = mo.schema AND year > mo.year AND NOT count_all_is_outlier) AS next_year_count_all,
+ -- Для интерполяции "Поставлено на учет по достижении 17 лет" ищем ближайшие не-выбросы
+ (SELECT MAX(year) FROM males_outliers
+ WHERE recruitment_id = mo.recruitment_id AND schema = mo.schema AND year < mo.year AND NOT reaching_17_age_is_outlier) AS prev_year_reaching_17_age,
+ (SELECT MIN(year) FROM males_outliers
+ WHERE recruitment_id = mo.recruitment_id AND schema = mo.schema AND year > mo.year AND NOT reaching_17_age_is_outlier) AS next_year_reaching_17_age
+ FROM males_outliers mo
+),
+
+females_interpolation_prep AS (
+ SELECT
+ fo.recruitment_id,
+ fo.schema,
+ fo.year,
+ fo.women_military_specialty,
+ fo.women_military_specialty_is_outlier,
+ -- Для интерполяции "Женщины, получившие ВУС" ищем ближайшие не-выбросы
+ (SELECT MAX(year) FROM females_outliers
+ WHERE recruitment_id = fo.recruitment_id AND schema = fo.schema AND year < fo.year AND NOT women_military_specialty_is_outlier) AS prev_year_women_military_specialty,
+ (SELECT MIN(year) FROM females_outliers
+ WHERE recruitment_id = fo.recruitment_id AND schema = fo.schema AND year > fo.year AND NOT women_military_specialty_is_outlier) AS next_year_women_military_specialty
+ FROM females_outliers fo
+),
+
+-- 7. Выполняем линейную интерполяцию для выбросов и отсутствующих значений
+males_interpolated AS (
+ SELECT
+ m.recruitment_id,
+ m.schema,
+ m.year,
+ CASE
+ WHEN m.count_all_is_outlier AND m.prev_year_count_all IS NOT NULL AND m.next_year_count_all IS NOT NULL THEN
+ -- Linear interpolation formula: y = y1 + ((x - x1) / (x2 - x1)) * (y2 - y1)
+ (SELECT p.count_all FROM males_outliers p
+ WHERE p.recruitment_id = m.recruitment_id AND p.schema = m.schema AND p.year = m.prev_year_count_all) +
+ ((m.year - m.prev_year_count_all)::float / (m.next_year_count_all - m.prev_year_count_all)) *
+ ((SELECT n.count_all FROM males_outliers n
+ WHERE n.recruitment_id = m.recruitment_id AND n.schema = m.schema AND n.year = m.next_year_count_all) -
+ (SELECT p.count_all FROM males_outliers p
+ WHERE p.recruitment_id = m.recruitment_id AND p.schema = m.schema AND p.year = m.prev_year_count_all))
+ ELSE m.count_all
+ END AS count_all,
+ CASE
+ WHEN m.reaching_17_age_is_outlier AND m.prev_year_reaching_17_age IS NOT NULL AND m.next_year_reaching_17_age IS NOT NULL THEN
+ -- Linear interpolation formula: y = y1 + ((x - x1) / (x2 - x1)) * (y2 - y1)
+ (SELECT p.reaching_17_age FROM males_outliers p
+ WHERE p.recruitment_id = m.recruitment_id AND p.schema = m.schema AND p.year = m.prev_year_reaching_17_age) +
+ ((m.year - m.prev_year_reaching_17_age)::float / (m.next_year_reaching_17_age - m.prev_year_reaching_17_age)) *
+ ((SELECT n.reaching_17_age FROM males_outliers n
+ WHERE n.recruitment_id = m.recruitment_id AND n.schema = m.schema AND n.year = m.next_year_reaching_17_age) -
+ (SELECT p.reaching_17_age FROM males_outliers p
+ WHERE p.recruitment_id = m.recruitment_id AND p.schema = m.schema AND p.year = m.prev_year_reaching_17_age))
+ ELSE m.reaching_17_age
+ END AS reaching_17_age
+ FROM males_interpolation_prep m
+),
+
+females_interpolated AS (
+ SELECT
+ f.recruitment_id,
+ f.schema,
+ f.year,
+ CASE
+ WHEN f.women_military_specialty_is_outlier AND f.prev_year_women_military_specialty IS NOT NULL AND f.next_year_women_military_specialty IS NOT NULL THEN
+ -- Linear interpolation formula: y = y1 + ((x - x1) / (x2 - x1)) * (y2 - y1)
+ (SELECT p.women_military_specialty FROM females_outliers p
+ WHERE p.recruitment_id = f.recruitment_id AND p.schema = f.schema AND p.year = f.prev_year_women_military_specialty) +
+ ((f.year - f.prev_year_women_military_specialty)::float / (f.next_year_women_military_specialty - f.prev_year_women_military_specialty)) *
+ ((SELECT n.women_military_specialty FROM females_outliers n
+ WHERE n.recruitment_id = f.recruitment_id AND n.schema = f.schema AND n.year = f.next_year_women_military_specialty) -
+ (SELECT p.women_military_specialty FROM females_outliers p
+ WHERE p.recruitment_id = f.recruitment_id AND p.schema = f.schema AND p.year = f.prev_year_women_military_specialty))
+ ELSE f.women_military_specialty
+ END AS women_military_specialty
+ FROM females_interpolation_prep f
+),
+
+-- 8. Объединяем интерполированные данные
+combined_data AS (
+ SELECT
+ m.recruitment_id,
+ m.schema,
+ m.year,
+ m.count_all,
+ m.reaching_17_age,
+ f.women_military_specialty
+ FROM males_interpolated m
+ LEFT JOIN females_interpolated f ON m.recruitment_id = f.recruitment_id AND m.schema = f.schema AND m.year = f.year
+),
+
+
+
+-- 9. Рассчитываем параметры линейной регрессии
+average_values AS (
+ SELECT
+ recruitment_id,
+ schema,
+ year,
+ count_all,
+ reaching_17_age,
+ women_military_specialty,
+ -- Вычисляем средние значения отдельно
+ AVG(year) FILTER (WHERE count_all IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_x_count_all,
+ AVG(count_all) FILTER (WHERE count_all IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_y_count_all,
+ AVG(year) FILTER (WHERE reaching_17_age IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_x_reaching_17_age,
+ AVG(reaching_17_age) FILTER (WHERE reaching_17_age IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_y_reaching_17_age,
+ AVG(year) FILTER (WHERE women_military_specialty IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_x_women_military_specialty,
+ AVG(women_military_specialty) FILTER (WHERE women_military_specialty IS NOT NULL) OVER (PARTITION BY recruitment_id, schema) AS avg_y_women_military_specialty
+ FROM combined_data
+),
+regression_stats AS (
+ SELECT
+ recruitment_id,
+ schema,
+
+ -- count_all
+ COUNT(*) FILTER (WHERE count_all IS NOT NULL) AS n_count_all,
+ AVG(year) FILTER (WHERE count_all IS NOT NULL) AS avg_x_count_all,
+ AVG(count_all) FILTER (WHERE count_all IS NOT NULL) AS avg_y_count_all,
+ SUM((year - avg_x_count_all) * (count_all - avg_y_count_all)) FILTER (WHERE count_all IS NOT NULL) AS sum_xy_count_all,
+ SUM(POWER(year - avg_x_count_all, 2)) FILTER (WHERE count_all IS NOT NULL) AS sum_x_squared_count_all,
+
+ -- reaching_17_age
+ COUNT(*) FILTER (WHERE reaching_17_age IS NOT NULL) AS n_reaching_17_age,
+ AVG(year) FILTER (WHERE reaching_17_age IS NOT NULL) AS avg_x_reaching_17_age,
+ AVG(reaching_17_age) FILTER (WHERE reaching_17_age IS NOT NULL) AS avg_y_reaching_17_age,
+ SUM((year - avg_x_reaching_17_age) * (reaching_17_age - avg_y_reaching_17_age)) FILTER (WHERE reaching_17_age IS NOT NULL) AS sum_xy_reaching_17_age,
+ SUM(POWER(year - avg_x_reaching_17_age, 2)) FILTER (WHERE reaching_17_age IS NOT NULL) AS sum_x_squared_reaching_17_age,
+
+ -- women_military_specialty
+ COUNT(*) FILTER (WHERE women_military_specialty IS NOT NULL) AS n_women_military_specialty,
+ AVG(year) FILTER (WHERE women_military_specialty IS NOT NULL) AS avg_x_women_military_specialty,
+ AVG(women_military_specialty) FILTER (WHERE women_military_specialty IS NOT NULL) AS avg_y_women_military_specialty,
+ SUM((year - avg_x_women_military_specialty) * (women_military_specialty - avg_y_women_military_specialty)) FILTER (WHERE women_military_specialty IS NOT NULL) AS sum_xy_women_military_specialty,
+ SUM(POWER(year - avg_x_women_military_specialty, 2)) FILTER (WHERE women_military_specialty IS NOT NULL) AS sum_x_squared_women_military_specialty
+
+ FROM average_values
+ GROUP BY recruitment_id, schema
+),
+
+-- 10. Вычисляем параметры уравнения линейной регрессии
+regression_params AS (
+ SELECT
+ recruitment_id,
+ schema,
+ -- Параметры для count_all
+ CASE
+ WHEN sum_x_squared_count_all <> 0 THEN sum_xy_count_all / sum_x_squared_count_all
+ ELSE 0
+ END AS k_count_all,
+ avg_y_count_all - (CASE
+ WHEN sum_x_squared_count_all <> 0 THEN sum_xy_count_all / sum_x_squared_count_all
+ ELSE 0
+ END) * avg_x_count_all AS b_count_all,
+
+ -- Параметры для reaching_17_age
+ CASE
+ WHEN sum_x_squared_reaching_17_age <> 0 THEN sum_xy_reaching_17_age / sum_x_squared_reaching_17_age
+ ELSE 0
+ END AS k_reaching_17_age,
+ avg_y_reaching_17_age - (CASE
+ WHEN sum_x_squared_reaching_17_age <> 0 THEN sum_xy_reaching_17_age / sum_x_squared_reaching_17_age
+ ELSE 0
+ END) * avg_x_reaching_17_age AS b_reaching_17_age,
+
+ -- Параметры для women_military_specialty
+ CASE
+ WHEN sum_x_squared_women_military_specialty <> 0 THEN sum_xy_women_military_specialty / sum_x_squared_women_military_specialty
+ ELSE 0
+ END AS k_women_military_specialty,
+ avg_y_women_military_specialty - (CASE
+ WHEN sum_x_squared_women_military_specialty <> 0 THEN sum_xy_women_military_specialty / sum_x_squared_women_military_specialty
+ ELSE 0
+ END) * avg_x_women_military_specialty AS b_women_military_specialty
+ FROM regression_stats
+)
+
+-- 11. Рассчитываем прогнозные значения на текущий и следующий годы
+
+SELECT
+ r.recruitment_id,
+ r.schema,
+ MAKE_DATE(y.year, 1, 1) AS prediction_year,
+ ROUND(r.k_count_all * y.year + r.b_count_all) AS count_all,
+ ROUND(r.k_reaching_17_age * y.year + r.b_reaching_17_age) AS reaching_17_age,
+ ROUND(r.k_women_military_specialty * y.year + r.b_women_military_specialty) AS women_military_specialty,
+ y.prediction_type
+FROM years y
+CROSS JOIN regression_params r
+ORDER BY r.schema, r.recruitment_id, prediction_year;
+
+ N
+
+
+ 720
+ 304
+
+
+
+ Table output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 1000
+ ervu-dashboard
+
+
+ recruitment_id
+ recruitment_id
+
+
+ schema
+ schema
+
+
+ recording_date
+ prediction_year
+
+
+ count_all
+ count_all
+
+
+ reaching_17_age
+ reaching_17_age
+
+
+ women_military_specialty
+ women_military_specialty
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ forecast
+ Y
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 928
+ 304
+
+
+
+
+
+
diff --git a/mappings/ratings/job_ratings.hwf b/mappings/ratings/job_ratings.hwf
new file mode 100644
index 0000000..fb3352e
--- /dev/null
+++ b/mappings/ratings/job_ratings.hwf
@@ -0,0 +1,350 @@
+
+
+ job_ratings
+ Y
+
+
+
+ 0
+ -
+ 2024/12/24 16:11:59.295
+ -
+ 2024/12/24 16:11:59.295
+
+
+ REG_ID
+
+
+
+
+ VK_ARRAY
+
+
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ Y
+ 464
+ 256
+
+
+
+ rows_id-array_reg.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/rows_id-array_reg.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 704
+ 256
+
+
+
+ ratings.appear_subpoena.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/ratings/ratings.appear_subpoena.hpl
+ Basic
+
+
+ VK_ARRAY
+ VK_ARRAY_ID
+
+
+ REG_ID
+ RECRUITMENT_REG_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1104
+ 144
+
+
+
+ ratings.conscription_info.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/ratings/ratings.conscription_info.hpl
+ Basic
+
+
+ VK_ARRAY
+ VK_ARRAY_ID
+
+
+ REG_ID
+ RECRUITMENT_REG_ID
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1104
+ 256
+
+
+
+ ratings.consideration_complaint.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/ratings/ratings.consideration_complaint.hpl
+ Basic
+
+
+ VK_ARRAY
+ VK_ARRAY_ID
+
+
+ REG_ID
+ RECRUITMENT_REG_ID
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1104
+ 368
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1296
+ 144
+
+
+
+ Success 2
+
+ SUCCESS
+
+ N
+ 1296
+ 256
+
+
+
+ Success 3
+
+ SUCCESS
+
+ N
+ 1296
+ 368
+
+
+
+ SQL ratings.appear_subppoena
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ratings.appear_subppoena where recording_date = current_date
+ N
+ N
+ N
+ 832
+ 144
+
+
+
+ SQL ratings.conscription_info
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ratings.conscription_info where recording_date = current_date
+ N
+ N
+ N
+ 832
+ 256
+
+
+
+ SQL ratings.consideration_complaint
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ratings.consideration_complaint where recording_date = current_date
+ N
+ N
+ N
+ 832
+ 368
+
+
+
+
+
+ Start
+ rows_id-array_reg.hpl
+ Y
+ Y
+ Y
+
+
+ ratings.appear_subpoena.hpl
+ Success
+ Y
+ Y
+ N
+
+
+ ratings.consideration_complaint.hpl
+ Success 3
+ Y
+ Y
+ N
+
+
+ ratings.conscription_info.hpl
+ Success 2
+ Y
+ Y
+ N
+
+
+ rows_id-array_reg.hpl
+ SQL ratings.appear_subppoena
+ Y
+ Y
+ N
+
+
+ SQL ratings.appear_subppoena
+ ratings.appear_subpoena.hpl
+ Y
+ Y
+ N
+
+
+ rows_id-array_reg.hpl
+ SQL ratings.conscription_info
+ Y
+ Y
+ N
+
+
+ SQL ratings.conscription_info
+ ratings.conscription_info.hpl
+ Y
+ Y
+ N
+
+
+ rows_id-array_reg.hpl
+ SQL ratings.consideration_complaint
+ N
+ Y
+ N
+
+
+ SQL ratings.consideration_complaint
+ ratings.consideration_complaint.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ SQL ratings.consideration_complaint
+ Y
+ Y
+ Y
+
+
+
+
+ 251
+ 232
+ 201
+ 90
+ 58
+ 14
+ N
+ 90
+ 58
+ 14
+ N
+ Segoe UI
+ 9
+ 26
+ 496
+ 48
+ запуск после отработки регионов /region/job_recruitments_region
+ 372
+
+
+
+
diff --git a/mappings/ratings/ratings.appear_subpoena.hpl b/mappings/ratings/ratings.appear_subpoena.hpl
new file mode 100644
index 0000000..1719485
--- /dev/null
+++ b/mappings/ratings/ratings.appear_subpoena.hpl
@@ -0,0 +1,228 @@
+
+
+
+ ratings.appear_subpoena
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/24 16:15:10.943
+ -
+ 2024/12/24 16:15:10.943
+
+
+
+
+
+ Table input
+ Get variables
+ Y
+
+
+ Get variables
+ Select values
+ Y
+
+
+ Select values
+ Insert / update
+ Y
+
+
+
+ Get variables
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+
+
+ 592
+ 256
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ id_region
+ REG_ID
+
+ ratings
+
+
+ appear_mil_com
+ appear_mil_com
+ Y
+
+
+ appear_mil_com_percent
+ appear_mil_com_percent
+ Y
+
+
+ id_region
+ region_id
+ N
+
+
+ N
+
+
+ 976
+ 256
+
+
+
+ Select values
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REG_ID
+ REG_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 768
+ 256
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.department_id AS recruitment_id,
+ s.status_id,
+ sr.type,
+ ssh.code AS sub_stat_hist,
+ s.send_date,
+ sh.date_time::timestamp AS history_date,
+ ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
+ FROM public.subpoena s
+ JOIN subpoena_status ss ON s.status_id = ss.id
+ JOIN subpoena_reason AS sr ON sr.id = s.reason_id
+ JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
+ JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
+ WHERE ('${VK_ARRAY}' IS NULL
+ OR '${VK_ARRAY}' = ''
+ OR s.department_id = ANY (
+ string_to_array(
+ trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
+ )::uuid[]
+ )
+ )
+ AND sr.type IS NOT NULL
+ AND ssh.code NOT IN ('3.7','3.72', '3.71')
+ 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 *
+ FROM subpoena_data
+ WHERE rn = 1
+),
+season_separations AS (
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.sub_stat_hist,
+ ls.subpoena_id,
+ ls.history_date
+ FROM last_status ls
+ WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+)
+SELECT
+ '${REG_ID}' AS region_id,
+ COUNT(*) FILTER (WHERE tt.sub_stat_hist IN ('4.1', '4.2')) AS appear_mil_com,
+ ROUND(
+ COUNT(*) FILTER (WHERE tt.sub_stat_hist IN ('4.1', '4.2'))::NUMERIC / NULLIF(COUNT(*), 0) * 100, 2
+ ) AS appear_mil_com_percent
+FROM season_separations tt
+HAVING COUNT(*) FILTER (WHERE tt.sub_stat_hist IN ('4.1', '4.2')) > 0;
+
+ Y
+
+
+ 416
+ 256
+
+
+
+
+
+
diff --git a/mappings/ratings/ratings.conscription_info.hpl b/mappings/ratings/ratings.conscription_info.hpl
new file mode 100644
index 0000000..e967cbc
--- /dev/null
+++ b/mappings/ratings/ratings.conscription_info.hpl
@@ -0,0 +1,242 @@
+
+
+
+ ratings.conscription_info
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/24 16:16:57.706
+ -
+ 2024/12/24 16:16:57.706
+
+
+
+
+
+ Get variables
+ Select values
+ Y
+
+
+ Select values
+ Insert / update
+ Y
+
+
+ Table input
+ Get variables
+ Y
+
+
+
+ Get variables
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+
+
+ 816
+ 368
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ id_region
+ REG_ID
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+ ratings
+
+
+ execution
+ appear_mil_com
+ Y
+
+
+ execution_percent
+ appear_mil_com_percent
+ Y
+
+
+ id_region
+ region_id
+ N
+
+
+ spring_autumn
+ spring_autumn
+ N
+
+
+ N
+
+
+ 1200
+ 368
+
+
+
+ Select values
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REG_ID
+ REG_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 992
+ 368
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ postgres.subpoena
+ N
+ 0
+ WITH
+subpoena_data AS (
+ SELECT
+ s.id AS subpoena_id,
+ s.create_date,
+ s.department_id AS recruitment_id,
+ s.status_id,
+ sr.type,
+ ssh.code AS sub_stat_hist,
+ s.send_date,
+ sh.date_time::timestamp AS history_date--,
+ --ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
+ FROM public.subpoena s
+ JOIN subpoena_status ss ON s.status_id = ss.id
+ JOIN subpoena_reason AS sr ON sr.id = s.reason_id
+ JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
+ JOIN subpoena_status AS ssh ON ssh.id = sh.status_id
+ WHERE ('${VK_ARRAY}' IS NULL
+ OR '${VK_ARRAY}' = ''
+ OR s.department_id = ANY (
+ string_to_array(
+ trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
+ )::uuid[]
+ )
+ )
+ AND sr.type = '3'
+ AND ssh.code NOT IN ('3.7','3.72', '3.71')
+ 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 *
+ FROM subpoena_data
+ WHERE rn = 1
+),*/
+season_separations AS (
+ SELECT distinct
+ ls.recruitment_id,
+ ls.create_date,
+ ls.sub_stat_hist,
+ ls.subpoena_id,
+ ls.history_date,
+ 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 subpoena_data ls
+ --WHERE ls.create_date >= DATE_TRUNC('year', CURRENT_DATE)
+)
+SELECT
+ '${REG_ID}' AS region_id,
+ tt.spring_autumn,
+ COUNT(distinct tt.subpoena_id) FILTER (WHERE tt.sub_stat_hist IN ('5')) AS appear_mil_com,
+ ROUND(
+ COUNT(distinct tt.subpoena_id) FILTER (WHERE tt.sub_stat_hist IN ('5'))::NUMERIC / NULLIF(COUNT(distinct tt.subpoena_id), 0) * 100, 2
+ ) AS appear_mil_com_percent
+FROM season_separations tt
+group by tt.spring_autumn
+ Y
+
+
+ 640
+ 368
+
+
+
+
+
+
diff --git a/mappings/ratings/ratings.consideration_complaint.hpl b/mappings/ratings/ratings.consideration_complaint.hpl
new file mode 100644
index 0000000..1ea3fb9
--- /dev/null
+++ b/mappings/ratings/ratings.consideration_complaint.hpl
@@ -0,0 +1,219 @@
+
+
+
+ ratings.consideration_complaint
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/24 16:18:12.882
+ -
+ 2024/12/24 16:18:12.882
+
+
+
+
+
+ Table input
+ Get variables
+ N
+
+
+ Get variables
+ Select values
+ N
+
+
+ Select values
+ Insert / update
+ N
+
+
+ Table input
+ Insert / update
+ Y
+
+
+
+ Get variables
+ GetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ -1
+ REG_ID
+ -1
+ none
+ String
+
+
+
+
+ 624
+ 416
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ id_region
+ region_id
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ ratings
+
+
+ consideration_complaint
+ consideration_complaint
+ Y
+
+
+ consideration_complaint_percent
+ consideration_complaint_percent
+ Y
+
+
+ id_region
+ region_id
+ N
+
+
+ recording_date
+ recording_date
+ N
+
+
+ N
+
+
+ 976
+ 224
+
+
+
+ Select values
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ REG_ID
+ REG_ID
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 784
+ 416
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ -- '1' - Удовлетворена, '2' - Частично удовлетворена, '3' - Отказано в удовлетворении
+--WITH total AS (
+-- SELECT *
+-- FROM public.appeal_document ad
+-- WHERE extra_info->>'result' IN ('1', '2', '3')
+-- AND (
+-- '${VK_ARRAY}' IS NULL
+-- OR '${VK_ARRAY}' = ''
+-- OR ad.vk_id = ANY (
+-- string_to_array(
+-- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
+-- )::uuid[]
+-- )
+-- )
+--)
+--SELECT
+-- '${REG_ID}' AS region_id,
+-- COUNT(*) FILTER (WHERE tt.extra_info->>'result' IN ('1', '2')) AS consideration_complaint,
+-- ROUND(
+-- COUNT(*) FILTER (WHERE tt.extra_info->>'result' IN ('1', '2'))::NUMERIC / NULLIF(COUNT(*), 0) * 100, 2
+-- ) AS consideration_complaint_percent
+--FROM total tt;
+
+select
+count(*) as total_count,
+count(*) FILTER (where solution_type='Решено') AS consideration_complaint,
+COALESCE(ROUND((count(*) FILTER (where solution_type='Решено'))* 100 / NULLIF(count(*),0), 0),0) as consideration_complaint_percent,
+region_id,
+current_date as recording_date
+from appeals.appeals_list
+where region_id is not null
+group by region_id
+ N
+
+
+ 400
+ 224
+
+
+
+
+
+
diff --git a/mappings/recording_date/job_last_recording_date.hwf b/mappings/recording_date/job_last_recording_date.hwf
index 32a6c9f..b4f60ab 100644
--- a/mappings/recording_date/job_last_recording_date.hwf
+++ b/mappings/recording_date/job_last_recording_date.hwf
@@ -52,8 +52,6 @@
N
N
${Internal.Entry.Current.Folder}/last_recording_date.hpl
-
-
Basic
Y
@@ -64,7 +62,7 @@
N
Y
N
- 512
+ 496
240
@@ -75,7 +73,31 @@
ervu-dashboard
N
- delete from public.last_recording_date
+ update public.last_recording_date
+set entry = '1',
+start_time = now()
+
+
+
+ N
+ N
+ N
+ 432
+ 64
+
+
+
+ SQL.delete 2
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from public.last_recording_date
+
+
+
+
N
N
N
@@ -88,20 +110,41 @@
Start
SQL.delete
- Y
+ N
Y
Y
SQL.delete
last_recording_date
+ N
+ N
+ Y
+
+
+ last_recording_date
+ Success
Y
Y
N
- last_recording_date
+ SQL.delete
Success
+ N
+ Y
+ N
+
+
+ Start
+ SQL.delete 2
+ Y
+ Y
+ Y
+
+
+ SQL.delete 2
+ last_recording_date
Y
Y
N
diff --git a/mappings/region/appeals.reasons_appeal(reg).hpl b/mappings/region/appeals.reasons_appeal(reg).hpl
new file mode 100644
index 0000000..ca290ca
--- /dev/null
+++ b/mappings/region/appeals.reasons_appeal(reg).hpl
@@ -0,0 +1,245 @@
+
+
+
+ appeals.reasons_appeal(reg)
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/27 11:51:55.468
+ -
+ 2025/01/27 11:51:55.468
+
+
+
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Insert / update (main_dashboard.appeals) 2
+ Execute SQL script 2
+ Y
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM appeals.reasons_appeal
+WHERE recording_date = current_date
+ AND schema = 'Organization'
+
+
+ 512
+ 336
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.reasons_appeal
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+
+
+ 1296
+ 336
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ schema
+ schema
+
+
+ =
+ recording_date
+ recording_date
+
+ appeals
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ appeal
+ appeal
+ Y
+
+
+ incorrect_inf
+ incorrect_inf
+ Y
+
+
+ incorrect_inf_percent
+ incorrect_inf_percent
+ Y
+
+
+ sending_documents
+ sending_documents
+ Y
+
+
+ sending_documents_percent
+ sending_documents_percent
+ Y
+
+
+ decision_disagreement
+ decision_disagreement
+ Y
+
+
+ decision_disagreement_persent
+ decision_disagreement_percent
+ Y
+
+
+ complaint_withdrawal
+ complaint_withdrawal
+ Y
+
+
+ complaint_withdrawal_percent
+ complaint_withdrawal_percent
+ Y
+
+
+ Y
+
+
+ 1056
+ 336
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_REG}'), ','))::uuid AS recruitment_id
+),
+summary_counts AS (
+ SELECT
+ region_id AS recruitment_id,
+ COUNT(*) AS total_appeals,
+ COUNT(*) FILTER (WHERE fact ILIKE 'Внесли изменения%') AS incorrect_inf, -- Некорректные данные
+ COUNT(*) FILTER (WHERE fact ILIKE 'Досыл%') AS sending_documents, -- Досыл документов
+ COUNT(*) FILTER (WHERE fact ILIKE 'Не согласен%') AS decision_disagreement, -- Несогласие с решением
+ COUNT(*) FILTER (WHERE fact ILIKE 'Прошу%') AS complaint_withdrawal -- Отзыв жалобы
+ FROM appeals.appeals_list
+ WHERE region_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY region_id
+)
+SELECT
+ 'Organization' AS schema,
+ i.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(sc.total_appeals, 0) AS appeal,
+ COALESCE(sc.incorrect_inf, 0) AS incorrect_inf,
+ 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.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;
+ Y
+
+
+ 720
+ 336
+
+
+
+
+
+
diff --git a/mappings/region/appeals.review_rating.hpl b/mappings/region/appeals.review_rating.hpl
new file mode 100644
index 0000000..30e2d79
--- /dev/null
+++ b/mappings/region/appeals.review_rating.hpl
@@ -0,0 +1,156 @@
+
+
+
+ appeals.review_rating
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/28 14:15:12.495
+ -
+ 2025/01/28 14:15:12.495
+
+
+
+
+
+ Table input
+ Insert / update
+ Y
+
+
+ Execute SQL script
+ Table input
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+
+ N
+
+ N
+
+ N
+ N
+ N
+ DELETE FROM appeals.review_rating WHERE recording_date = current_date AND schema = 'Organization'
+
+
+
+ 416
+ 464
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ schema
+ schema
+
+ appeals
+
+
+ schema
+ schema
+ N
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ speed
+ average_consideration
+ Y
+
+
+ rating
+ average_rating
+ Y
+
+
+ N
+
+
+ 864
+ 464
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ current_date AS recording_date,
+ 'Organization' AS schema,
+ ap.average_rating,
+ ap.average_consideration,
+ ap.recruitment_id
+FROM main_dashboard.appeals ap
+WHERE recording_date = current_date AND schema = 'Organization'
+
+ N
+
+
+ 640
+ 464
+
+
+
+
+
+
diff --git a/mappings/region/appeals.topic_appeal(reg).hpl b/mappings/region/appeals.topic_appeal(reg).hpl
new file mode 100644
index 0000000..e1517a2
--- /dev/null
+++ b/mappings/region/appeals.topic_appeal(reg).hpl
@@ -0,0 +1,248 @@
+
+
+
+ appeals.topic_appeal(reg)
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/25 13:26:59.797
+ -
+ 2025/03/25 13:26:59.797
+
+
+
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Insert / update (main_dashboard.appeals) 2
+ Execute SQL script 2
+ Y
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals) 2
+ Y
+
+
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM appeals.topic_appeal
+WHERE recording_date = current_date
+ AND schema = 'Organization'
+
+
+ 528
+ 320
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ DELETE FROM appeals.topic_appeal
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+
+
+ 1312
+ 320
+
+
+
+ Insert / update (main_dashboard.appeals) 2
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+
+ =
+ schema
+ schema
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ appeals
+
+
+ recruitment_id
+ recruitment_id
+ N
+
+
+ schema
+ schema
+ N
+
+
+ registration
+ registration
+ Y
+
+
+ registration_percent
+ registration_percent
+ Y
+
+
+ sabpoena
+ sabpoena
+ Y
+
+
+ sabpoena_percent
+ sabpoena_percent
+ Y
+
+
+ temporary_measures
+ temporary_measures
+ Y
+
+
+ temporary_measures_percent
+ temporary_measures_percent
+ Y
+
+
+ recording_date
+ recording_date
+ N
+
+
+ appear
+ appeal
+ Y
+
+
+ Y
+
+
+ 1072
+ 320
+
+
+
+ Table input (appeal_document) регионы
+ TableInput
+
+ N
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_REG}'), ','))::uuid AS recruitment_id
+),
+summary_counts AS (
+ SELECT
+ region_id AS recruitment_id,
+ COUNT(*) AS total_appeals,
+ SUM(
+ CASE
+ WHEN subcategory LIKE 'Решение о постановке на воинский учёт%'
+ OR subcategory LIKE 'Отзыв ранее направленной жалобы по воинскому учету%'
+ OR subcategory LIKE 'Досыл документов к ранее направленной жалобе по воинскому учету%'
+ OR subcategory LIKE 'Решение об отказе во внесении изменений в Реестр воинского учёта%'
+ THEN 1 ELSE 0
+ END
+ ) AS registration, -- постановка на учет
+ SUM(CASE WHEN subcategory LIKE 'Решение (заключение) призывной комиссии по призыву граждан на военную службу%' THEN 1 ELSE 0 END) AS sabpoena, -- повестки (призыв на службу)
+ SUM(CASE WHEN subcategory LIKE 'Решение об установлении ограничительных мер%' THEN 1 ELSE 0 END) AS temporary_measures -- временные меры
+ FROM appeals.appeals_list
+ WHERE region_id::uuid IN (SELECT recruitment_id FROM ids)
+ GROUP BY region_id
+)
+SELECT
+ 'Organization' AS schema,
+ i.recruitment_id,
+ current_date AS recording_date,
+ COALESCE(sc.total_appeals, 0) AS appeal,
+ COALESCE(sc.registration, 0) AS registration,
+ COALESCE(sc.sabpoena, 0) AS sabpoena,
+ COALESCE(sc.temporary_measures, 0) AS temporary_measures,
+ COALESCE(ROUND(sc.registration * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS registration_percent,
+ COALESCE(ROUND(sc.sabpoena * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS sabpoena_percent,
+ COALESCE(ROUND(sc.temporary_measures * 100.0 / NULLIF(sc.total_appeals, 0), 2), 0) AS temporary_measures_percent
+FROM ids i
+LEFT JOIN summary_counts sc ON sc.recruitment_id = i.recruitment_id
+ Y
+
+
+ 736
+ 320
+
+
+
+
+
+
diff --git a/mappings/region/array_reg.hwf b/mappings/region/array_reg.hwf
new file mode 100644
index 0000000..f0a19d0
--- /dev/null
+++ b/mappings/region/array_reg.hwf
@@ -0,0 +1,157 @@
+
+
+ array_reg
+ Y
+
+
+
+ 0
+ -
+ 2024/12/10 09:44:55.162
+ -
+ 2024/12/10 09:44:55.162
+
+
+ ORG_ROW
+
+
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 400
+ 304
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1152
+ 304
+
+
+
+ select_recruitments_region(reg)rows.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/select_recruitments_region(reg)rows.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 720
+ 304
+
+
+
+ select_recruitments_region(reg).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/region/select_recruitments_region(reg).hpl
+ txt
+ C:\Users\acer\Desktop\лог
+ Rowlevel
+
+
+ ORG_ROW
+ ORGANIZATION_ROW
+
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 976
+ 304
+
+
+
+ SQL
+
+ SQL
+
+ ervu-dashboard
+ N
+ delete from ervu_dashboard.array_reg
+ N
+ N
+ N
+ 560
+ 304
+
+
+
+
+
+ select_recruitments_region(reg)rows.hpl
+ select_recruitments_region(reg).hpl
+ Y
+ Y
+ N
+
+
+ select_recruitments_region(reg).hpl
+ Success
+ Y
+ Y
+ N
+
+
+ Start
+ SQL
+ Y
+ Y
+ Y
+
+
+ SQL
+ select_recruitments_region(reg)rows.hpl
+ Y
+ Y
+ Y
+
+
+
+
+
+
diff --git a/mappings/region/auxiliary/array_region.hpl b/mappings/region/auxiliary/array_region.hpl
new file mode 100644
index 0000000..944c416
--- /dev/null
+++ b/mappings/region/auxiliary/array_region.hpl
@@ -0,0 +1,73 @@
+
+
+
+ array_region
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/27 17:33:33.546
+ -
+ 2025/01/27 17:33:33.546
+
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT ARRAY_AGG(idm_id) AS ARRAY_REGION
+FROM ervu_dashboard.recruitment
+WHERE schema = 'Organization'
+ N
+
+
+ 432
+ 240
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 704
+ 240
+
+
+
+
+
+
diff --git a/mappings/region/auxiliary/update_appeal_recruitments.hpl b/mappings/region/auxiliary/update_appeal_recruitments.hpl
new file mode 100644
index 0000000..29a67ef
--- /dev/null
+++ b/mappings/region/auxiliary/update_appeal_recruitments.hpl
@@ -0,0 +1,291 @@
+
+
+
+ update_appeal_recruitments
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/01/27 13:36:22.747
+ -
+ 2025/01/27 13:36:22.747
+
+
+
+
+
+ Table input
+ Insert / update
+ Y
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ region
+ region
+
+ appeals
+
+
+ region
+ region
+ N
+
+
+ region_id
+ idm_id
+ Y
+
+
+ N
+
+
+ 784
+ 144
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ WITH ranked_recruitment AS (
+ SELECT
+ rt.idm_id,
+ rt.shortname,
+ al.region,
+ row_number() OVER (PARTITION BY al.region ORDER BY rt.shortname) AS rn
+ FROM
+ appeals.appeals_list al
+ JOIN
+ ervu_dashboard.recruitment rt
+ ON
+ (al.region LIKE '%Адыге%' AND rt.shortname LIKE '%Адыге%')
+OR (al.region LIKE '%Республик%Башк%р%' AND rt.shortname LIKE '%Республик%Башк%р%')
+OR (al.region LIKE '%Республик%Бурят%' AND rt.shortname LIKE '%Республик%Бурят%')
+OR (al.region LIKE '%Республик%Алтай' AND rt.shortname LIKE '%Республик%Алтай')
+OR (al.region LIKE '%Дагест%' AND rt.shortname LIKE '%Дагест%')
+OR (al.region LIKE '%Ингушет%' AND rt.shortname LIKE '%Ингушет%')
+OR (al.region LIKE '%Кабардино-Балкар%' AND rt.shortname LIKE '%Кабардино-Балкар%')
+OR (al.region LIKE '%Республик%Калмыки%' AND rt.shortname LIKE '%Республик%Калмыки%')
+OR (al.region LIKE '%Карачаево-Черкесс%Республик%' AND rt.shortname LIKE '%Карачаево-Черкесс%Республик%')
+OR (al.region LIKE '%Карел%' AND rt.shortname LIKE '%Карел%')
+OR (al.region LIKE '%Коми%' AND rt.shortname LIKE '%Коми%')
+OR (al.region LIKE '%Марий%Эл%' AND rt.shortname LIKE '%Марий%Эл%')
+OR (al.region LIKE '%Мордови%' AND rt.shortname LIKE '%Мордови%')
+OR (al.region LIKE '%Саха%(Якутия)%' AND rt.shortname LIKE '%Саха%(Якутия)%')
+OR (al.region LIKE '%Северн%Осети%Алан%' AND rt.shortname LIKE '%Северн%Осети%Алан%')
+OR (al.region LIKE '%Татарстан%' AND rt.shortname LIKE '%Татарстан%')
+OR (al.region LIKE '%Тыва%' AND rt.shortname LIKE '%Тыва%')
+OR (al.region LIKE '%Удмуртск%' AND rt.shortname LIKE '%Удмуртск%')
+OR (al.region LIKE '%Хакас%' AND rt.shortname LIKE '%Хакас%')
+OR (al.region LIKE '%Чеченск%' AND rt.shortname LIKE '%Чеченск%')
+OR (al.region LIKE '%Чуваш%' AND rt.shortname LIKE '%Чуваш%')
+OR (al.region LIKE '%Алтайск%кра%' AND rt.shortname LIKE '%Алтайск%кра%')
+OR (al.region LIKE '%Краснодарск%' AND rt.shortname LIKE '%Краснодарск%')
+OR (al.region LIKE '%Красноярск%' AND rt.shortname LIKE '%Красноярск%')
+OR (al.region LIKE '%Приморск%' AND rt.shortname LIKE '%Приморск%')
+OR (al.region LIKE '%Ставропольск%' AND rt.shortname LIKE '%Ставропольск%')
+OR (al.region LIKE '%Хабаровск%' AND rt.shortname LIKE '%Хабаровск%')
+OR (al.region LIKE '%Амурск%' AND rt.shortname LIKE '%Амурск%')
+OR (al.region LIKE '%Архангельск%' AND rt.shortname LIKE '%Архангельск%')
+OR (al.region LIKE '%Астраханск%' AND rt.shortname LIKE '%Астраханск%')
+OR (al.region LIKE '%Белгородск%' AND rt.shortname LIKE '%Белгородск%')
+OR (al.region LIKE '%Брянск%' AND rt.shortname LIKE '%Брянск%')
+OR (al.region LIKE '%Владимирск%' AND rt.shortname LIKE '%Владимирск%')
+OR (al.region LIKE '%Волгоградск%' AND rt.shortname LIKE '%Волгоградск%')
+OR (al.region LIKE '%Вологодск%' AND rt.shortname LIKE '%Вологодск%')
+OR (al.region LIKE '%Воронежск%' AND rt.shortname LIKE '%Воронежск%')
+OR (al.region LIKE '%Ивановск%' AND rt.shortname LIKE '%Ивановск%')
+OR (al.region LIKE '%Иркутск%' AND rt.shortname LIKE '%Иркутск%')
+OR (al.region LIKE '%Калининградск%' AND rt.shortname LIKE '%Калининградск%')
+OR (al.region LIKE '%Калужск%' AND rt.shortname LIKE '%Калужск%')
+OR (al.region LIKE '%Камчатск%' AND rt.shortname LIKE '%Камчатск%')
+OR (al.region LIKE '%Кемеровск%' AND rt.shortname LIKE '%Кемеровск%')
+OR (al.region LIKE '%Кировск%' AND rt.shortname LIKE '%Кировск%')
+OR (al.region LIKE '%Костромск%' AND rt.shortname LIKE '%Костромск%')
+OR (al.region LIKE '%Курганск%' AND rt.shortname LIKE '%Курганск%')
+OR (al.region LIKE '%Курск%' AND rt.shortname LIKE '%Курск%')
+OR (al.region LIKE '%Ленинградск%' AND rt.shortname LIKE '%Ленинградск%')
+OR (al.region LIKE '%Липецк%' AND rt.shortname LIKE '%Липецк%')
+OR (al.region LIKE '%Магаданск%' AND rt.shortname LIKE '%Магаданск%')
+OR (al.region LIKE '%Московск%' AND rt.shortname LIKE '%Московск%')
+OR (al.region LIKE '%Мурманск%' AND rt.shortname LIKE '%Мурманск%')
+OR (al.region LIKE '%Нижегородск%' AND rt.shortname LIKE '%Нижегородск%')
+OR (al.region LIKE '%Новгородск%' AND rt.shortname LIKE '%Новгородск%')
+OR (al.region LIKE '%Новосибирск%' AND rt.shortname LIKE '%Новосибирск%')
+OR (al.region LIKE '%Омск%обл%' AND rt.shortname LIKE 'ВК Омск%обл%' and rt.shortname NOT LIKE '%Костромс%' and rt.shortname NOT like 'ВК Томск%')
+OR (al.region LIKE '%Оренбургск%' AND rt.shortname LIKE '%Оренбургск%')
+OR (al.region LIKE '%Орловск%' AND rt.shortname LIKE '%Орловск%')
+OR (al.region LIKE '%Пензенск%' AND rt.shortname LIKE '%Пензенск%')
+OR (al.region LIKE '%Пермск$' AND rt.shortname LIKE '%Пермск$')
+OR (al.region LIKE '%Псковск%' AND rt.shortname LIKE '%Псковск%')
+OR (al.region LIKE '%Ростовск%' AND rt.shortname LIKE '%Ростовск%')
+OR (al.region LIKE '%Рязанск%' AND rt.shortname LIKE '%Рязанск%')
+OR (al.region LIKE '%Самарск%' AND rt.shortname LIKE '%Самарск%')
+OR (al.region LIKE '%Саратовск%' AND rt.shortname LIKE '%Саратовск%')
+OR (al.region LIKE '%Сахалинск%' AND rt.shortname LIKE '%Сахалинск%')
+OR (al.region LIKE '%Свердловск%' AND rt.shortname LIKE '%Свердловск%')
+OR (al.region LIKE '%Смоленск%' AND rt.shortname LIKE '%Смоленск%')
+OR (al.region LIKE '%Тамбовск%' AND rt.shortname LIKE '%Тамбовск%')
+OR (al.region LIKE '%Тверск%' AND rt.shortname LIKE '%Тверск%')
+OR (al.region LIKE '%Томск%обл%' AND rt.shortname LIKE 'ВК Томской обл%' and rt.shortname NOT LIKE '%Костромс%' and rt.shortname NOT like 'ВК Омск%')
+OR (al.region LIKE '%Тульск%' AND rt.shortname LIKE '%Тульск%')
+OR (al.region LIKE '%Тюменск%' AND rt.shortname LIKE '%Тюменск%')
+OR (al.region LIKE '%Ульяновск%' AND rt.shortname LIKE '%Ульяновск%')
+OR (al.region LIKE '%Челябинск%' AND rt.shortname LIKE '%Челябинск%')
+OR (al.region LIKE '%Забайкальск%' AND rt.shortname LIKE '%Забайкальск%')
+OR (al.region LIKE '%Ярославск%' AND rt.shortname LIKE '%Ярославск%')
+OR (al.region LIKE '%г%Москв%' AND rt.shortname LIKE '%г%Москв%')
+OR (al.region LIKE '%г%Санкт-Петербург%' AND rt.shortname LIKE '%г%Санкт-Петербург%')
+OR (al.region LIKE '%Еврейск%автономн%' AND rt.shortname LIKE '%Еврейск%автономн%')
+OR (al.region LIKE '%Ненецк%автономн%' AND rt.shortname LIKE '%Ненецк%автономн%')
+OR (al.region LIKE '%Хант%Мансийск%' AND rt.shortname LIKE '%Хант%Мансийск%')
+OR (al.region LIKE '%Чукотск%автономн%' AND rt.shortname LIKE '%Чукотск%автономн%')
+OR (al.region LIKE '%Ямал%Ненецк%автономн%' AND rt.shortname LIKE '%Ямал%Ненецк%автономн%')
+OR (al.region LIKE '%Крым%' AND rt.shortname LIKE '%Крым%')
+OR (al.region LIKE '%г%Севастопол%' AND rt.shortname LIKE '%г%Севастопол%')
+OR (al.region LIKE '%Запорожск%' AND rt.shortname LIKE '%Запорожск%')
+OR (al.region LIKE '%Донецк%Народн%' AND rt.shortname LIKE '%Донецк%Народн%')
+OR (al.region LIKE '%Луганск%Народн%' AND rt.shortname LIKE '%Луганск%Народн%')
+OR (al.region LIKE '%Херсонск%' AND rt.shortname LIKE '%Херсонск%')
+WHERE
+ rt.schema = 'Organization'
+)
+SELECT DISTINCT
+ idm_id,
+ shortname,
+ region
+FROM ranked_recruitment rrt
+where
+(rrt.region LIKE '%Адыге%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Республик%Башк%р%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Республик%Бурят%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Республик%Алтай' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Дагест%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ингушет%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Кабардино-Балкар%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Республик%Калмыки%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Карачаево-Черкесс%Республик%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Карел%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Коми%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Марий%Эл%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Мордови%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Саха%(Якутия)%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Северн%Осети%Алан%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Татарстан%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Тыва%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Удмуртск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Хакас%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Чеченск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Чуваш%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Алтайск%кра%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Краснодарск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Красноярск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Приморск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ставропольск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Хабаровск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Амурск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Архангельск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Астраханск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Белгородск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Брянск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Владимирск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Волгоградск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Вологодск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Воронежск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ивановск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Иркутск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Калининградск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Калужск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Камчатск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Кемеровск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Кировск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Костромск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Курганск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Курск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ленинградск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Липецк%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Магаданск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Московск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Мурманск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Нижегородск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Новгородск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Новосибирск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Омск%обл%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Оренбургск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Орловск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Пензенск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Пермск$' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Псковск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ростовск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Рязанск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Самарск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Саратовск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Сахалинск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Свердловск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Смоленск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Тамбовск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Тверск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Томск%обл%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Тульск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Тюменск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ульяновск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Челябинск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Забайкальск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ярославск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%г%Москв%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%г%Санкт-Петербург%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Еврейск%автономн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ненецк%автономн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Хант%Мансийск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Чукотск%автономн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Ямал%Ненецк%автономн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Крым%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%г%Севастопол%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Запорожск%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Донецк%Народн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Луганск%Народн%' AND rrt.rn = 1) OR
+(rrt.region LIKE '%Херсонск%' AND rrt.rn = 1);
+
+ N
+
+
+ 480
+ 144
+
+
+
+
+
+
diff --git a/mappings/region/job_get_rows_reg.hwf b/mappings/region/job_get_rows_reg.hwf
new file mode 100644
index 0000000..85eac85
--- /dev/null
+++ b/mappings/region/job_get_rows_reg.hwf
@@ -0,0 +1,120 @@
+
+
+ job_get_rows_reg
+ Y
+
+
+
+ -
+ 2024/12/10 12:37:22.616
+ -
+ 2024/12/10 12:37:22.616
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 432
+ 336
+
+
+
+ array_reg.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/array_reg.hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 592
+ 336
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 912
+ 336
+
+
+
+ rows_id-array_reg.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/rows_id-array_reg.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 768
+ 336
+
+
+
+
+
+ Start
+ array_reg.hwf
+ Y
+ Y
+ Y
+
+
+ array_reg.hwf
+ rows_id-array_reg.hpl
+ Y
+ Y
+ N
+
+
+ rows_id-array_reg.hpl
+ Success
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/region/job_recruitments_region.hwf b/mappings/region/job_recruitments_region.hwf
index 28fe39e..c7f3efd 100644
--- a/mappings/region/job_recruitments_region.hwf
+++ b/mappings/region/job_recruitments_region.hwf
@@ -5,16 +5,37 @@
+ 0
-
2024/08/15 16:02:12.821
-
2024/08/15 16:02:12.821
+
+ ARR_REG
+
+
+
+
+ PRNT_ID
+
+
+
+
+ REC_ID
+
+
+
REG_ID
+
+ SCM
+
+
+
VK_ARRAY
@@ -36,8 +57,8 @@
0
1
N
- 112
- 464
+ 688
+ 784
@@ -57,12 +78,8 @@
Basic
- VK_ARRAY
- VK_ARRAY_ID
-
-
- REG_ID
- RECRUITMENT_REG_ID
+ ARR_REG
+ ARRAY_REGION
Y
@@ -71,35 +88,9 @@
N
N
Y
- N
- 976
- 16
-
-
-
- select_recruitments_region(reg)
-
- PIPELINE
-
- N
- N
- N
- N
- N
- N
- ${Internal.Entry.Current.Folder}/select_recruitments_region(reg).hpl
- Basic
-
- Y
-
- N
- local
- N
- N
- Y
- N
- 352
- 464
+ Y
+ 1696
+ 256
@@ -108,8 +99,8 @@
SUCCESS
N
- 1184
- 16
+ 1936
+ 256
@@ -124,6 +115,8 @@
N
Y
${Internal.Entry.Current.Folder}/main_dashboard.recruitment_campaign(reg).hpl
+ txt
+ C:\Users\acer\Desktop\лог
Basic
@@ -142,8 +135,8 @@
N
Y
N
- 976
- 80
+ 1696
+ 400
@@ -152,8 +145,8 @@
SUCCESS
N
- 1184
- 80
+ 2224
+ 400
@@ -186,8 +179,8 @@
N
Y
N
- 976
- 144
+ 1696
+ 464
@@ -196,8 +189,8 @@
SUCCESS
N
- 1184
- 144
+ 2224
+ 464
@@ -230,8 +223,8 @@
N
Y
N
- 976
- 208
+ 1696
+ 528
@@ -240,8 +233,8 @@
SUCCESS
N
- 1184
- 208
+ 2224
+ 528
@@ -274,8 +267,8 @@
N
Y
N
- 976
- 272
+ 1696
+ 592
@@ -284,8 +277,8 @@
SUCCESS
N
- 1184
- 272
+ 2224
+ 592
@@ -318,8 +311,8 @@
N
Y
N
- 976
- 336
+ 1696
+ 656
@@ -328,8 +321,8 @@
SUCCESS
N
- 1184
- 336
+ 2224
+ 656
@@ -362,8 +355,8 @@
N
Y
N
- 976
- 400
+ 1696
+ 720
@@ -372,8 +365,8 @@
SUCCESS
N
- 1184
- 400
+ 2224
+ 720
@@ -406,8 +399,8 @@
N
Y
N
- 976
- 464
+ 1696
+ 784
@@ -416,128 +409,8 @@
SUCCESS
N
- 1184
- 464
-
-
-
- SQL.md.appeals
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.appeals where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 16
-
-
-
- SQL.md.rec_cam
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.recruitment_campaign where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 80
-
-
-
- SQL.md.tot_reg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.total_registered where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 144
-
-
-
- SQL.md.wait_reg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM main_dashboard.waiting_registration where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 208
-
-
-
- SQL.rcam.subpoenas
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM recruitment_campaign.subpoenas where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 272
-
-
-
- SQL.totreg.mrc
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.reg_mil_cat where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 336
-
-
-
- SQL.totreg.remreg
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.removed_registry where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 400
-
-
-
- SQL.totreg.sub
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.subpoenas where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 464
+ 2224
+ 784
@@ -570,8 +443,8 @@
N
Y
N
- 976
- 544
+ 1696
+ 864
@@ -580,23 +453,8 @@
SUCCESS
N
- 1184
- 544
-
-
-
- SQL.totreg.drlic
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.driver_license where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 544
+ 2224
+ 864
@@ -629,8 +487,8 @@
N
Y
N
- 976
- 608
+ 1696
+ 944
@@ -639,23 +497,8 @@
SUCCESS
N
- 1184
- 608
-
-
-
- SQL.totreg.chmi
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.child_minor where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 608
+ 2224
+ 944
@@ -688,8 +531,8 @@
N
Y
N
- 976
- 688
+ 1696
+ 1024
@@ -698,23 +541,8 @@
SUCCESS
N
- 1184
- 688
-
-
-
- SQL.totreg.age
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.age where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 688
+ 2224
+ 1024
@@ -747,8 +575,8 @@
N
Y
N
- 976
- 768
+ 1696
+ 1104
@@ -757,23 +585,8 @@
SUCCESS
N
- 1184
- 768
-
-
-
- SQL.totreg.marstat
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.marital_status where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 768
+ 2224
+ 1104
@@ -806,8 +619,8 @@
N
Y
N
- 976
- 848
+ 1696
+ 1184
@@ -816,23 +629,8 @@
SUCCESS
N
- 1184
- 848
-
-
-
- SQL.totreg.edulev
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.education_level where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 848
+ 2224
+ 1184
@@ -865,8 +663,8 @@
N
Y
N
- 976
- 928
+ 1696
+ 1264
@@ -875,23 +673,8 @@
SUCCESS
N
- 1184
- 928
-
-
-
- SQL.totreg.busyn
-
- SQL
-
- ervu-dashboard
- N
- DELETE FROM total_registered.busyness where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
- N
- N
- N
- 752
- 928
+ 2224
+ 1264
@@ -909,12 +692,8 @@
Basic
- VK_ARRAY
- VK_ARRAY_ID
-
-
- REG_ID
- RECRUITMENT_REG_ID
+ ARR_REG
+ ARRAY_REGION
Y
@@ -924,8 +703,8 @@
N
Y
N
- 976
- 1008
+ 1696
+ 16
@@ -934,27 +713,685 @@
SUCCESS
N
- 1184
- 1008
+ 2224
+ 16
- SQL.reccam.appeals(reg)
+ job_get_rows_reg.hwf
+
+ WORKFLOW
+
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/job_get_rows_reg.hwf
+ Nothing
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 928
+ 784
+
+
+
+ appeals.reasons_appeal(reg).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/region/appeals.reasons_appeal(reg).hpl
+ txt
+ ${PROJECT_HOME}/log
+ Basic
+
+
+ ARR_REG
+ ARRAY_REGION
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1696
+ 336
+
+
+
+ Success 5
+
+ SUCCESS
+
+ N
+ 1936
+ 336
+
+
+
+ update_appeal_recruitments.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/auxiliary/update_appeal_recruitments.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1152
+ 288
+
+
+
+ array_region.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/auxiliary/array_region.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1344
+ 288
+
+
+
+ appeals.review_rating.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/region/appeals.review_rating.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1808
+ 176
+
+
+
+ Success 17
+
+ SUCCESS
+
+ N
+ 1936
+ 176
+
+
+
+ SQL main_dashboard.recruitment_campaign
SQL
ervu-dashboard
N
- DELETE FROM recruitment_campaign.appeals where recruitment_id in ('12', '62', '65', '48') and recording_date = current_date
+ /*DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
N
N
N
- 752
- 1008
+ 976
+ 1232
+
+
+
+ main_dashboard.recruitment_campaign
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.recruitment_campaign
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 400
+
+
+
+ SQL recruitment_campaign.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1424
+
+
+
+ recruitment_campaign.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM recruitment_campaign.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 592
+
+
+
+ SQL main_dashboard.total_registered
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1296
+
+
+
+ SQL main_dashboard.waiting_registration
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1360
+
+
+
+ SQL total_registered.reg_mil_cat
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1488
+
+
+
+ SQL total_registered.removed_registry
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1552
+
+
+
+ SQL total_registered.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1616
+
+
+
+ SQL total_registered.driver_license
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1696
+
+
+
+ SQL total_registered.child_minor
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1776
+
+
+
+ SQL total_registered.age
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1856
+
+
+
+ SQL total_registered.marital_status
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 1936
+
+
+
+ SQL total_registered.education_level
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 2016
+
+
+
+ SQL total_registered.busyness
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 2096
+
+
+
+ SQL recruitment_campaign.appeals
+
+ SQL
+
+ ervu-dashboard
+ N
+ /*DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'Organization'*/
+ N
+ N
+ N
+ 976
+ 2176
+
+
+
+ main_dashboard.total_registered
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.total_registered
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 464
+
+
+
+ main_dashboard.waiting_registration
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM main_dashboard.waiting_registration
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 528
+
+
+
+ total_registered.reg_mil_cat
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.reg_mil_cat
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 656
+
+
+
+ total_registered.removed_registry
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.removed_registry
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 720
+
+
+
+ total_registered.subpoenas
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.subpoenas
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 784
+
+
+
+ total_registered.driver_license
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.driver_license
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 864
+
+
+
+ total_registered.child_minor
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.child_minor
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 944
+
+
+
+ total_registered.age
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.age
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 1024
+
+
+
+ total_registered.marital_status
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.marital_status
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 1104
+
+
+
+ total_registered.education_level
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.education_level
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 1184
+
+
+
+ total_registered.busyness
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM total_registered.busyness
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+ N
+ N
+ N
+ 2016
+ 1264
+
+
+
+ appeals.topic_appeal(reg).hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ Y
+ ${PROJECT_HOME}/region/appeals.topic_appeal(reg).hpl
+ Basic
+
+
+ ARR_REG
+ ARRAY_REGION
+
+ Y
+
+ Y
+ local
+ N
+ N
+ Y
+ N
+ 1696
+ 96
+
+
+
+ Success 18
+
+ SUCCESS
+
+ N
+ 1936
+ 96
+
+ Start
+ job_get_rows_reg.hwf
+ Y
+ Y
+ Y
+
main_dashboard.appeals(reg)
Success
@@ -963,295 +1400,337 @@
N
- main_dashboard.recruitment_campaign(reg)
- Success 2
+ appeals.reasons_appeal(reg).hpl
+ Success 5
Y
Y
N
- main_dashboard.total_registered(reg)
- Success 3
+ job_get_rows_reg.hwf
+ update_appeal_recruitments.hpl
Y
Y
N
- main_dashboard.waiting_registration(reg)
- Success 4
+ update_appeal_recruitments.hpl
+ array_region.hpl
Y
Y
N
- recruitment_campaign.subpoenas(reg)
- Success 6
+ array_region.hpl
+ appeals.reasons_appeal(reg).hpl
Y
Y
N
- total_registered.reg_mil_cat(reg)
- Success 7
- Y
- Y
- N
-
-
- total_registered.removed_registry(reg)
- Success 8
- Y
- Y
- N
-
-
- total_registered.subpoenas(reg)
- Success 9
- Y
- Y
- N
-
-
- select_recruitments_region(reg)
- SQL.md.appeals
- Y
- Y
- N
-
-
- SQL.md.appeals
+ array_region.hpl
main_dashboard.appeals(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.md.rec_cam
+ appeals.review_rating.hpl
+ Success 17
Y
Y
N
- SQL.md.rec_cam
+ main_dashboard.appeals(reg)
+ appeals.review_rating.hpl
+ Y
+ Y
+ N
+
+
+ main_dashboard.recruitment_campaign(reg)
+ main_dashboard.recruitment_campaign
+ Y
+ Y
+ N
+
+
+ main_dashboard.recruitment_campaign
+ Success 2
+ Y
+ Y
+ Y
+
+
+ recruitment_campaign.subpoenas(reg)
+ recruitment_campaign.subpoenas
+ Y
+ Y
+ N
+
+
+ recruitment_campaign.subpoenas
+ Success 6
+ Y
+ Y
+ Y
+
+
+ main_dashboard.total_registered(reg)
+ main_dashboard.total_registered
+ Y
+ Y
+ N
+
+
+ main_dashboard.total_registered
+ Success 3
+ Y
+ Y
+ Y
+
+
+ main_dashboard.waiting_registration(reg)
+ main_dashboard.waiting_registration
+ Y
+ Y
+ N
+
+
+ main_dashboard.waiting_registration
+ Success 4
+ Y
+ Y
+ Y
+
+
+ total_registered.reg_mil_cat(reg)
+ total_registered.reg_mil_cat
+ Y
+ Y
+ N
+
+
+ total_registered.reg_mil_cat
+ Success 7
+ Y
+ Y
+ Y
+
+
+ total_registered.removed_registry(reg)
+ total_registered.removed_registry
+ Y
+ Y
+ N
+
+
+ total_registered.removed_registry
+ Success 8
+ Y
+ Y
+ Y
+
+
+ total_registered.subpoenas(reg)
+ total_registered.subpoenas
+ Y
+ Y
+ N
+
+
+ total_registered.subpoenas
+ Success 9
+ Y
+ Y
+ Y
+
+
+ total_registered.driver_license(reg)
+ total_registered.driver_license
+ Y
+ Y
+ N
+
+
+ total_registered.driver_license
+ Success 10
+ Y
+ Y
+ Y
+
+
+ total_registered.child_minor(reg)
+ total_registered.child_minor
+ Y
+ Y
+ N
+
+
+ total_registered.child_minor
+ Success 11
+ Y
+ Y
+ Y
+
+
+ total_registered.age(reg)
+ total_registered.age
+ Y
+ Y
+ N
+
+
+ total_registered.age
+ Success 12
+ Y
+ Y
+ Y
+
+
+ total_registered.marital_status(reg)
+ total_registered.marital_status
+ Y
+ Y
+ N
+
+
+ total_registered.marital_status
+ Success 13
+ Y
+ Y
+ Y
+
+
+ total_registered.education_level(reg)
+ total_registered.education_level
+ Y
+ Y
+ N
+
+
+ total_registered.education_level
+ Success 14
+ Y
+ Y
+ Y
+
+
+ total_registered.busyness(reg)
+ total_registered.busyness
+ Y
+ Y
+ N
+
+
+ total_registered.busyness
+ Success 15
+ Y
+ Y
+ Y
+
+
+ job_get_rows_reg.hwf
main_dashboard.recruitment_campaign(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.md.tot_reg
- Y
- Y
- N
-
-
- SQL.md.tot_reg
+ job_get_rows_reg.hwf
main_dashboard.total_registered(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.md.wait_reg
- Y
- Y
- N
-
-
- SQL.md.wait_reg
+ job_get_rows_reg.hwf
main_dashboard.waiting_registration(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.rcam.subpoenas
- Y
- Y
- N
-
-
- SQL.rcam.subpoenas
+ job_get_rows_reg.hwf
recruitment_campaign.subpoenas(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.totreg.mrc
- Y
- Y
- N
-
-
- SQL.totreg.mrc
+ job_get_rows_reg.hwf
total_registered.reg_mil_cat(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.totreg.remreg
- Y
- Y
- N
-
-
- SQL.totreg.remreg
+ job_get_rows_reg.hwf
total_registered.removed_registry(reg)
Y
Y
N
- select_recruitments_region(reg)
- SQL.totreg.sub
- Y
- Y
- N
-
-
- SQL.totreg.sub
+ job_get_rows_reg.hwf
total_registered.subpoenas(reg)
Y
Y
N
- Start
- select_recruitments_region(reg)
- Y
- Y
- Y
-
-
- select_recruitments_region(reg)
- SQL.totreg.drlic
- Y
- Y
- N
-
-
- SQL.totreg.drlic
+ job_get_rows_reg.hwf
total_registered.driver_license(reg)
Y
Y
N
- total_registered.driver_license(reg)
- Success 10
- Y
- Y
- N
-
-
- select_recruitments_region(reg)
- SQL.totreg.chmi
- Y
- Y
- N
-
-
- SQL.totreg.chmi
+ job_get_rows_reg.hwf
total_registered.child_minor(reg)
Y
Y
N
- total_registered.child_minor(reg)
- Success 11
- Y
- Y
- N
-
-
- select_recruitments_region(reg)
- SQL.totreg.age
- Y
- Y
- N
-
-
- SQL.totreg.age
+ job_get_rows_reg.hwf
total_registered.age(reg)
Y
Y
N
- total_registered.age(reg)
- Success 12
- Y
- Y
- N
-
-
- SQL.totreg.marstat
+ job_get_rows_reg.hwf
total_registered.marital_status(reg)
Y
Y
N
- total_registered.marital_status(reg)
- Success 13
- Y
- Y
- N
-
-
- select_recruitments_region(reg)
- SQL.totreg.marstat
- Y
- Y
- N
-
-
- SQL.totreg.edulev
+ job_get_rows_reg.hwf
total_registered.education_level(reg)
Y
Y
N
- total_registered.education_level(reg)
- Success 14
- Y
- Y
- N
-
-
- select_recruitments_region(reg)
- SQL.totreg.edulev
- Y
- Y
- N
-
-
- SQL.totreg.busyn
+ job_get_rows_reg.hwf
total_registered.busyness(reg)
Y
Y
N
- total_registered.busyness(reg)
- Success 15
+ array_region.hpl
+ appeals.topic_appeal(reg).hpl
Y
Y
N
- select_recruitments_region(reg)
- SQL.totreg.busyn
+ appeals.topic_appeal(reg).hpl
+ Success 18
Y
Y
N
@@ -1264,19 +1743,12 @@
N
- SQL.reccam.appeals(reg)
+ array_region.hpl
recruitment_campaign.appeals(reg)
Y
Y
N
-
- select_recruitments_region(reg)
- SQL.reccam.appeals(reg)
- Y
- Y
- N
-
diff --git a/mappings/region/main_dashboard.appeals(reg).hpl b/mappings/region/main_dashboard.appeals(reg).hpl
index 54d2cfa..8c87ed0 100644
--- a/mappings/region/main_dashboard.appeals(reg).hpl
+++ b/mappings/region/main_dashboard.appeals(reg).hpl
@@ -1,3 +1,4 @@
+
main_dashboard.appeals(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -26,19 +24,91 @@
Get variables 3 2
Select values 3 2
- Y
+ N
Select values 3 2
Insert / update (main_dashboard.appeals) 2
- Y
+ N
Table input (appeal_document) регионы
Get variables 3 2
+ N
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
+ Y
+
+
+ Insert / update (main_dashboard.appeals) 2
+ Execute SQL script 2
+ Y
+
+
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals) 2
Y
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema = 'Organization'
+
+
+ 384
+ 192
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM main_dashboard.appeals
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+
+
+ 1152
+ 192
+
+
Get variables 3 2
GetVariable
@@ -52,36 +122,31 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
+
+
+ -1
+ SCM
+ -1
+ none
+ String
-
- 672
- 192
- Y
+ 688
+ 256
@@ -95,18 +160,26 @@
none
- ervu-dashboard
100
- Y
+ ervu-dashboard
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ schema
+ schema
+
+
+ =
+ recording_date
+ recording_date
+
main_dashboard
-
- REG_ID
- recruitment_id
- =
-
-
total_appeals
total_appeals
@@ -152,13 +225,17 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
+ Y
-
- 1024
+ 912
192
- Y
@@ -208,13 +285,28 @@
+
+ SCM
+ SCM
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
-
- 816
- 192
- Y
+ 832
+ 256
@@ -228,80 +320,72 @@
none
- postgres.appeal-document-service
- WITH
-t1 AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total_appeals
- FROM public.appeal_document
- WHERE
- ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
- OR vk_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- ))
-),
-t2 AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE ROUND(
- AVG(
- (TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)
- ),
- 2
- )
- END AS average_consideration
- FROM public.appeal_document ad
- WHERE
- ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
- OR vk_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- ))
-),
-resolved AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS resolved
- FROM public.appeal_document ad
- WHERE ad.extra_info->>'result' = '1'
- AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = ''
- OR vk_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- ))
-)
-SELECT
- t1.total_appeals,
- t2.average_consideration,
- r.resolved,
- '${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 0 AS average_to_face,
- 0 AS average_epgu,
- 0 AS average_to_face_percent,
- 0 AS average_epgu_percent
-FROM t1, t2, resolved AS r;
- 0
-
+ ervu-dashboard
N
+ 0
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_REG}'), ','))::uuid AS recruitment_id
+),
+base_data AS (
+ SELECT
+ region_id,
+ solution_type,
+ CASE
+ WHEN incoming_date <> '-' THEN incoming_date::date
+ ELSE NULL
+ END AS incoming_date,
+
+ CASE
+ WHEN fact_end_date <> '-' THEN fact_end_date::date
+ ELSE NULL
+ END AS fact_end_date,
+
+ CASE
+ WHEN response_evalution <> '-' THEN response_evalution::NUMERIC -- оценка ответа заявителем
+ ELSE 0
+ END AS response_evalution,
+ source
+ FROM appeals.appeals_list al
+ WHERE region_id::uuid IN (SELECT recruitment_id FROM ids)
+),
+aggregated_data AS (
+ SELECT
+ region_id AS recruitment_id,
+ COUNT(*) AS total_appeals,
+ COUNT(*) FILTER (WHERE solution_type = 'Решено') AS resolved,
+ -- Среднее время рассмотрения, учитывая возможные NULL для дат
+ ROUND(AVG(CASE
+ WHEN fact_end_date IS NOT NULL AND incoming_date IS NOT NULL
+ THEN fact_end_date::DATE - incoming_date::DATE
+ ELSE NULL
+ END), 1) AS average_consideration,
+ -- Средний рейтинг, учитывая 0 для некорректных значений
+ ROUND(AVG(COALESCE(response_evalution, 0)), 1) AS average_rating,
+ COUNT(*) FILTER (WHERE source = 'ПОС') AS total_pos,
+ COUNT(*) FILTER (WHERE source = 'ЕПГУ') AS total_epgu
+ FROM base_data
+ GROUP BY region_id
+)
+SELECT
+ i.recruitment_id,
+ current_date AS recording_date,
+ 'Organization' AS schema,
+ COALESCE(ad.total_appeals, 0) AS total_appeals,
+ COALESCE(ad.resolved, 0) AS resolved,
+ COALESCE(ad.average_consideration, 0) AS average_consideration,
+ COALESCE(ad.average_rating, 0) AS average_rating,
+ COALESCE(ad.total_pos, 0) AS average_to_face,
+ COALESCE(ad.total_epgu, 0) AS average_epgu,
+ COALESCE(ROUND(ad.total_pos::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS average_to_face_percent,
+ COALESCE(ROUND(ad.total_epgu::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS average_epgu_percent
+FROM ids i
+LEFT JOIN aggregated_data ad ON ad.recruitment_id = i.recruitment_id;
Y
- N
-
- 448
+ 592
192
- Y
diff --git a/mappings/region/main_dashboard.recruitment_campaign(reg).hpl b/mappings/region/main_dashboard.recruitment_campaign(reg).hpl
index 0ec6542..307466f 100644
--- a/mappings/region/main_dashboard.recruitment_campaign(reg).hpl
+++ b/mappings/region/main_dashboard.recruitment_campaign(reg).hpl
@@ -1,3 +1,4 @@
+
main_dashboard.recruitment_campaign(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -33,26 +31,11 @@
Get variables 4 3
Y
-
- Get variables 4 3 2
- Select values 4 3 2
- Y
-
-
- Table input (subpoena) регион/весна
- Get variables 4 3 2
- Y
-
Select values 4 3
Insert / update (main_dashboard.recruitment_campaign)
Y
-
- Select values 4 3 2
- Insert / update (main_dashboard.recruitment_campaign) 2
- Y
-
Get variables 4 3
@@ -67,81 +50,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
- 464
- 432
- Y
-
-
-
- Get variables 4 3 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 448
- 496
- Y
+ 880
+ 480
@@ -155,18 +81,26 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ spring_autumn
+ spring_autumn
+
main_dashboard
-
- REG_ID
- recruitment_id
- =
-
-
subpoenas_sent
count_subpoena
@@ -227,105 +161,17 @@
spring_autumn
N
+
+ schema
+ schema
+ N
+
-
-
-
- 960
- 432
- Y
-
-
-
- Insert / update (main_dashboard.recruitment_campaign) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- main_dashboard
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- subpoenas_sent
- count_subpoena
- Y
-
-
- appeared_on_subpoenas
- count_appeared
- Y
-
-
- not_appeared_on_subpoenas
- count_not_appeared
- Y
-
-
- new_recruits
- new_recruits
- Y
-
-
- postponement_have_right
- postponement_have_right
- Y
-
-
- postponement_granted
- postponement_granted
- Y
-
-
- appeared_on_subpoenas_percent
- appeared_on_subpoenas_percent
- Y
-
-
- not_appeared_on_subpoenas_percent
- not_appeared_on_subpoenas_percent
- Y
-
-
- postponement_have_right_percent
- postponement_have_right_percent
- Y
-
-
- postponement_granted_percent
- postponement_granted_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
-
- 960
- 496
- Y
+ 1376
+ 480
@@ -377,161 +223,9 @@
-
- 640
- 432
- Y
-
-
-
- Select values 4 3 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 640
- 496
- Y
-
-
-
- Table input (subpoena) регион/весна
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- 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
- JOIN public.subpoena_status AS ss ON ss.id = s.status_id
- JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
- JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
- LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
- 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 = '1' -- от 18 до 30 лет и нет отсрочки (нужны эти условия), разделение весна/осень
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t1.count_subpoena END AS count_subpoena,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t2.count_appeared END AS count_appeared,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t3.count_not_appeared END AS count_not_appeared,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(t2.count_appeared * 100.0 / NULLIF(t1.count_subpoena, 0), 2) END AS appeared_on_subpoenas_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(t3.count_not_appeared * 100.0 / NULLIF(t1.count_subpoena, 0), 2) END AS not_appeared_on_subpoenas_percent,
- 0 AS new_recruits,
- 0 AS postponement_have_right,
- 0 AS postponement_granted,
- 0 AS postponement_have_right_percent,
- 0 AS postponement_granted_percent,
- 'Весна' AS spring_autumn,
- '${REG_ID}' AS recruitment_id,
- 1 AS org
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1;
- 0
-
- N
- Y
- N
-
-
-
- 208
- 496
- Y
+ 1056
+ 480
@@ -545,87 +239,61 @@ FULL OUTER JOIN t3 ON 1 = 1;
none
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- 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
- JOIN public.subpoena_status AS ss ON ss.id = s.status_id
- JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id
- JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id
- LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id
- 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 = '1' -- от 18 до 30 лет и нет отсрочки (нужны эти условия), разделение весна/осень
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1 -- выбираем только последнюю запись для каждой повестки
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t1.count_subpoena END AS count_subpoena,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t2.count_appeared END AS count_appeared,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t3.count_not_appeared END AS count_not_appeared,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(t2.count_appeared * 100.0 / NULLIF(t1.count_subpoena, 0), 2) END AS appeared_on_subpoenas_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(t3.count_not_appeared * 100.0 / NULLIF(t1.count_subpoena, 0), 2) END AS not_appeared_on_subpoenas_percent,
- 0 AS new_recruits,
- 0 AS postponement_have_right,
- 0 AS postponement_granted,
- 0 AS postponement_have_right_percent,
- 0 AS postponement_granted_percent,
- 'Осень' AS spring_autumn,
- '${REG_ID}' AS recruitment_id,
- 1 AS org
-FROM t1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1;
- 0
-
+ ervu-dashboard
N
+ 0
+ SELECT
+ COALESCE(SUM(subpoenas_sent), 0) count_subpoena,
+ COALESCE(SUM(appeared_on_subpoenas), 0) count_appeared,
+ COALESCE(SUM(not_appeared_on_subpoenas), 0) count_not_appeared,
+ COALESCE(SUM(new_recruits), 0) new_recruits,
+ COALESCE(SUM(postponement_have_right), 0) postponement_have_right,
+ COALESCE(SUM(postponement_granted), 0) postponement_granted,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoenas_sent) > 0
+ THEN ROUND((SUM(not_appeared_on_subpoenas) / SUM(subpoenas_sent) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_on_subpoenas_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_have_right) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_have_right_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(new_recruits) > 0
+ THEN ROUND((SUM(postponement_granted) / SUM(new_recruits) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) postponement_granted_percent,
+ '${REG_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Organization' AS schema
+FROM main_dashboard.recruitment_campaign
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
Y
- N
-
- 208
- 432
- Y
+ 624
+ 480
diff --git a/mappings/region/main_dashboard.total_registered(reg).hpl b/mappings/region/main_dashboard.total_registered(reg).hpl
index d3b4874..8bd12ad 100644
--- a/mappings/region/main_dashboard.total_registered(reg).hpl
+++ b/mappings/region/main_dashboard.total_registered(reg).hpl
@@ -89,6 +89,16 @@
recruitment_id
REG_ID
+
+ =
+ schema
+ schema
+
+
+ =
+ convicts
+ convicts
+
main_dashboard
@@ -141,6 +151,16 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
N
@@ -214,102 +234,48 @@
none
- postgres.person_registry
+ ervu-dashboard
N
0
- 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' = '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
- )
- )
-),
-extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- vse ri
- WHERE
- jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
-),
-children_birth_dates AS (
- SELECT
- recruit_id,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
- FROM extracted_children
-),
-children_count AS (
- SELECT
- recruit_id,
- COUNT(*) AS children_under_16
- FROM children_birth_dates
- WHERE AGE(make_date(year, month, day)) < interval '16 years'
- GROUP BY recruit_id
-),
-recruit_data AS (
- SELECT
- 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) < 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 vse as ri
- LEFT JOIN children_count AS cc
- ON ri.r_id = cc.recruit_id
- )
-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 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 recruit_data AS rd;
-
+ SELECT
+ COALESCE(SUM(total_registered), 0) total_count,
+ COALESCE(SUM("total_registered_M"), 0) male_count,
+ COALESCE(SUM("total_registered_W"), 0) female_count,
+ COALESCE(SUM(mobilization_criterion), 0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion), 0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion), 0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_registered) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(total_registered) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
+ '${REG_ID}' AS recruitment_id,
+ convicts,
+ 'Organization' AS schema
+FROM main_dashboard.total_registered
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY convicts;
Y
diff --git a/mappings/region/main_dashboard.waiting_registration(reg).hpl b/mappings/region/main_dashboard.waiting_registration(reg).hpl
index 716a29a..4f5fecf 100644
--- a/mappings/region/main_dashboard.waiting_registration(reg).hpl
+++ b/mappings/region/main_dashboard.waiting_registration(reg).hpl
@@ -88,6 +88,13 @@
=
recruitment_id
REG_ID
+
+
+
+ =
+ schema
+ schema
+
main_dashboard
@@ -142,9 +149,9 @@
N
- waiting_registration_percent
- waiting_percent
- Y
+ schema
+ schema
+ N
N
@@ -219,110 +226,46 @@
none
- postgres.person_registry
+ ervu-dashboard
N
0
- 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
- 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
- )
- )
-),
-extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- vse ri
- WHERE
- jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
-),
-children_birth_dates AS (
- SELECT
- recruit_id,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
- (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
- FROM extracted_children
-),
-children_count AS (
- SELECT
- recruit_id,
- COUNT(*) AS children_under_16
- FROM children_birth_dates
- WHERE AGE(make_date(year, month, day)) < interval '16 years'
- GROUP BY recruit_id
-),
-recruit_data AS (
- SELECT
- 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) < 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 vse as ri
- LEFT JOIN children_count AS cc
- ON ri.r_id = cc.recruit_id
-)
-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' = 'false'), 0) * 100
- ), 0
- ), 2
- )
- END AS waiting_percent
-FROM recruit_data AS rd;
+ SELECT
+ COALESCE(SUM(waiting_registration),0) waiting_count,
+ COALESCE(SUM("waiting_registration_M"),0) male_count,
+ COALESCE(SUM("waiting_registration_W"),0) female_count,
+ COALESCE(SUM(mobilization_criterion),0) mobilization_criterion,
+ COALESCE(SUM(volunteer_criterion),0) volunteer_criterion,
+ COALESCE(SUM(contract_criterion),0) contract_criterion,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(mobilization_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mobilization_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(volunteer_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) volunteer_criterion_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(waiting_registration) > 0
+ THEN ROUND((SUM(contract_criterion) / SUM(waiting_registration) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) contract_criterion_percent,
+ '${REG_ID}' AS recruitment_id,
+ 'Organization' AS schema
+FROM main_dashboard.waiting_registration
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE;
Y
diff --git a/mappings/region/recruitment_campaign.appeals(reg).hpl b/mappings/region/recruitment_campaign.appeals(reg).hpl
index fccda1a..702d6e2 100644
--- a/mappings/region/recruitment_campaign.appeals(reg).hpl
+++ b/mappings/region/recruitment_campaign.appeals(reg).hpl
@@ -1,3 +1,4 @@
+
recruitment_campaign.appeals(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -26,34 +24,90 @@
Get variables 3 2
Select values 3 2
- Y
-
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
+ N
Table input (appeal_document) регионы
Get variables 3 2
- Y
+ N
Select values 3 2
Insert / update (main_dashboard.appeals)
+ N
+
+
+ Execute SQL script
+ Table input (appeal_document) регионы
Y
- Table input (appeal_document) регионы 2
- Get variables 3 2 2
+ Insert / update (main_dashboard.appeals)
+ Execute SQL script 2
Y
- Select values 3 2 2
- Insert / update (main_dashboard.appeals) 2
+ Table input (appeal_document) регионы
+ Insert / update (main_dashboard.appeals)
Y
+
+ Execute SQL script
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'Organization'
+
+
+ 256
+ 272
+
+
+
+ Execute SQL script 2
+ ExecSql
+
+ N
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ N
+ N
+ N
+ DELETE FROM recruitment_campaign.appeals
+WHERE recording_date = current_date
+ AND schema = 'REG_LVL'
+
+
+ 1360
+ 272
+
+
Get variables 3 2
GetVariable
@@ -67,81 +121,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
- 672
- 192
- Y
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 672
- 352
- Y
+ 704
+ 416
@@ -155,18 +152,35 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
- recruitment_campaign
-
- REG_ID
- recruitment_id
=
+ recruitment_id
+ recruitment_id
+
+ =
+ schema
+ schema
+
+
+
+ =
+ spring_autumn
+ spring_autumn
+
+
+
+ =
+ recording_date
+ recording_date
+
+
+ recruitment_campaign
+
total_appeals
total_appeals
@@ -212,90 +226,17 @@
spring_autumn
N
+
+ schema
+ schema
+ N
+
-
-
-
- 1040
- 192
- Y
-
-
-
- Insert / update (main_dashboard.appeals) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- recruitment_campaign
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- total_appeals
- total_appeals
- Y
-
-
- average_consideration
- average_consideration
- Y
-
-
- resolved
- resolved
- Y
-
-
- not_resolved
- not_resolved
- Y
-
-
- not_resolved_percent
- not_resolved_percent
- Y
-
-
- average_rating
- average_rating
- Y
-
-
- resolved_percent
- resolved_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- spring_autumn
- spring_autumn
- N
-
-
-
- 1040
- 352
- Y
+ 1088
+ 272
@@ -347,16 +288,14 @@
-
- 816
- 192
- Y
+ 848
+ 416
- Select values 3 2 2
- SelectValues
+ Table input (appeal_document) регионы
+ TableInput
Y
@@ -365,157 +304,77 @@
none
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 816
- 352
- Y
-
-
-
- Table input (appeal_document) регионы
- TableInput
-
- N
-
- 1
-
- none
-
-
- postgres.appeal-document-service
- -- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
-WITH appeals_data AS (
- SELECT
- COUNT(*) AS total_appeals,
- ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
- COUNT(CASE WHEN ad.extra_info->>'result' = '1' THEN 1 ELSE 0 END) AS resolved,
- COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 ELSE 0 END) AS not_resolved
- FROM public.appeal_document ad
- WHERE
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN false
- ELSE vk_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- END
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.total_appeals END AS total_appeals,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.average_consideration END AS average_consideration,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.resolved END AS resolved,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.not_resolved END AS not_resolved,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) END AS resolved_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) END AS not_resolved_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 'Осень' AS spring_autumn
-FROM appeals_data AS ad;
- 0
-
+ ervu-dashboard
N
- Y
- N
-
-
-
- 448
- 192
- Y
-
-
-
- Table input (appeal_document) регионы 2
- TableInput
-
- N
-
- 1
-
- none
-
-
- postgres.appeal-document-service
- -- ad.extra_info->>'result' = '**' 1 - удовлетворена, 2 - частично удовлетворена, 3 - отказано в удовлетворении
-WITH appeals_data AS (
- SELECT
- COUNT(*) AS total_appeals,
- ROUND(AVG((TRIM(BOTH '"' FROM (ad.extra_info ->> 'resultDate')::text)::date - ad.appeal_date)), 2) AS average_consideration,
- COUNT(CASE WHEN ad.extra_info->>'result' = '1' THEN 1 ELSE 0 END) AS resolved,
- COUNT(CASE WHEN ad.extra_info->>'result' = '3' THEN 1 ELSE 0 END) AS not_resolved
- FROM public.appeal_document ad
- WHERE
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN false
- ELSE vk_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- END
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.total_appeals END AS total_appeals,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.average_consideration END AS average_consideration,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.resolved END AS resolved,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ad.not_resolved END AS not_resolved,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(ad.resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) END AS resolved_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(ad.not_resolved * 100.0 / NULLIF(ad.total_appeals, 0), 2) END AS not_resolved_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS average_rating,
- 'Весна' AS spring_autumn
-FROM appeals_data AS ad;
0
-
- N
+ WITH
+ids AS (
+ SELECT unnest(string_to_array(trim(both '{}' from '${ARR_REG}'), ','))::uuid AS recruitment_id
+),
+base_data AS (
+ SELECT
+ region_id,
+ solution_type,
+ CASE
+ WHEN incoming_date <> '-' THEN incoming_date::date
+ ELSE NULL
+ END AS incoming_date,
+
+ CASE
+ WHEN fact_end_date <> '-' THEN fact_end_date::date
+ ELSE NULL
+ END AS fact_end_date,
+
+ CASE
+ WHEN response_evalution <> '-' THEN response_evalution::NUMERIC -- оценка ответа заявителем
+ ELSE 0
+ END AS response_evalution,
+ source
+ FROM appeals.appeals_list al
+ WHERE region_id::uuid IN (SELECT recruitment_id FROM ids)
+),
+aggregated_data AS (
+ SELECT
+ region_id AS recruitment_id,
+ COUNT(*) AS total_appeals,
+ COUNT(*) FILTER (WHERE solution_type = 'Решено') AS resolved,
+ COUNT(*) FILTER (WHERE solution_type != 'Решено') AS not_resolved,
+ -- Среднее время рассмотрения, учитывая возможные NULL для дат
+ ROUND(AVG(CASE
+ WHEN fact_end_date IS NOT NULL AND incoming_date IS NOT NULL
+ THEN fact_end_date::DATE - incoming_date::DATE
+ ELSE NULL
+ END), 1) AS average_consideration,
+ -- Средний рейтинг, учитывая 0 для некорректных значений
+ ROUND(AVG(COALESCE(response_evalution, 0)), 1) AS average_rating
+ --COUNT(*) FILTER (WHERE source = 'ПОС') AS total_pos,
+ --COUNT(*) FILTER (WHERE source = 'ЕПГУ') AS total_epgu
+ FROM base_data
+ GROUP BY region_id
+)
+SELECT
+ i.recruitment_id,
+ current_date AS recording_date,
+ 'Весна' AS spring_autumn,
+ 'Organization' AS schema,
+ COALESCE(ad.total_appeals, 0) AS total_appeals,
+ COALESCE(ad.resolved, 0) AS resolved,
+ COALESCE(ad.not_resolved, 0) AS not_resolved,
+ COALESCE(ad.average_consideration, 0) AS average_consideration,
+ COALESCE(ad.average_rating, 0) AS average_rating,
+ COALESCE(ROUND(ad.resolved::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS resolved_percent,
+ COALESCE(ROUND(ad.not_resolved::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS not_resolved_percent
+ --COALESCE(ad.total_pos, 0) AS average_to_face,
+ --COALESCE(ad.total_epgu, 0) AS average_epgu,
+ --COALESCE(ROUND(ad.total_pos::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS average_to_face_percent,
+ --COALESCE(ROUND(ad.total_epgu::NUMERIC * 100 / NULLIF(ad.total_appeals, 0), 1), 0) AS average_epgu_percent
+FROM ids i
+LEFT JOIN aggregated_data ad ON ad.recruitment_id = i.recruitment_id;
Y
- N
-
- 448
- 352
- Y
+ 496
+ 272
diff --git a/mappings/region/recruitment_campaign.subpoenas(reg).hpl b/mappings/region/recruitment_campaign.subpoenas(reg).hpl
index 6affc60..0c505c9 100644
--- a/mappings/region/recruitment_campaign.subpoenas(reg).hpl
+++ b/mappings/region/recruitment_campaign.subpoenas(reg).hpl
@@ -1,3 +1,4 @@
+
recruitment_campaign.subpoenas(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/09 13:13:59.825
-
2024/08/09 13:13:59.825
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -33,26 +31,11 @@
Get variables 4 3
Y
-
- Get variables 4 3 2
- Select values 4 3 2
- Y
-
-
- Table input (subpoena) весна/регионы
- Get variables 4 3 2
- Y
-
Select values 4 3
Insert / update (recruitment_campaign.subpoenas) 3
Y
-
- Select values 4 3 2
- Insert / update (recruitment_campaign.subpoenas) 3 2
- Y
-
Get variables 4 3
@@ -67,81 +50,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
- 416
- 400
- Y
-
-
-
- Get variables 4 3 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 416
- 480
- Y
+ 1344
+ 448
@@ -155,18 +81,26 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ spring_autumn
+ spring_autumn
+
recruitment_campaign
-
- REG_ID
- recruitment_id
- =
-
-
subpoena
count_subpoena
@@ -267,145 +201,17 @@
appear_date_is_good_percent
Y
+
+ schema
+ schema
+ N
+
-
-
-
- 896
- 400
- Y
-
-
-
- Insert / update (recruitment_campaign.subpoenas) 3 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- recruitment_campaign
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- rest
- rest
- Y
-
-
- spring_autumn
- spring_autumn
- N
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
-
- 896
- 480
- Y
+ 1824
+ 448
@@ -457,253 +263,9 @@
-
- 592
- 400
- Y
-
-
-
- Select values 4 3 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 592
- 480
- Y
-
-
-
- Table input (subpoena) весна/регионы
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN 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 (
- COALESCE('${VK_ARRAY}', '') = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
- ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery
- FROM last_status
- WHERE d_code IS NULL
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
-)
-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,
- ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
- ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
- ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
- ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
- ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 0 AS rest,
- 'Весна' AS spring_autumn
-FROM t1
-FULL OUTER JOIN t2 ON true
-FULL OUTER JOIN t3 ON true
-FULL OUTER JOIN t4 ON true
-FULL OUTER JOIN t5 ON true
-FULL OUTER JOIN t6 ON true
-FULL OUTER JOIN t7 ON true
-FULL OUTER JOIN t8 ON true
-FULL OUTER JOIN t9 ON true
-FULL OUTER JOIN t10 ON true
-FULL OUTER JOIN t11 ON true
-FULL OUTER JOIN t12 ON true
-FULL OUTER JOIN t13 ON true
-WHERE NOT (
- COALESCE('${VK_ARRAY}', '') = ''
- AND (
- COALESCE(t1.count_subpoena, 0) > 0
- OR COALESCE(t2.average_appeared, 0) > 0
- OR COALESCE(t3.count_appeared, 0) > 0
- OR COALESCE(t4.count_not_appeared, 0) > 0
- OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
- OR COALESCE(t6.count_ap_not_required, 0) > 0
- OR COALESCE(t7.count_restrictions_applied, 0) > 0
- OR COALESCE(t8.count_introduced_measures, 0) > 0
- OR COALESCE(t9.count_paper, 0) > 0
- OR COALESCE(t10.count_electron, 0) > 0
- OR COALESCE(t11.count_restrictions, 0) > 0
- OR COALESCE(t12.count_not_delivery, 0) > 0
- OR COALESCE(t13.appear_date_is_good, 0) > 0
- )
-);
- 0
-
- N
- Y
- N
-
-
-
- 160
- 480
- Y
+ 1520
+ 448
@@ -717,179 +279,105 @@ WHERE NOT (
none
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN 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 (
- COALESCE('${VK_ARRAY}', '') = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
- ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery
- FROM last_status
- WHERE d_code IS NULL
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
-)
-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,
- ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
- ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
- ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
- ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
- ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 0 AS rest,
- 'Осень' AS spring_autumn
-FROM t1
-FULL OUTER JOIN t2 ON true
-FULL OUTER JOIN t3 ON true
-FULL OUTER JOIN t4 ON true
-FULL OUTER JOIN t5 ON true
-FULL OUTER JOIN t6 ON true
-FULL OUTER JOIN t7 ON true
-FULL OUTER JOIN t8 ON true
-FULL OUTER JOIN t9 ON true
-FULL OUTER JOIN t10 ON true
-FULL OUTER JOIN t11 ON true
-FULL OUTER JOIN t12 ON true
-FULL OUTER JOIN t13 ON true
-WHERE NOT (
- COALESCE('${VK_ARRAY}', '') = ''
- AND (
- COALESCE(t1.count_subpoena, 0) > 0
- OR COALESCE(t2.average_appeared, 0) > 0
- OR COALESCE(t3.count_appeared, 0) > 0
- OR COALESCE(t4.count_not_appeared, 0) > 0
- OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
- OR COALESCE(t6.count_ap_not_required, 0) > 0
- OR COALESCE(t7.count_restrictions_applied, 0) > 0
- OR COALESCE(t8.count_introduced_measures, 0) > 0
- OR COALESCE(t9.count_paper, 0) > 0
- OR COALESCE(t10.count_electron, 0) > 0
- OR COALESCE(t11.count_restrictions, 0) > 0
- OR COALESCE(t12.count_not_delivery, 0) > 0
- OR COALESCE(t13.appear_date_is_good, 0) > 0
- )
-);
- 0
-
+ ervu-dashboard
N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+ COALESCE(SUM(rest), 0) rest,
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${REG_ID}' AS recruitment_id,
+ spring_autumn,
+ 'Organization' AS schema
+FROM recruitment_campaign.subpoenas
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY spring_autumn;
Y
- N
-
- 160
- 400
- Y
+ 1088
+ 448
diff --git a/mappings/region/rows_id-array_reg.hpl b/mappings/region/rows_id-array_reg.hpl
new file mode 100644
index 0000000..5acca11
--- /dev/null
+++ b/mappings/region/rows_id-array_reg.hpl
@@ -0,0 +1,74 @@
+
+
+
+ rows_id-array_reg
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/10 12:40:41.832
+ -
+ 2024/12/10 12:40:41.832
+
+
+
+
+
+ Table input
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 672
+ 256
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+recruitment_reg_id AS RECRUITMENT_REG_ID,
+string_to_array(trim(both '{}' FROM replace(vk_array_id, ' ', '')), ',')::uuid[] AS VK_ARRAY_ID
+FROM ervu_dashboard.array_reg
+ N
+
+
+ 448
+ 256
+
+
+
+
+
+
diff --git a/mappings/region/select_recruitments_region(reg).hpl b/mappings/region/select_recruitments_region(reg).hpl
index a76b1c4..f7a624c 100644
--- a/mappings/region/select_recruitments_region(reg).hpl
+++ b/mappings/region/select_recruitments_region(reg).hpl
@@ -1,3 +1,4 @@
+
select_recruitments_region(reg)
@@ -7,8 +8,17 @@
Normal
0
- /
+
+ ORG_ROW
+
+
+
+
+ SCM
+
+
+
N
1000
@@ -17,21 +27,29 @@
2024/08/15 14:58:19.728
-
2024/08/15 14:58:19.728
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
+
+ Get variables 3 2
+ Select values 3 2
+ Y
+
Table input/регион
- Copy rows to result
+ Get variables 3 2
+ Y
+
+
+ Select values 3 2
+ Insert / update
Y
- Copy rows to result
- RowsToResult
+ Get variables 3 2
+ GetVariable
Y
@@ -40,12 +58,101 @@
none
+
+
+
+
+
+
+ -1
+ ORG_ROW
+ -1
+ none
+ String
+
+
+
-
- 512
+ 656
+ 208
+
+
+
+ Insert / update
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+
+
+ =
+ recruitment_reg_id
+ ORG_ROW
+
+
+ ervu_dashboard
+
+
+ vk_array_id
+ vk_array_id
+ Y
+
+
+ recruitment_reg_id
+ recruitment_reg_id
+ Y
+
+
+ N
+
+
+ 992
+ 208
+
+
+
+ Select values 3 2
+ SelectValues
+
+ Y
+
+ 1
+
+ none
+
+
+
+ N
+
+ ORG_ROW
+ ORG_ROW
+ String
+ -2
+ -2
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+ 800
208
- Y
@@ -60,41 +167,29 @@
ervu-dashboard
- WITH
-t1 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT12_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '12'),
-t2 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT62_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '62'),
-t3 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT65_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '65'),
-t4 AS (SELECT ARRAY_AGG(t.idm_id) AS RECRUITMENT48_ID FROM ervu_dashboard.recruitment AS t WHERE t.code = '48')
-SELECT
- t1.RECRUITMENT12_ID AS VK_ARRAY_ID,
- '12' AS RECRUITMENT_REG_ID
-FROM t1
-UNION ALL
-SELECT
- t2.RECRUITMENT62_ID,
- '62'
-FROM t2
-UNION ALL
-SELECT
- t3.RECRUITMENT65_ID,
- '65'
-FROM t3
-UNION ALL
-SELECT
- t4.RECRUITMENT48_ID,
- '48'
-FROM t4;
- 10
-
N
- N
- N
+
+ SELECT
+ '${ORG_ROW}' AS recruitment_reg_id,
+ ARRAY(
+ SELECT idm_id
+ FROM (
+ SELECT idm_id
+ FROM ervu_dashboard.recruitment
+ WHERE schema = 'Department' AND parent_id = '${ORG_ROW}'
+ UNION ALL
+ SELECT idm_id
+ FROM ervu_dashboard.recruitment
+ WHERE idm_id = '${ORG_ROW}'
+ ) subquery
+ ) AS vk_array_id
+FROM ervu_dashboard.recruitment
+WHERE idm_id = '${ORG_ROW}';
+ Y
-
- 336
+ 528
208
- Y
diff --git a/mappings/region/select_recruitments_region(reg)rows.hpl b/mappings/region/select_recruitments_region(reg)rows.hpl
new file mode 100644
index 0000000..de91546
--- /dev/null
+++ b/mappings/region/select_recruitments_region(reg)rows.hpl
@@ -0,0 +1,76 @@
+
+
+
+ select_recruitments_region(reg)rows
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2024/12/10 10:43:22.293
+ -
+ 2024/12/10 10:43:22.293
+
+
+
+
+
+ Table input/регион
+ Copy rows to result
+ Y
+
+
+
+ Copy rows to result
+ RowsToResult
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 688
+ 240
+
+
+
+ Table input/регион
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+
+ SELECT
+ idm_id AS ORGANIZATION_ROW
+FROM
+ ervu_dashboard.recruitment
+WHERE schema = 'Organization'
+
+ N
+
+
+ 512
+ 240
+
+
+
+
+
+
diff --git a/mappings/region/total_registered.age(reg).hpl b/mappings/region/total_registered.age(reg).hpl
index b629a30..3a74385 100644
--- a/mappings/region/total_registered.age(reg).hpl
+++ b/mappings/region/total_registered.age(reg).hpl
@@ -26,16 +26,6 @@
Select values 3 2
Y
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
-
-
- Get variables 3 2 2 2
- Select values 3 2 2 2
- Y
-
Table input (person_registry) регион/все
Get variables 3 2
@@ -46,71 +36,6 @@
Insert / update (total_registered.age)
Y
-
- Table input (person_registry) регион/мужчины
- Get variables 3 2 2
- Y
-
-
- Select values 3 2 2
- Insert / update (total_registered.age) 2
- Y
-
-
- Table input (person_registry) регион/женщины
- Get variables 3 2 2 2
- Y
-
-
- Select values 3 2 2 2
- Insert / update (total_registered.age) 3
- Y
-
-
- Get variables 3 2 3
- Select values 3 2 3
- Y
-
-
- Get variables 3 2 2 3
- Select values 3 2 2 3
- Y
-
-
- Get variables 3 2 2 2 2
- Select values 3 2 2 2 2
- Y
-
-
- Select values 3 2 3
- Insert / update (total_registered.age) 4
- Y
-
-
- Select values 3 2 2 3
- Insert / update (total_registered.age) 2 2
- Y
-
-
- Select values 3 2 2 2 2
- Insert / update (total_registered.age) 3 2
- Y
-
-
- Table input (person_registry) регион/все 2
- Get variables 3 2 3
- Y
-
-
- Table input (person_registry) регион/женщины 2
- Get variables 3 2 2 2 2
- Y
-
-
- Table input (person_registry) регион/мужчины 2
- Get variables 3 2 2 3
- Y
-
Get variables 3 2
@@ -141,173 +66,8 @@
- 672
- 192
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 352
-
-
-
- Get variables 3 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 512
-
-
-
- Get variables 3 2 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 656
- 1056
-
-
-
- Get variables 3 2 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 656
- 896
-
-
-
- Get variables 3 2 3
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 656
- 736
+ 1568
+ 752
@@ -329,129 +89,25 @@
recruitment_id
REG_ID
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1056
- 192
-
-
-
- Insert / update (total_registered.age) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
=
- recruitment_id
- REG_ID
+ schema
+ schema
+
+
+ =
+ registered
+ registered
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
total_registered
@@ -487,7 +143,7 @@
"51+_years"
- 41-45_year_count
+ 51+_year_count
Y
@@ -550,508 +206,27 @@
registered
N
-
- Y
-
-
- 1056
- 352
-
-
-
- Insert / update (total_registered.age) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
+ schema
+ schema
N
- "46-50_years"
- 46-50_year_count
+ total_count
+ total_count
Y
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
+ convicts
+ convicts
N
Y
- 1040
- 896
-
-
-
- Insert / update (total_registered.age) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1072
- 512
-
-
-
- Insert / update (total_registered.age) 3 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1056
- 1056
-
-
-
- Insert / update (total_registered.age) 4
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
-
- "17_years"
- 17_year_count
- Y
-
-
- "18-26_years"
- 18-26_year_count
- Y
-
-
- "27-30_years"
- 27-30_year_count
- Y
-
-
- "31-35_years"
- 31-35_year_count
- Y
-
-
- "36-40_years"
- 36-40_year_count
- Y
-
-
- "41-45_years"
- 41-45_year_count
- Y
-
-
- "51+_years"
- 41-45_year_count
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- "46-50_years"
- 46-50_year_count
- Y
-
-
- "17_years_percent"
- 17_year_percent
- Y
-
-
- "18-26_years_percent"
- 18-26_year_percent
- Y
-
-
- "27-30_years_percent"
- 27-30_year_percent
- Y
-
-
- "31-35_years_percent"
- 31-35_year_percent
- Y
-
-
- "36-40_years_percent"
- 36-40_year_percent
- Y
-
-
- "41-45_years_percent"
- 41-45_year_percent
- Y
-
-
- "46-50_years_percent"
- 46-50_year_percent
- Y
-
-
- "51+_years_percent"
- 51+_year_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- Y
-
-
- 1040
- 736
+ 1952
+ 752
@@ -1104,278 +279,8 @@
- 816
- 192
-
-
-
- Select values 3 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 352
-
-
-
- Select values 3 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 512
-
-
-
- Select values 3 2 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 800
- 1056
-
-
-
- Select values 3 2 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 800
- 896
-
-
-
- Select values 3 2 3
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 800
- 736
+ 1712
+ 752
@@ -1389,709 +294,99 @@
none
- ervu_person_registry
+ ervu-dashboard
N
0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
+ SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM("17_years"), 0) "17_year_count",
+ COALESCE(SUM("18-26_years"), 0) "18-26_year_count",
+ COALESCE(SUM("27-30_years"), 0) "27-30_year_count",
+ COALESCE(SUM("31-35_years"), 0) "31-35_year_count",
+ COALESCE(SUM("36-40_years"), 0) "36-40_year_count",
+ COALESCE(SUM("41-45_years"), 0) "41-45_year_count",
+ COALESCE(SUM("51+_years"), 0) "51+_year_count",
+ COALESCE(SUM("46-50_years"), 0) "46-50_year_count",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("17_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "17_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("18-26_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "18-26_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("27-30_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "27-30_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("31-35_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "31-35_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("36-40_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "36-40_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("41-45_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "41-45_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("46-50_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "46-50_year_percent",
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("51+_years") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) "51+_year_percent",
'${REG_ID}' AS recruitment_id,
- 'ALL' AS gender,
- 'true' AS registered
-FROM age_counts, total_count;
+ "all_M_W" AS gender,
+ convicts,
+ registered,
+ 'Organization' AS schema
+FROM total_registered.age
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
Y
- 432
- 192
-
-
-
- Table input (person_registry) регион/все 2
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- 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[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- 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[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
-
- '${REG_ID}' AS recruitment_id,
- 'ALL' AS gender,
- 'false' AS registered
-FROM age_counts, total_count;
- Y
-
-
- 416
- 736
-
-
-
- Table input (person_registry) регион/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
-
- '${REG_ID}' AS recruitment_id,
- 'W' AS gender,
- 'true' AS registered
-FROM age_counts, total_count;
- Y
-
-
- 416
- 512
-
-
-
- Table input (person_registry) регион/женщины 2
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'false'
- AND r.current_recruitment_id IS NOT NULL
- AND r.gender = 'FEMALE'
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'false'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
-
- '${REG_ID}' AS recruitment_id,
- 'W' AS gender,
- 'false' AS registered
-FROM age_counts, total_count;
- Y
-
-
- 400
- 1056
-
-
-
- Table input (person_registry) регион/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.current_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
-
- '${REG_ID}' AS recruitment_id,
- 'M' AS gender,
- 'true' AS registered
-FROM age_counts, total_count;
- Y
-
-
- 432
- 352
-
-
-
- Table input (person_registry) регион/мужчины 2
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'false'
- AND r.current_recruitment_id IS NOT NULL
- AND r.gender = 'MALE'
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-age_counts AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) = 17)
- END AS "17_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 18 AND 26)
- END AS "18-26_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 27 AND 30)
- END AS "27-30_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 31 AND 35)
- END AS "31-35_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 36 AND 40)
- END AS "36-40_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 41 AND 45)
- END AS "41-45_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) BETWEEN 46 AND 50)
- END AS "46-50_year_count",
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (WHERE EXTRACT(YEAR FROM AGE(birth_date)) >= 51)
- END AS "51+_year_count"
- FROM public.recruits r
- JOIN public.recruits_info ri ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'false'
- AND r.gender = 'MALE'
- 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[]
- )
- )
-)
-SELECT
- age_counts."17_year_count",
- ROUND((age_counts."17_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "17_year_percent",
-
- age_counts."18-26_year_count",
- ROUND((age_counts."18-26_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "18-26_year_percent",
-
- age_counts."27-30_year_count",
- ROUND((age_counts."27-30_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "27-30_year_percent",
-
- age_counts."31-35_year_count",
- ROUND((age_counts."31-35_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "31-35_year_percent",
-
- age_counts."36-40_year_count",
- ROUND((age_counts."36-40_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "36-40_year_percent",
-
- age_counts."41-45_year_count",
- ROUND((age_counts."41-45_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "41-45_year_percent",
-
- age_counts."46-50_year_count",
- ROUND((age_counts."46-50_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "46-50_year_percent",
-
- age_counts."51+_year_count",
- ROUND((age_counts."51+_year_count" * 100.0) / NULLIF(total_count.total, 0), 2) AS "51+_year_percent",
-
- '${REG_ID}' AS recruitment_id,
- 'M' AS gender,
- 'false' AS registered
-FROM age_counts, total_count;
- Y
-
-
- 416
- 896
+ 1328
+ 752
diff --git a/mappings/region/total_registered.busyness(reg).hpl b/mappings/region/total_registered.busyness(reg).hpl
index 0168803..a7f97c9 100644
--- a/mappings/region/total_registered.busyness(reg).hpl
+++ b/mappings/region/total_registered.busyness(reg).hpl
@@ -26,16 +26,6 @@
Select values 3 2
Y
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
-
-
- Get variables 3 2 2 2
- Select values 3 2 2 2
- Y
-
Table input (person_registry) РФ/все
Get variables 3 2
@@ -46,26 +36,6 @@
Insert / update (total_registered.busyness)
Y
-
- Select values 3 2 2
- Insert / update (total_registered.busyness) 2
- Y
-
-
- Select values 3 2 2 2
- Insert / update (total_registered.busyness) 3
- Y
-
-
- Table input (person_registry) РФ/женщины
- Get variables 3 2 2 2
- Y
-
-
- Table input (person_registry) РФ/мужчины
- Get variables 3 2 2
- Y
-
Get variables 3 2
@@ -96,74 +66,8 @@
- 672
- 192
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 352
-
-
-
- Get variables 3 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 512
+ 640
+ 576
@@ -185,84 +89,20 @@
recruitment_id
REG_ID
- total_registered
-
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- registered
- registered
- N
-
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
-
- Y
-
-
- 1072
- 192
-
-
-
- Insert / update (total_registered.busyness) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
=
- recruitment_id
- REG_ID
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
total_registered
@@ -303,12 +143,12 @@
not_work
- not_work
+ no_info
Y
not_work_percent
- not_work_percent
+ no_info_percent
Y
@@ -316,91 +156,22 @@
total_people
Y
-
- Y
-
-
- 1072
- 352
-
-
-
- Insert / update (total_registered.busyness) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
- study
- study
- Y
-
-
- work
- work
- Y
-
-
- study_percent
- study_percent
- Y
-
-
- work_percent
- work_percent
- Y
-
-
- recruitment_id
- recruitment_id
+ schema
+ schema
N
- registered
- registered
+ convicts
+ convicts
N
-
- "all_M_W"
- gender
- N
-
-
- not_work
- not_work
- Y
-
-
- not_work_percent
- not_work_percent
- Y
-
-
- busyness
- total_people
- Y
-
Y
- 1072
- 512
+ 1040
+ 576
@@ -453,116 +224,8 @@
- 816
- 192
-
-
-
- Select values 3 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 352
-
-
-
- Select values 3 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 512
+ 784
+ 576
@@ -576,358 +239,54 @@
none
- ervu_person_registry
+ ervu-dashboard
N
0
- WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
+ SELECT
+ COALESCE(SUM(study), 0) study,
+ COALESCE(SUM(work), 0) work,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(study) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) study_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) work_percent,
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
+ COALESCE(SUM(not_work), 0) no_info,
+ COALESCE(
+ CASE
+ WHEN SUM(busyness) > 0
+ THEN ROUND((SUM(not_work) / SUM(busyness) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_info_percent,
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS no_info,
-
- -- Общее количество людей
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total_people
- FROM status_info
-)
-SELECT
- 'ALL' AS gender,
- 'true' AS registered,
+ COALESCE(SUM(busyness), 0) total_people,
'${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE study END AS study,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE work END AS work,
- 0 AS not_work,
- 0 AS not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(study * 100.0 / NULLIF(total_people, 0), 2) END AS study_percent,
-
- -- Процент людей, которые работают
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(work * 100.0 / NULLIF(total_people, 0), 2) END AS work_percent
-
- -- Процент людей, для которых отсутствуют сведения
- -- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) END AS no_info_percent
-FROM summary;
+ "all_M_W" AS gender,
+ registered,
+ convicts,
+ 'Organization' AS schema
+FROM total_registered.busyness
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", registered, convicts;
Y
- 432
- 192
-
-
-
- Table input (person_registry) РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info -> 'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS no_info,
-
- -- Общее количество людей
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total_people
- FROM status_info
-)
-SELECT
- 'W' AS gender,
- 'true' AS registered,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE study END AS study,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE work END AS work,
- 0 AS not_work,
- 0 AS not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(study * 100.0 / NULLIF(total_people, 0), 2) END AS study_percent,
-
- -- Процент людей, которые работают
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(work * 100.0 / NULLIF(total_people, 0), 2) END AS work_percent
-
- -- Процент людей, для которых отсутствуют сведения
- -- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) END AS no_info_percent
-FROM summary;
- Y
-
-
- 432
- 512
-
-
-
- Table input (person_registry) РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH status_info AS (
- SELECT
- -- Проверка на обучение в вузе (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
- WHERE vuz->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_vuz,
-
- -- Проверка на обучение в колледже (есть информация и обучается)
- (
- CASE
- WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
- WHERE kolledzh->>'kodStatus' = '1'
- )
- ELSE false
- END
- ) AS is_studying_in_college,
-
- -- Проверка на работу (есть информация и работает)
- (
- CASE
- WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
- WHERE trud->>'prAktMestRab' = '1'
- )
- ELSE false
- END
- ) AS is_working,
-
- -- Проверка на отсутствие сведений о вузе
- info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
-
- -- Проверка на отсутствие сведений о колледже
- info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
-
- -- Проверка на отсутствие сведений о работе
- info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info -> 'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- )
-),
-summary AS (
- SELECT
- -- Количество людей, которые учатся (в вузе или колледже)
- COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
-
- -- Количество людей, которые работают
- COUNT(CASE WHEN is_working THEN 1 END) AS work,
-
- -- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
- COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS no_info,
-
- -- Общее количество людей
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total_people
- FROM status_info
-)
-SELECT
- 'M' AS gender,
- 'true' AS registered,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE study END AS study,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE work END AS work,
- 0 AS not_work,
- 0 AS not_work_percent,
- total_people,
-
- -- Процент людей, которые учатся
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(study * 100.0 / NULLIF(total_people, 0), 2) END AS study_percent,
-
- -- Процент людей, которые работают
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(work * 100.0 / NULLIF(total_people, 0), 2) END AS work_percent
-
- -- Процент людей, для которых отсутствуют сведения
- -- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(no_info * 100.0 / NULLIF(total_people, 0), 2) END AS no_info_percent
-FROM summary;
- Y
-
-
- 432
- 352
+ 400
+ 576
diff --git a/mappings/region/total_registered.child_minor(reg).hpl b/mappings/region/total_registered.child_minor(reg).hpl
index 0c4e6d8..04838e3 100644
--- a/mappings/region/total_registered.child_minor(reg).hpl
+++ b/mappings/region/total_registered.child_minor(reg).hpl
@@ -1,3 +1,4 @@
+
total_registered.child_minor(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -38,36 +36,6 @@
Insert / update (total_registered.child_minor)
Y
-
- Get variables 4 2 2
- Select values 4 2 2
- Y
-
-
- Select values 4 2 2
- Insert / update (total_registered.child_minor) 2
- Y
-
-
- Get variables 4 2 2 2
- Select values 4 2 2 2
- Y
-
-
- Select values 4 2 2 2
- Insert / update (total_registered.child_minor) 2 2
- Y
-
-
- Table input (person_registry)РФ/мужчины
- Get variables 4 2 2
- Y
-
-
- Table input (person_registry)РФ/женщины
- Get variables 4 2 2 2
- Y
-
Get variables 4 2
@@ -82,126 +50,24 @@
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
-
- 592
- 288
- Y
-
-
-
- Get variables 4 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 592
- 384
- Y
-
-
-
- Get variables 4 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 592
- 480
- Y
+ 1024
+ 416
@@ -215,18 +81,31 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
total_registered
-
- REG_ID
- recruitment_id
- =
-
-
no_child
no_children
@@ -287,197 +166,27 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
+
+ total_count
+ total_count
+ Y
+
+
+ convicts
+ convicts
+ Y
+
-
-
-
- 1040
- 288
- Y
-
-
-
- Insert / update (total_registered.child_minor) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- no_child
- no_children
- Y
-
-
- "1_child"
- one_child
- Y
-
-
- "2_child"
- two_children
- Y
-
-
- "3_child"
- three_children
- Y
-
-
- "4_more_child"
- four_or_more_children
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- no_child_percent
- no_children_percent
- Y
-
-
- "1_child_percent"
- one_child_percent
- Y
-
-
- "2_child_percent"
- two_children_percent
- Y
-
-
- "3_child_percent"
- three_children_percent
- Y
-
-
- "4_more_child_percent"
- four_or_more_children_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
-
- 1040
- 384
- Y
-
-
-
- Insert / update (total_registered.child_minor) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
- N
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- no_child
- no_children
- Y
-
-
- "1_child"
- one_child
- Y
-
-
- "2_child"
- two_children
- Y
-
-
- "3_child"
- three_children
- Y
-
-
- "4_more_child"
- four_or_more_children
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- no_child_percent
- no_children_percent
- Y
-
-
- "1_child_percent"
- one_child_percent
- Y
-
-
- "2_child_percent"
- two_children_percent
- Y
-
-
- "3_child_percent"
- three_children_percent
- Y
-
-
- "4_more_child_percent"
- four_or_more_children_percent
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
-
-
-
- 1040
- 480
- Y
+ 1472
+ 416
@@ -529,377 +238,9 @@
-
- 784
- 288
- Y
-
-
-
- Select values 4 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 784
- 384
- Y
-
-
-
- Select values 4 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 784
- 480
- Y
-
-
-
- Table input (person_registry)РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
- AND r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_women AS (
- SELECT
- COUNT(*) AS total_women_count
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- )
-)
-SELECT
- 'W' AS gender,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) END AS no_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) END AS one_child,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) END AS two_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) END AS three_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) END AS four_or_more_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_women_count FROM total_women), 0), 2) END AS no_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_women_count FROM total_women), 0), 2) END AS one_child_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_women_count FROM total_women), 0), 2) END AS two_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_women_count FROM total_women), 0), 2) END AS three_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_women_count FROM total_women), 0), 2) END AS four_or_more_children_percent
-FROM
- final_counts;
- 0
-
- N
- Y
- N
-
-
-
- 352
- 480
- Y
-
-
-
- Table input (person_registry)РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
- AND r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- )
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- make_date(year, month, day) > CURRENT_DATE - INTERVAL '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- )
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_men AS (
- SELECT
- COUNT(*) AS total_men_count
- FROM
- public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- )
-)
-SELECT
- 'M' AS gender,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) END AS no_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) END AS one_child,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) END AS two_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) END AS three_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) END AS four_or_more_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) END AS no_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) END AS one_child_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) END AS two_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) END AS three_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_men_count FROM total_men), 0), 2) END AS four_or_more_children_percent
-FROM
- final_counts;
- 0
-
- N
- Y
- N
-
-
-
- 352
- 384
- Y
+ 1216
+ 416
@@ -913,101 +254,70 @@ FROM
none
- ervu_person_registry
- WITH extracted_children AS (
- SELECT
- ri.recruit_id,
- jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
- FROM
- public.recruits_info ri
- JOIN public.recruits r 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 NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-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_18
- FROM
- children_birth_dates
- WHERE
- AGE(make_date(year, month, day)) < interval '18 years'
- GROUP BY
- recruit_id
-),
-final_counts AS (
- SELECT
- COALESCE(children_under_18, 0) AS children_count,
- COUNT(*) AS num_people
- FROM
- public.recruits_info ri
- LEFT JOIN
- children_count cc ON ri.recruit_id = cc.recruit_id
- JOIN public.recruits r ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
- GROUP BY
- COALESCE(children_under_18, 0)
-),
-total_people AS (
- SELECT SUM(num_people) AS total_count
- FROM final_counts
-)
-SELECT
- 'ALL' AS gender,
- '${REG_ID}' as recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) END AS no_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) END AS one_child,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) END AS two_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) END AS three_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) END AS four_or_more_children,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 0 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) END AS no_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 1 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) END AS one_child_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 2 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) END AS two_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count = 3 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) END AS three_children_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(COALESCE(SUM(CASE WHEN children_count >= 4 THEN num_people ELSE 0 END), 0) * 100.0 / NULLIF((SELECT total_count FROM total_people), 0), 2) END AS four_or_more_children_percent
-FROM
- final_counts;
- 0
-
+ ervu-dashboard
N
+ 0
+ SELECT
+ COALESCE(SUM(total_count), 0) total_count,
+ COALESCE(SUM(no_child), 0) no_children,
+ COALESCE(SUM("1_child"), 0) one_child,
+ COALESCE(SUM("2_child"), 0) two_children,
+ COALESCE(SUM("3_child"), 0) three_children,
+ COALESCE(SUM("4_more_child"), 0) four_or_more_children,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(no_child) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) no_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("1_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) one_child_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("2_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) two_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("3_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) three_children_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("4_more_child") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) four_or_more_children_percent,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Organization' AS schema
+FROM total_registered.child_minor
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
Y
- N
-
- 352
- 288
- Y
+ 784
+ 416
diff --git a/mappings/region/total_registered.driver_license(reg).hpl b/mappings/region/total_registered.driver_license(reg).hpl
index a315be7..3902487 100644
--- a/mappings/region/total_registered.driver_license(reg).hpl
+++ b/mappings/region/total_registered.driver_license(reg).hpl
@@ -31,41 +31,11 @@
Insert / update (total_registered.driver_license) 2
Y
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
-
Table input (driver_license) регионы/все
Get variables 3 2
Y
-
- Select values 3 2 2
- Insert / update (total_registered.driver_license) 2 2
- Y
-
-
- Get variables 3 2 2 2
- Select values 3 2 2 2
- Y
-
-
- Table input (person_registry) регионы/мужчины
- Get variables 3 2 2
- Y
-
-
- Select values 3 2 2 2
- Insert / update (total_registered.driver_license) 2 2 2
- Y
-
-
- Table input (person_registry) регионы/женщины
- Get variables 3 2 2 2
- Y
-
Get variables 3 2
@@ -96,74 +66,8 @@
- 672
- 192
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 352
-
-
-
- Get variables 3 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 512
+ 1072
+ 416
@@ -185,99 +89,20 @@
recruitment_id
REG_ID
- total_registered
-
-
- "A"
- a
- Y
-
-
- "B"
- b
- Y
-
-
- "C"
- c
- Y
-
-
- "D"
- d
- Y
-
-
- "E"
- e
- Y
-
-
- nope
- nope
- Y
-
-
- "A_repcent"
- a_percent
- Y
-
-
- "B_repcent"
- b_percent
- Y
-
-
- "C_repcent"
- c_percent
- Y
-
-
- "D_repcent"
- d_percent
- Y
-
-
- "E_repcent"
- e_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- Y
-
-
- 1072
- 192
-
-
-
- Insert / update (total_registered.driver_license) 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
=
- recruitment_id
- REG_ID
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
total_registered
@@ -346,106 +171,27 @@
recruitment_id
N
-
- Y
-
-
- 1072
- 352
-
-
-
- Insert / update (total_registered.driver_license) 2 2 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
- "A"
- a
- Y
-
-
- "B"
- b
- Y
-
-
- "C"
- c
- Y
-
-
- "D"
- d
- Y
-
-
- "E"
- e
- Y
-
-
- nope
- nope
- Y
-
-
- "A_repcent"
- a_percent
- Y
-
-
- "B_repcent"
- b_percent
- Y
-
-
- "C_repcent"
- c_percent
- Y
-
-
- "D_repcent"
- d_percent
- Y
-
-
- "E_repcent"
- e_percent
- Y
-
-
- "all_M_W"
- gender
+ schema
+ schema
N
- recruitment_id
- recruitment_id
+ total_count
+ total
+ Y
+
+
+ convicts
+ convicts
N
Y
- 1072
- 512
+ 1472
+ 416
@@ -498,116 +244,8 @@
- 816
- 192
-
-
-
- Select values 3 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 352
-
-
-
- Select values 3 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 512
+ 1216
+ 416
@@ -621,202 +259,79 @@
none
- ervu_person_registry
+ ervu-dashboard
N
0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'ALL' AS gender,
- '${REG_ID}' AS recruitment_id,
- -- Считаем количество уникальных рекрутов с каждой категорией
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) END AS a,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) END AS b,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) END AS c,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) END AS d,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) END AS e,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) END AS nope,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) END AS total
- FROM categorized r
-)
-SELECT *,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((a * 100.0) / NULLIF(total, 0), 2) END AS a_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((b * 100.0) / NULLIF(total, 0), 2) END AS b_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((c * 100.0) / NULLIF(total, 0), 2) END AS c_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((d * 100.0) / NULLIF(total, 0), 2) END AS d_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((e * 100.0) / NULLIF(total, 0), 2) END AS e_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((nope * 100.0) / NULLIF(total, 0), 2) END AS nope_percent
-FROM aggregated;
+ SELECT
+ COALESCE(SUM(total_count), 0) total,
+ COALESCE(SUM("A"), 0) a,
+ COALESCE(SUM("B"), 0) b,
+ COALESCE(SUM("C"), 0) c,
+ COALESCE(SUM("D"), 0) d,
+ COALESCE(SUM("E"), 0) e,
+ COALESCE(SUM(nope), 0) nope,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("A") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) a_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("B") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) b_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("C") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) c_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("D") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) d_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM("E") / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) e_percent, -- нет такой категории
+ COALESCE(
+ CASE
+ WHEN SUM(total_count) > 0
+ THEN ROUND((SUM(nope) / SUM(total_count) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) nope_percent,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Organization' AS schema
+FROM total_registered.driver_license
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
Y
- 448
- 192
-
-
-
- Table input (person_registry) регионы/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
- AND r.gender = 'FEMALE'
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'W' AS gender,
- '${REG_ID}' as recruitment_id,
- -- Считаем количество уникальных рекрутов с каждой категорией
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) END AS a,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) END AS b,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) END AS c,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) END AS d,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) END AS e,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) END AS nope,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) END AS total
- FROM categorized r
-)
-SELECT *,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((a * 100.0) / NULLIF(total, 0), 2) END AS a_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((b * 100.0) / NULLIF(total, 0), 2) END AS b_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((c * 100.0) / NULLIF(total, 0), 2) END AS c_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((d * 100.0) / NULLIF(total, 0), 2) END AS d_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((e * 100.0) / NULLIF(total, 0), 2) END AS e_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((nope * 100.0) / NULLIF(total, 0), 2) END AS nope_percent
-FROM aggregated;
- Y
-
-
- 432
- 512
-
-
-
- Table input (person_registry) регионы/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH categorized AS (
- SELECT
- r.id,
- r.gender,
- -- Проверяем наличие хотя бы одной категории, используем DISTINCT для уникальных рекрутов
- MAX(CASE WHEN cat->>'kategoriya' like '%A%' THEN 1 ELSE 0 END) AS has_A,
- MAX(CASE WHEN cat->>'kategoriya' like '%B%' THEN 1 ELSE 0 END) AS has_B,
- MAX(CASE WHEN cat->>'kategoriya' like '%C%' THEN 1 ELSE 0 END) AS has_C,
- MAX(CASE WHEN cat->>'kategoriya' like '%D%' THEN 1 ELSE 0 END) AS has_D,
- MAX(CASE WHEN cat->>'kategoriya' like '%E%' THEN 1 ELSE 0 END) AS has_E
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- LEFT JOIN jsonb_array_elements(ri.info->'svedVoditUdost'->'voditUdost'->'svedKat') AS cat ON true
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
- AND r.gender = 'MALE'
- GROUP BY r.id, r.gender
-),
-aggregated AS (
- SELECT
- 'M' AS gender,
- '${REG_ID}' as recruitment_id,
- -- Считаем количество уникальных рекрутов с каждой категорией
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A > 0) END AS a,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_B > 0) END AS b,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_C > 0) END AS c,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_D > 0) END AS d,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_E > 0) END AS e,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) FILTER (WHERE has_A = 0 AND has_B = 0 AND has_C = 0 AND has_D = 0 AND has_E = 0) END AS nope,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COUNT(DISTINCT r.id) END AS total
- FROM categorized r
-)
-SELECT *,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((a * 100.0) / NULLIF(total, 0), 2) END AS a_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((b * 100.0) / NULLIF(total, 0), 2) END AS b_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((c * 100.0) / NULLIF(total, 0), 2) END AS c_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((d * 100.0) / NULLIF(total, 0), 2) END AS d_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((e * 100.0) / NULLIF(total, 0), 2) END AS e_percent,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND((nope * 100.0) / NULLIF(total, 0), 2) END AS nope_percent
-FROM aggregated;
- Y
-
-
- 432
- 352
+ 848
+ 416
diff --git a/mappings/region/total_registered.education_level(reg).hpl b/mappings/region/total_registered.education_level(reg).hpl
index 760bad8..5c923c8 100644
--- a/mappings/region/total_registered.education_level(reg).hpl
+++ b/mappings/region/total_registered.education_level(reg).hpl
@@ -26,16 +26,6 @@
Select values 3 2
Y
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
-
-
- Get variables 3 2 2 2
- Select values 3 2 2 2
- Y
-
Select values 3 2
Insert / update (total_registered.education_level)
@@ -46,26 +36,6 @@
Get variables 3 2
Y
-
- Table input (person_registry) РФ/мужчины
- Get variables 3 2 2
- Y
-
-
- Table input (person_registry) РФ/женщины
- Get variables 3 2 2 2
- Y
-
-
- Select values 3 2 2
- Insert / update (total_registered.education_level) 2
- Y
-
-
- Select values 3 2 2 2
- Insert / update (total_registered.education_level) 3
- Y
-
Get variables 3 2
@@ -96,74 +66,8 @@
- 672
- 192
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 352
-
-
-
- Get variables 3 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- -1
- REG_ID
- -1
- none
- String
-
-
- -1
- VK_ARRAY
- -1
- none
- String
-
-
-
-
- 672
- 512
+ 1456
+ 576
@@ -185,89 +89,20 @@
recruitment_id
REG_ID
- total_registered
-
-
- higher
- higher
- Y
-
-
- average
- average_prof
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- only_general
- only_general
- Y
-
-
- no_data
- count_nodata
- Y
-
-
- higher_percent
- higher_percentage
- Y
-
-
- average_percent
- average_prof_percentage
- Y
-
-
- only_general_percent
- only_general_percentage
- Y
-
-
- no_data_percent
- count_nodata_percentage
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- education_level
- total
- Y
-
-
- Y
-
-
- 1072
- 192
-
-
-
- Insert / update (total_registered.education_level) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
=
- recruitment_id
- REG_ID
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
total_registered
@@ -326,96 +161,22 @@
total
Y
-
- Y
-
-
- 1072
- 352
-
-
-
- Insert / update (total_registered.education_level) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruitment_id
- REG_ID
-
- total_registered
-
- higher
- higher
- Y
-
-
- average
- average_prof
- Y
-
-
- "all_M_W"
- gender
+ schema
+ schema
N
- only_general
- only_general
- Y
-
-
- no_data
- count_nodata
- Y
-
-
- higher_percent
- higher_percentage
- Y
-
-
- average_percent
- average_prof_percentage
- Y
-
-
- only_general_percent
- only_general_percentage
- Y
-
-
- no_data_percent
- count_nodata_percentage
- Y
-
-
- recruitment_id
- recruitment_id
+ convicts
+ convicts
N
-
- education_level
- total
- Y
-
Y
- 1072
- 512
+ 1856
+ 576
@@ -468,116 +229,8 @@
- 816
- 192
-
-
-
- Select values 3 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 352
-
-
-
- Select values 3 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
- 816
- 512
+ 1600
+ 576
@@ -591,428 +244,62 @@
none
- ervu_person_registry
+ ervu-dashboard
N
0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-education_status AS (
- SELECT
- ri.id,
+ SELECT
+ COALESCE(SUM(higher), 0) higher,
+ COALESCE(SUM(average), 0) average_prof,
+ COALESCE(SUM(only_general), 0) only_general,
+ COALESCE(SUM(no_data), 0) count_nodata,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(higher) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) higher_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(average) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) average_prof_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(only_general) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) only_general_percentage,
+ COALESCE(
+ CASE
+ WHEN SUM(education_level) > 0
+ THEN ROUND((SUM(no_data) / SUM(education_level) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) count_nodata_percentage,
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- 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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'ALL' AS gender,
+ COALESCE(SUM(education_level), 0) total,
'${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE only_general END AS only_general,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE count_nodata END AS count_nodata,
- total_count.total,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) END AS higher_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) END AS average_prof_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) END AS only_general_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) END AS count_nodata_percentage
-FROM final_counts, total_count;
+ "all_M_W" AS gender,
+ convicts,
+ 'Organization' AS schema
+FROM total_registered.education_level
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
Y
- 400
- 192
-
-
-
- Table input (person_registry) РФ/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE'
- 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[]
- )
- )
-),
-education_status AS (
- SELECT
- ri.id,
-
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE'
- 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[]
- )
- )
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'W' AS gender,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE only_general END AS only_general,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE count_nodata END AS count_nodata,
- total_count.total,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) END AS higher_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) END AS average_prof_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) END AS only_general_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) END AS count_nodata_percentage
-FROM final_counts, total_count;
- Y
-
-
- 432
- 512
-
-
-
- Table input (person_registry) РФ/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- N
- 0
- WITH total_count AS (
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE'
- 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[]
- )
- )
-),
-education_status AS (
- SELECT
- ri.id,
-
- -- Высшее образование (российское или иностранное)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5')
- )
- ) AS has_higher,
-
- -- Среднее профессиональное образование (если нет высшего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' = '10'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' = '10'
- )
- ) AS has_average_prof,
-
- -- Общее образование (если нет высшего и среднего)
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- AND education->>'kodUrObr' IN ('7', '9')
- )
- ) AS has_only_general,
-
- -- Нет данных об образовании (российское или иностранное)
- (
- NOT (
- (
- EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education
- WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array'
- ) OR EXISTS (
- SELECT 1
- FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education
- WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array'
- )
- )
- ) AND (
- ri.info->'svedRObr'->>'prOtsRObr' = '1'
- OR ri.info->'svedInObr'->>'prOtsInObr' = '1'
- )
- ) AS has_no_data
-
- FROM public.recruits_info ri
- JOIN public.recruits r ON ri.recruit_id = r.id
- WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE'
- 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[]
- )
- )
-),
-final_counts AS (
- SELECT
- COUNT(DISTINCT CASE WHEN has_higher THEN id END) AS higher,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND has_average_prof THEN id END) AS average_prof,
- COUNT(DISTINCT CASE WHEN NOT has_higher AND NOT has_average_prof AND has_only_general THEN id END) AS only_general,
- COUNT(DISTINCT CASE WHEN has_no_data THEN id END) AS count_nodata
- FROM education_status
-)
-SELECT
- 'M' AS gender,
- '${REG_ID}' AS recruitment_id,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE only_general END AS only_general,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE count_nodata END AS count_nodata,
- total_count.total,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) END AS higher_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) END AS average_prof_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) END AS only_general_percentage,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE ROUND(count_nodata * 100.0 / NULLIF(total_count.total, 0), 2) END AS count_nodata_percentage
-FROM final_counts, total_count;
- Y
-
-
- 416
- 352
+ 1184
+ 576
diff --git a/mappings/region/total_registered.marital_status(reg).hpl b/mappings/region/total_registered.marital_status(reg).hpl
index 3ab065e..10fd7a7 100644
--- a/mappings/region/total_registered.marital_status(reg).hpl
+++ b/mappings/region/total_registered.marital_status(reg).hpl
@@ -1,3 +1,4 @@
+
total_registered.marital_status(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -28,46 +26,16 @@
Select values 3 2
Y
-
- Get variables 3 2 2
- Select values 3 2 2
- Y
-
Table input (person_registry) регионы/все
Get variables 3 2
Y
-
- Get variables 3 2 2 2
- Select values 3 2 2 2
- Y
-
-
- Table input (person_registry) регионы/мужчины
- Get variables 3 2 2
- Y
-
-
- Table input (person_registry) регионы/женщины
- Get variables 3 2 2 2
- Y
-
Select values 3 2
Insert / update (total_registered.marital_status)
Y
-
- Select values 3 2 2
- Insert / update (total_registered.marital_status) 2
- Y
-
-
- Select values 3 2 2 2
- Insert / update (total_registered.marital_status) 3
- Y
-
Get variables 3 2
@@ -82,126 +50,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
- 672
- 192
- Y
-
-
-
- Get variables 3 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 672
- 352
- Y
-
-
-
- Get variables 3 2 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 672
- 512
- Y
+ 1344
+ 592
@@ -215,18 +81,31 @@
none
- ervu-dashboard
100
- Y
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ "all_M_W"
+ gender
+
+
+ =
+ convicts
+ convicts
+
total_registered
-
- REG_ID
- recruitment_id
- =
-
-
married
married
@@ -262,147 +141,32 @@
total
Y
+
+ schema
+ schema
+ N
+
+
+ convicts
+ convicts
+ N
+
+
+ other
+ other
+ Y
+
+
+ other_percent
+ other_percent
+ Y
+
-
-
-
- 1072
- 192
- Y
-
-
-
- Insert / update (total_registered.marital_status) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
Y
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- married
- married
- Y
-
-
- not_married
- not_married
- Y
-
-
- married_percent
- married_percent
- Y
-
-
- not_married_percent
- not_married_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- marital_status
- total
- Y
-
-
-
- 1072
- 352
- Y
-
-
-
- Insert / update (total_registered.marital_status) 3
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
- Y
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- married
- married
- Y
-
-
- not_married
- not_married
- Y
-
-
- married_percent
- married_percent
- Y
-
-
- not_married_percent
- not_married_percent
- Y
-
-
- "all_M_W"
- gender
- N
-
-
- recruitment_id
- recruitment_id
- N
-
-
- marital_status
- total
- Y
-
-
-
-
-
- 1072
- 512
- Y
+ 1744
+ 592
@@ -454,123 +218,9 @@
-
- 816
- 192
- Y
-
-
-
- Select values 3 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 816
- 352
- Y
-
-
-
- Select values 3 2 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 816
- 512
- Y
+ 1488
+ 592
@@ -584,262 +234,52 @@
none
- ervu_person_registry
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- )
- END AS not_married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- )
- END AS married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- )
- END AS not_married_percent,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- )
- END AS married_percent,
-
- 'ALL' AS gender,
- '${REG_ID}' AS recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-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 (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- );
-
- 0
-
+ ervu-dashboard
N
- Y
- N
-
-
-
- 448
- 192
- Y
-
-
-
- Table input (person_registry) регионы/женщины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- )
- END AS not_married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- )
- END AS married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- )
- END AS not_married_percent,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- )
- END AS married_percent,
-
- 'W' AS gender,
- '${REG_ID}' AS recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'FEMALE'
- 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[]
- )
- );
-
0
-
- N
+ SELECT
+ COALESCE(SUM(married), 0) married,
+ COALESCE(SUM(not_married), 0) not_married,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(not_married) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_married_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(marital_status) > 0
+ THEN ROUND((SUM(other) / SUM(marital_status) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ COALESCE(SUM(marital_status), 0) total,
+ '${REG_ID}' AS recruitment_id,
+ "all_M_W" AS gender,
+ convicts,
+ 'Organization' AS schema
+FROM total_registered.marital_status
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY "all_M_W", convicts;
Y
- N
-
- 432
- 512
- Y
-
-
-
- Table input (person_registry) регионы/мужчины
- TableInput
-
- Y
-
- 1
-
- none
-
-
- ervu_person_registry
- SELECT
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- )
- END AS not_married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- )
- END AS married,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0
- ELSE COUNT(*)
- END AS total,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('Вдова/Вдовец', 'В разводе')
- OR ri.info->'svedSemPolozh'->'semPolozhNaim' IS NULL
- ) * 100.0 / COUNT(*), 2
- )
- END AS not_married_percent,
-
- CASE
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' OR COUNT(*) = 0 THEN 0
- ELSE ROUND(
- COUNT(*) FILTER (
- WHERE
- ri.info->'svedSemPolozh'->>'semPolozhNaim' IN ('В браке')
- ) * 100.0 / COUNT(*), 2
- )
- END AS married_percent,
-
- 'M' AS gender,
- '${REG_ID}' AS recruitment_id
-
-FROM
- public.recruits r
-JOIN
- public.recruits_info ri ON ri.recruit_id = r.id
-WHERE
- r.vu_current_info->>'isMilitaryRegistered' = 'true'
- AND r.gender = 'MALE'
- 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[]
- )
- );
-
- 0
-
- N
- Y
- N
-
-
-
- 432
- 352
- Y
+ 1120
+ 592
diff --git a/mappings/region/total_registered.reg_mil_cat(reg).hpl b/mappings/region/total_registered.reg_mil_cat(reg).hpl
index 5760a79..e12e146 100644
--- a/mappings/region/total_registered.reg_mil_cat(reg).hpl
+++ b/mappings/region/total_registered.reg_mil_cat(reg).hpl
@@ -1,3 +1,4 @@
+
total_registered.reg_mil_cat(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -33,26 +31,11 @@
Get variables 3
Y
-
- Get variables 3 2
- Select values 3 2
- Y
-
-
- Table input (person_registry) военком 2
- Get variables 3 2
- Y
-
Select values 3
Insert / update (total_registered.reg_mil_cat)
Y
-
- Select values 3 2
- Insert / update (total_registered.reg_mil_cat) 2
- Y
-
Get variables 3
@@ -67,81 +50,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
656
- 288
- Y
-
-
-
- Get variables 3 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 656
- 400
- Y
+ 352
@@ -155,18 +81,26 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ mil_reg
+ mil_reg
+
total_registered
-
- REG_ID
- recruitment_id
- =
-
-
first_reg_17
first_reg_17
@@ -237,115 +171,17 @@
mil_reg
N
+
+ schema
+ schema
+ N
+
-
-
-
- 1056
- 288
- Y
-
-
-
- Insert / update (total_registered.reg_mil_cat) 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- first_reg_17
- first_reg_17
- Y
-
-
- first_reg_18
- first_reg_18
- Y
-
-
- "mil_spec_W"
- mil_spec_w
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- returned_dep_liberty
- returned_dep_liberty
- Y
-
-
- punished
- punished
- Y
-
-
- received_citizenship
- received_citizenship
- Y
-
-
- first_reg_17_percent
- first_reg_17_percent
- Y
-
-
- first_reg_18_percent
- first_reg_18_percent
- Y
-
-
- returned_dep_liberty_percent
- returned_dep_liberty_percent
- Y
-
-
- "mil_spec_W_percent"
- mil_spec_w_percent
- Y
-
-
- punished_percent
- punished_percent
- Y
-
-
- received_citizenship_percent
- received_citizenship_percent
- Y
-
-
- mil_reg
- mil_reg
- N
-
-
-
1056
- 400
- Y
+ 352
@@ -397,182 +233,9 @@
-
800
- 288
- Y
-
-
-
- Select values 3 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 800
- 400
- Y
-
-
-
- Table input (person_registry) военком 2
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.person_registry
- WITH base_data AS (
- -- Основной набор данных
- SELECT
- r.registration_reasons,
- r.gender,
- r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
- 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
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
- ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
- END
- )
- )
-),
-total AS (
- -- Общее количество записей
- SELECT COUNT(*) AS total_count
- FROM base_data
-),
-t1 AS (
- -- Первоначальная постановка 17 лет
- SELECT COUNT(*) AS first_reg_17
- FROM base_data
- WHERE registration_reasons @> '"5"'
-),
-t2 AS (
- -- Первоначальная постановка 18 лет
- SELECT COUNT(*) AS first_reg_18
- FROM base_data
- WHERE registration_reasons @> '"6"'
- OR registration_reasons @> '"3"'
- OR registration_reasons @> '"1"'
- OR registration_reasons @> '"4"'
- OR registration_reasons @> '"2"'
-),
-t3 AS (
- -- Женщины, получившие ВУС
- SELECT COUNT(*) AS mil_spec_w
- FROM base_data
- WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
-),
-t4 AS (
- -- Возвратившиеся из мест лишения свободы
- SELECT COUNT(*) AS returned_dep_liberty
- FROM base_data
- WHERE registration_reasons @> '"1"'
-),
-t5 AS (
- -- Отбывающие наказание в местах лишения свободы
- SELECT COUNT(*) AS punished
- FROM base_data
- WHERE registration_reasons @> '"4"'
-),
-t6 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS received_citizenship
- FROM base_data
- WHERE registration_reasons @> '"2"'
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total.total_count, 0) END AS total_count,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t1.first_reg_17, 0) END AS first_reg_17,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t2.first_reg_18, 0) END AS first_reg_18,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t3.mil_spec_w, 0) END AS mil_spec_w,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t4.returned_dep_liberty, 0) END AS returned_dep_liberty,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t5.punished, 0) END AS punished,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t6.received_citizenship, 0) END AS received_citizenship,
- -- Вычисление процентов
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0) END, 2) AS first_reg_17_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0) END, 2) AS first_reg_18_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0) END, 2) AS returned_dep_liberty_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0) END, 2) AS mil_spec_w_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t5.punished * 100.0 / NULLIF(total.total_count, 0) END, 2) AS punished_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0) END, 2) AS received_citizenship_percent,
- '${REG_ID}' AS recruitment_id,
- 0 AS mil_reg,
- 1 AS org
-FROM total
-FULL OUTER JOIN t1 ON 1 = 1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1;
- 0
-
- N
- Y
- N
-
-
-
- 400
- 400
- Y
+ 352
@@ -586,108 +249,77 @@ FULL OUTER JOIN t6 ON 1 = 1;
none
- postgres.person_registry
- WITH base_data AS (
- -- Основной набор данных
- SELECT
- r.registration_reasons,
- r.gender,
- r.vu_current_info ->> 'isMilitaryRegistered' AS is_military_registered
- 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
- WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
- ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
- END
- )
- )
-),
-total AS (
- -- Общее количество записей
- SELECT COUNT(*) AS total_count
- FROM base_data
-),
-t1 AS (
- -- Первоначальная постановка 17 лет
- SELECT COUNT(*) AS first_reg_17
- FROM base_data
- WHERE registration_reasons @> '"5"'
-),
-t2 AS (
- -- Первоначальная постановка 18 лет
- SELECT COUNT(*) AS first_reg_18
- FROM base_data
- WHERE registration_reasons @> '"6"'
- OR registration_reasons @> '"3"'
- OR registration_reasons @> '"1"'
- OR registration_reasons @> '"4"'
- OR registration_reasons @> '"2"'
-),
-t3 AS (
- -- Женщины, получившие ВУС
- SELECT COUNT(*) AS mil_spec_w
- FROM base_data
- WHERE registration_reasons @> '"3"' AND gender = 'FEMALE'
-),
-t4 AS (
- -- Возвратившиеся из мест лишения свободы
- SELECT COUNT(*) AS returned_dep_liberty
- FROM base_data
- WHERE registration_reasons @> '"1"'
-),
-t5 AS (
- -- Отбывающие наказание в местах лишения свободы
- SELECT COUNT(*) AS punished
- FROM base_data
- WHERE registration_reasons @> '"4"'
-),
-t6 AS (
- -- Получившие гражданство
- SELECT COUNT(*) AS received_citizenship
- FROM base_data
- WHERE registration_reasons @> '"2"'
-)
-SELECT
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total.total_count, 0) END AS total_count,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t1.first_reg_17, 0) END AS first_reg_17,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t2.first_reg_18, 0) END AS first_reg_18,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t3.mil_spec_w, 0) END AS mil_spec_w,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t4.returned_dep_liberty, 0) END AS returned_dep_liberty,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t5.punished, 0) END AS punished,
- CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t6.received_citizenship, 0) END AS received_citizenship,
- -- Вычисление процентов
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t1.first_reg_17 * 100.0 / NULLIF(total.total_count, 0) END, 2) AS first_reg_17_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t2.first_reg_18 * 100.0 / NULLIF(total.total_count, 0) END, 2) AS first_reg_18_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t4.returned_dep_liberty * 100.0 / NULLIF(total.total_count, 0) END, 2) AS returned_dep_liberty_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t3.mil_spec_w * 100.0 / NULLIF(total.total_count, 0) END, 2) AS mil_spec_w_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t5.punished * 100.0 / NULLIF(total.total_count, 0) END, 2) AS punished_percent,
- ROUND(CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE t6.received_citizenship * 100.0 / NULLIF(total.total_count, 0) END, 2) AS received_citizenship_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS mil_reg,
- 1 AS org
-FROM total
-FULL OUTER JOIN t1 ON 1 = 1
-FULL OUTER JOIN t2 ON 1 = 1
-FULL OUTER JOIN t3 ON 1 = 1
-FULL OUTER JOIN t4 ON 1 = 1
-FULL OUTER JOIN t5 ON 1 = 1
-FULL OUTER JOIN t6 ON 1 = 1;
- 0
-
+ ervu-dashboard
N
+ 0
+ SELECT
+ COALESCE(SUM(first_reg_17), 0) first_reg_17,
+ COALESCE(SUM(first_reg_18), 0) first_reg_18,
+ COALESCE(SUM("mil_spec_W"), 0) mil_spec_w,
+ COALESCE(SUM(returned_dep_liberty), 0) returned_dep_liberty,
+ COALESCE(SUM(punished), 0) punished,
+ COALESCE(SUM(received_citizenship), 0) received_citizenship,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_17) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) first_reg_17_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(first_reg_18) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) first_reg_18_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(returned_dep_liberty) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) returned_dep_liberty_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM("mil_spec_W") / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) mil_spec_w_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(punished) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) punished_percent,
+ COALESCE(
+ CASE
+ WHEN (SUM(first_reg_17) + SUM(first_reg_18)) > 0
+ THEN ROUND((SUM(received_citizenship) / (SUM(first_reg_17) + SUM(first_reg_18)) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) received_citizenship_percent,
+ '${REG_ID}'::uuid AS recruitment_id,
+ mil_reg,
+ 'Organization' AS schema
+FROM total_registered.reg_mil_cat
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
Y
- N
-
400
- 288
- Y
+ 352
diff --git a/mappings/region/total_registered.removed_registry(reg).hpl b/mappings/region/total_registered.removed_registry(reg).hpl
index cf82ace..9b0011c 100644
--- a/mappings/region/total_registered.removed_registry(reg).hpl
+++ b/mappings/region/total_registered.removed_registry(reg).hpl
@@ -89,6 +89,11 @@
recruitment_id
REG_ID
+
+ =
+ schema
+ schema
+
total_registered
@@ -118,7 +123,7 @@
living_abroad
- travel_abroad
+ living_abroad
Y
@@ -161,6 +166,11 @@
recruitment_id
N
+
+ schema
+ schema
+ N
+
N
@@ -234,57 +244,75 @@
none
- postgres.decision-document-service
+ ervu-dashboard
N
0
- WITH
-total_info AS (
-SELECT
-COUNT(*) AS removed_registry,
-COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст
-COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть
-COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other,
-ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent,
-ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent,
-ROUND(COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent
-FROM public.recruit AS r
-JOIN public.decision AS d
- ON d.recruit_id = r.id
-JOIN public.decision_type AS dt
- ON dt.id = d.type_id
-WHERE r.system_pgs_status = '1.3'
- AND r.current_recruitment IS NOT NULL
- AND dt.code in ('9','10')
- AND (
- '${VK_ARRAY}' IS NULL
- OR '${VK_ARRAY}' = ''
- OR r.target_recruitment = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ','
- )::uuid[]
- )
- )
-)
-SELECT
-'${REG_ID}' AS recruitment_id,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.removed_registry, 0) END AS removed_registry,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit, 0) END AS age_limit,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death, 0) END AS death,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other, 0) END AS other,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit_percent, 0) END AS age_limit_percent,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death_percent, 0) END AS death_percent,
-CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other_percent, 0) END AS other_percent,
-'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
+ SELECT
+ COALESCE(SUM(age_limit), 0) age_limit,
+ COALESCE(SUM(death), 0) death,
+ COALESCE(SUM(removed_registry), 0) removed_registry,
+ COALESCE(SUM(deprivation_citizenship), 0) deprivation_citizenship,
+ COALESCE(SUM(travel_abroad), 0) travel_abroad,
+ COALESCE(SUM(living_abroad), 0) living_abroad,
+ COALESCE(SUM(other), 0) other,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(deprivation_citizenship) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) deprivation_citizen_percents,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(age_limit) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) age_limit_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(death) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) death_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(travel_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) travel_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(living_abroad) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) living_abroad_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(removed_registry) > 0
+ THEN ROUND((SUM(other) / SUM(removed_registry) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) other_percent,
+ '${REG_ID}' AS recruitment_id,
+ 'Organization' AS schema
+FROM total_registered.removed_registry
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE;
Y
- 400
+ 448
320
diff --git a/mappings/region/total_registered.subpoenas(reg).hpl b/mappings/region/total_registered.subpoenas(reg).hpl
index 6394d93..02a85de 100644
--- a/mappings/region/total_registered.subpoenas(reg).hpl
+++ b/mappings/region/total_registered.subpoenas(reg).hpl
@@ -1,3 +1,4 @@
+
total_registered.subpoenas(reg)
@@ -7,7 +8,6 @@
Normal
0
- /
N
@@ -17,8 +17,6 @@
2024/08/02 11:56:22.507
-
2024/08/02 11:56:22.507
- H4sIAAAAAAAAAAMAAAAAAAAAAAA=
- N
@@ -33,26 +31,11 @@
Get variables 4 2
Y
-
- Get variables 4 2 2
- Select values 4 2 2
- Y
-
-
- Table input (subpoena) регион/не рег
- Get variables 4 2 2
- Y
-
Select values 4 2
Insert / update (total_registered.subpoenas) 3
Y
-
- Select values 4 2 2
- Insert / update (total_registered.subpoenas) 3 2
- Y
-
Get variables 4 2
@@ -67,81 +50,24 @@
- REG_ID
-
- String
-
-
-
-
-1
+ REG_ID
-1
none
+ String
- VK_ARRAY
-
- String
-
-
-
-
-1
+ VK_ARRAY
-1
none
+ String
-
- 464
- 400
- Y
-
-
-
- Get variables 4 2 2
- GetVariable
-
- Y
-
- 1
-
- none
-
-
-
-
- REG_ID
-
- String
-
-
-
-
- -1
- -1
- none
-
-
- VK_ARRAY
-
- String
-
-
-
-
- -1
- -1
- none
-
-
-
-
-
- 464
- 528
- Y
+ 960
+ 496
@@ -155,18 +81,26 @@
none
- ervu-dashboard
100
- N
+ ervu-dashboard
+
+ =
+ recruitment_id
+ REG_ID
+
+
+ =
+ schema
+ schema
+
+
+ =
+ mil_reg
+ mil_reg
+
total_registered
-
- REG_ID
- recruitment_id
- =
-
-
subpoena
count_subpoena
@@ -287,165 +221,17 @@
appear_date_is_good_percent
Y
+
+ schema
+ schema
+ N
+
-
-
-
- 912
- 400
- Y
-
-
-
- Insert / update (total_registered.subpoenas) 3 2
- InsertUpdate
-
- Y
-
- 1
-
- none
-
-
- ervu-dashboard
- 100
N
-
- total_registered
-
-
- REG_ID
- recruitment_id
- =
-
-
-
- subpoena
- count_subpoena
- Y
-
-
- appeared
- count_appeared
- Y
-
-
- average_appeared
- average_appeared
- Y
-
-
- not_appeared
- count_not_appeared
- Y
-
-
- not_ap_good_reason
- count_not_ap_good_reason
- Y
-
-
- introduced_measures
- count_introduced_measures
- Y
-
-
- ap_not_required
- count_ap_not_required
- Y
-
-
- electron
- count_electron
- Y
-
-
- paper
- count_paper
- Y
-
-
- restrictions_applied
- count_restrictions_applied
- Y
-
-
- recruitment_id
- recruitment_id
- N
-
-
- mil_reg
- mil_reg
- N
-
-
- appeared_percent
- appeared_percent
- Y
-
-
- not_appeared_percent
- not_appeared_percent
- Y
-
-
- not_ap_good_reason_percent
- not_ap_good_reason_percent
- Y
-
-
- ap_not_required_percent
- ap_not_required_percent
- Y
-
-
- electron_percent
- electron_percent
- Y
-
-
- paper_percent
- paper_percent
- Y
-
-
- restrictions_applied_percent
- restrictions_applied_percent
- Y
-
-
- introduced_measures_percent
- introduced_measures_percent
- Y
-
-
- count_not_delivery
- count_not_delivery
- Y
-
-
- appear_date_is_good
- appear_date_is_good
- Y
-
-
- not_delivery_percent
- not_delivery_percent
- Y
-
-
- appear_date_is_good_percent
- appear_date_is_good_percent
- Y
-
-
-
- 912
- 528
- Y
+ 1408
+ 496
@@ -497,252 +283,9 @@
-
- 640
- 400
- Y
-
-
-
- Select values 4 2 2
- SelectValues
-
- Y
-
- 1
-
- none
-
-
-
- N
-
- REG_ID
- REG_ID
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
- VK_ARRAY
- VK_ARRAY
- String
- -2
- -2
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
- 640
- 528
- Y
-
-
-
- Table input (subpoena) регион/не рег
- TableInput
-
- Y
-
- 1
-
- none
-
-
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
- WHERE sr.type = '1'
- AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71')
- AND (
- COALESCE('${VK_ARRAY}', '') = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
- ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery
- FROM last_status
- WHERE d_code IS NULL
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
-)
-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,
- ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
- ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
- ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
- ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
- ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 0 AS mil_reg
-FROM t1
-FULL OUTER JOIN t2 ON true
-FULL OUTER JOIN t3 ON true
-FULL OUTER JOIN t4 ON true
-FULL OUTER JOIN t5 ON true
-FULL OUTER JOIN t6 ON true
-FULL OUTER JOIN t7 ON true
-FULL OUTER JOIN t8 ON true
-FULL OUTER JOIN t9 ON true
-FULL OUTER JOIN t10 ON true
-FULL OUTER JOIN t11 ON true
-FULL OUTER JOIN t12 ON true
-FULL OUTER JOIN t13 ON true
-WHERE NOT (
- COALESCE('${VK_ARRAY}', '') = ''
- AND (
- COALESCE(t1.count_subpoena, 0) > 0
- OR COALESCE(t2.average_appeared, 0) > 0
- OR COALESCE(t3.count_appeared, 0) > 0
- OR COALESCE(t4.count_not_appeared, 0) > 0
- OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
- OR COALESCE(t6.count_ap_not_required, 0) > 0
- OR COALESCE(t7.count_restrictions_applied, 0) > 0
- OR COALESCE(t8.count_introduced_measures, 0) > 0
- OR COALESCE(t9.count_paper, 0) > 0
- OR COALESCE(t10.count_electron, 0) > 0
- OR COALESCE(t11.count_restrictions, 0) > 0
- OR COALESCE(t12.count_not_delivery, 0) > 0
- OR COALESCE(t13.appear_date_is_good, 0) > 0
- )
-);
- 0
-
- N
- Y
- N
-
-
-
- 256
- 528
- Y
+ 1136
+ 496
@@ -756,178 +299,117 @@ WHERE NOT (
none
- postgres.subpoena
- WITH subpoena_data AS (
- SELECT
- s.id AS subpoena_id,
- s.status_id,
- sr.type,
- 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,
- ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn
- FROM subpoena s
- JOIN subpoena_history AS sh ON sh.subpoena_id = s.id
- JOIN subpoena_status AS ss ON ss.id = s.status_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 restriction_document AS rd ON rd.subpoena_id = s.id
- LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id
- LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id
- WHERE sr.type != '1'
- AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71')
- AND (
- COALESCE('${VK_ARRAY}', '') = ''
- OR s.department_id = ANY (
- string_to_array(
- trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')),
- ','
- )::uuid[]
- )
- )
-),
-last_status AS (
- SELECT *
- FROM subpoena_data
- WHERE rn = 1
-),
-t1 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_subpoena
- FROM last_status
- WHERE sub_stat_hist IS NOT NULL
-),
-t2 AS (
- SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t3 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_appeared
- FROM last_status
- WHERE sub_stat_hist IN ('4.1', '4.2', '4')
-),
-t4 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared
- FROM last_status
- WHERE sub_stat_hist = '5'
-),
-t5 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_ap_good_reason
- FROM last_status
- WHERE sub_stat_hist = '5.1'
-),
-t6 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_ap_not_required
- FROM last_status
- WHERE sub_stat_hist IN ('3.8', '5.2')
-),
-t7 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_restrictions_applied
- FROM last_status
- WHERE restr_dc IS NULL
-),
-t8 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_introduced_measures
- FROM last_status
- WHERE restr_dc IS NULL AND ap_date IS NOT NULL
-),
-t9 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_paper
- FROM last_status
- WHERE d_code != '7'
-),
-t10 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_electron
- FROM last_status
- WHERE d_code = '7'
-),
-t11 AS (
- SELECT COUNT (DISTINCT rdi_id) AS count_restrictions
- FROM last_status
-),
-t12 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery
- FROM last_status
- WHERE d_code IS NULL
-),
-t13 AS (
- SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good
- FROM last_status
- WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1')
-)
-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,
- ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent,
- ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent,
- ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent,
- ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent,
- ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent,
- ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent,
- ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent,
- ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent,
- ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent,
- ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent,
- '${REG_ID}' AS recruitment_id,
- 1 AS org,
- 1 AS mil_reg
-FROM t1
-FULL OUTER JOIN t2 ON true
-FULL OUTER JOIN t3 ON true
-FULL OUTER JOIN t4 ON true
-FULL OUTER JOIN t5 ON true
-FULL OUTER JOIN t6 ON true
-FULL OUTER JOIN t7 ON true
-FULL OUTER JOIN t8 ON true
-FULL OUTER JOIN t9 ON true
-FULL OUTER JOIN t10 ON true
-FULL OUTER JOIN t11 ON true
-FULL OUTER JOIN t12 ON true
-FULL OUTER JOIN t13 ON true
-WHERE NOT (
- COALESCE('${VK_ARRAY}', '') = ''
- AND (
- COALESCE(t1.count_subpoena, 0) > 0
- OR COALESCE(t2.average_appeared, 0) > 0
- OR COALESCE(t3.count_appeared, 0) > 0
- OR COALESCE(t4.count_not_appeared, 0) > 0
- OR COALESCE(t5.count_not_ap_good_reason, 0) > 0
- OR COALESCE(t6.count_ap_not_required, 0) > 0
- OR COALESCE(t7.count_restrictions_applied, 0) > 0
- OR COALESCE(t8.count_introduced_measures, 0) > 0
- OR COALESCE(t9.count_paper, 0) > 0
- OR COALESCE(t10.count_electron, 0) > 0
- OR COALESCE(t11.count_restrictions, 0) > 0
- OR COALESCE(t12.count_not_delivery, 0) > 0
- OR COALESCE(t13.appear_date_is_good, 0) > 0
- )
-);
- 0
-
+ ervu-dashboard
N
+ 0
+ SELECT
+ COALESCE(SUM(subpoena), 0) count_subpoena,
+ COALESCE(SUM(appeared), 0) count_appeared,
+ COALESCE(SUM(average_appeared), 0) average_appeared,
+ COALESCE(SUM(not_appeared), 0) count_not_appeared,
+ COALESCE(SUM(not_ap_good_reason), 0) count_not_ap_good_reason,
+ COALESCE(SUM(introduced_measures), 0) count_introduced_measures,
+ COALESCE(SUM(ap_not_required), 0) count_ap_not_required,
+ COALESCE(SUM(electron), 0) count_electron,
+ COALESCE(SUM(paper), 0) count_paper,
+ COALESCE(SUM(restrictions_applied), 0) count_restrictions_applied,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_appeared) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_appeared_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(not_ap_good_reason) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_ap_good_reason_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(ap_not_required) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) ap_not_required_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(electron) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) electron_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(paper) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) paper_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(restrictions_applied) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) restrictions_applied_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(introduced_measures) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) introduced_measures_percent,
+
+ COALESCE(SUM(count_not_delivery), 0) count_not_delivery,
+ COALESCE(SUM(appear_date_is_good), 0) appear_date_is_good,
+
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(count_not_delivery) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) not_delivery_percent,
+ COALESCE(
+ CASE
+ WHEN SUM(subpoena) > 0
+ THEN ROUND((SUM(appear_date_is_good) / SUM(subpoena) * 100), 2)
+ ELSE 0
+ END,
+ 0
+ ) appear_date_is_good_percent,
+ '${REG_ID}' AS recruitment_id,
+ mil_reg,
+ 'Organization' AS schema
+FROM total_registered.subpoenas
+WHERE recruitment_id = ANY ('${VK_ARRAY}')
+AND schema IN ('Department', 'REG_LVL')
+AND recording_date = CURRENT_DATE
+GROUP BY mil_reg;
Y
- N
-
- 256
- 400
- Y
+ 752
+ 496
diff --git a/mappings/supportive_jobs/clearing_logs.hwf b/mappings/supportive_jobs/clearing_logs.hwf
new file mode 100644
index 0000000..2049b82
--- /dev/null
+++ b/mappings/supportive_jobs/clearing_logs.hwf
@@ -0,0 +1,83 @@
+
+
+ clearing_logs
+ Y
+
+
+
+ -
+ 2025/03/18 11:52:48.920
+ -
+ 2025/03/18 11:52:48.920
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 512
+ 320
+
+
+
+ SQL, зачистка таблиц логов workflow_logs, channel_log
+
+ SQL
+
+ ervu-dashboard
+ N
+ DELETE FROM public.channel_log
+WHERE log_date < DATE_TRUNC('day', CURRENT_DATE) - INTERVAL '4 days';
+
+DELETE FROM public.workflow_logs
+WHERE workflowstart < DATE_TRUNC('day', CURRENT_DATE) - INTERVAL '4 days';
+
+ N
+ N
+ N
+ 816
+ 320
+
+
+
+ Success
+
+ SUCCESS
+
+ N
+ 1184
+ 320
+
+
+
+
+
+ Start
+ SQL, зачистка таблиц логов workflow_logs, channel_log
+ Y
+ Y
+ Y
+
+
+ SQL, зачистка таблиц логов workflow_logs, channel_log
+ Success
+ Y
+ Y
+ N
+
+
+
+
+
+
diff --git a/mappings/supportive_jobs/percent_for_waiting_reg.hpl b/mappings/supportive_jobs/percent_for_waiting_reg.hpl
new file mode 100644
index 0000000..713d101
--- /dev/null
+++ b/mappings/supportive_jobs/percent_for_waiting_reg.hpl
@@ -0,0 +1,111 @@
+
+
+
+ percent_for_waiting_reg
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/03/24 11:56:18.982
+ -
+ 2025/03/24 11:56:18.982
+
+
+
+
+
+ Table input
+ Update
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ current_date AS recording_date,
+ wr.recruitment_id,
+ wr.schema,
+ COALESCE(ROUND(wr.waiting_registration * 100 / NULLIF ((wr.waiting_registration + tr.total_registered), 0), 2), 0) AS waiting_registration_percent--,
+ --wr.waiting_registration,
+ --tr.total_registered
+FROM main_dashboard.waiting_registration wr
+LEFT JOIN main_dashboard.total_registered tr
+ ON wr.recruitment_id = tr.recruitment_id AND tr.convicts = 'ALL'
+ AND wr.schema = tr.schema
+ AND wr.recording_date = tr.recording_date
+WHERE wr.recording_date = current_date
+ N
+
+
+ 528
+ 288
+
+
+
+ Update
+ Update
+
+ Y
+
+ 1
+
+ none
+
+
+ 100
+ ervu-dashboard
+ Y
+
+
+ =
+ recruitment_id
+ recruitment_id
+
+
+ =
+ recording_date
+ recording_date
+
+
+ =
+ schema
+ schema
+
+ main_dashboard
+
+
+ waiting_registration_percent
+ waiting_registration_percent
+
+
+ N
+ Y
+
+
+ 992
+ 288
+
+
+
+
+
+