diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow.hpl
new file mode 100644
index 0000000..cd730ef
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow.hpl
@@ -0,0 +1,362 @@
+
+
+
+ education_constants_flow
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/21 20:19:05.913
+ -
+ 2025/09/21 20:19:05.913
+
+
+
+
+
+ education_level_input
+ education_level_output
+ Y
+
+
+ minprosv_speciality_input
+ minprosv_speciality_output
+ Y
+
+
+ minobr_speciality_input
+ minobr_speciality_output
+ Y
+
+
+ educational_institution_status_input
+ educational_institution_status_output
+ Y
+
+
+
+ education_level_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationLevel';
+ N
+
+
+ 368
+ 208
+
+
+
+ education_level_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 208
+
+
+
+ educational_institution_status_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ key,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'organizationStatus';
+ N
+
+
+ 368
+ 304
+
+
+
+ educational_institution_status_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ educational_institution_status
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 304
+
+
+
+ minobr_speciality_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ value -> 'extraInfo' ->> 'kodSpecz' as code,
+ value -> 'extraInfo' ->> 'naimSpecz' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationSpecialityMinobr'
+ AND value -> 'extraInfo' ->> 'kodSpecz' != 'null';
+ N
+
+
+ 368
+ 400
+
+
+
+ minobr_speciality_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ minobr_education_speciality
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 400
+
+
+
+ minprosv_speciality_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ key,
+ value -> 'extraInfo' ->> 'kodSpecz' as code,
+ value -> 'extraInfo' ->> 'naimSpecz' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationSpecialityMinprosv'
+ AND value -> 'extraInfo' ->> 'kodSpecz' != 'null';
+ N
+
+
+ 368
+ 496
+
+
+
+ minprosv_speciality_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ minprosv_education_speciality
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 496
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow_repeat.hpl
new file mode 100644
index 0000000..ebffbdf
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow_repeat.hpl
@@ -0,0 +1,508 @@
+
+
+
+ education_constants_flow_repeat
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/21 20:33:27.321
+ -
+ 2025/09/21 20:33:27.321
+
+
+
+
+
+ get_max_education_level_update_date
+ education_level_input
+ Y
+
+
+ get_max_educational_institution_status_update_date
+ educational_institution_status_input
+ Y
+
+
+ get_max_minobr_speciality_update_date
+ minobr_speciality_input
+ Y
+
+
+ get_max_minprosv_speciality_update_date
+ minprosv_speciality_input
+ Y
+
+
+ education_level_input
+ education_level_upsert
+ Y
+
+
+ educational_institution_status_input
+ educational_institution_status_upsert
+ Y
+
+
+ minobr_speciality_input
+ minobr_speciality_upsert
+ Y
+
+
+ minprosv_speciality_input
+ minprosv_speciality_upsert
+ Y
+
+
+
+ education_level_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_education_level_update_date
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationLevel'
+AND updated_at > ?;
+ N
+
+
+ 480
+ 256
+
+
+
+ education_level_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+
+ <>
+ actual
+ actual
+
+
+ ervu_dashboard
+
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 768
+ 256
+
+
+
+ educational_institution_status_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_educational_institution_status_update_date
+ SELECT
+ key,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'organizationStatus'
+AND updated_at > ?;
+ N
+
+
+ 480
+ 352
+
+
+
+ educational_institution_status_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+ <>
+ actual
+ actual
+
+ ervu_dashboard
+ educational_institution_status
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 768
+ 352
+
+
+
+ get_max_education_level_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM education_level;
+
+ N
+
+
+ 128
+ 256
+
+
+
+ get_max_educational_institution_status_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM educational_institution_status;
+
+ N
+
+
+ 128
+ 352
+
+
+
+ get_max_minobr_speciality_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM minobr_education_speciality;
+
+ N
+
+
+ 128
+ 448
+
+
+
+ get_max_minprosv_speciality_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM minprosv_education_speciality
+
+ N
+
+
+ 128
+ 544
+
+
+
+ minobr_speciality_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_minobr_speciality_update_date
+ SELECT
+ value -> 'extraInfo' ->> 'kodSpecz' as code,
+ value -> 'extraInfo' ->> 'naimSpecz' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationSpecialityMinobr'
+ AND value -> 'extraInfo' ->> 'kodSpecz' != 'null'
+AND updated_at > ?;
+ N
+
+
+ 480
+ 448
+
+
+
+ minobr_speciality_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+ <>
+ actual
+ actual
+
+ ervu_dashboard
+ minobr_education_speciality
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 768
+ 448
+
+
+
+ minprosv_speciality_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_minprosv_speciality_update_date
+ SELECT
+ key,
+ value -> 'extraInfo' ->> 'kodSpecz' as code,
+ value -> 'extraInfo' ->> 'naimSpecz' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationSpecialityMinprosv'
+ AND value -> 'extraInfo' ->> 'kodSpecz' != 'null'
+AND updated_at > ?;
+ N
+
+
+ 480
+ 544
+
+
+
+ minprosv_speciality_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+ <>
+ actual
+ actual
+
+ ervu_dashboard
+ minprosv_education_speciality
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 768
+ 544
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/support/check_if_constants_exists.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/support/check_if_constants_exists.hpl
new file mode 100644
index 0000000..906090d
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/constants/support/check_if_constants_exists.hpl
@@ -0,0 +1,88 @@
+
+
+
+ check_if_constants_exists
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/21 20:58:53.188
+ -
+ 2025/09/21 20:58:53.188
+
+
+
+
+
+ Table input
+ Set variables
+ Y
+
+
+
+ Set variables
+ SetVariable
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+ constasnts_exists
+ CONSTANTS_EXISTS
+ PARENT_WORKFLOW
+
+
+ Y
+
+
+ 608
+ 304
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT EXISTS (
+ SELECT 1 FROM education_level
+ UNION ALL
+ SELECT 1 FROM educational_institution_status
+ UNION ALL
+ SELECT 1 FROM minobr_education_speciality
+ UNION ALL
+ SELECT 1 FROM minprosv_education_speciality
+) AS constasnts_exists
+ Y
+
+
+ 320
+ 304
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/educational_institution_learning_job.hwf b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/educational_institution_learning_job.hwf
new file mode 100644
index 0000000..405c135
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/educational_institution_learning_job.hwf
@@ -0,0 +1,410 @@
+
+
+ educational_institution_learning_job
+ Y
+
+
+
+ -
+ 2025/08/27 21:14:40.330
+ -
+ 2025/08/27 21:14:40.330
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 384
+ 288
+
+
+
+ check_if_job_execution_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_job_execution_exists.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1392
+ 304
+
+
+
+ employer_job_execution_exists_check
+
+ SIMPLE_EVAL
+
+ boolean
+ false
+ equal
+ equal
+ N
+ variable
+ JOB_EXECUTED_FLAG
+ N
+ 1696
+ 304
+
+
+
+ recruitment_five_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1968
+ 304
+
+
+
+ recruitment_five_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1968
+ 608
+
+
+
+ check_if_need_to_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_need_to_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1696
+ 448
+
+
+
+ Simple evaluation
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ NEED_TO_REPEAT_JOB
+ N
+ 1696
+ 608
+
+
+
+ recruitment_five_flow_delta.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_delta.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1696
+ 800
+
+
+
+ check_if_constants_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/constants/support/check_if_constants_exists.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 576
+ 288
+
+
+
+ constants_exists
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ CONSTANTS_EXISTS
+ N
+ 752
+ 288
+
+
+
+ education_constants_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 944
+ 208
+
+
+
+ education_constants_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/constants/education_constants_flow_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 944
+ 384
+
+
+
+ init_job_name
+
+ SET_VARIABLES
+
+
+
+ JOB_NAME
+ CURRENT_WORKFLOW
+ educational_institution_learning_job
+
+
+ CURRENT_WORKFLOW
+ N
+ N
+ 1184
+ 304
+
+
+
+
+
+ check_if_job_execution_exists.hpl
+ employer_job_execution_exists_check
+ Y
+ Y
+ N
+
+
+ employer_job_execution_exists_check
+ check_if_need_to_repeat.hpl
+ Y
+ N
+ N
+
+
+ check_if_need_to_repeat.hpl
+ Simple evaluation
+ Y
+ Y
+ N
+
+
+ check_if_constants_exists.hpl
+ constants_exists
+ Y
+ Y
+ N
+
+
+ constants_exists
+ education_constants_flow.hpl
+ Y
+ N
+ N
+
+
+ constants_exists
+ education_constants_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ check_if_constants_exists.hpl
+ Y
+ Y
+ Y
+
+
+ education_constants_flow.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ education_constants_flow_repeat.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ init_job_name
+ check_if_job_execution_exists.hpl
+ Y
+ Y
+ N
+
+
+ employer_job_execution_exists_check
+ recruitment_five_flow.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_delta.hpl
+ Y
+ N
+ N
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
new file mode 100644
index 0000000..8bc8c1b
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
@@ -0,0 +1,1022 @@
+
+
+
+ citizen_education_flow
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/08/28 08:20:00.808
+ -
+ 2025/08/28 08:20:00.808
+
+
+
+
+
+ Change job status on error
+ Abort
+ Y
+
+
+ Create job execution record
+ education_input
+ Y
+
+
+ Filter rows
+ Change job status on success
+ Y
+
+
+ Identify last row in a stream
+ Detect empty stream
+ Y
+
+
+ Identify last row in a stream
+ Filter_null_parental_leave_dates
+ Y
+
+
+ education_input
+ Identify last row in a stream
+ Y
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+
+ citizen_education_output
+ Filter rows
+ Y
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+
+ Filter_null_parental_leave_dates
+ Block until transforms finish
+ Y
+
+
+ Block until transforms finish
+ education_leave_output
+ Y
+
+
+ Identify last row in a stream
+ Group by
+ Y
+
+
+ Group by
+ citizen_education_output
+ Y
+
+
+ Detect empty stream
+ Change job status on success
+ Y
+
+
+
+ Abort
+ Abort
+
+ Y
+
+ 1
+
+ none
+
+
+ ABORT
+ Y
+ 0
+
+
+ 1488
+ 640
+
+
+
+ Block until transforms finish
+ BlockUntilTransformsFinish
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ citizen_education_output
+
+
+
+
+ 880
+ 640
+
+
+
+ Change job status on error
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ error_description
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ Y
+ N
+ UPDATE etl.job_execution
+SET status = 'ERROR',
+ error_description = ?
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1264
+ 640
+
+
+
+ Change job status on success
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ N
+ N
+ UPDATE etl.job_execution
+SET status = 'SUCCESS'
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1488
+ 256
+
+
+
+ Create job execution record
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ INSERT INTO etl.job_execution (id, job_name, status, execution_datetime, error_description, recruitment_id)
+VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
+
+
+
+
+ 208
+ 432
+
+
+
+ Detect empty stream
+ DetectEmptyStream
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 624
+ 256
+
+
+
+ Filter rows
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ =
+ last_row
+ N
+ -
+
+ N
+ -1
+ constant
+ -1
+ Y
+ Boolean
+
+
+
+ Change job status on success
+
+
+ 1488
+ 432
+
+
+
+ Filter_null_parental_leave_dates
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ IS NOT NULL
+ academ_reason
+ N
+ -
+
+
+ Block until transforms finish
+
+
+ 624
+ 640
+
+
+
+ Group by
+ GroupBy
+
+ Y
+
+ 1
+
+ none
+
+
+ N
+ N
+ ${java.io.tmpdir}
+
+
+ recruit_id
+ recruit_id
+ FIRST_INCL_NULL
+
+
+ source_update_date
+ source_update_date
+ FIRST_INCL_NULL
+
+
+ educational_institution_type
+ educational_institution_type
+ FIRST_INCL_NULL
+
+
+ org_type
+ org_type
+ FIRST_INCL_NULL
+
+
+ inn
+ inn
+ FIRST_INCL_NULL
+
+
+ kpp
+ kpp
+ FIRST_INCL_NULL
+
+
+ ogrn
+ ogrn
+ FIRST_INCL_NULL
+
+
+ educational_institution_address
+ educational_institution_address
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+ FIRST_INCL_NULL
+
+
+ student_status
+ student_status
+ FIRST_INCL_NULL
+
+
+ grade_number
+ grade_number
+ FIRST_INCL_NULL
+
+
+ education_level_code
+ education_level_code
+ FIRST_INCL_NULL
+
+
+ admission_date
+ admission_date
+ FIRST_INCL_NULL
+
+
+ enrollment_date
+ enrollment_date
+ FIRST_INCL_NULL
+
+
+ enrollment_order_number
+ enrollment_order_number
+ FIRST_INCL_NULL
+
+
+ enrollment_order_date
+ enrollment_order_date
+ FIRST_INCL_NULL
+
+
+ completion_date
+ completion_date
+ FIRST_INCL_NULL
+
+
+ education_form
+ education_form
+ FIRST_INCL_NULL
+
+
+ education_program_start_date
+ education_program_start_date
+ FIRST_INCL_NULL
+
+
+ education_start_date
+ education_start_date
+ FIRST_INCL_NULL
+
+
+ planned_completion_date
+ planned_completion_date
+ FIRST_INCL_NULL
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ FIRST_INCL_NULL
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ FIRST_INCL_NULL
+
+
+ recovery_info
+ recovery_info
+ FIRST_INCL_NULL
+
+
+ recovery_date
+ recovery_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_date
+ recovery_order_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_number
+ recovery_order_number
+ FIRST_INCL_NULL
+
+
+ expulsion_info
+ expulsion_info
+ FIRST_INCL_NULL
+
+
+ expulsion_date
+ expulsion_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_date
+ expulsion_order_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_number
+ expulsion_order_number
+ FIRST_INCL_NULL
+
+
+ academical_leave_info
+ academical_leave_info
+ FIRST_INCL_NULL
+
+
+ first_education
+ first_education
+ FIRST_INCL_NULL
+
+
+ vus_spec
+ vus_spec
+ FIRST_INCL_NULL
+
+
+ military_center_education_info
+ military_center_education_info
+ FIRST_INCL_NULL
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_period
+ military_center_education_period
+ FIRST_INCL_NULL
+
+
+ military_center_completion
+ military_center_completion
+ FIRST_INCL_NULL
+
+
+ military_department_education_info
+ military_department_education_info
+ FIRST_INCL_NULL
+
+
+ military_department_start_date
+ military_department_start_date
+ FIRST_INCL_NULL
+
+
+ military_department_end_date
+ military_department_end_date
+ FIRST_INCL_NULL
+
+
+ last_row
+ last_row
+ LAST_INCL_NULL
+
+
+ academ_start_date
+ academ_start_date
+ FIRST_INCL_NULL
+
+
+ academ_end_date
+ academ_end_date
+ FIRST_INCL_NULL
+
+
+ academ_reason
+ academ_reason
+ FIRST_INCL_NULL
+
+
+ N
+
+
+ source_id
+
+
+ N
+ grp
+
+
+ 944
+ 432
+
+
+
+ Identify last row in a stream
+ DetectLastRow
+
+ N
+
+ 1
+
+ none
+
+
+ last_row
+
+
+ 624
+ 432
+
+
+
+ citizen_education_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ source_id
+ source_id
+
+
+ recruit_id
+ recruit_id
+
+
+ source_update_date
+ source_update_date
+
+
+ educational_institution_type
+ educational_institution_type
+
+
+ org_type
+ org_type
+
+
+ inn
+ inn
+
+
+ kpp
+ kpp
+
+
+ ogrn
+ ogrn
+
+
+ educational_institution_address
+ educational_institution_address
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+
+
+ student_status
+ student_status
+
+
+ grade_number
+ grade_number
+
+
+ education_level_code
+ education_level_code
+
+
+ admission_date
+ admission_date
+
+
+ enrollment_date
+ enrollment_date
+
+
+ enrollment_order_number
+ enrollment_order_number
+
+
+ enrollment_order_date
+ enrollment_order_date
+
+
+ completion_date
+ completion_date
+
+
+ education_form
+ education_form
+
+
+ education_program_start_date
+ education_program_start_date
+
+
+ education_start_date
+ education_start_date
+
+
+ planned_completion_date
+ planned_completion_date
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+
+
+ recovery_info
+ recovery_info
+
+
+ recovery_date
+ recovery_date
+
+
+ recovery_order_date
+ recovery_order_date
+
+
+ recovery_order_number
+ recovery_order_number
+
+
+ expulsion_info
+ expulsion_info
+
+
+ expulsion_date
+ expulsion_date
+
+
+ expulsion_order_date
+ expulsion_order_date
+
+
+ expulsion_order_number
+ expulsion_order_number
+
+
+ academical_leave_info
+ academical_leave_info
+
+
+ first_education
+ first_education
+
+
+ vus_spec
+ vus_spec
+
+
+ military_center_education_info
+ military_center_education_info
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+
+
+ military_center_education_period
+ military_center_education_period
+
+
+ military_center_completion
+ military_center_completion
+
+
+ military_department_education_info
+ military_department_education_info
+
+
+ military_department_start_date
+ military_department_start_date
+
+
+ military_department_end_date
+ military_department_end_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ educational_institution_learning
+ N
+ Y
+ N
+ Y
+
+
+ 1264
+ 432
+
+
+
+ education_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ WITH filteredData AS (SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Образовательная организация высшего образования' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Профессиональная образовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Общеобразовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}')
+SELECT fd.recruit_id,
+ education_elem ->> 'id' AS source_id,
+ to_date(education_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ educational_institution_type,
+ education_elem -> 'svedOrg' ->> 'naimTipOrg' as org_type,
+ education_elem -> 'svedOrg' ->> 'inn' as inn,
+ education_elem -> 'svedOrg' ->> 'kpp' as kpp,
+ coalesce(education_elem -> 'svedOrg' ->> 'ogrn', education_elem -> 'svedOrg' ->>
+ 'ogrnip') as ogrn,
+ education_elem -> 'svedOrg' ->> 'adresOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'statusOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'vidPodrazdOrg' as educational_organization_separate_unit_type,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'adresPodrazdOrg' as educational_organization_separate_unit_address,
+ education_elem ->> 'naimStatus' as student_status,
+ case
+ when educational_institution_type = 'Образовательная организация высшего образования'
+ then education_elem ->> 'nomerKursa'
+ when educational_institution_type = 'Профессиональная образовательная организация'
+ then education_elem -> 'extend' ->> 'klass'
+ when educational_institution_type = 'Общеобразовательная организация' then education_elem ->> 'klass'
+ end as grade_number,
+ education_elem ->> 'kodUrovObr' as education_level_code,
+ to_date(coalesce(education_elem -> 'extend' ->> 'dataPostup', education_elem ->> 'dataPostup'),
+ 'YYYY-MM-DD') as admission_date,
+ to_date(education_elem ->> 'dataZachisl', 'YYYY-MM-DD') as enrollment_date,
+ education_elem ->> 'nomPrikazZachisl' as enrollment_order_number,
+ to_date(education_elem ->> 'dataPrikazZachisl', 'YYYY-MM-DD') as enrollment_order_date,
+ to_date(coalesce(education_elem -> 'extend' ->> 'dataZavershObuch', education_elem ->> 'dataOkonch'),
+ 'YYYY-MM-DD') as completion_date,
+ education_elem -> 'svedObrProg' ->> 'naimFormaObuch' as education_form,
+ education_elem -> 'svedObrProg' ->> 'dataNachObuch' as education_program_start_date,
+ to_date(education_elem -> 'extend' ->> 'dataNachObuch', 'YYYY-MM-DD') as education_start_date,
+ to_date(coalesce(education_elem -> 'svedObrProg' ->> 'planDataOkonch', education_elem ->> 'dataOzhid'),
+ 'YYYY-MM-DD') as planned_completion_date,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ coalesce(education_elem ->> 'svedVosst' <> 'null', false) as recovery_info,
+ to_date(education_elem -> 'svedVosst' ->> 'dataVosst', 'YYYY-MM-DD') as recovery_date,
+ to_date(education_elem -> 'svedVosst' ->> 'dataPrikazVosst',
+ 'YYYY-MM-DD') as recovery_order_date,
+ education_elem -> 'svedVosst' ->> 'nomPrikazVosst' as recovery_order_number,
+ coalesce(education_elem ->> 'svedOtchisl' <> 'null', false) as expulsion_info,
+ to_date(education_elem -> 'svedOtchisl' ->> 'dataOtchisl', 'YYYY-MM-DD') as expulsion_date,
+ to_date(education_elem -> 'svedOtchisl' ->> 'dataPrikazOtchisl',
+ 'YYYY-MM-DD') as expulsion_order_date,
+ education_elem -> 'svedOtchisl' ->> 'nomPrikazOtchisl' as expulsion_order_number,
+ coalesce(education_elem ->> 'svedOtpusk' <> 'null', false) as academical_leave_info,
+ coalesce(education_elem ->> 'prPervObuch' = '1', false) as first_education,
+ coalesce(education_elem -> 'svedObrProg' ->> 'prVUSpecz' = '1', false) as vus_spec,
+ coalesce(education_elem ->> 'svedVoenObuch' <> 'null', false) as military_center_education_info,
+ to_date(education_elem -> 'svedVoenObuch' ->> 'dataNach', 'YYYY-MM-DD') as military_center_education_start_date,
+ to_date(education_elem -> 'svedVoenObuch' ->> 'dataOkonch',
+ 'YYYY-MM-DD') as military_center_education_end_date,
+ education_elem -> 'svedVoenObuch' -> 'extend' ->> 'srokObuch' as military_center_education_period,
+ coalesce(education_elem -> 'svedVoenObuch' -> 'extend' ->> 'svedUspeshZaverObuch' = '1',
+ false) as military_center_completion,
+ coalesce(education_elem -> 'extend' ->> 'svedVoenKaf' <> 'null', false) as military_department_education_info,
+ to_date(education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataNach',
+ 'YYYY-MM-DD') as military_department_start_date,
+ to_date(education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataOkonch',
+ 'YYYY-MM-DD') as military_department_end_date,
+ to_date(academ_elem ->> 'dataNach', 'YYYY-MM-DD') as academ_start_date,
+ to_date(academ_elem ->> 'dataOkonch', 'YYYY-MM-DD') as academ_end_date,
+ academ_elem -> 'naimPrichOtpusk' as academ_reason
+FROM filteredData fd
+ORDER BY source_id;
+ Y
+
+
+ 432
+ 432
+
+
+
+ education_leave_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ start_date
+ academ_start_date
+
+
+ end_date
+ academ_end_date
+
+
+ reason
+ academ_reason
+
+
+ citizen_education_source_id
+ source_id
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+
+ N
+ Y
+ N
+ Y
+
+
+ 1088
+ 640
+
+
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
new file mode 100644
index 0000000..cb2ca00
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
@@ -0,0 +1,1028 @@
+
+
+
+ citizen_education_flow_delta
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/08/28 21:27:15.946
+ -
+ 2025/08/28 21:27:15.946
+
+
+
+
+
+ Block until transforms finish
+ education_leave_output
+ Y
+
+
+ Change job status on error
+ Abort
+ Y
+
+
+ Create job execution record
+ education_input
+ Y
+
+
+ Filter rows
+ Change job status on success
+ Y
+
+
+ Filter_null_parental_leave_dates
+ Block until transforms finish
+ Y
+
+
+ Group by
+ citizen_education_output
+ Y
+
+
+ Identify last row in a stream
+ Detect empty stream
+ Y
+
+
+ Identify last row in a stream
+ Filter_null_parental_leave_dates
+ Y
+
+
+ Identify last row in a stream
+ Group by
+ Y
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+
+ citizen_education_output
+ Filter rows
+ Y
+
+
+ education_input
+ Identify last row in a stream
+ Y
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+
+ Detect empty stream
+ Change job status on success
+ Y
+
+
+
+ Abort
+ Abort
+
+ Y
+
+ 1
+
+ none
+
+
+ ABORT
+ Y
+ 0
+
+
+ 1696
+ 672
+
+
+
+ Block until transforms finish
+ BlockUntilTransformsFinish
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ citizen_education_output
+
+
+
+
+ 1088
+ 672
+
+
+
+ Change job status on error
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ error_description
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ Y
+ N
+ UPDATE etl.job_execution
+SET status = 'ERROR',
+ error_description = ?
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1472
+ 672
+
+
+
+ Change job status on success
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ N
+ N
+ UPDATE etl.job_execution
+SET status = 'DELTA_SUCCESS'
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1696
+ 288
+
+
+
+ Create job execution record
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ UPDATE etl.job_execution
+SET
+ status = 'DELTA_PROCESSING',
+ execution_datetime = current_timestamp,
+ error_description = NULL
+where job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+ 416
+ 464
+
+
+
+ Detect empty stream
+ DetectEmptyStream
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 832
+ 288
+
+
+
+ Filter rows
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ =
+ last_row
+ N
+ -
+
+ N
+ -1
+ constant
+ -1
+ Y
+ Boolean
+
+
+
+ Change job status on success
+
+
+ 1696
+ 464
+
+
+
+ Filter_null_parental_leave_dates
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ IS NOT NULL
+ academ_reason
+ N
+ -
+
+
+ Block until transforms finish
+
+
+ 832
+ 672
+
+
+
+ Group by
+ GroupBy
+
+ Y
+
+ 1
+
+ none
+
+
+ N
+ N
+ ${java.io.tmpdir}
+
+
+ recruit_id
+ recruit_id
+ FIRST_INCL_NULL
+
+
+ source_update_date
+ source_update_date
+ FIRST_INCL_NULL
+
+
+ educational_institution_type
+ educational_institution_type
+ FIRST_INCL_NULL
+
+
+ org_type
+ org_type
+ FIRST_INCL_NULL
+
+
+ inn
+ inn
+ FIRST_INCL_NULL
+
+
+ kpp
+ kpp
+ FIRST_INCL_NULL
+
+
+ ogrn
+ ogrn
+ FIRST_INCL_NULL
+
+
+ educational_institution_address
+ educational_institution_address
+ FIRST_INCL_NULL
+
+
+ educational_institution_address_1
+ educational_institution_address_1
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+ FIRST_INCL_NULL
+
+
+ student_status
+ student_status
+ FIRST_INCL_NULL
+
+
+ grade_number
+ grade_number
+ FIRST_INCL_NULL
+
+
+ education_level_code
+ education_level_code
+ FIRST_INCL_NULL
+
+
+ admission_date
+ admission_date
+ FIRST_INCL_NULL
+
+
+ enrollment_date
+ enrollment_date
+ FIRST_INCL_NULL
+
+
+ enrollment_order_number
+ enrollment_order_number
+ FIRST_INCL_NULL
+
+
+ enrollment_order_date
+ enrollment_order_date
+ FIRST_INCL_NULL
+
+
+ completion_date
+ completion_date
+ FIRST_INCL_NULL
+
+
+ education_form
+ education_form
+ FIRST_INCL_NULL
+
+
+ education_program_start_date
+ education_program_start_date
+ FIRST_INCL_NULL
+
+
+ education_start_date
+ education_start_date
+ FIRST_INCL_NULL
+
+
+ planned_completion_date
+ planned_completion_date
+ FIRST_INCL_NULL
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ FIRST_INCL_NULL
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ FIRST_INCL_NULL
+
+
+ recovery_info
+ recovery_info
+ FIRST_INCL_NULL
+
+
+ recovery_date
+ recovery_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_date
+ recovery_order_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_number
+ recovery_order_number
+ FIRST_INCL_NULL
+
+
+ expulsion_info
+ expulsion_info
+ FIRST_INCL_NULL
+
+
+ expulsion_date
+ expulsion_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_date
+ expulsion_order_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_number
+ expulsion_order_number
+ FIRST_INCL_NULL
+
+
+ academical_leave_info
+ academical_leave_info
+ FIRST_INCL_NULL
+
+
+ first_education
+ first_education
+ FIRST_INCL_NULL
+
+
+ vus_spec
+ vus_spec
+ FIRST_INCL_NULL
+
+
+ military_center_education_info
+ military_center_education_info
+ FIRST_INCL_NULL
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_period
+ military_center_education_period
+ FIRST_INCL_NULL
+
+
+ military_center_completion
+ military_center_completion
+ FIRST_INCL_NULL
+
+
+ military_department_education_info
+ military_department_education_info
+ FIRST_INCL_NULL
+
+
+ military_department_start_date
+ military_department_start_date
+ FIRST_INCL_NULL
+
+
+ military_department_end_date
+ military_department_end_date
+ FIRST_INCL_NULL
+
+
+ last_row
+ last_row
+ LAST_INCL_NULL
+
+
+ academ_start_date
+ academ_start_date
+ FIRST_INCL_NULL
+
+
+ academ_end_date
+ academ_end_date
+ FIRST_INCL_NULL
+
+
+ academ_reason
+ academ_reason
+ FIRST_INCL_NULL
+
+
+ N
+
+
+ source_id
+
+
+ N
+ grp
+
+
+ 1152
+ 464
+
+
+
+ Identify last row in a stream
+ DetectLastRow
+
+ N
+
+ 1
+
+ none
+
+
+ last_row
+
+
+ 832
+ 464
+
+
+
+ citizen_education_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ source_id
+ source_id
+
+
+ recruit_id
+ recruit_id
+
+
+ source_update_date
+ source_update_date
+
+
+ educational_institution_type
+ educational_institution_type
+
+
+ org_type
+ org_type
+
+
+ inn
+ inn
+
+
+ kpp
+ kpp
+
+
+ ogrn
+ ogrn
+
+
+ educational_institution_address
+ educational_institution_address
+
+
+ educational_institution_address_1
+ educational_institution_address_1
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+
+
+ student_status
+ student_status
+
+
+ grade_number
+ grade_number
+
+
+ education_level_code
+ education_level_code
+
+
+ admission_date
+ admission_date
+
+
+ enrollment_date
+ enrollment_date
+
+
+ enrollment_order_number
+ enrollment_order_number
+
+
+ enrollment_order_date
+ enrollment_order_date
+
+
+ completion_date
+ completion_date
+
+
+ education_form
+ education_form
+
+
+ education_program_start_date
+ education_program_start_date
+
+
+ education_start_date
+ education_start_date
+
+
+ planned_completion_date
+ planned_completion_date
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+
+
+ recovery_info
+ recovery_info
+
+
+ recovery_date
+ recovery_date
+
+
+ recovery_order_date
+ recovery_order_date
+
+
+ recovery_order_number
+ recovery_order_number
+
+
+ expulsion_info
+ expulsion_info
+
+
+ expulsion_date
+ expulsion_date
+
+
+ expulsion_order_date
+ expulsion_order_date
+
+
+ expulsion_order_number
+ expulsion_order_number
+
+
+ academical_leave_info
+ academical_leave_info
+
+
+ first_education
+ first_education
+
+
+ vus_spec
+ vus_spec
+
+
+ military_center_education_info
+ military_center_education_info
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+
+
+ military_center_education_period
+ military_center_education_period
+
+
+ military_center_completion
+ military_center_completion
+
+
+ military_department_education_info
+ military_department_education_info
+
+
+ military_department_start_date
+ military_department_start_date
+
+
+ military_department_end_date
+ military_department_end_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ educational_institution_learning
+ N
+ Y
+ N
+ Y
+
+
+ 1472
+ 464
+
+
+
+ education_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ WITH filteredData AS (SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Образовательная организация высшего образования' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+ AND to_date(education_elem ->> 'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Профессиональная образовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+ AND to_date(education_elem ->> 'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Общеобразовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+ AND to_date(education_elem ->> 'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'
+)
+SELECT fd.recruit_id,
+ education_elem ->> 'id' AS source_id,
+ education_elem ->> 'dataSved' as source_update_date,
+ educational_institution_type,
+ education_elem -> 'svedOrg' ->> 'naimTipOrg' as org_type,
+ education_elem -> 'svedOrg' ->> 'inn' as inn,
+ education_elem -> 'svedOrg' ->> 'kpp' as kpp,
+ coalesce(education_elem -> 'svedOrg' ->> 'ogrn', education_elem -> 'svedOrg' ->> 'ogrnip') as ogrn,
+ education_elem -> 'svedOrg' ->> 'adresOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'statusOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'vidPodrazdOrg' as educational_organization_separate_unit_type,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'adresPodrazdOrg' as educational_organization_separate_unit_address,
+ education_elem ->> 'naimStatus' as student_status,
+ case
+ when educational_institution_type = 'Образовательная организация высшего образования'
+ then education_elem ->> 'nomerKursa'
+ when educational_institution_type = 'Профессиональная образовательная организация'
+ then education_elem -> 'extend' ->> 'klass'
+ when educational_institution_type = 'Общеобразовательная организация' then education_elem ->> 'klass'
+ end as grade_number,
+ education_elem ->> 'kodUrovObr' as education_level_code,
+ coalesce(education_elem -> 'extend' ->> 'dataPostup', education_elem ->> 'dataPostup') as admission_date,
+ education_elem ->> 'dataZachisl' as enrollment_date,
+ education_elem ->> 'nomPrikazZachisl' as enrollment_order_number,
+ education_elem ->> 'dataPrikazZachisl' as enrollment_order_date,
+ coalesce(education_elem -> 'extend' ->> 'dataZavershObuch', education_elem ->> 'dataOkonch') as completion_date,
+ education_elem -> 'svedObrProg' ->> 'naimFormaObuch' as education_form,
+ education_elem -> 'svedObrProg' ->> 'dataNachObuch' as education_program_start_date,
+ education_elem -> 'extend' ->> 'dataNachObuch' as education_start_date,
+ coalesce(education_elem -> 'svedObrProg' ->> 'planDataOkonch', education_elem ->>'dataOzhid') as planned_completion_date,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ education_elem ->> 'svedVosst' != 'null' as recovery_info,
+ education_elem -> 'svedVosst' ->> 'dataVosst' as recovery_date,
+ education_elem -> 'svedVosst' ->> 'dataPrikazVosst' as recovery_order_date,
+ education_elem -> 'svedVosst' ->> 'nomPrikazVosst' as recovery_order_number,
+ education_elem ->> 'svedOtchisl' != 'null' as expulsion_info,
+ education_elem -> 'svedOtchisl' ->> 'dataOtchisl' as expulsion_date,
+ education_elem -> 'svedOtchisl' ->> 'dataPrikazOtchisl' as expulsion_order_date,
+ education_elem -> 'svedOtchisl' ->> 'nomPrikazOtchisl' as expulsion_order_number,
+ education_elem ->> 'svedOtpusk' != 'null' as academical_leave_info,
+ education_elem ->> 'prPervObuch' = '1' as first_education,
+ education_elem -> 'svedObrProg' ->> 'prVUSpecz' = '1' as vus_spec,
+ education_elem -> 'svedVoenObuch' != 'null' as military_center_education_info,
+ education_elem -> 'svedVoenObuch' ->> 'dataNach' as military_center_education_start_date,
+ education_elem -> 'svedVoenObuch' ->> 'dataOkonch' as military_center_education_end_date,
+ education_elem -> 'svedVoenObuch' -> 'extend' ->> 'srokObuch' as military_center_education_period,
+ education_elem -> 'svedVoenObuch' -> 'extend' ->> 'svedUspeshZaverObuch' ='1' as military_center_completion,
+ education_elem -> 'extend' ->> 'svedVoenKaf' != 'null' as military_department_education_info,
+ education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataNach' as military_department_start_date,
+ education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataOkonch' as military_department_end_date,
+ academ_elem -> 'dataNach' as academ_start_date,
+ academ_elem -> 'dataOkonch' as academ_end_date,
+ academ_elem -> 'naimPrichOtpusk' as academ_reason
+FROM filteredData fd
+ORDER BY source_id;
+ Y
+
+
+ 640
+ 464
+
+
+
+ education_leave_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ start_date
+ academ_start_date
+
+
+ end_date
+ academ_end_date
+
+
+ reason
+ academ_reason
+
+
+ citizen_education_source_id
+ source_id
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+
+ N
+ Y
+ N
+ Y
+
+
+ 1296
+ 672
+
+
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
new file mode 100644
index 0000000..4dff655
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
@@ -0,0 +1,1025 @@
+
+
+
+ citizen_education_flow_repeat
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/08/28 21:16:35.770
+ -
+ 2025/08/28 21:16:35.770
+
+
+
+
+
+ Block until transforms finish
+ education_leave_output
+ Y
+
+
+ Change job status on error
+ Abort
+ Y
+
+
+ Create job execution record
+ education_input
+ Y
+
+
+ Filter rows
+ Change job status on success
+ Y
+
+
+ Filter_null_parental_leave_dates
+ Block until transforms finish
+ Y
+
+
+ Group by
+ citizen_education_output
+ Y
+
+
+ Identify last row in a stream
+ Detect empty stream
+ Y
+
+
+ Identify last row in a stream
+ Filter_null_parental_leave_dates
+ Y
+
+
+ Identify last row in a stream
+ Group by
+ Y
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+
+ citizen_education_output
+ Filter rows
+ Y
+
+
+ education_input
+ Identify last row in a stream
+ Y
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+
+ Detect empty stream
+ Change job status on success
+ Y
+
+
+
+ Abort
+ Abort
+
+ Y
+
+ 1
+
+ none
+
+
+ ABORT
+ Y
+ 0
+
+
+ 1536
+ 704
+
+
+
+ Block until transforms finish
+ BlockUntilTransformsFinish
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ citizen_education_output
+
+
+
+
+ 928
+ 704
+
+
+
+ Change job status on error
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ error_description
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ Y
+ N
+ UPDATE etl.job_execution
+SET status = 'ERROR',
+ error_description = ?
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1312
+ 704
+
+
+
+ Change job status on success
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ Y
+ N
+ Y
+ N
+ N
+ UPDATE etl.job_execution
+SET status = 'SUCCESS'
+WHERE job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
+
+
+
+
+ 1552
+ 320
+
+
+
+ Create job execution record
+ ExecSql
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ ervu-dashboard
+ N
+ N
+ Y
+ N
+ N
+ INSERT INTO etl.job_execution (id, job_name, status, execution_datetime, error_description, recruitment_id)
+VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}')
+ON CONFLICT (job_name, recruitment_id)
+DO UPDATE
+SET status = 'PROCESSING',
+ error_description = null,
+ execution_datetime = current_timestamp;
+
+
+ 256
+ 496
+
+
+
+ Detect empty stream
+ DetectEmptyStream
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+ 672
+ 320
+
+
+
+ Filter rows
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ =
+ last_row
+ N
+ -
+
+ N
+ -1
+ constant
+ -1
+ Y
+ Boolean
+
+
+
+ Change job status on success
+
+
+ 1552
+ 496
+
+
+
+ Filter_null_parental_leave_dates
+ FilterRows
+
+ Y
+
+ 1
+
+ none
+
+
+
+
+
+
+ IS NOT NULL
+ academ_reason
+ N
+ -
+
+
+ Block until transforms finish
+
+
+ 672
+ 704
+
+
+
+ Group by
+ GroupBy
+
+ Y
+
+ 1
+
+ none
+
+
+ N
+ N
+ ${java.io.tmpdir}
+
+
+ recruit_id
+ recruit_id
+ FIRST_INCL_NULL
+
+
+ source_update_date
+ source_update_date
+ FIRST_INCL_NULL
+
+
+ educational_institution_type
+ educational_institution_type
+ FIRST_INCL_NULL
+
+
+ org_type
+ org_type
+ FIRST_INCL_NULL
+
+
+ inn
+ inn
+ FIRST_INCL_NULL
+
+
+ kpp
+ kpp
+ FIRST_INCL_NULL
+
+
+ ogrn
+ ogrn
+ FIRST_INCL_NULL
+
+
+ educational_institution_address
+ educational_institution_address
+ FIRST_INCL_NULL
+
+
+ educational_institution_address_1
+ educational_institution_address_1
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+ FIRST_INCL_NULL
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+ FIRST_INCL_NULL
+
+
+ student_status
+ student_status
+ FIRST_INCL_NULL
+
+
+ grade_number
+ grade_number
+ FIRST_INCL_NULL
+
+
+ education_level_code
+ education_level_code
+ FIRST_INCL_NULL
+
+
+ admission_date
+ admission_date
+ FIRST_INCL_NULL
+
+
+ enrollment_date
+ enrollment_date
+ FIRST_INCL_NULL
+
+
+ enrollment_order_number
+ enrollment_order_number
+ FIRST_INCL_NULL
+
+
+ enrollment_order_date
+ enrollment_order_date
+ FIRST_INCL_NULL
+
+
+ completion_date
+ completion_date
+ FIRST_INCL_NULL
+
+
+ education_form
+ education_form
+ FIRST_INCL_NULL
+
+
+ education_program_start_date
+ education_program_start_date
+ FIRST_INCL_NULL
+
+
+ education_start_date
+ education_start_date
+ FIRST_INCL_NULL
+
+
+ planned_completion_date
+ planned_completion_date
+ FIRST_INCL_NULL
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ FIRST_INCL_NULL
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ FIRST_INCL_NULL
+
+
+ recovery_info
+ recovery_info
+ FIRST_INCL_NULL
+
+
+ recovery_date
+ recovery_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_date
+ recovery_order_date
+ FIRST_INCL_NULL
+
+
+ recovery_order_number
+ recovery_order_number
+ FIRST_INCL_NULL
+
+
+ expulsion_info
+ expulsion_info
+ FIRST_INCL_NULL
+
+
+ expulsion_date
+ expulsion_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_date
+ expulsion_order_date
+ FIRST_INCL_NULL
+
+
+ expulsion_order_number
+ expulsion_order_number
+ FIRST_INCL_NULL
+
+
+ academical_leave_info
+ academical_leave_info
+ FIRST_INCL_NULL
+
+
+ first_education
+ first_education
+ FIRST_INCL_NULL
+
+
+ vus_spec
+ vus_spec
+ FIRST_INCL_NULL
+
+
+ military_center_education_info
+ military_center_education_info
+ FIRST_INCL_NULL
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+ FIRST_INCL_NULL
+
+
+ military_center_education_period
+ military_center_education_period
+ FIRST_INCL_NULL
+
+
+ military_center_completion
+ military_center_completion
+ FIRST_INCL_NULL
+
+
+ military_department_education_info
+ military_department_education_info
+ FIRST_INCL_NULL
+
+
+ military_department_start_date
+ military_department_start_date
+ FIRST_INCL_NULL
+
+
+ military_department_end_date
+ military_department_end_date
+ FIRST_INCL_NULL
+
+
+ last_row
+ last_row
+ LAST_INCL_NULL
+
+
+ academ_start_date
+ academ_start_date
+ FIRST_INCL_NULL
+
+
+ academ_end_date
+ academ_end_date
+ FIRST_INCL_NULL
+
+
+ academ_reason
+ academ_reason
+ FIRST_INCL_NULL
+
+
+ N
+
+
+ source_id
+
+
+ N
+ grp
+
+
+ 992
+ 496
+
+
+
+ Identify last row in a stream
+ DetectLastRow
+
+ N
+
+ 1
+
+ none
+
+
+ last_row
+
+
+ 672
+ 496
+
+
+
+ citizen_education_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ source_id
+ source_id
+
+
+ recruit_id
+ recruit_id
+
+
+ source_update_date
+ source_update_date
+
+
+ educational_institution_type
+ educational_institution_type
+
+
+ org_type
+ org_type
+
+
+ inn
+ inn
+
+
+ kpp
+ kpp
+
+
+ ogrn
+ ogrn
+
+
+ educational_institution_address
+ educational_institution_address
+
+
+ educational_institution_address_1
+ educational_institution_address_1
+
+
+ educational_organization_separate_unit_type
+ educational_organization_separate_unit_type
+
+
+ educational_organization_separate_unit_address
+ educational_organization_separate_unit_address
+
+
+ student_status
+ student_status
+
+
+ grade_number
+ grade_number
+
+
+ education_level_code
+ education_level_code
+
+
+ admission_date
+ admission_date
+
+
+ enrollment_date
+ enrollment_date
+
+
+ enrollment_order_number
+ enrollment_order_number
+
+
+ enrollment_order_date
+ enrollment_order_date
+
+
+ completion_date
+ completion_date
+
+
+ education_form
+ education_form
+
+
+ education_program_start_date
+ education_program_start_date
+
+
+ education_start_date
+ education_start_date
+
+
+ planned_completion_date
+ planned_completion_date
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+
+
+ recovery_info
+ recovery_info
+
+
+ recovery_date
+ recovery_date
+
+
+ recovery_order_date
+ recovery_order_date
+
+
+ recovery_order_number
+ recovery_order_number
+
+
+ expulsion_info
+ expulsion_info
+
+
+ expulsion_date
+ expulsion_date
+
+
+ expulsion_order_date
+ expulsion_order_date
+
+
+ expulsion_order_number
+ expulsion_order_number
+
+
+ academical_leave_info
+ academical_leave_info
+
+
+ first_education
+ first_education
+
+
+ vus_spec
+ vus_spec
+
+
+ military_center_education_info
+ military_center_education_info
+
+
+ military_center_education_start_date
+ military_center_education_start_date
+
+
+ military_center_education_end_date
+ military_center_education_end_date
+
+
+ military_center_education_period
+ military_center_education_period
+
+
+ military_center_completion
+ military_center_completion
+
+
+ military_department_education_info
+ military_department_education_info
+
+
+ military_department_start_date
+ military_department_start_date
+
+
+ military_department_end_date
+ military_department_end_date
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+ educational_institution_learning
+ N
+ Y
+ N
+ Y
+
+
+ 1312
+ 496
+
+
+
+ education_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ WITH filteredData AS (SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Образовательная организация высшего образования' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedVUZ' -> 'vuz') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Профессиональная образовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedKolledzh' -> 'kolledzh') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+
+ union all
+
+ SELECT ri.recruit_id,
+ education_elem,
+ academ_elem,
+ 'Общеобразовательная организация' as educational_institution_type
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') AS education_elem
+ LEFT JOIN LATERAL jsonb_array_elements(
+ CASE
+ WHEN jsonb_typeof(education_elem -> 'svedOtpusk') = 'array'
+ THEN education_elem -> 'svedOtpusk'
+ ELSE '[]'::jsonb
+ END
+ ) AS academ_elem ON true
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedSHkola' -> 'shkola') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+ )
+SELECT fd.recruit_id,
+ education_elem ->> 'id' AS source_id,
+ education_elem ->> 'dataSved' as source_update_date,
+ educational_institution_type,
+ education_elem -> 'svedOrg' ->> 'naimTipOrg' as org_type,
+ education_elem -> 'svedOrg' ->> 'inn' as inn,
+ education_elem -> 'svedOrg' ->> 'kpp' as kpp,
+ coalesce(education_elem -> 'svedOrg' ->> 'ogrn', education_elem -> 'svedOrg' ->> 'ogrnip') as ogrn,
+ education_elem -> 'svedOrg' ->> 'adresOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'statusOrg' as educational_institution_address,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'vidPodrazdOrg' as educational_organization_separate_unit_type,
+ education_elem -> 'svedOrg' -> 'extend' ->> 'adresPodrazdOrg' as educational_organization_separate_unit_address,
+ education_elem ->> 'naimStatus' as student_status,
+ case
+ when educational_institution_type = 'Образовательная организация высшего образования'
+ then education_elem ->> 'nomerKursa'
+ when educational_institution_type = 'Профессиональная образовательная организация'
+ then education_elem -> 'extend' ->> 'klass'
+ when educational_institution_type = 'Общеобразовательная организация' then education_elem ->> 'klass'
+ end as grade_number,
+ education_elem ->> 'kodUrovObr' as education_level_code,
+ coalesce(education_elem -> 'extend' ->> 'dataPostup', education_elem ->> 'dataPostup') as admission_date,
+ education_elem ->> 'dataZachisl' as enrollment_date,
+ education_elem ->> 'nomPrikazZachisl' as enrollment_order_number,
+ education_elem ->> 'dataPrikazZachisl' as enrollment_order_date,
+ coalesce(education_elem -> 'extend' ->> 'dataZavershObuch', education_elem ->> 'dataOkonch') as completion_date,
+ education_elem -> 'svedObrProg' ->> 'naimFormaObuch' as education_form,
+ education_elem -> 'svedObrProg' ->> 'dataNachObuch' as education_program_start_date,
+ education_elem -> 'extend' ->> 'dataNachObuch' as education_start_date,
+ coalesce(education_elem -> 'svedObrProg' ->> 'planDataOkonch', education_elem ->>'dataOzhid') as planned_completion_date,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ education_elem -> 'svedObrProg' -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ education_elem ->> 'svedVosst' != 'null' as recovery_info,
+ education_elem -> 'svedVosst' ->> 'dataVosst' as recovery_date,
+ education_elem -> 'svedVosst' ->> 'dataPrikazVosst' as recovery_order_date,
+ education_elem -> 'svedVosst' ->> 'nomPrikazVosst' as recovery_order_number,
+ education_elem ->> 'svedOtchisl' != 'null' as expulsion_info,
+ education_elem -> 'svedOtchisl' ->> 'dataOtchisl' as expulsion_date,
+ education_elem -> 'svedOtchisl' ->> 'dataPrikazOtchisl' as expulsion_order_date,
+ education_elem -> 'svedOtchisl' ->> 'nomPrikazOtchisl' as expulsion_order_number,
+ education_elem ->> 'svedOtpusk' != 'null' as academical_leave_info,
+ education_elem ->> 'prPervObuch' = '1' as first_education,
+ education_elem -> 'svedObrProg' ->> 'prVUSpecz' = '1' as vus_spec,
+ education_elem -> 'svedVoenObuch' != 'null' as military_center_education_info,
+ education_elem -> 'svedVoenObuch' ->> 'dataNach' as military_center_education_start_date,
+ education_elem -> 'svedVoenObuch' ->> 'dataOkonch' as military_center_education_end_date,
+ education_elem -> 'svedVoenObuch' -> 'extend' ->> 'srokObuch' as military_center_education_period,
+ education_elem -> 'svedVoenObuch' -> 'extend' ->> 'svedUspeshZaverObuch' ='1' as military_center_completion,
+ education_elem -> 'extend' ->> 'svedVoenKaf' != 'null' as military_department_education_info,
+ education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataNach' as military_department_start_date,
+ education_elem -> 'extend' -> 'svedVoenKaf' ->> 'dataOkonch' as military_department_end_date,
+ academ_elem -> 'dataNach' as academ_start_date,
+ academ_elem -> 'dataOkonch' as academ_end_date,
+ academ_elem -> 'naimPrichOtpusk' as academ_reason
+FROM filteredData fd
+ORDER BY source_id;
+ Y
+
+
+ 480
+ 496
+
+
+
+ education_leave_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ start_date
+ academ_start_date
+
+
+ end_date
+ academ_end_date
+
+
+ reason
+ academ_reason
+
+
+ citizen_education_source_id
+ source_id
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+
+ N
+ Y
+ N
+ Y
+
+
+ 1136
+ 704
+
+
+
+
+ citizen_education_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+ education_leave_output
+ Change job status on error
+ Y
+
+ error_description
+
+
+
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow.hpl
new file mode 100644
index 0000000..47fa430
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow.hpl
@@ -0,0 +1,330 @@
+
+
+
+ recruitment_five_flow
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/08/28 08:16:44.450
+ -
+ 2025/08/28 08:16:44.450
+
+
+
+
+
+ Get all recruitments
+ citizen_education_flow.hpl
+ Y
+
+
+ Get all recruitments
+ citizen_education_flow.hpl 2
+ Y
+
+
+ Get all recruitments
+ citizen_education_flow.hpl 3
+ Y
+
+
+ Get all recruitments
+ citizen_education_flow.hpl 4
+ Y
+
+
+ Get all recruitments
+ citizen_education_flow.hpl 5
+ Y
+
+
+
+ Get all recruitments
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard-test
+ N
+ SELECT
+idm_id
+FROM ervu_dashboard.recruitment;
+ N
+
+
+ 352
+ 352
+
+
+
+ citizen_education_flow.hpl
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 624
+ 192
+
+
+
+ citizen_education_flow.hpl 2
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 624
+ 272
+
+
+
+ citizen_education_flow.hpl 3
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 624
+ 352
+
+
+
+ citizen_education_flow.hpl 4
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 624
+ 432
+
+
+
+ citizen_education_flow.hpl 5
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 624
+ 512
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_delta.hpl
new file mode 100644
index 0000000..bce8e0b
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_delta.hpl
@@ -0,0 +1,399 @@
+
+
+
+ recruitment_five_flow_delta
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/08/28 21:23:43.331
+ -
+ 2025/08/28 21:23:43.331
+
+
+
+
+
+ Table input
+ citizen_education_flow_delta.hpl
+ Y
+
+
+ get_max_source_update_date
+ Table input
+ Y
+
+
+ Table input
+ citizen_education_flow_delta.hpl 2
+ Y
+
+
+ Table input
+ citizen_education_flow_delta.hpl 3
+ Y
+
+
+ Table input
+ citizen_education_flow_delta.hpl 4
+ Y
+
+
+ Table input
+ citizen_education_flow_delta.hpl 5
+ Y
+
+
+
+ Table input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard-test
+ N
+ 0
+ get_max_source_update_date
+ WITH mud AS (
+ SELECT
+ recruitment_id,
+ MAX(execution_datetime) AS max_upd_date
+ FROM etl.job_execution
+ WHERE job_name = '${JOB_NAME}'
+ AND status IN ('SUCCESS','DELTA_ERROR','DELTA_SUCCESS','DELTA_PROCESSING')
+ GROUP BY recruitment_id
+)
+SELECT
+ r.idm_id,
+ ? max_source_update_date
+FROM ervu_dashboard.recruitment r
+ JOIN mud ON mud.recruitment_id = r.idm_id
+ JOIN recruits_info ri
+ ON COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = r.idm_id
+ AND ri.updated_at > mud.max_upd_date;
+ Y
+
+
+ 608
+ 384
+
+
+
+ citizen_education_flow_delta.hpl
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 224
+
+
+
+ citizen_education_flow_delta.hpl 2
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 304
+
+
+
+ citizen_education_flow_delta.hpl 3
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 384
+
+
+
+ citizen_education_flow_delta.hpl 4
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 464
+
+
+
+ citizen_education_flow_delta.hpl 5
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 544
+
+
+
+ get_max_source_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ select max(source_update_date)
+from education_institution_learning;
+ N
+
+
+ 432
+ 384
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/passport/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_repeat.hpl
similarity index 83%
rename from mappings/info_recruits/citizen_tables/passport/recruitment_five_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_repeat.hpl
index 8259a10..a120f61 100644
--- a/mappings/info_recruits/citizen_tables/passport/recruitment_five_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/educational_institution_learning/recruitment_five_flow_repeat.hpl
@@ -1,7 +1,7 @@
- recruitment_five_flow_delta
+ recruitment_five_flow_repeat
Y
@@ -13,36 +13,36 @@
1000
100
-
- 2025/08/11 13:16:11.204
+ 2025/08/28 21:16:24.371
-
- 2025/08/11 13:16:11.204
+ 2025/08/28 21:16:24.371
Table input
- passport_flow_delta.hpl
+ citizen_education_flow_repeat.hpl
Y
Table input
- passport_flow_delta.hpl 2
+ citizen_education_flow_repeat.hpl 2
Y
Table input
- passport_flow_delta.hpl 3
+ citizen_education_flow_repeat.hpl 3
Y
Table input
- passport_flow_delta.hpl 4
+ citizen_education_flow_repeat.hpl 4
Y
Table input
- passport_flow_delta.hpl 5
+ citizen_education_flow_repeat.hpl 5
Y
@@ -57,25 +57,25 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
-
- SELECT
- r.idm_id as recruitment_id
+ 0
+ SELECT r.idm_id AS recruitment_id
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
- and job_name = 'passport_job'
-where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');
- N
+ AND je.job_name = '${JOB_NAME}'
+WHERE je.id IS NULL
+ OR je.status IN ('ERROR', 'PROCESSING');
+ Y
- 352
- 288
+ 672
+ 496
- passport_flow_delta.hpl
+ citizen_education_flow_repeat.hpl
PipelineExecutor
Y
@@ -86,7 +86,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/passport/parallel/passport_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
N
1
@@ -98,11 +98,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- passport_job
-
Y
@@ -126,12 +121,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 128
+ 880
+ 336
- passport_flow_delta.hpl 2
+ citizen_education_flow_repeat.hpl 2
PipelineExecutor
Y
@@ -142,7 +137,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/passport/parallel/passport_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
N
1
@@ -154,11 +149,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- passport_job
-
Y
@@ -182,12 +172,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 208
+ 880
+ 416
- passport_flow_delta.hpl 3
+ citizen_education_flow_repeat.hpl 3
PipelineExecutor
Y
@@ -198,7 +188,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/passport/parallel/passport_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
N
1
@@ -210,11 +200,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- passport_job
-
Y
@@ -238,12 +223,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 288
+ 880
+ 496
- passport_flow_delta.hpl 4
+ citizen_education_flow_repeat.hpl 4
PipelineExecutor
Y
@@ -254,7 +239,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/passport/parallel/passport_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
N
1
@@ -266,11 +251,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- passport_job
-
Y
@@ -294,12 +274,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 368
+ 880
+ 576
- passport_flow_delta.hpl 5
+ citizen_education_flow_repeat.hpl 5
PipelineExecutor
Y
@@ -310,7 +290,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/passport/parallel/passport_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/educational_institution_learning/parallel/citizen_education_flow_repeat.hpl
N
1
@@ -322,11 +302,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- passport_job
-
Y
@@ -350,8 +325,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 448
+ 880
+ 656
diff --git a/mappings_new/info_recruits/citizen_tables/passport/recruit_update_date_ervu_dashboard.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow.hpl
similarity index 62%
rename from mappings_new/info_recruits/citizen_tables/passport/recruit_update_date_ervu_dashboard.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow.hpl
index 0236547..e2c8de2 100644
--- a/mappings_new/info_recruits/citizen_tables/passport/recruit_update_date_ervu_dashboard.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow.hpl
@@ -1,7 +1,7 @@
- recruit_update_date_ervu_dashboard
+ foreign_diploma_constants_flow
Y
@@ -13,21 +13,21 @@
1000
100
-
- 2025/06/02 14:50:31.833
+ 2025/09/22 08:32:45.452
-
- 2025/06/02 14:50:31.833
+ 2025/09/22 08:32:45.452
- Table input
- Table output
+ country_oksm_input
+ country_oksm_output
Y
- Table input
+ country_oksm_input
TableInput
Y
@@ -37,26 +37,26 @@
none
- ervu-dashboard
+ nsi
N
0
- SELECT
- created_at AS system_create_date,
- updated_at AS system_update_date,
- current_timestamp AS record_created,
- 'job_recruits_info' AS workflow
-FROM recruits_info
-WHERE updated_at = (SELECT MAX(updated_at) FROM recruits_info)
-limit 1
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'countriesOKSM';
+
N
- 896
- 304
+ 416
+ 192
- Table output
+ country_oksm_output
TableOutput
Y
@@ -66,10 +66,26 @@ limit 1
none
- 1000
+ 10000
ervu-dashboard
-
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
N
N
N
@@ -78,9 +94,9 @@ limit 1
Y
N
- public
- N
-
+ ervu_dashboard
+ Y
+
N
Y
@@ -88,8 +104,8 @@ limit 1
Y
- 1216
- 304
+ 640
+ 192
diff --git a/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow_repeat.hpl
new file mode 100644
index 0000000..52729cf
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow_repeat.hpl
@@ -0,0 +1,148 @@
+
+
+
+ foreign_diploma_constants_flow_repeat
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/21 21:27:15.216
+ -
+ 2025/09/21 21:27:15.216
+
+
+
+
+
+ get_max_country_oksm_update_date
+ country_oksm_input
+ Y
+
+
+ country_oksm_input
+ country_oksm
+ Y
+
+
+
+ country_oksm_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_country_oksm_update_date
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'countriesOKSM'
+AND updated_at > ?;
+ N
+
+
+ 464
+ 240
+
+
+
+ get_max_country_oksm_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM country_oksm;
+
+ N
+
+
+ 240
+ 240
+
+
+
+ country_oksm
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+
+ <>
+ actual
+ actual
+
+
+ ervu_dashboard
+
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 688
+ 240
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/work/work_activity/support/check_if_work_activity_job_exists.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/support/check_if_constants_exists.hpl
similarity index 76%
rename from mappings/info_recruits/citizen_tables/work/work_activity/support/check_if_work_activity_job_exists.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/support/check_if_constants_exists.hpl
index a4b4134..7a4fb03 100644
--- a/mappings/info_recruits/citizen_tables/work/work_activity/support/check_if_work_activity_job_exists.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/constants/support/check_if_constants_exists.hpl
@@ -1,7 +1,7 @@
- check_if_work_activity_job_exists
+ check_if_constants_exists
Y
@@ -13,9 +13,9 @@
1000
100
-
- 2025/08/05 13:28:46.661
+ 2025/09/21 21:25:15.712
-
- 2025/08/05 13:28:46.661
+ 2025/09/21 21:25:15.712
@@ -39,16 +39,16 @@
- job_executed_flag
- JOB_EXECUTED_FLAG
+ constasnts_exists
+ CONSTANTS_EXISTS
PARENT_WORKFLOW
Y
- 672
- 336
+ 576
+ 272
@@ -66,15 +66,13 @@
N
0
SELECT EXISTS (
- SELECT 1
- FROM etl.job_execution
- WHERE job_name = 'work_activity_job'
- ) AS job_executed_flag;
- N
+ SELECT 1 FROM country_oksm
+) AS constasnts_exists
+ Y
- 384
- 336
+ 288
+ 272
diff --git a/mappings/info_recruits/citizen_tables/education/foreign_diploma/foreign_diploma_job.hwf b/mappings/info_recruits/citizen_tables/education/foreign_diploma/foreign_diploma_job.hwf
new file mode 100644
index 0000000..0868d20
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/foreign_diploma_job.hwf
@@ -0,0 +1,408 @@
+
+
+ foreign_diploma_job
+ Y
+
+
+
+ -
+ 2025/09/04 20:50:35.289
+ -
+ 2025/09/04 20:50:35.289
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 336
+ 224
+
+
+
+ check_if_job_execution_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_job_execution_exists.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1360
+ 240
+
+
+
+ employer_job_execution_exists_check
+
+ SIMPLE_EVAL
+
+ boolean
+ false
+ equal
+ equal
+ N
+ variable
+ JOB_EXECUTED_FLAG
+ N
+ 1664
+ 240
+
+
+
+ recruitment_five_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1936
+ 240
+
+
+
+ recruitment_five_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1936
+ 544
+
+
+
+ check_if_need_to_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_need_to_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1664
+ 384
+
+
+
+ Simple evaluation
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ NEED_TO_REPEAT_JOB
+ N
+ 1664
+ 544
+
+
+
+ recruitment_five_flow_delta.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_delta.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1664
+ 704
+
+
+
+ check_if_constants_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/constants/support/check_if_constants_exists.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 512
+ 224
+
+
+
+ constants_exists
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ CONSTANTS_EXISTS
+ N
+ 688
+ 224
+
+
+
+ foreign_diploma_constants_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 880
+ 144
+
+
+
+ foreign_diploma_constants_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/constants/foreign_diploma_constants_flow_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 880
+ 320
+
+
+
+ init_job_name
+
+ SET_VARIABLES
+
+
+
+ JOB_NAME
+ CURRENT_WORKFLOW
+ foreign_diploma_job
+
+
+ CURRENT_WORKFLOW
+ N
+ N
+ 1120
+ 240
+
+
+
+
+
+ check_if_job_execution_exists.hpl
+ employer_job_execution_exists_check
+ Y
+ Y
+ N
+
+
+ employer_job_execution_exists_check
+ check_if_need_to_repeat.hpl
+ Y
+ N
+ N
+
+
+ check_if_need_to_repeat.hpl
+ Simple evaluation
+ Y
+ Y
+ N
+
+
+ check_if_constants_exists.hpl
+ constants_exists
+ Y
+ Y
+ N
+
+
+ constants_exists
+ foreign_diploma_constants_flow.hpl
+ Y
+ N
+ N
+
+
+ constants_exists
+ foreign_diploma_constants_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ foreign_diploma_constants_flow.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ foreign_diploma_constants_flow_repeat.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ init_job_name
+ check_if_job_execution_exists.hpl
+ Y
+ Y
+ N
+
+
+ Start
+ check_if_constants_exists.hpl
+ Y
+ Y
+ Y
+
+
+ employer_job_execution_exists_check
+ recruitment_five_flow.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_delta.hpl
+ Y
+ N
+ N
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
similarity index 64%
rename from mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
index fbffb7c..1d1c16f 100644
--- a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
@@ -1,7 +1,7 @@
- citizen_address_flow
+ foreign_diploma_flow
Y
@@ -13,36 +13,21 @@
1000
100
-
- 2025/08/05 14:31:22.799
+ 2025/09/04 20:53:34.643
-
- 2025/08/05 14:31:22.799
+ 2025/09/04 20:53:34.643
-
- Create job execution record
- Table input
- Y
-
-
- Table output
- Change job status on error
- Y
-
Change job status on error
Abort
Y
- Table output
- Detect empty stream
- Y
-
-
- Detect empty stream
- Change job status on success
+ Create job execution record
+ foerign_diploma_input
Y
@@ -51,20 +36,35 @@
Y
- Table input
- Identify last row in a stream
+ Identify last row in a stream
+ Detect empty stream
Y
Identify last row in a stream
- Table output
+ citizen_education_diploma_output
Y
- Table output
+ citizen_education_diploma_output
+ Change job status on error
+ Y
+
+
+ citizen_education_diploma_output
Filter rows
Y
+
+ foerign_diploma_input
+ Identify last row in a stream
+ Y
+
+
+ Detect empty stream
+ Change job status on success
+ Y
+
Abort
@@ -77,13 +77,13 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
- 1328
- 704
+ 1248
+ 608
@@ -117,8 +117,8 @@ and recruitment_id = '${IDM_ID}';
- 832
- 704
+ 1024
+ 608
@@ -143,14 +143,13 @@ and recruitment_id = '${IDM_ID}';
UPDATE etl.job_execution
SET status = 'SUCCESS'
WHERE job_name = '${JOB_NAME}'
-and recruitment_id = '${IDM_ID}'
-and status = 'PROCESSING';
+and recruitment_id = '${IDM_ID}';
- 1328
- 96
+ 1248
+ 256
@@ -178,8 +177,8 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
- 240
- 320
+ 320
+ 432
@@ -195,8 +194,8 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
- 832
- 96
+ 736
+ 256
@@ -231,15 +230,15 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
Change job status on success
- 1328
- 320
+ 1248
+ 432
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -249,12 +248,106 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
last_row
- 640
- 320
+ 736
+ 432
- Table input
+ citizen_education_diploma_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ recruit_id
+ recruit_id
+
+
+ source_id
+ source_id
+
+
+ source_update_date
+ source_update_date
+
+
+ education_level_code
+ education_level_code
+
+
+ educational_institution_name
+ educational_institution_name
+
+
+ foreign_doc_name
+ foreign_doc_name
+
+
+ ser_num_doc
+ ser_num_doc
+
+
+ reg_num
+ reg_num
+
+
+ recognition_certificate_number
+ recognition_certificate_number
+
+
+ recognition_date
+ recognition_date
+
+
+ speciality_name
+ speciality_name
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+
+
+ oksm_code
+ oksm_code
+
+
+ vus_spec
+ vus_spec
+
+
+ N
+ N
+ N
+ N
+ Y
+ N
+ ervu_dashboard
+ Y
+
+ N
+ Y
+ N
+ Y
+
+
+ 1024
+ 432
+
+
+
+ foerign_diploma_input
TableInput
Y
@@ -267,125 +360,46 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
ervu-dashboard
N
- SELECT
- ri.recruit_id::uuid,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'reg' END) AS residence_address,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateStart')::date END) AS residence_registration_date,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateEnd')::date END) AS residence_deregistration_date,
-
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'reg' END) AS place_stay_address,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateStart')::date END) AS place_stay_registration_date,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateEnd')::date END) AS place_stay_deregistration_date,
- CASE
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '1' THEN 'В жилом помещении, не являющимся местом жительства физического лица'
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '2' THEN 'В учреждении уголовно-исполнительной системы'
- ELSE NULL
- END AS place_stay_registration_type,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN addr->>'reg' END) AS factual_address,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateStart')::date END) AS factual_info_received_date,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateEnd')::date END) AS factual_info_expiry_date
-FROM ervu_dashboard.recruits_info ri
- JOIN ervu_dashboard.citizen c ON c.recruit_id = ri.recruit_id
- CROSS JOIN LATERAL jsonb_array_elements(ri.addresses) AS addr
-WHERE
- '${IDM_ID}' != ''
- AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
- AND'${M_R_CR_DATE}'::timestamp >= c.recruit_create_date
-GROUP BY ri.recruit_id;
+ WITH filteredData AS (SELECT ri.recruit_id,
+ ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr' as diploma_arr
+ FROM recruits_info ri
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+)
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem ->> 'naimUchZaved' as educational_institution_name,
+ diploma_elem ->> 'naimInoDok' as foreign_doc_name,
+ diploma_elem ->> 'serNomDok' as ser_num_doc,
+ diploma_elem ->> 'regNomDok' as reg_num,
+ diploma_elem ->> 'nomSved' as recognition_certificate_number,
+ to_date(diploma_elem ->> 'dataPriz', 'YYYY-MM-DD') as recognition_date,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ diploma_elem ->> 'kodOKSM' as oksm_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd
+ CROSS JOIN LATERAL jsonb_array_elements(diploma_arr) AS diploma_elem;
+
Y
- 464
- 320
-
-
-
- Table output
- TableOutput
-
- N
-
- 1
-
- none
-
-
- 1000
- ervu-dashboard
-
-
- recruit_id
- recruit_id
-
-
- residence_address
- residence_address
-
-
- residence_registration_date
- residence_registration_date
-
-
- residence_deregistration_date
- residence_deregistration_date
-
-
- place_stay_address
- place_stay_address
-
-
- place_stay_registration_date
- place_stay_registration_date
-
-
- place_stay_deregistration_date
- place_stay_deregistration_date
-
-
- place_stay_registration_type
- place_stay_registration_type
-
-
- factual_address
- factual_address
-
-
- factual_info_received_date
- factual_info_received_date
-
-
- factual_info_expiry_date
- factual_info_expiry_date
-
-
- N
- N
- N
- N
- Y
- N
- ervu_dashboard
- Y
-
- N
- Y
- N
- Y
-
-
- 832
- 320
+ 544
+ 432
- Table output
+ citizen_education_diploma_output
Change job status on error
Y
error_description
- error_code
+
diff --git a/mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
similarity index 63%
rename from mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
index 99e9f11..9095203 100644
--- a/mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
@@ -1,7 +1,7 @@
- citizen_spouse_flow_delta
+ foreign_diploma_flow_delta
Y
@@ -13,31 +13,21 @@
1000
100
-
- 2025/08/11 13:22:56.048
+ 2025/09/05 08:36:17.176
-
- 2025/08/11 13:22:56.048
+ 2025/09/05 08:36:17.176
-
- Create job execution record
- Table input
- Y
-
-
- Insert / update
- Change job status on error
- Y
-
Change job status on error
Abort
Y
- Insert / update
- Filter rows
+ Create job execution record
+ foerign_diploma_input
Y
@@ -46,25 +36,35 @@
Y
- Insert / update
+ Identify last row in a stream
Detect empty stream
Y
+
+ Identify last row in a stream
+ foreign_diploma_upsert
+ Y
+
+
+ foerign_diploma_input
+ Identify last row in a stream
+ Y
+
+
+ foreign_diploma_upsert
+ Change job status on error
+ Y
+
+
+ foreign_diploma_upsert
+ Filter rows
+ Y
+
Detect empty stream
Change job status on success
Y
-
- Table input
- Identify last row in a stream
- Y
-
-
- Identify last row in a stream
- Insert / update
- Y
-
Abort
@@ -77,13 +77,13 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
- 976
- 480
+ 1280
+ 688
@@ -101,9 +101,6 @@
error_description
-
- error_code
-
ervu-dashboard
Y
@@ -120,8 +117,8 @@ and recruitment_id = '${IDM_ID}';
- 736
- 480
+ 1056
+ 688
@@ -144,16 +141,15 @@ and recruitment_id = '${IDM_ID}';
N
N
UPDATE etl.job_execution
-SET status = 'DELTA_SUCCESS',
- error_description = null
+SET status = 'DELTA_SUCCESS'
WHERE job_name = '${JOB_NAME}'
- and recruitment_id = '${IDM_ID}'
- and status = 'DELTA_PROCESSING';
+and recruitment_id = '${IDM_ID}';
+
- 1200
- 80
+ 1280
+ 320
@@ -178,13 +174,14 @@ WHERE job_name = '${JOB_NAME}'
UPDATE etl.job_execution
SET
status = 'DELTA_PROCESSING',
- execution_datetime = DEFAULT
+ execution_datetime = current_timestamp,
+ error_description = NULL
where job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
- 96
- 224
+ 352
+ 496
@@ -200,8 +197,8 @@ and recruitment_id = '${IDM_ID}';
- 1200
- 224
+ 768
+ 320
@@ -236,15 +233,15 @@ and recruitment_id = '${IDM_ID}';
Change job status on success
- 736
- 80
+ 1280
+ 496
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -254,129 +251,15 @@ and recruitment_id = '${IDM_ID}';
last_row
- 576
- 224
+ 768
+ 496
- Insert / update
- InsertUpdate
-
- N
-
- 1
-
- none
-
-
- 100
- ervu-dashboard
-
-
- =
- recruit_id
- recruit_id
-
-
- =
- spouse_external_id
- spouse_external_id
-
- ervu_dashboard
-
-
- recruit_id
- recruit_id
- N
-
-
- spouse_external_id
- spouse_external_id
- N
-
-
- spouse_id_ern
- spouse_id_ern
- Y
-
-
- kinship_type
- kinship_type
- Y
-
-
- last_name
- last_name
- Y
-
-
- first_name
- first_name
- Y
-
-
- middle_name
- middle_name
- Y
-
-
- full_name
- full_name
- Y
-
-
- birth_date
- birth_date
- Y
-
-
- death_date
- death_date
- Y
-
-
- death_az_number
- death_az_number
- Y
-
-
- marriage_az_number
- marriage_az_number
- Y
-
-
- marriage_date
- marriage_date
- Y
-
-
- divorce_az_number
- divorce_az_number
- Y
-
-
- divorce_date
- divorce_date
- Y
-
-
- information_excluded
- information_excluded
- Y
-
-
- N
-
-
- 736
- 224
-
-
-
- Table input
+ foerign_diploma_input
TableInput
- N
+ Y
1
@@ -386,63 +269,151 @@ and recruitment_id = '${IDM_ID}';
ervu-dashboard
N
- SELECT
- ri.recruit_id AS recruit_id,
- (supr->>'id')::uuid AS spouse_external_id,
- NULLIF(supr->>'idERN', '') AS spouse_id_ern,
- NULLIF(supr->>'rodstvSvyazSuprug', '')::int AS kinship_type,
- supr->'svedFLBS'->'fio'->>'familiya' AS last_name,
- supr->'svedFLBS'->'fio'->>'imya' AS first_name,
- supr->'svedFLBS'->'fio'->>'otchestvo' AS middle_name,
- 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,
- ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'nomerZapis' AS marriage_az_number,
- (ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'dataBrakKalend')::date AS marriage_date,
- ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'nomerZapis' AS divorce_az_number,
- (ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'dataRastBrakKalend')::date AS divorce_date,
- CASE
- WHEN ri.info->'svedFL'->'svedSemPolozh'->>'svedSuprIskl' = '1' THEN true
- ELSE false
- END AS information_excluded
-FROM ervu_dashboard.recruits_info ri
-JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id
-CROSS JOIN LATERAL (
- SELECT supri
- FROM jsonb_array_elements(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') AS supri
- WHERE jsonb_typeof(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') = 'array'
-) AS supr(supr)
-WHERE
- '${IDM_ID}' != ''
- AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
- AND '${M_R_CR_DATE}'::timestamp >= r.recruit_create_date
- AND c.update_date >= '${M_R_UP_DATE}'::timestamp;
-
+ WITH filteredData AS (SELECT ri.recruit_id,
+ diploma_elem
+ FROM recruits_info ri
+ CROSS JOIN LATERAL jsonb_array_elements(
+ ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr') AS diploma_elem
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+ and to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'
+)
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem ->> 'naimUchZaved' as educational_institution_name,
+ diploma_elem ->> 'naimInoDok' as foreign_doc_name,
+ diploma_elem ->> 'serNomDok' as ser_num_doc,
+ diploma_elem ->> 'regNomDok' as reg_num,
+ diploma_elem ->> 'nomSved' as recognition_certificate_number,
+ to_date(diploma_elem ->> 'dataPriz', 'YYYY-MM-DD') as recognition_date,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ diploma_elem ->> 'kodOKSM' as oksm_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd;
Y
- 368
- 224
+ 576
+ 496
+
+
+
+ foreign_diploma_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ source_id
+ source_id
+
+ ervu_dashboard
+
+
+ recruit_id
+ recruit_id
+ N
+
+
+ source_id
+ source_id
+ N
+
+
+ source_update_date
+ source_update_date
+ Y
+
+
+ education_level_code
+ education_level_code
+ Y
+
+
+ educational_institution_name
+ educational_institution_name
+ Y
+
+
+ foreign_doc_name
+ foreign_doc_name
+ Y
+
+
+ ser_num_doc
+ ser_num_doc
+ Y
+
+
+ reg_num
+ reg_num
+ Y
+
+
+ recognition_certificate_number
+ recognition_certificate_number
+ Y
+
+
+ recognition_date
+ recognition_date
+ Y
+
+
+ speciality_name
+ speciality_name
+ Y
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ Y
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ Y
+
+
+ oksm_code
+ oksm_code
+ Y
+
+
+ vus_spec
+ vus_spec
+ Y
+
+
+ N
+
+
+ 1056
+ 496
- Insert / update
+ foreign_diploma_upsert
Change job status on error
Y
error_description
- error_code
+
diff --git a/mappings/info_recruits/raw_data/restriction_document/parallel/restriction_document_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
similarity index 63%
rename from mappings/info_recruits/raw_data/restriction_document/parallel/restriction_document_flow_repeat.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
index 809cfea..83f0d80 100644
--- a/mappings/info_recruits/raw_data/restriction_document/parallel/restriction_document_flow_repeat.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
@@ -1,7 +1,7 @@
- restriction_document_flow_repeat
+ foreign_diploma_flow_repeat
Y
@@ -13,21 +13,21 @@
1000
100
-
- 2025/08/08 13:25:52.319
+ 2025/09/04 21:35:58.671
-
- 2025/08/08 13:25:52.319
+ 2025/09/04 21:35:58.671
- Create job execution record
- Table input
+ Change job status on error
+ Abort
Y
- Table input
- Identify last row in a stream
+ Create job execution record
+ foerign_diploma_input
Y
@@ -35,36 +35,36 @@
Change job status on success
Y
-
- Detect empty stream
- Change job status on success
- Y
-
-
- Change job status on error
- Abort
- Y
-
Identify last row in a stream
- Insert / update
- Y
-
-
- Insert / update
- Filter rows
- Y
-
-
- Insert / update
Detect empty stream
Y
- Insert / update
+ foerign_diploma_input
+ Identify last row in a stream
+ Y
+
+
+ Identify last row in a stream
+ foreign_diploma_upsert
+ Y
+
+
+ foreign_diploma_upsert
+ Filter rows
+ Y
+
+
+ foreign_diploma_upsert
Change job status on error
Y
+
+ Detect empty stream
+ Change job status on success
+ Y
+
Abort
@@ -77,13 +77,13 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
1248
- 400
+ 624
@@ -117,8 +117,8 @@ and recruitment_id = '${IDM_ID}';
- 960
- 400
+ 1024
+ 624
@@ -148,8 +148,8 @@ and recruitment_id = '${IDM_ID}';
- 1440
- 48
+ 1248
+ 272
@@ -171,32 +171,17 @@ and recruitment_id = '${IDM_ID}';
Y
N
N
- INSERT INTO etl.job_execution (
- id,
- job_name,
- status,
- execution_datetime,
- error_description,
- recruitment_id
-)
-VALUES (
- DEFAULT,
- '${JOB_NAME}',
- 'PROCESSING',
- DEFAULT,
- NULL,
- '${IDM_ID}'
-)
-ON CONFLICT (job_name, recruitment_id)
-DO UPDATE SET
+ UPDATE etl.job_execution
+SET
status = 'PROCESSING',
- execution_datetime = DEFAULT,
+ execution_datetime = current_timestamp,
error_description = NULL
-
+where job_name = '${JOB_NAME}'
+and recruitment_id = '${IDM_ID}';
- 272
- 208
+ 320
+ 448
@@ -212,8 +197,8 @@ DO UPDATE SET
- 1440
- 208
+ 736
+ 272
@@ -248,15 +233,15 @@ DO UPDATE SET
Change job status on success
- 960
- 48
+ 1248
+ 448
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -266,151 +251,166 @@ DO UPDATE SET
last_row
- 720
- 208
+ 736
+ 448
- Insert / update
- InsertUpdate
+ foerign_diploma_input
+ TableInput
- N
+ Y
1
none
- 100
+ ervu-dashboard
+ N
+
+ WITH filteredData AS (SELECT ri.recruit_id,
+ ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr' as diploma_arr
+ FROM recruits_info ri
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedInObr' -> 'inObr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+)
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem ->> 'naimUchZaved' as educational_institution_name,
+ diploma_elem ->> 'naimInoDok' as foreign_doc_name,
+ diploma_elem ->> 'serNomDok' as ser_num_doc,
+ diploma_elem ->> 'regNomDok' as reg_num,
+ diploma_elem ->> 'nomSved' as recognition_certificate_number,
+ to_date(diploma_elem ->> 'dataPriz', 'YYYY-MM-DD') as recognition_date,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ diploma_elem ->> 'kodOKSM' as oksm_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd
+ CROSS JOIN LATERAL jsonb_array_elements(diploma_arr) AS diploma_elem;
+
+ Y
+
+
+ 544
+ 448
+
+
+
+ foreign_diploma_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
ervu-dashboard
=
- id
- id
-
-
-
- =
- created_at
- created_at
-
+ source_id
+ source_id
ervu_dashboard
-
+
- id
- id
+ recruit_id
+ recruit_id
N
- subpoena_id
- subpoena_id
- Y
-
-
- created_at
- created_at
+ source_id
+ source_id
N
- updated_at
- updated_at
+ source_update_date
+ source_update_date
Y
- vk_id
- vk_id
+ education_level_code
+ education_level_code
Y
- user_id
- user_id
+ educational_institution_name
+ educational_institution_name
Y
- user_name
- user_name
+ foreign_doc_name
+ foreign_doc_name
Y
- status
- status
+ ser_num_doc
+ ser_num_doc
Y
- decision_number
- decision_number
+ reg_num
+ reg_num
Y
- decision_date
- decision_date
+ recognition_certificate_number
+ recognition_certificate_number
Y
- decision_reason
- decision_reason
+ recognition_date
+ recognition_date
Y
- extra_info
- extra_info
+ speciality_name
+ speciality_name
Y
- type
- type
+ minobr_speciality_code
+ minobr_speciality_code
Y
- recruitment_name
- recruitment_name
+ minprosv_speciality_code
+ minprosv_speciality_code
+ Y
+
+
+ oksm_code
+ oksm_code
+ Y
+
+
+ vus_spec
+ vus_spec
Y
N
- 960
- 208
-
-
-
- Table input
- TableInput
-
- N
-
- 1
-
- none
-
-
- postgres.subpoena
- N
- SELECT
-*
-FROM public.restriction_document
-WHERE
- '${IDM_ID}' != '' -- Проверка на пустую строку
- AND vk_id = '${IDM_ID}'
- AND '${M_R_CR_DATE}' >= created_at
-${LIMIT_FW}
- Y
-
-
- 480
- 208
+ 1024
+ 448
- Insert / update
+ foreign_diploma_upsert
Change job status on error
Y
-
+ error_description
diff --git a/mappings/info_recruits/citizen_tables/prosecution/recruitments_five_flow.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow.hpl
similarity index 81%
rename from mappings/info_recruits/citizen_tables/prosecution/recruitments_five_flow.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow.hpl
index 2d2c4ac..06fe914 100644
--- a/mappings/info_recruits/citizen_tables/prosecution/recruitments_five_flow.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow.hpl
@@ -1,7 +1,7 @@
- recruitments_five_flow
+ recruitment_five_flow
Y
@@ -13,41 +13,41 @@
1000
100
-
- 2025/04/18 09:48:01.970
+ 2025/09/04 20:54:08.982
-
- 2025/04/18 09:48:01.970
+ 2025/09/04 20:54:08.982
- Get all recruitments ordered by created_date
- prosecution_flow.hpl
+ Get all recruitments
+ foreign_diploma_flow.hpl
Y
- Get all recruitments ordered by created_date
- prosecution_flow.hpl 2
+ Get all recruitments
+ foreign_diploma_flow.hpl 2
Y
- Get all recruitments ordered by created_date
- prosecution_flow.hpl 3
+ Get all recruitments
+ foreign_diploma_flow.hpl 3
Y
- Get all recruitments ordered by created_date
- prosecution_flow.hpl 4
+ Get all recruitments
+ foreign_diploma_flow.hpl 4
Y
- Get all recruitments ordered by created_date
- prosecution_flow.hpl 5
+ Get all recruitments
+ foreign_diploma_flow.hpl 5
Y
- Get all recruitments ordered by created_date
+ Get all recruitments
TableInput
Y
@@ -57,21 +57,71 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
-
SELECT
-idm_id AS recruitment
+idm_id
FROM ervu_dashboard.recruitment;
N
- 432
+ 448
+ 464
+
+
+
+ foreign_diploma_flow.hpl
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 720
304
- prosecution_flow.hpl
+ foreign_diploma_flow.hpl 2
PipelineExecutor
Y
@@ -82,7 +132,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/prosecution/parallel/prosecution_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
N
1
@@ -91,14 +141,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- prosecution_job
-
Y
@@ -122,180 +167,12 @@ FROM ervu_dashboard.recruitment;
- 704
- 144
-
-
-
- prosecution_flow.hpl 2
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/prosecution/parallel/prosecution_flow.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment
-
-
-
- JOB_NAME
-
- prosecution_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 704
- 224
-
-
-
- prosecution_flow.hpl 3
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/prosecution/parallel/prosecution_flow.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment
-
-
-
- JOB_NAME
-
- prosecution_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 704
- 304
-
-
-
- prosecution_flow.hpl 4
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/prosecution/parallel/prosecution_flow.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment
-
-
-
- JOB_NAME
-
- prosecution_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 704
+ 720
384
- prosecution_flow.hpl 5
+ foreign_diploma_flow.hpl 3
PipelineExecutor
Y
@@ -306,7 +183,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/prosecution/parallel/prosecution_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
N
1
@@ -315,14 +192,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- prosecution_job
-
Y
@@ -346,10 +218,112 @@ FROM ervu_dashboard.recruitment;
- 704
+ 720
464
+
+ foreign_diploma_flow.hpl 4
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 720
+ 544
+
+
+
+ foreign_diploma_flow.hpl 5
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 720
+ 624
+
+
diff --git a/mappings/info_recruits/citizen_tables/deferment_liberation_permission/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_delta.hpl
similarity index 77%
rename from mappings/info_recruits/citizen_tables/deferment_liberation_permission/recruitment_five_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_delta.hpl
index e55fa8d..ea8c53a 100644
--- a/mappings/info_recruits/citizen_tables/deferment_liberation_permission/recruitment_five_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_delta.hpl
@@ -13,36 +13,41 @@
1000
100
-
- 2025/08/11 13:16:11.204
+ 2025/08/28 21:23:43.331
-
- 2025/08/11 13:16:11.204
+ 2025/08/28 21:23:43.331
Table input
- deferment_liberation_permission_flow_delta.hpl
+ foreign_diploma_flow_delta.hpl
+ Y
+
+
+ get_max_source_update_date
+ Table input
Y
Table input
- deferment_liberation_permission_flow_delta.hpl 2
+ foreign_diploma_flow_delta.hpl 2
Y
Table input
- deferment_liberation_permission_flow_delta.hpl 3
+ foreign_diploma_flow_delta.hpl 3
Y
Table input
- deferment_liberation_permission_flow_delta.hpl 4
+ foreign_diploma_flow_delta.hpl 4
Y
Table input
- deferment_liberation_permission_flow_delta.hpl 5
+ foreign_diploma_flow_delta.hpl 5
Y
@@ -57,249 +62,35 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
0
+ get_max_source_update_date
SELECT
- r.idm_id as recruitment_id
+ r.idm_id,
+ ? max_source_update_date
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
- and job_name = 'deferment_liberation_permission_job'
+ and job_name = '${JOB_NAME}'
+ JOIN recruits_info ri
+ ON COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = r.idm_id
+ AND ri.updated_at > (
+ SELECT MAX(execution_datetime)
+ FROM etl.job_execution
+ WHERE job_name = '${JOB_NAME}'
+ AND recruitment_id = r.idm_id
+ )
where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');
N
- 352
- 288
-
-
-
- deferment_liberation_permission_flow_delta.hpl
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/parallel/deferment_liberation_permission_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- deferment_liberation_permission_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 640
- 128
-
-
-
- deferment_liberation_permission_flow_delta.hpl 2
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/parallel/deferment_liberation_permission_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- deferment_liberation_permission_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 640
- 208
-
-
-
- deferment_liberation_permission_flow_delta.hpl 3
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/parallel/deferment_liberation_permission_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- deferment_liberation_permission_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 640
- 288
-
-
-
- deferment_liberation_permission_flow_delta.hpl 4
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/parallel/deferment_liberation_permission_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- deferment_liberation_permission_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 640
+ 608
384
- deferment_liberation_permission_flow_delta.hpl 5
+ foreign_diploma_flow_delta.hpl
PipelineExecutor
Y
@@ -310,7 +101,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/parallel/deferment_liberation_permission_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
N
1
@@ -319,13 +110,13 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
IDM_ID
- recruitment_id
+ idm_id
- JOB_NAME
-
- deferment_liberation_permission_job
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
Y
@@ -350,8 +141,255 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 640
- 480
+ 800
+ 224
+
+
+
+ foreign_diploma_flow_delta.hpl 2
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 304
+
+
+
+ foreign_diploma_flow_delta.hpl 3
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 384
+
+
+
+ foreign_diploma_flow_delta.hpl 4
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 464
+
+
+
+ foreign_diploma_flow_delta.hpl 5
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 800
+ 544
+
+
+
+ get_max_source_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ select max(source_update_date)
+from foreign_diploma;
+ N
+
+
+ 432
+ 384
diff --git a/mappings/info_recruits/citizen_tables/child/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_repeat.hpl
similarity index 84%
rename from mappings/info_recruits/citizen_tables/child/recruitment_five_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_repeat.hpl
index 71e650a..818600f 100644
--- a/mappings/info_recruits/citizen_tables/child/recruitment_five_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/foreign_diploma/recruitment_five_flow_repeat.hpl
@@ -1,7 +1,7 @@
- recruitment_five_flow_delta
+ recruitment_five_flow_repeat
Y
@@ -13,36 +13,36 @@
1000
100
-
- 2025/08/11 13:16:11.204
+ 2025/09/05 08:56:57.814
-
- 2025/08/11 13:16:11.204
+ 2025/09/05 08:56:57.814
Table input
- child_flow_delta.hpl
+ foreign_diploma_flow_repeat.hpl
Y
Table input
- child_flow_delta.hpl 2
+ foreign_diploma_flow_repeat.hpl 2
Y
Table input
- child_flow_delta.hpl 3
+ foreign_diploma_flow_repeat.hpl 3
Y
Table input
- child_flow_delta.hpl 4
+ foreign_diploma_flow_repeat.hpl 4
Y
Table input
- child_flow_delta.hpl 5
+ foreign_diploma_flow_repeat.hpl 5
Y
@@ -57,25 +57,25 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
0
- SELECT
- r.idm_id as recruitment_id
+ SELECT r.idm_id AS recruitment_id
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
- and job_name = 'child_job'
-where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');
+ AND je.job_name = 'foreign_diploma_job'
+WHERE je.id IS NULL
+ OR je.status IN ('ERROR', 'PROCESSING');
N
- 352
- 288
+ 624
+ 512
- child_flow_delta.hpl
+ foreign_diploma_flow_repeat.hpl
PipelineExecutor
Y
@@ -86,7 +86,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/child/parallel/child_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
N
1
@@ -98,11 +98,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- child_job
-
Y
@@ -126,12 +121,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 128
+ 832
+ 352
- child_flow_delta.hpl 2
+ foreign_diploma_flow_repeat.hpl 2
PipelineExecutor
Y
@@ -142,7 +137,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/child/parallel/child_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
N
1
@@ -154,11 +149,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- child_job
-
Y
@@ -182,12 +172,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 208
+ 832
+ 432
- child_flow_delta.hpl 3
+ foreign_diploma_flow_repeat.hpl 3
PipelineExecutor
Y
@@ -198,7 +188,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/child/parallel/child_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
N
1
@@ -210,11 +200,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- child_job
-
Y
@@ -238,12 +223,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 288
+ 832
+ 512
- child_flow_delta.hpl 4
+ foreign_diploma_flow_repeat.hpl 4
PipelineExecutor
Y
@@ -254,7 +239,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/child/parallel/child_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
N
1
@@ -266,11 +251,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- child_job
-
Y
@@ -294,12 +274,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 368
+ 832
+ 592
- child_flow_delta.hpl 5
+ foreign_diploma_flow_repeat.hpl 5
PipelineExecutor
Y
@@ -310,7 +290,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/child/parallel/child_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/foreign_diploma/parallel/foreign_diploma_flow_repeat.hpl
N
1
@@ -322,11 +302,6 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
recruitment_id
-
- JOB_NAME
-
- child_job
-
Y
@@ -350,8 +325,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 544
- 448
+ 832
+ 672
diff --git a/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow.hpl
new file mode 100644
index 0000000..aee3c4e
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow.hpl
@@ -0,0 +1,199 @@
+
+
+
+ russian_diploma_constants_flow
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/22 08:32:44.247
+ -
+ 2025/09/22 08:32:44.247
+
+
+
+
+
+ minobr_doc_type_input
+ minobr_doc_type_output
+ Y
+
+
+ minprosv_doc_type_input
+ minprosv_doc_type_output
+ Y
+
+
+
+ minobr_doc_type_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationNaimVidDocMinobr';
+ N
+
+
+ 384
+ 272
+
+
+
+ minprosv_doc_type_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual,
+ updated_at as update_date
+FROM classifier_records
+WHERE code = 'educationNaimVidDocMinprosv';
+ N
+
+
+ 384
+ 384
+
+
+
+ minobr_doc_type_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ ervu_dashboard
+ Y
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 272
+
+
+
+ minprosv_doc_type_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ code
+ code
+
+
+ value
+ value
+
+
+ actual
+ actual
+
+
+ update_date
+ update_date
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ ervu_dashboard
+ Y
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 624
+ 384
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow_repeat.hpl
new file mode 100644
index 0000000..54dedda
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow_repeat.hpl
@@ -0,0 +1,255 @@
+
+
+
+ foreign_diploma_constants_flow
+ Y
+
+
+
+ Normal
+
+
+ N
+ 1000
+ 100
+ -
+ 2025/09/22 08:32:45.452
+ -
+ 2025/09/22 08:32:45.452
+
+
+
+
+
+ minobr_doc_type_input
+ minobr_doc_type_upsert
+ Y
+
+
+ minprosv_doc_type_input
+ minprosv_doc_type_upsert
+ Y
+
+
+ get_max_minobr_doc_type_update_date
+ minobr_doc_type_input
+ Y
+
+
+ get_max_minprosv_doc_type_date
+ minprosv_doc_type_input
+ Y
+
+
+
+ minobr_doc_type_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_minobr_doc_type_update_date
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual
+FROM classifier_records
+WHERE code = 'educationNaimVidDocMinobr'
+AND updated_at > ?;
+ N
+
+
+ 720
+ 256
+
+
+
+ minobr_doc_type_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+ ervu_dashboard
+
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 992
+ 256
+
+
+
+ minprosv_doc_type_input
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ nsi
+ N
+ 0
+ get_max_minprosv_doc_type_date
+ SELECT
+ key as code,
+ value ->> 'value' as value,
+ NOT hidden as actual
+FROM classifier_records
+WHERE code = 'educationNaimVidDocMinprosv'
+AND updated_at > ?;
+ N
+
+
+ 720
+ 416
+
+
+
+ minprosv_doc_type_upsert
+ InsertUpdate
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ =
+ code
+ code
+
+
+ ervu_dashboard
+
+
+ code
+ code
+ N
+
+
+ value
+ value
+ Y
+
+
+ actual
+ actual
+ Y
+
+
+ update_date
+ update_date
+ Y
+
+
+ N
+
+
+ 992
+ 416
+
+
+
+ get_max_minobr_doc_type_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM minobr_doc_type;
+
+ N
+
+
+ 464
+ 256
+
+
+
+ get_max_minprosv_doc_type_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ SELECT
+ max(update_date) as max_update_date
+FROM minprosv_doc_type;
+
+ N
+
+
+ 464
+ 416
+
+
+
+
+
+
diff --git a/mappings/info_recruits/citizen_tables/work/self_employed/support/check_if_self_employed_job_execution_exists.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/support/check_if_constants_exists.hpl
similarity index 75%
rename from mappings/info_recruits/citizen_tables/work/self_employed/support/check_if_self_employed_job_execution_exists.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/constants/support/check_if_constants_exists.hpl
index 494e70f..fd54f04 100644
--- a/mappings/info_recruits/citizen_tables/work/self_employed/support/check_if_self_employed_job_execution_exists.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/constants/support/check_if_constants_exists.hpl
@@ -1,7 +1,7 @@
- check_if_self_employed_job_execution_exists
+ check_if_constants_exists
Y
@@ -13,9 +13,9 @@
1000
100
-
- 2025/08/18 20:34:56.618
+ 2025/09/22 08:47:26.114
-
- 2025/08/18 20:34:56.618
+ 2025/09/22 08:47:26.114
@@ -39,16 +39,17 @@
- job_executed_flag
- JOB_EXECUTED_FLAG
+
+ constants_exists
+ CONSTANTS_EXISTS
PARENT_WORKFLOW
Y
- 592
- 192
+ 480
+ 208
@@ -66,16 +67,15 @@
N
0
SELECT EXISTS (
- SELECT 1
- FROM etl.job_execution
- WHERE job_name = 'self_employed_job'
- limit 1
- ) AS job_executed_flag;
- N
+ SELECT 1 FROM minobr_doc_type
+ UNION ALL
+ SELECT 1 FROM minprosv_doc_type
+) AS constants_exists
+ Y
- 304
- 192
+ 192
+ 208
diff --git a/mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
similarity index 64%
rename from mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
index ebfe4cd..fda88dd 100644
--- a/mappings/info_recruits/citizen_tables/citizen_spouse/parallel/citizen_spouse_flow.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
@@ -1,7 +1,7 @@
- citizen_spouse_flow
+ russian_diploma_flow
Y
@@ -13,21 +13,21 @@
1000
100
-
- 2025/08/05 14:31:22.799
+ 2025/09/01 16:13:06.345
-
- 2025/08/05 14:31:22.799
+ 2025/09/01 16:13:06.345
- Create job execution record
- Table input
+ Change job status on error
+ Abort
Y
- Table output
- Change job status on error
+ Create job execution record
+ education_input
Y
@@ -36,35 +36,35 @@
Y
- Table output
+ Identify last row in a stream
Detect empty stream
Y
- Detect empty stream
- Change job status on success
+ citizen_education_diploma_output
+ Change job status on error
Y
- Change job status on error
- Abort
- Y
-
-
- Table input
+ education_input
Identify last row in a stream
Y
Identify last row in a stream
- Table output
+ citizen_education_diploma_output
Y
- Table output
+ citizen_education_diploma_output
Filter rows
Y
+
+ Detect empty stream
+ Change job status on success
+ Y
+
Abort
@@ -77,13 +77,13 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
- 1136
- 528
+ 1152
+ 560
@@ -117,8 +117,8 @@ and recruitment_id = '${IDM_ID}';
- 720
- 528
+ 928
+ 560
@@ -143,14 +143,13 @@ and recruitment_id = '${IDM_ID}';
UPDATE etl.job_execution
SET status = 'SUCCESS'
WHERE job_name = '${JOB_NAME}'
-and recruitment_id = '${IDM_ID}'
-and status = 'PROCESSING';
+and recruitment_id = '${IDM_ID}';
- 1120
- 64
+ 1152
+ 224
@@ -178,8 +177,8 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
- 80
- 320
+ 224
+ 400
@@ -195,8 +194,8 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
- 1120
- 320
+ 640
+ 224
@@ -231,15 +230,15 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
Change job status on success
- 720
- 64
+ 1152
+ 400
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -249,12 +248,113 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
last_row
- 576
- 320
+ 640
+ 400
- Table input
+ citizen_education_diploma_output
+ TableOutput
+
+ Y
+
+ 1
+
+ none
+
+
+ 10000
+ ervu-dashboard
+
+
+ recruit_id
+ recruit_id
+
+
+ source_id
+ source_id
+
+
+ source_update_date
+ source_update_date
+
+
+ education_level_code
+ education_level_code
+
+
+ document_type
+ document_type
+
+
+ minobr_document_type_code
+ minobr_document_type_code
+
+
+ minprosv_document_type_code
+ minprosv_document_type_code
+
+
+ seria
+ seria
+
+
+ number
+ number
+
+
+ reg_number
+ reg_number
+
+
+ issue_date
+ issue_date
+
+
+ educational_institution_name
+ educational_institution_name
+
+
+ speciality_name
+ speciality_name
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+
+
+ vus_spec
+ vus_spec
+
+
+ N
+ N
+ N
+ N
+
+ Y
+
+ N
+ ervu_dashboard
+ Y
+
+
+ N
+ Y
+ N
+ Y
+
+
+ 928
+ 400
+
+
+
+ education_input
TableInput
Y
@@ -267,159 +367,46 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
ervu-dashboard
N
- SELECT
- ri.recruit_id AS recruit_id,
- (supr->>'id')::uuid AS spouse_external_id,
- NULLIF(supr->>'idERN', '') AS spouse_id_ern,
- NULLIF(supr->>'rodstvSvyazSuprug', '')::int AS kinship_type,
- supr->'svedFLBS'->'fio'->>'familiya' AS last_name,
- supr->'svedFLBS'->'fio'->>'imya' AS first_name,
- supr->'svedFLBS'->'fio'->>'otchestvo' AS middle_name,
- 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,
- ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'nomerZapis' AS marriage_az_number,
- (ri.info->'svedFL'->'svedSemPolozh'->'svedAZBrak'->>'dataBrakKalend')::date AS marriage_date,
- ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'nomerZapis' AS divorce_az_number,
- (ri.info->'svedFL'->'svedSemPolozh'->'svedAZRazvod'->>'dataRastBrakKalend')::date AS divorce_date,
- CASE
- WHEN ri.info->'svedFL'->'svedSemPolozh'->>'svedSuprIskl' = '1' THEN true
- ELSE false
- END AS information_excluded
-FROM ervu_dashboard.recruits_info ri
-JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id
-CROSS JOIN LATERAL (
- SELECT supri
- FROM jsonb_array_elements(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') AS supri
- WHERE jsonb_typeof(ri.info->'svedFL'->'svedSemPolozh'->'suprugi') = 'array'
-) AS supr(supr)
-WHERE
- '${IDM_ID}' != ''
- AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
- AND '${M_R_CR_DATE}'::timestamp >= r.recruit_create_date;
+ WITH filteredData AS (SELECT ri.recruit_id,
+ ri.info -> 'svedFL' -> 'svedRObr' -> 'robr' AS diploma_arr
+ FROM recruits_info ri
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedRObr' -> 'robr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+)
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem -> 'vidDok' ->> 'naimVidDok' as document_type,
+ diploma_elem -> 'vidDokMinobr' ->> 'kodVidDok' as minobr_document_type_code,
+ diploma_elem -> 'vidDokMinprosv' ->> 'kodVidDok' as minprosv_document_type_code,
+ diploma_elem ->> 'seriyaBlank' as seria,
+ diploma_elem ->> 'nomerBlank' as number,
+ diploma_elem ->> 'regNomer' as reg_number,
+ to_date(diploma_elem ->> 'dataVyd', 'YYYY-MM-DD') as issue_date,
+ diploma_elem ->> 'naimOrg' as educational_institution_name,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd
+ CROSS JOIN LATERAL jsonb_array_elements(diploma_arr) AS diploma_elem;
Y
- 368
- 320
-
-
-
- Table output
- TableOutput
-
- N
-
- 1
-
- none
-
-
- 1000
- ervu-dashboard
-
-
- recruit_id
- recruit_id
-
-
- spouse_external_id
- spouse_external_id
-
-
- spouse_id_ern
- spouse_id_ern
-
-
- kinship_type
- kinship_type
-
-
- last_name
- last_name
-
-
- first_name
- first_name
-
-
- middle_name
- middle_name
-
-
- full_name
- full_name
-
-
- birth_date
- birth_date
-
-
- death_date
- death_date
-
-
- death_az_number
- death_az_number
-
-
- marriage_az_number
- marriage_az_number
-
-
- marriage_date
- marriage_date
-
-
- divorce_az_number
- divorce_az_number
-
-
- divorce_date
- divorce_date
-
-
- information_excluded
- information_excluded
-
-
- N
- N
- N
- N
- Y
- N
- ervu_dashboard
- Y
-
- N
- Y
- N
- Y
-
-
- 720
- 320
+ 448
+ 400
- Table output
+ citizen_education_diploma_output
Change job status on error
Y
error_description
- error_code
+
diff --git a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
similarity index 65%
rename from mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
index 262fee7..61e43e6 100644
--- a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
@@ -1,7 +1,7 @@
- citizen_address_flow_delta
+ russian_diploma_flow_delta
Y
@@ -13,26 +13,21 @@
1000
100
-
- 2025/08/11 13:22:56.048
+ 2025/09/01 17:09:06.132
-
- 2025/08/11 13:22:56.048
+ 2025/09/01 17:09:06.132
+
+ Change job status on error
+ Abort
+ Y
+
Create job execution record
- Table input
- Y
-
-
- Insert / update
- Change job status on error
- Y
-
-
- Detect empty stream
- Change job status on success
+ education_input
Y
@@ -41,28 +36,33 @@
Y
- Change job status on error
- Abort
- Y
-
-
- Table input
- Insert / update
- Y
-
-
- Insert / update
- Identify last row in a stream
+ Identify last row in a stream
+ Detect empty stream
Y
Identify last row in a stream
- Filter rows
+ Insert / update
+ Y
+
+
+ education_input
+ Identify last row in a stream
Y
Insert / update
- Detect empty stream
+ Change job status on error
+ Y
+
+
+ Insert / update
+ Filter rows
+ Y
+
+
+ Detect empty stream
+ Change job status on success
Y
@@ -77,13 +77,13 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
- 1008
- 464
+ 1392
+ 656
@@ -117,8 +117,8 @@ and recruitment_id = '${IDM_ID}';
- 752
- 464
+ 1168
+ 656
@@ -143,14 +143,13 @@ and recruitment_id = '${IDM_ID}';
UPDATE etl.job_execution
SET status = 'DELTA_SUCCESS'
WHERE job_name = '${JOB_NAME}'
-and recruitment_id = '${IDM_ID}'
-and status = 'DELTA_PROCESSING';
+and recruitment_id = '${IDM_ID}';
- 1120
- 16
+ 1392
+ 288
@@ -175,14 +174,14 @@ and status = 'DELTA_PROCESSING';
UPDATE etl.job_execution
SET
status = 'DELTA_PROCESSING',
- execution_datetime = DEFAULT,
+ execution_datetime = current_timestamp,
error_description = NULL
where job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
- 128
- 224
+ 464
+ 464
@@ -198,8 +197,8 @@ and recruitment_id = '${IDM_ID}';
- 752
- 16
+ 880
+ 288
@@ -234,15 +233,15 @@ and recruitment_id = '${IDM_ID}';
Change job status on success
- 1120
- 224
+ 1392
+ 464
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -252,96 +251,121 @@ and recruitment_id = '${IDM_ID}';
last_row
- 944
- 224
+ 880
+ 464
Insert / update
InsertUpdate
- N
+ Y
1
none
- 1000
+ 10000
ervu-dashboard
=
- recruit_id
- recruit_id
+ source_id
+ source_id
ervu_dashboard
-
+
recruit_id
recruit_id
N
- residence_address
- residence_address
+ source_id
+ source_id
+ N
+
+
+ source_update_date
+ source_update_date
Y
- residence_registration_date
- residence_registration_date
+ education_level_code
+ education_level_code
Y
- residence_deregistration_date
- residence_deregistration_date
+ document_type
+ document_type
Y
- place_stay_address
- place_stay_address
+ minobr_document_type_code
+ minobr_document_type_code
Y
- place_stay_registration_date
- place_stay_registration_date
+ minprosv_document_type_code
+ minprosv_document_type_code
Y
- place_stay_deregistration_date
- place_stay_deregistration_date
+ seria
+ seria
Y
- place_stay_registration_type
- place_stay_registration_type
+ number
+ number
Y
- factual_address
- factual_address
+ reg_number
+ reg_number
Y
- factual_info_received_date
- factual_info_received_date
+ issue_date
+ issue_date
Y
- factual_info_expiry_date
- factual_info_expiry_date
+ educational_institution_name
+ educational_institution_name
+ Y
+
+
+ speciality_name
+ speciality_name
+ Y
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ Y
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ Y
+
+
+ vus_spec
+ vus_spec
Y
N
- 752
- 224
+ 1168
+ 464
- Table input
+ education_input
TableInput
Y
@@ -354,37 +378,35 @@ and recruitment_id = '${IDM_ID}';
ervu-dashboard
N
- SELECT
- ri.recruit_id::uuid,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'reg' END) AS residence_address,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateStart')::date END) AS residence_registration_date,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateEnd')::date END) AS residence_deregistration_date,
-
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'reg' END) AS place_stay_address,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateStart')::date END) AS place_stay_registration_date,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateEnd')::date END) AS place_stay_deregistration_date,
- CASE
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '1' THEN 'В жилом помещении, не являющимся местом жительства физического лица'
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '2' THEN 'В учреждении уголовно-исполнительной системы'
- ELSE NULL
- END AS place_stay_registration_type,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN addr->>'reg' END) AS factual_address,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateStart')::date END) AS factual_info_received_date,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateEnd')::date END) AS factual_info_expiry_date
-FROM ervu_dashboard.recruits_info ri
- JOIN ervu_dashboard.citizen c ON c.recruit_id = ri.recruit_id
- CROSS JOIN LATERAL jsonb_array_elements(ri.addresses) AS addr
-WHERE
- '${IDM_ID}' != ''
- AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
- AND'${M_R_CR_DATE}'::timestamp >= c.recruit_create_date
- AND c.update_date >= '${M_R_UP_DATE}'::timestamp
-GROUP BY ri.recruit_id;
+ WITH filteredData AS (SELECT ri.recruit_id,
+ ri.info -> 'svedFL' -> 'svedRObr' -> 'robr' AS diploma_arr
+ FROM recruits_info ri
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedRObr' -> 'robr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}')
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem -> 'vidDok' ->> 'naimVidDok' as document_type,
+ diploma_elem -> 'vidDokMinobr' ->> 'kodVidDok' as minobr_document_type_code,
+ diploma_elem -> 'vidDokMinprosv' ->> 'kodVidDok' as minprosv_document_type_code,
+ diploma_elem ->> 'seriyaBlank' as seria,
+ diploma_elem ->> 'nomerBlank' as number,
+ diploma_elem ->> 'regNomer' as reg_number,
+ to_date(diploma_elem ->> 'dataVyd', 'YYYY-MM-DD') as issue_date,
+ diploma_elem ->> 'naimOrg' as educational_institution_name,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd
+ CROSS JOIN LATERAL jsonb_array_elements(diploma_arr) AS diploma_elem
+where to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}';
Y
- 400
- 224
+ 688
+ 464
@@ -395,7 +417,7 @@ GROUP BY ri.recruit_id;
error_description
- error_code
+
diff --git a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
similarity index 64%
rename from mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_repeat.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
index 6722b66..0dbeced 100644
--- a/mappings/info_recruits/citizen_tables/citizen_address/parallel/citizen_address_flow_repeat.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
@@ -1,7 +1,7 @@
- citizen_address_flow_repeat
+ russian_diploma_flow_repeat
Y
@@ -13,16 +13,41 @@
1000
100
-
- 2025/08/08 13:25:52.319
+ 2025/09/01 17:03:13.520
-
- 2025/08/08 13:25:52.319
+ 2025/09/01 17:03:13.520
+
+ Change job status on error
+ Abort
+ Y
+
Create job execution record
- Table input
+ education_input
+ Y
+
+
+ Filter rows
+ Change job status on success
+ Y
+
+
+ Identify last row in a stream
+ Detect empty stream
+ Y
+
+
+ education_input
+ Identify last row in a stream
+ Y
+
+
+ Identify last row in a stream
+ Insert / update
Y
@@ -32,7 +57,7 @@
Insert / update
- Detect empty stream
+ Filter rows
Y
@@ -40,31 +65,6 @@
Change job status on success
Y
-
- Filter rows
- Change job status on success
- Y
-
-
- Change job status on error
- Abort
- Y
-
-
- Insert / update
- Identify last row in a stream
- Y
-
-
- Identify last row in a stream
- Filter rows
- Y
-
-
- Table input
- Insert / update
- Y
-
Abort
@@ -77,12 +77,12 @@
none
- ABORT_WITH_ERROR
+ ABORT
Y
0
- 1232
+ 1136
544
@@ -117,7 +117,7 @@ and recruitment_id = '${IDM_ID}';
- 768
+ 912
544
@@ -143,14 +143,13 @@ and recruitment_id = '${IDM_ID}';
UPDATE etl.job_execution
SET status = 'SUCCESS'
WHERE job_name = '${JOB_NAME}'
-and recruitment_id = '${IDM_ID}'
-and status = 'PROCESSING';
+and recruitment_id = '${IDM_ID}';
- 1120
- 16
+ 1136
+ 208
@@ -172,31 +171,17 @@ and status = 'PROCESSING';
Y
N
N
- INSERT INTO etl.job_execution (
- id,
- job_name,
- status,
- execution_datetime,
- error_description,
- recruitment_id
-)
-VALUES (
- DEFAULT,
- '${JOB_NAME}',
- 'PROCESSING',
- DEFAULT,
- NULL,
- '${IDM_ID}'
-)
+ INSERT INTO etl.job_execution (id, job_name, status, execution_datetime, error_description, recruitment_id)
+VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}')
ON CONFLICT (job_name, recruitment_id)
-DO UPDATE SET
- status = 'PROCESSING',
- execution_datetime = DEFAULT,
- error_description = NULL;
+DO UPDATE
+SET status = 'PROCESSING',
+ error_description = null,
+ execution_datetime = current_timestamp;
- 176
- 272
+ 208
+ 384
@@ -212,8 +197,8 @@ DO UPDATE SET
- 768
- 16
+ 624
+ 208
@@ -248,15 +233,15 @@ DO UPDATE SET
Change job status on success
- 1120
- 272
+ 1136
+ 384
Identify last row in a stream
DetectLastRow
- Y
+ N
1
@@ -266,96 +251,121 @@ DO UPDATE SET
last_row
- 960
- 272
+ 624
+ 384
Insert / update
InsertUpdate
- N
+ Y
1
none
- 1000
+ 10000
ervu-dashboard
=
- recruit_id
- recruit_id
+ source_id
+ source_id
ervu_dashboard
-
+
recruit_id
recruit_id
N
- residence_address
- residence_address
+ source_id
+ source_id
+ N
+
+
+ source_update_date
+ source_update_date
Y
- residence_registration_date
- residence_registration_date
+ education_level_code
+ education_level_code
Y
- residence_deregistration_date
- residence_deregistration_date
+ document_type
+ document_type
Y
- place_stay_address
- place_stay_address
+ minobr_document_type_code
+ minobr_document_type_code
Y
- place_stay_registration_date
- place_stay_registration_date
+ minprosv_document_type_code
+ minprosv_document_type_code
Y
- place_stay_deregistration_date
- place_stay_deregistration_date
+ seria
+ seria
Y
- place_stay_registration_type
- place_stay_registration_type
+ number
+ number
Y
- factual_address
- factual_address
+ reg_number
+ reg_number
Y
- factual_info_received_date
- factual_info_received_date
+ issue_date
+ issue_date
Y
- factual_info_expiry_date
- factual_info_expiry_date
+ educational_institution_name
+ educational_institution_name
+ Y
+
+
+ speciality_name
+ speciality_name
+ Y
+
+
+ minobr_speciality_code
+ minobr_speciality_code
+ Y
+
+
+ minprosv_speciality_code
+ minprosv_speciality_code
+ Y
+
+
+ vus_spec
+ vus_spec
Y
N
- 768
- 272
+ 912
+ 384
- Table input
+ education_input
TableInput
Y
@@ -368,36 +378,35 @@ DO UPDATE SET
ervu-dashboard
N
- SELECT
- ri.recruit_id::uuid,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN addr->>'reg' END) AS residence_address,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateStart')::date END) AS residence_registration_date,
- MAX(CASE WHEN addr->>'type' = 'actualAddress' THEN (addr->>'regDateEnd')::date END) AS residence_deregistration_date,
-
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'reg' END) AS place_stay_address,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateStart')::date END) AS place_stay_registration_date,
- MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN (addr->>'regDateEnd')::date END) AS place_stay_deregistration_date,
- CASE
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '1' THEN 'В жилом помещении, не являющимся местом жительства физического лица'
- WHEN MAX(CASE WHEN addr->>'type' = 'residenceAddress' THEN addr->>'kodTipReg' END) = '2' THEN 'В учреждении уголовно-исполнительной системы'
- ELSE NULL
- END AS place_stay_registration_type,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN addr->>'reg' END) AS factual_address,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateStart')::date END) AS factual_info_received_date,
- MAX(CASE WHEN addr->>'type' = 'residentialAddress' THEN (addr->>'regDateEnd')::date END) AS factual_info_expiry_date
-FROM ervu_dashboard.recruits_info ri
- JOIN ervu_dashboard.citizen c ON c.recruit_id = ri.recruit_id
- CROSS JOIN LATERAL jsonb_array_elements(ri.addresses) AS addr
-WHERE
- '${IDM_ID}' != ''
- AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
- AND'${M_R_CR_DATE}'::timestamp >= c.recruit_create_date
-GROUP BY ri.recruit_id;
+ WITH filteredData AS (SELECT ri.recruit_id,
+ ri.info -> 'svedFL' -> 'svedRObr' -> 'robr' AS diploma_arr
+ FROM recruits_info ri
+ WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedRObr' -> 'robr') = 'array'
+ and COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
+)
+SELECT fd.recruit_id,
+ diploma_elem ->> 'id' AS source_id,
+ to_date(diploma_elem ->> 'dataSved', 'YYYY-MM-DD') as source_update_date,
+ diploma_elem ->> 'kodUrObr' as education_level_code,
+ diploma_elem -> 'vidDok' ->> 'naimVidDok' as document_type,
+ diploma_elem -> 'vidDokMinobr' ->> 'kodVidDok' as minobr_document_type_code,
+ diploma_elem -> 'vidDokMinprosv' ->> 'kodVidDok' as minprosv_document_type_code,
+ diploma_elem ->> 'seriyaBlank' as seria,
+ diploma_elem ->> 'nomerBlank' as number,
+ diploma_elem ->> 'regNomer' as reg_number,
+ to_date(diploma_elem ->> 'dataVyd', 'YYYY-MM-DD') as issue_date,
+ diploma_elem ->> 'naimOrg' as educational_institution_name,
+ diploma_elem -> 'svedSpecz' ->> 'naimSpecz' as speciality_name,
+ diploma_elem -> 'svedSpeczMinobr' ->> 'kodSpecz' as minobr_speciality_code,
+ diploma_elem -> 'svedSpeczMinprosv' ->> 'kodSpecz' as minprosv_speciality_code,
+ coalesce(diploma_elem ->> 'prVUSpecz' = '1', false) as vus_spec
+FROM filteredData fd
+ CROSS JOIN LATERAL jsonb_array_elements(diploma_arr) AS diploma_elem;
Y
- 480
- 272
+ 432
+ 384
@@ -408,7 +417,7 @@ GROUP BY ri.recruit_id;
error_description
- error_code
+
diff --git a/mappings/info_recruits/citizen_tables/punishment/recruitments_five_flow.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow.hpl
similarity index 81%
rename from mappings/info_recruits/citizen_tables/punishment/recruitments_five_flow.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow.hpl
index 33ee4da..3860444 100644
--- a/mappings/info_recruits/citizen_tables/punishment/recruitments_five_flow.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow.hpl
@@ -1,7 +1,7 @@
- recruitments_five_flow
+ recruitment_five_flow
Y
@@ -13,41 +13,41 @@
1000
100
-
- 2025/04/18 09:48:01.970
+ 2025/09/01 16:12:33.364
-
- 2025/04/18 09:48:01.970
+ 2025/09/01 16:12:33.364
- Get all recruitments ordered by created_date
- punishment_flow.hpl
+ Get all recruitments
+ russian_diploma_flow.hpl
Y
- Get all recruitments ordered by created_date
- punishment_flow.hpl 2
+ Get all recruitments
+ russian_diploma_flow.hpl 2
Y
- Get all recruitments ordered by created_date
- punishment_flow.hpl 3
+ Get all recruitments
+ russian_diploma_flow.hpl 3
Y
- Get all recruitments ordered by created_date
- punishment_flow.hpl 4
+ Get all recruitments
+ russian_diploma_flow.hpl 4
Y
- Get all recruitments ordered by created_date
- punishment_flow.hpl 5
+ Get all recruitments
+ russian_diploma_flow.hpl 5
Y
- Get all recruitments ordered by created_date
+ Get all recruitments
TableInput
Y
@@ -57,21 +57,20 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
-
SELECT
-idm_id AS recruitment
+idm_id
FROM ervu_dashboard.recruitment;
N
432
- 304
+ 512
- punishment_flow.hpl
+ russian_diploma_flow.hpl
PipelineExecutor
Y
@@ -82,7 +81,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/punishment/parallel/punishment_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
N
1
@@ -91,14 +90,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- punishment_job
-
Y
@@ -123,11 +117,11 @@ FROM ervu_dashboard.recruitment;
704
- 144
+ 352
- punishment_flow.hpl 2
+ russian_diploma_flow.hpl 2
PipelineExecutor
Y
@@ -138,7 +132,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/punishment/parallel/punishment_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
N
1
@@ -147,14 +141,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- punishment_job
-
Y
@@ -179,11 +168,11 @@ FROM ervu_dashboard.recruitment;
704
- 224
+ 432
- punishment_flow.hpl 3
+ russian_diploma_flow.hpl 3
PipelineExecutor
Y
@@ -194,7 +183,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/punishment/parallel/punishment_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
N
1
@@ -203,14 +192,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- punishment_job
-
Y
@@ -235,11 +219,11 @@ FROM ervu_dashboard.recruitment;
704
- 304
+ 512
- punishment_flow.hpl 4
+ russian_diploma_flow.hpl 4
PipelineExecutor
Y
@@ -250,7 +234,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/punishment/parallel/punishment_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
N
1
@@ -259,14 +243,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- punishment_job
-
Y
@@ -291,11 +270,11 @@ FROM ervu_dashboard.recruitment;
704
- 384
+ 592
- punishment_flow.hpl 5
+ russian_diploma_flow.hpl 5
PipelineExecutor
Y
@@ -306,7 +285,7 @@ FROM ervu_dashboard.recruitment;
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/punishment/parallel/punishment_flow.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow.hpl
N
1
@@ -315,14 +294,9 @@ FROM ervu_dashboard.recruitment;
IDM_ID
- recruitment
+ idm_id
-
- JOB_NAME
-
- punishment_job
-
Y
@@ -347,7 +321,7 @@ FROM ervu_dashboard.recruitment;
704
- 464
+ 672
diff --git a/mappings/info_recruits/citizen_tables/citizenship_foreign/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_delta.hpl
similarity index 76%
rename from mappings/info_recruits/citizen_tables/citizenship_foreign/recruitment_five_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_delta.hpl
index 864793c..38479ff 100644
--- a/mappings/info_recruits/citizen_tables/citizenship_foreign/recruitment_five_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_delta.hpl
@@ -13,36 +13,41 @@
1000
100
-
- 2025/08/11 13:16:11.204
+ 2025/09/01 17:07:38.569
-
- 2025/08/11 13:16:11.204
+ 2025/09/01 17:07:38.569
Table input
- citizenship_foreign_flow_delta.hpl
+ russian_diploma_flow_delta.hpl
+ Y
+
+
+ get_max_source_update_date
+ Table input
Y
Table input
- citizenship_foreign_flow_delta.hpl 2
+ russian_diploma_flow_delta.hpl 2
Y
Table input
- citizenship_foreign_flow_delta.hpl 3
+ russian_diploma_flow_delta.hpl 3
Y
Table input
- citizenship_foreign_flow_delta.hpl 4
+ russian_diploma_flow_delta.hpl 4
Y
Table input
- citizenship_foreign_flow_delta.hpl 5
+ russian_diploma_flow_delta.hpl 5
Y
@@ -57,249 +62,58 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
0
+ get_max_source_update_date
SELECT
- r.idm_id as recruitment_id
+ r.idm_id,
+ ? max_source_update_date
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
- and job_name = 'citizenship_foreign_job'
+ and job_name = '${JOB_NAME}'
+ JOIN recruits_info ri
+ ON COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = r.idm_id
+ AND ri.updated_at > (
+ SELECT MAX(execution_datetime)
+ FROM etl.job_execution
+ WHERE job_name = '${JOB_NAME}'
+ AND recruitment_id = r.idm_id
+ )
where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');
N
- 352
- 288
-
-
-
- citizenship_foreign_flow_delta.hpl
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/citizenship_foreign/parallel/citizenship_foreign_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- citizenship_foreign_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 640
- 128
-
-
-
- citizenship_foreign_flow_delta.hpl 2
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/citizenship_foreign/parallel/citizenship_foreign_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- citizenship_foreign_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 656
- 208
-
-
-
- citizenship_foreign_flow_delta.hpl 3
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/citizenship_foreign/parallel/citizenship_foreign_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- citizenship_foreign_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 656
- 288
-
-
-
- citizenship_foreign_flow_delta.hpl 4
- PipelineExecutor
-
- Y
-
- 1
-
- none
-
-
- local
- ${PROJECT_HOME}/info_recruits/citizen_tables/citizenship_foreign/parallel/citizenship_foreign_flow_delta.hpl
- N
-
- 1
-
-
-
-
- IDM_ID
- recruitment_id
-
-
-
- JOB_NAME
-
- citizenship_foreign_job
-
- Y
-
-
- ExecutionTime
- ExecutionResult
- ExecutionNrErrors
- ExecutionLinesRead
- ExecutionLinesWritten
- ExecutionLinesInput
- ExecutionLinesOutput
- ExecutionLinesRejected
- ExecutionLinesUpdated
- ExecutionLinesDeleted
- ExecutionFilesRetrieved
- ExecutionExitStatus
- ExecutionLogText
- ExecutionLogChannelId
-
-
- FileName
-
-
-
- 656
+ 688
368
- citizenship_foreign_flow_delta.hpl 5
+ get_max_source_update_date
+ TableInput
+
+ Y
+
+ 1
+
+ none
+
+
+ ervu-dashboard
+ N
+ 0
+ select max(source_update_date)
+from russian_diploma;
+ N
+
+
+ 512
+ 368
+
+
+
+ russian_diploma_flow_delta.hpl
PipelineExecutor
Y
@@ -310,7 +124,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/citizenship_foreign/parallel/citizenship_foreign_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
N
1
@@ -319,13 +133,18 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
IDM_ID
- recruitment_id
+ idm_id
JOB_NAME
- citizenship_foreign_job
+ russian_diploma_job
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
Y
@@ -350,10 +169,254 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 656
+ 880
+ 208
+
+
+
+ russian_diploma_flow_delta.hpl 2
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ JOB_NAME
+
+ russian_diploma_job
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 880
+ 288
+
+
+
+ russian_diploma_flow_delta.hpl 3
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ JOB_NAME
+
+ russian_diploma_job
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 880
+ 368
+
+
+
+ russian_diploma_flow_delta.hpl 4
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ JOB_NAME
+
+ russian_diploma_job
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 880
448
+
+ russian_diploma_flow_delta.hpl 5
+ PipelineExecutor
+
+ Y
+
+ 1
+
+ none
+
+
+ local
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_delta.hpl
+ N
+
+ 1
+
+
+
+
+ IDM_ID
+ idm_id
+
+
+
+ JOB_NAME
+
+ russian_diploma_job
+
+
+ MAX_SOURCE_UPDATE_DATE
+ max_source_update_date
+
+
+ Y
+
+
+ ExecutionTime
+ ExecutionResult
+ ExecutionNrErrors
+ ExecutionLinesRead
+ ExecutionLinesWritten
+ ExecutionLinesInput
+ ExecutionLinesOutput
+ ExecutionLinesRejected
+ ExecutionLinesUpdated
+ ExecutionLinesDeleted
+ ExecutionFilesRetrieved
+ ExecutionExitStatus
+ ExecutionLogText
+ ExecutionLogChannelId
+
+
+ FileName
+
+
+
+ 880
+ 528
+
+
diff --git a/mappings/info_recruits/citizen_tables/border_crossing/recruitment_five_flow_delta.hpl b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_repeat.hpl
similarity index 81%
rename from mappings/info_recruits/citizen_tables/border_crossing/recruitment_five_flow_delta.hpl
rename to mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_repeat.hpl
index 01ec515..fca1560 100644
--- a/mappings/info_recruits/citizen_tables/border_crossing/recruitment_five_flow_delta.hpl
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_repeat.hpl
@@ -1,7 +1,7 @@
- recruitment_five_flow_delta
+ recruitment_five_flow_repeat
Y
@@ -13,36 +13,36 @@
1000
100
-
- 2025/08/11 13:16:11.204
+ 2025/09/01 17:02:32.905
-
- 2025/08/11 13:16:11.204
+ 2025/09/01 17:02:32.905
Table input
- border_crossing_flow_delta.hpl
+ russian_diploma_flow_repeat.hpl
Y
Table input
- border_crossing_flow_delta.hpl 2
+ russian_diploma_flow_repeat.hpl 2
Y
Table input
- border_crossing_flow_delta.hpl 3
+ russian_diploma_flow_repeat.hpl 3
Y
Table input
- border_crossing_flow_delta.hpl 4
+ russian_diploma_flow_repeat.hpl 4
Y
Table input
- border_crossing_flow_delta.hpl 5
+ russian_diploma_flow_repeat.hpl 5
Y
@@ -57,25 +57,25 @@
none
- ervu-dashboard
+ ervu-dashboard-test
N
0
- SELECT
- r.idm_id as recruitment_id
+ SELECT r.idm_id AS recruitment_id
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
- and job_name = 'border_crossing_job'
-where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');
+ AND je.job_name = 'russian_diploma_job'
+WHERE je.id IS NULL
+ OR je.status IN ('ERROR', 'PROCESSING');
N
- 352
- 288
+ 368
+ 352
- border_crossing_flow_delta.hpl
+ russian_diploma_flow_repeat.hpl
PipelineExecutor
Y
@@ -86,7 +86,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
N
1
@@ -94,15 +94,10 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- IDM_ID
+
recruitment_id
-
- JOB_NAME
-
- border_crossing_job
-
Y
@@ -126,12 +121,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 640
- 128
+ 576
+ 192
- border_crossing_flow_delta.hpl 2
+ russian_diploma_flow_repeat.hpl 2
PipelineExecutor
Y
@@ -142,7 +137,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
N
1
@@ -150,15 +145,10 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- IDM_ID
+
recruitment_id
-
- JOB_NAME
-
- border_crossing_job
-
Y
@@ -182,12 +172,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 656
- 224
+ 576
+ 272
- border_crossing_flow_delta.hpl 3
+ russian_diploma_flow_repeat.hpl 3
PipelineExecutor
Y
@@ -198,7 +188,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
N
1
@@ -206,15 +196,10 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- IDM_ID
+
recruitment_id
-
- JOB_NAME
-
- border_crossing_job
-
Y
@@ -238,12 +223,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 656
- 304
+ 576
+ 352
- border_crossing_flow_delta.hpl 4
+ russian_diploma_flow_repeat.hpl 4
PipelineExecutor
Y
@@ -254,7 +239,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
N
1
@@ -262,15 +247,10 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- IDM_ID
+
recruitment_id
-
- JOB_NAME
-
- border_crossing_job
-
Y
@@ -294,12 +274,12 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 656
- 384
+ 576
+ 432
- border_crossing_flow_delta.hpl 5
+ russian_diploma_flow_repeat.hpl 5
PipelineExecutor
Y
@@ -310,7 +290,7 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
local
- ${PROJECT_HOME}/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow_delta.hpl
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/parallel/russian_diploma_flow_repeat.hpl
N
1
@@ -318,15 +298,10 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- IDM_ID
+
recruitment_id
-
- JOB_NAME
-
- border_crossing_job
-
Y
@@ -350,8 +325,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
- 656
- 480
+ 576
+ 512
diff --git a/mappings/info_recruits/citizen_tables/education/russian_diploma/russian_diploma_job.hwf b/mappings/info_recruits/citizen_tables/education/russian_diploma/russian_diploma_job.hwf
new file mode 100644
index 0000000..cc7726c
--- /dev/null
+++ b/mappings/info_recruits/citizen_tables/education/russian_diploma/russian_diploma_job.hwf
@@ -0,0 +1,419 @@
+
+
+ russian_diploma_job
+ Y
+
+
+
+ -
+ 2025/09/01 15:59:15.492
+ -
+ 2025/09/01 15:59:15.492
+
+
+
+
+ Start
+
+ SPECIAL
+
+ 1
+ 12
+ 60
+ 0
+ 0
+ N
+ 0
+ 1
+ N
+ 272
+ 208
+
+
+
+ check_if_job_execution_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_job_execution_exists.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1200
+ 224
+
+
+
+ employer_job_execution_exists_check
+
+ SIMPLE_EVAL
+
+ boolean
+ false
+ equal
+ equal
+ N
+ variable
+ JOB_EXECUTED_FLAG
+ N
+ 1504
+ 224
+
+
+
+ recruitment_five_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ Y
+ 1744
+ 224
+
+
+
+ recruitment_five_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_repeat.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1728
+ 528
+
+
+
+ check_if_need_to_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/support/check_if_need_to_repeat.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1504
+ 368
+
+
+
+ Simple evaluation
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ NEED_TO_REPEAT_JOB
+ N
+ 1504
+ 528
+
+
+
+ recruitment_five_flow_delta.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/recruitment_five_flow_delta.hpl
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 1504
+ 672
+
+
+
+ check_if_constants_exists.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/constants/support/check_if_constants_exists.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 432
+ 208
+
+
+
+ constants_exists
+
+ SIMPLE_EVAL
+
+ boolean
+ true
+ equal
+ equal
+ N
+ variable
+ CONSTANTS_EXISTS
+ N
+ 608
+ 208
+
+
+
+ russian_diploma_constants_flow.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 800
+ 128
+
+
+
+ russian_diploma_constants_flow_repeat.hpl
+
+ PIPELINE
+
+ N
+ N
+ N
+ N
+ N
+ N
+ ${PROJECT_HOME}/info_recruits/citizen_tables/education/russian_diploma/constants/russian_diploma_constants_flow_repeat.hpl
+
+
+ Basic
+
+ Y
+
+ N
+ local
+ N
+ N
+ Y
+ N
+ 800
+ 304
+
+
+
+ init_job_name
+
+ SET_VARIABLES
+
+
+
+ JOB_NAME
+ CURRENT_WORKFLOW
+ russian_diploma_job
+
+
+ CURRENT_WORKFLOW
+
+ N
+ N
+ 992
+ 224
+
+
+
+
+
+ check_if_job_execution_exists.hpl
+ employer_job_execution_exists_check
+ Y
+ Y
+ N
+
+
+ employer_job_execution_exists_check
+ check_if_need_to_repeat.hpl
+ Y
+ N
+ N
+
+
+ check_if_need_to_repeat.hpl
+ Simple evaluation
+ Y
+ Y
+ N
+
+
+ check_if_constants_exists.hpl
+ constants_exists
+ Y
+ Y
+ N
+
+
+ constants_exists
+ russian_diploma_constants_flow.hpl
+ Y
+ N
+ N
+
+
+ constants_exists
+ russian_diploma_constants_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ russian_diploma_constants_flow.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ russian_diploma_constants_flow_repeat.hpl
+ init_job_name
+ Y
+ Y
+ N
+
+
+ Start
+ check_if_constants_exists.hpl
+ Y
+ Y
+ Y
+
+
+ init_job_name
+ check_if_job_execution_exists.hpl
+ Y
+ Y
+ N
+
+
+ employer_job_execution_exists_check
+ recruitment_five_flow.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_repeat.hpl
+ Y
+ Y
+ N
+
+
+ Simple evaluation
+ recruitment_five_flow_delta.hpl
+ Y
+ N
+ N
+
+
+
+
+
+