lots of fixes

This commit is contained in:
Fusionshh 2025-11-18 10:58:54 +03:00
parent 66840c2c28
commit 537a111284
55 changed files with 4722 additions and 5135 deletions

View file

@ -1,5 +0,0 @@
ARG RUNTIME_IMAGE=repo.micord.ru/tools/etl-base:0.0.1-sha1e61336f
FROM $RUNTIME_IMAGE
COPY mappings /opt/etl/config/projects/mappings

41
db.env
View file

@ -1,41 +0,0 @@
DB_DASHBOARD_HOST=10.10.31.119
DB_DASHBOARD_PORT=5432
DB_DASHBOARD_NAME=ervu-dashboard-recr
DB_DASHBOARD_USERNAME=ervu-dashboard
DB_DASHBOARD_PASSWORD=ervu-dashboard
DB_APPEAL_HOST=10.10.31.118
DB_APPEAL_PORT=5432
DB_APPEAL_NAME=appeal-document-service
DB_APPEAL_USERNAME=ervu
DB_APPEAL_PASSWORD=ervu
DB_DECISION_HOST=10.10.31.118
DB_DECISION_PORT=5432
DB_DECISION_NAME=ervu-decision-document-service
DB_DECISION_USERNAME=ervu
DB_DECISION_PASSWORD=ervu
DB_PERSON_HOST=10.10.31.118
DB_PERSON_PORT=5432
DB_PERSON_NAME=ervu-person-registry
DB_PERSON_USERNAME=ervu
DB_PERSON_PASSWORD=ervu
DB_SUBPOENA_HOST=10.10.31.118
DB_SUBPOENA_PORT=5432
DB_SUBPOENA_NAME=ervu-subpoena-registry
DB_SUBPOENA_USERNAME=ervu
DB_SUBPOENA_PASSWORD=ervu
DB_JOURNAL_HOST=10.10.31.118
DB_JOURNAL_PORT=5432
DB_JOURNAL_NAME=journal_dev
DB_JOURNAL_USERNAME=ervu
DB_JOURNAL_PASSWORD=ervu
DB_METRICS_HOST=10.10.31.119
DB_METRICS_PORT=5432
DB_METRICS_NAME=ervu-dashboard-copy
DB_METRICS_USERNAME=ervu_business_metrics
DB_METRICS_PASSWORD=ervu_business_metrics

View file

@ -1,72 +0,0 @@
#!/bin/bash
# https://gist.github.com/athlan/b6f09977e2f5cf20840ef61ca3cda932
printenv | sed 's/^\(.*\)$/export \1/g' > /root/.env.sh
chmod +x /root/.env.sh
export TZ=Europe/Moscow
#. /etc/profile
#. ~/.bash_profile
#. ~/.bashrc
cd /opt/pentaho-di/mappings_old
for F in $(find . -type f); do
sed -i "s/1111/$DB_DASHBOARD_PORT/g" $F
sed -i "s/dashboard-dbhost/$DB_DASHBOARD_HOST/g" $F
sed -i "s/dashboard-dbname/$DB_DASHBOARD_NAME/g" $F
sed -i "s/dashboard-dbuser/$DB_DASHBOARD_USERNAME/g" $F
sed -i "s/Encrypted 2daf9dca008c89396af54aa72ce93bcc9/$DB_DASHBOARD_PASSWORD/g" $F
sed -i "s/2222/$DB_APPEAL_PORT/g" $F
sed -i "s/appeal-dbhost/$DB_APPEAL_HOST/g" $F
sed -i "s/appeal-dbname/$DB_APPEAL_NAME/g" $F
sed -i "s/appeal-dbuser/$DB_APPEAL_USERNAME/g" $F
sed -i "s/Encrypted 2be98afa91ad79785a754aa72ce93bcc9/$DB_APPEAL_PASSWORD/g" $F
sed -i "s/3333/$DB_DECISION_PORT/g" $F
sed -i "s/decision-dbhost/$DB_DECISION_HOST/g" $F
sed -i "s/decision-dbname/$DB_DECISION_NAME/g" $F
sed -i "s/decision-dbuser/$DB_DECISION_USERNAME/g" $F
sed -i "s/Encrypted 2befccaab03d49b8ba554aa72ce93bcc9/$DB_DECISION_PASSWORD/g" $F
sed -i "s/4444/$DB_PERSON_PORT/g" $F
sed -i "s/person-dbhost/$DB_PERSON_HOST/g" $F
sed -i "s/person-dbname/$DB_PERSON_NAME/g" $F
sed -i "s/person-dbuser/$DB_PERSON_USERNAME/g" $F
sed -i "s/Encrypted 2be98afb80fd5818ba554aa72ce93bcc9/$DB_PERSON_PASSWORD/g" $F
sed -i "s/5555/$DB_SUBPOENA_PORT/g" $F
sed -i "s/subpoena-dbhost/$DB_SUBPOENA_HOST/g" $F
sed -i "s/subpoena-dbname/$DB_SUBPOENA_NAME/g" $F
sed -i "s/subpoena-dbuser/$DB_SUBPOENA_USERNAME/g" $F
sed -i "s/Encrypted 2beebdaaa1ac8978aaa54aa72ce93bcc9/$DB_SUBPOENA_PASSWORD/g" $F
sed -i "s/6666/$DB_JOURNAL_PORT/g" $F
sed -i "s/journal-dbhost/$DB_JOURNAL_HOST/g" $F
sed -i "s/journal-dbname/$DB_JOURNAL_NAME/g" $F
sed -i "s/journal-dbuser/$DB_JOURNAL_USERNAME/g" $F
sed -i "s/Encrypted 2be98afc86aa7f2e4cb79ce10db80b9cf/$DB_JOURNAL_PASSWORD/g" $F
sed -i "s/7777/$DB_METRICS_PORT/g" $F
sed -i "s/metrics-dbhost/$DB_METRICS_HOST/g" $F
sed -i "s/metrics-dbname/$DB_METRICS_NAME/g" $F
sed -i "s/metrics-dbuser/$DB_METRICS_USERNAME/g" $F
sed -i "s/Encrypted 657276755ddceddca104c281979414ab64cc9bacc9/$DB_METRICS_PASSWORD/g" $F
done;
#Запускаем job один раз при старте контейнера
echo "---- Run info_recruits/job_info_recruits.kjb ----"
bash -c ". /root/.env.sh; /opt/pentaho-di/data-integration/kitchen.sh /file:////opt/pentaho-di/mappings_old/info_recruits/job_info_recruits.kjb > /proc/1/fd/1 2>&1"
if [ $RUNONCE == true ]; then
echo "---- Run job_general.kjb ----"
bash -c ". /root/.env.sh; /opt/pentaho-di/data-integration/kitchen.sh /file:////opt/pentaho-di/mappings_old/job_general.kjb > /proc/1/fd/1 2>&1"
echo "---- Run job_metr.kjb ----"
bash -c ". /root/.env.sh; /opt/pentaho-di/data-integration/kitchen.sh /file:////opt/pentaho-di/mappings_old/metrics/job_metr.kjb > /proc/1/fd/1 2>&1"
exit $?
else
cat /root/crontab | crontab -
cron -f
fi

View file

@ -1,142 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>job_last_update_date_appeal_document</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/06/02 14:48:05.666</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:48:05.666</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>592</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>recruit_update_date_ervu_dashboard.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/recruits_info/recruit_update_date_ervu_dashboard.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>784</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_recruit_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/recruits_info/row_last_recruit_update_date.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1056</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1232</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>recruit_update_date_ervu_dashboard.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>recruit_update_date_ervu_dashboard.hpl</from>
<to>row_last_recruit_update_date.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_recruit_update_date.hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
<notepad>
<backgroundcolorblue>251</backgroundcolorblue>
<backgroundcolorgreen>232</backgroundcolorgreen>
<backgroundcolorred>201</backgroundcolorred>
<bordercolorblue>90</bordercolorblue>
<bordercolorgreen>58</bordercolorgreen>
<bordercolorred>14</bordercolorred>
<fontbold>N</fontbold>
<fontcolorblue>90</fontcolorblue>
<fontcolorgreen>58</fontcolorgreen>
<fontcolorred>14</fontcolorred>
<fontitalic>N</fontitalic>
<fontname>Segoe UI</fontname>
<fontsize>9</fontsize>
<height>26</height>
<xloc>581</xloc>
<yloc>546</yloc>
<note>А где испольуезтся джоба? </note>
<width>162</width>
</notepad>
</notepads>
<attributes/>
</workflow>

View file

@ -18,86 +18,76 @@
<modified_date>2025/08/05 14:31:22.799</modified_date>
</info>
<notepads>
<notepad>
<backgroundcolorblue>251</backgroundcolorblue>
<backgroundcolorgreen>232</backgroundcolorgreen>
<backgroundcolorred>201</backgroundcolorred>
<bordercolorblue>90</bordercolorblue>
<bordercolorgreen>58</bordercolorgreen>
<bordercolorred>14</bordercolorred>
<fontbold>N</fontbold>
<fontcolorblue>90</fontcolorblue>
<fontcolorgreen>58</fontcolorgreen>
<fontcolorred>14</fontcolorred>
<fontitalic>N</fontitalic>
<fontname>Segoe UI</fontname>
<fontsize>9</fontsize>
<height>26</height>
<xloc>352</xloc>
<yloc>480</yloc>
<note>в таблице нет апдейт даты</note>
<width>154</width>
</notepad>
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>сreate_job_execution_record_CAV</from>
<to>table_input_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CAV</from>
<to>abort_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<from>update_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Change job status on error</to>
<from>table_output_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>table_output_CAV</from>
<to>filter_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<from>table_input_CAV</from>
<to>identify_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Detect empty stream</to>
<from>identify_last_row_CAV</from>
<to>detect_empty_stream_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Table output</to>
<from>identify_last_row_CAV</from>
<to>table_output_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>sort_by_recruit_id</to>
<from>identify_last_row_CAV</from>
<to>filter_true_appeal_violations</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>filter_true_appeal_violations</from>
<to>sort_rows_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_rows_CAV</from>
<to>update_CAV</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>abort_CAV</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -112,12 +102,12 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1264</xloc>
<xloc>1488</xloc>
<yloc>832</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -148,12 +138,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1088</xloc>
<xloc>1296</xloc>
<yloc>832</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -180,41 +170,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1088</xloc>
<xloc>1296</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>INSERT INTO etl.job_execution (id, job_name, status, execution_datetime, error_description, recruitment_id)
VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</sql>
<attributes/>
<GUI>
<xloc>432</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<name>detect_empty_stream_CAV</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
@ -226,12 +187,12 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning>
<attributes/>
<GUI>
<xloc>640</xloc>
<xloc>736</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<name>filter_last_row_CAV</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
@ -259,16 +220,52 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<send_true_to>change_job_status_on_success_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>1088</xloc>
<xloc>1296</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<name>filter_true_appeal_violations</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_appealing_violations_fz53</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>sort_rows_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>832</yloc>
</GUI>
</transform>
<transform>
<name>identify_last_row_CAV</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
@ -277,43 +274,86 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.decision-document-service</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>with filtered_data as ( SELECT
ad.recruit_id,
ad.create_date, -- дата создания обжалования
ad.appeal_number AS number_appealed, -- номер обжалуемого решения
ad.appeal_date AS date_appealed, -- дата обжалуемого решения
ad.result_number AS case_number, -- номер принятого решения
ad.result_date AS decision_date, -- дата принятия решения
CASE
WHEN ad.result = '1' THEN 'Удовлетворена'
WHEN ad.result = '2' THEN 'Частично удовлетворена'
WHEN ad.result = '3' THEN 'Отказано в удовлетворении'
END AS result_appeal, -- код рассмотрения
ad.commission_name AS name_commission, -- наименование комиссии, принявшей решение
ad.reason_for_add_entry AS grounds, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53,
ctid
FROM public.appeal_document_dto ad
JOIN public.recruit r ON r.id = ad.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку
AND (r.current_recruitment = '${IDM_ID}' or (r.current_recruitment is null and r.target_recruitment = '${IDM_ID}')))
select
fd.*,
fd.ctid = (select max(ctid) from filtered_data) as last_row
from filtered_data fd;
</sql>
<variables_active>Y</variables_active>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>640</xloc>
<xloc>736</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Table output</name>
<name>sort_rows_CAV</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>832</yloc>
</GUI>
</transform>
<transform>
<name>table_input_CAV</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>appeal_test</connection>
<execute_each_row>N</execute_each_row>
<sql>SELECT ad.recruit_id,
ad.updated_at, -- дата создания обжалования
ad.appeal_number AS appeal_number, -- номер обжалуемого решения
ad.appeal_date AS appeal_date, -- дата обжалуемого решения
ad.extra_info ->> 'resultNumber' AS decision_number, -- номер принятого решения
to_date(ad.extra_info ->> 'resultDate', 'YYYY-MM-DD') AS decision_date, -- дата принятия решения
CASE ad.extra_info ->> 'result'
WHEN '1' THEN 'Удовлетворена'
WHEN '2' THEN 'Частично удовлетворена'
WHEN '3' THEN 'Отказано в удовлетворении'
END AS decision_result, -- код рассмотрения
ad.extra_info ->> 'commissionName' AS commision_name, -- наименование комиссии, принявшей решение
ad.extra_info ->> 'reasonForAddEntry' AS reason, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53
FROM public.appeal_document ad
--where ad.vk_id = '${IDM_ID}'</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>table_output_CAV</name>
<type>TableOutput</type>
<description/>
<distribute>Y</distribute>
@ -324,43 +364,43 @@ select
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<connection>ervu_dashboard_test</connection>
<fields>
<field>
<column_name>recruit_id</column_name>
<stream_name>recruit_id</stream_name>
</field>
<field>
<column_name>create_date</column_name>
<stream_name>create_date</stream_name>
<column_name>updated_at</column_name>
<stream_name>updated_at</stream_name>
</field>
<field>
<column_name>number_appealed</column_name>
<stream_name>number_appealed</stream_name>
<column_name>appeal_number</column_name>
<stream_name>appeal_number</stream_name>
</field>
<field>
<column_name>date_appealed</column_name>
<stream_name>date_appealed</stream_name>
<column_name>appeal_date</column_name>
<stream_name>appeal_date</stream_name>
</field>
<field>
<column_name>case_number</column_name>
<stream_name>case_number</stream_name>
<column_name>decision_number</column_name>
<stream_name>decision_number</stream_name>
</field>
<field>
<column_name>decision_date</column_name>
<stream_name>decision_date</stream_name>
</field>
<field>
<column_name>result_appeal</column_name>
<stream_name>result_appeal</stream_name>
<column_name>decision_result</column_name>
<stream_name>decision_result</stream_name>
</field>
<field>
<column_name>name_commission</column_name>
<stream_name>name_commission</stream_name>
<column_name>commision_name</column_name>
<stream_name>commision_name</stream_name>
</field>
<field>
<column_name>grounds</column_name>
<stream_name>grounds</stream_name>
<column_name>reason</column_name>
<stream_name>reason</stream_name>
</field>
<field>
<column_name>hidden</column_name>
@ -371,23 +411,26 @@ select
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_field/>
<partitioning_monthly>Y</partitioning_monthly>
<return_field/>
<return_keys>N</return_keys>
<schema>ervu_dashboard</schema>
<specify_fields>Y</specify_fields>
<table>citizen_appealing_violations_fz53</table>
<tablename_field/>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>848</xloc>
<xloc>1056</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<name>update_CAV</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
@ -417,13 +460,13 @@ select
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>848</xloc>
<xloc>1056</xloc>
<yloc>832</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<name>сreate_job_execution_record_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
@ -432,33 +475,28 @@ select
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>INSERT INTO etl.job_execution (id, job_name, status, execution_datetime, error_description, recruitment_id)
VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</sql>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>832</yloc>
<xloc>352</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Table output</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>table_output_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -469,8 +507,8 @@ select
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,68 +21,73 @@
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>update_job_execution_record_CAV</from>
<to>table_input_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CAV</from>
<to>abort_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Change job status on error</to>
<from>upsert_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<from>update_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>table_input_CAV</from>
<to>identify_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
<from>identify_last_row_CAV</from>
<to>upsert_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Insert / update</to>
<from>identify_last_row_CAV</from>
<to>detect_empty_stream_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>upsert_CAV</from>
<to>filter_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Detect empty stream</to>
<from>filter_true_appeal_violations</from>
<to>sort_rows_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>identify_last_row_CAV</from>
<to>filter_true_appeal_violations</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_rows_CAV</from>
<to>update_CAV</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>abort_CAV</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -98,11 +103,11 @@
<attributes/>
<GUI>
<xloc>1472</xloc>
<yloc>400</yloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -133,12 +138,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1200</xloc>
<yloc>400</yloc>
<xloc>1312</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -170,7 +175,224 @@ and recruitment_id = '${IDM_ID}';
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<name>detect_empty_stream_CAV</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>80</yloc>
</GUI>
</transform>
<transform>
<name>filter_last_row_CAV</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>change_job_status_on_success_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>1472</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>filter_true_appeal_violations</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_appealing_violations_fz53</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>sort_rows_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>identify_last_row_CAV</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>sort_rows_CAV</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>table_input_CAV</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>appeal_test</connection>
<execute_each_row>N</execute_each_row>
<sql>SELECT ad.recruit_id,
ad.updated_at, -- дата создания обжалования
ad.appeal_number AS appeal_number, -- номер обжалуемого решения
ad.appeal_date AS appeal_date, -- дата обжалуемого решения
ad.extra_info ->> 'resultNumber' AS decision_number, -- номер принятого решения
to_date(ad.extra_info ->> 'resultDate', 'YYYY-MM-DD') AS decision_date, -- дата принятия решения
CASE ad.extra_info ->> 'result'
WHEN '1' THEN 'Удовлетворена'
WHEN '2' THEN 'Частично удовлетворена'
WHEN '3' THEN 'Отказано в удовлетворении'
END AS decision_result, -- код рассмотрения
ad.extra_info ->> 'commissionName' AS commission_name, -- наименование комиссии, принявшей решение
ad.extra_info ->> 'reasonForAddEntry' AS reason, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53
FROM public.appeal_document ad
where ad.vk_id = '${IDM_ID}'
and case when '${MAX_UPDATE_DATE}' &lt;&gt; ''
then to_date(ri.info -> 'svedFL' -> 'svedDeputat' -> 'deputat' ->> 'dataSved', 'YYYY-MM-DD') >
to_date('${MAX_UPDATE_DATE}', 'YYYY-MM-DD')
else true end;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>544</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>update_CAV</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_appealing_violations_fz53</name>
<rename>has_appealing_violations_fz53</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1088</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>update_job_execution_record_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -202,78 +424,7 @@ and recruitment_id = '${IDM_ID}';</sql>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>80</yloc>
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<attributes/>
<GUI>
<xloc>1472</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update</name>
<name>upsert_CAV</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
@ -284,7 +435,7 @@ and recruitment_id = '${IDM_ID}';</sql>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<connection>ervu_dashboard_test</connection>
<lookup>
<key>
<condition>=</condition>
@ -293,8 +444,8 @@ and recruitment_id = '${IDM_ID}';</sql>
</key>
<key>
<condition>=</condition>
<field>create_date</field>
<name>create_date</name>
<field>appeal_number</field>
<name>appeal_number</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen_appealing_violations_fz53</table>
@ -304,23 +455,23 @@ and recruitment_id = '${IDM_ID}';</sql>
<update>N</update>
</value>
<value>
<name>create_date</name>
<rename>create_date</rename>
<name>updated_at</name>
<rename>updated_at</rename>
<update>Y</update>
</value>
<value>
<name>appeal_number</name>
<rename>appeal_number</rename>
<update>N</update>
</value>
<value>
<name>number_appealed</name>
<rename>number_appealed</rename>
<name>appeal_date</name>
<rename>appeal_date</rename>
<update>Y</update>
</value>
<value>
<name>date_appealed</name>
<rename>date_appealed</rename>
<update>Y</update>
</value>
<value>
<name>case_number</name>
<rename>case_number</rename>
<name>decision_number</name>
<rename>decision_number</rename>
<update>Y</update>
</value>
<value>
@ -329,18 +480,18 @@ and recruitment_id = '${IDM_ID}';</sql>
<update>Y</update>
</value>
<value>
<name>result_appeal</name>
<rename>result_appeal</rename>
<name>decision_result</name>
<rename>decision_result</rename>
<update>Y</update>
</value>
<value>
<name>name_commission</name>
<rename>name_commission</rename>
<name>commission_name</name>
<rename>commission_name</rename>
<update>Y</update>
</value>
<value>
<name>grounds</name>
<rename>grounds</rename>
<name>reason</name>
<rename>reason</rename>
<update>Y</update>
</value>
<value>
@ -352,127 +503,14 @@ and recruitment_id = '${IDM_ID}';</sql>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>928</xloc>
<xloc>1088</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.decision-document-service</connection>
<execute_each_row>N</execute_each_row>
<sql>SELECT
ad.recruit_id,
ad.create_date, -- дата создания обжалования
ad.appeal_number AS number_appealed, -- номер обжалуемого решения
ad.appeal_date AS date_appealed, -- дата обжалуемого решения
ad.result_number AS case_number, -- номер принятого решения
ad.result_date AS decision_date, -- дата принятия решения
CASE
WHEN ad.result = '1' THEN 'Удовлетворена'
WHEN ad.result = '2' THEN 'Частично удовлетворена'
WHEN ad.result = '3' THEN 'Отказано в удовлетворении'
ELSE NULL
END AS result_appeal, -- код рассмотрения
ad.commission_name AS name_commission, -- наименование комиссии, принявшей решение
ad.reason_for_add_entry AS grounds, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53
FROM public.appeal_document_dto ad
JOIN public.recruit r ON r.id = ad.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку
AND (r.current_recruitment = '${IDM_ID}' or (r.current_recruitment is null and r.target_recruitment = '${IDM_ID}'))
AND ad.create_date >= '${MAX_CREATE_DATE}'::timestamp
</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>544</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<ignore_flag_field/>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_appealing_violations_fz53</name>
<rename>has_appealing_violations_fz53</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>736</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Insert / update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -483,8 +521,8 @@ JOIN public.recruit r ON r.id = ad.recruit_id AND '${IDM_ID}' != '' -- Пров
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>upsert_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,63 +21,73 @@
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>upsert_job_execution_record_CAV</from>
<to>table_input_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CAV</from>
<to>change_job_status_on_success_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CAV</from>
<to>abort_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Change job status on error</to>
<from>upsert_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<from>update_CAV</from>
<to>change_job_status_on_error_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>upsert_CAV</from>
<to>filter_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>table_input_CAV</from>
<to>identify_last_row_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Detect empty stream</to>
<from>filter_true_appeal_violations</from>
<to>sort_rows_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Insert / update</to>
<from>identify_last_row_CAV</from>
<to>filter_true_appeal_violations</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>sort_by_recruit_id</to>
<from>identify_last_row_CAV</from>
<to>detect_empty_stream_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>identify_last_row_CAV</from>
<to>upsert_CAV</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_rows_CAV</from>
<to>update_CAV</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>abort_CAV</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -92,12 +102,12 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1120</xloc>
<yloc>368</yloc>
<xloc>1440</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -128,12 +138,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>368</yloc>
<xloc>1248</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -160,59 +170,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>944</xloc>
<xloc>1248</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>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
</sql>
<attributes/>
<GUI>
<xloc>272</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<name>detect_empty_stream_CAV</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
@ -224,12 +187,12 @@ DO UPDATE SET
</partitioning>
<attributes/>
<GUI>
<xloc>480</xloc>
<xloc>688</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<name>filter_last_row_CAV</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
@ -257,16 +220,16 @@ DO UPDATE SET
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<send_true_to>change_job_status_on_success_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>944</xloc>
<xloc>1248</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update</name>
<type>InsertUpdate</type>
<name>filter_true_appeal_violations</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
@ -275,82 +238,34 @@ DO UPDATE SET
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<key>
<condition>=</condition>
<field>create_date</field>
<name>create_date</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen_appealing_violations_fz53</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>create_date</name>
<rename>create_date</rename>
<update>N</update>
</value>
<value>
<name>number_appealed</name>
<rename>number_appealed</rename>
<update>Y</update>
</value>
<value>
<name>date_appealed</name>
<rename>date_appealed</rename>
<update>Y</update>
</value>
<value>
<name>case_number</name>
<rename>case_number</rename>
<update>Y</update>
</value>
<value>
<name>decision_date</name>
<rename>decision_date</rename>
<update>Y</update>
</value>
<value>
<name>result_appeal</name>
<rename>result_appeal</rename>
<update>Y</update>
</value>
<value>
<name>name_commission</name>
<rename>name_commission</rename>
<update>Y</update>
</value>
<value>
<name>grounds</name>
<rename>grounds</rename>
<update>Y</update>
</value>
<value>
<name>hidden</name>
<rename>hidden</rename>
<update>Y</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_appealing_violations_fz53</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>sort_rows_CAV</send_true_to>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>208</yloc>
<xloc>688</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<name>identify_last_row_CAV</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
@ -359,34 +274,77 @@ DO UPDATE SET
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.decision-document-service</connection>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>sort_rows_CAV</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>1000000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>880</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>table_input_CAV</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>appeal_test</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>with filtered_data as ( SELECT
ad.recruit_id,
ad.create_date, -- дата создания обжалования
ad.appeal_number AS number_appealed, -- номер обжалуемого решения
ad.appeal_date AS date_appealed, -- дата обжалуемого решения
ad.result_number AS case_number, -- номер принятого решения
ad.result_date AS decision_date, -- дата принятия решения
CASE
WHEN ad.result = '1' THEN 'Удовлетворена'
WHEN ad.result = '2' THEN 'Частично удовлетворена'
WHEN ad.result = '3' THEN 'Отказано в удовлетворении'
END AS result_appeal, -- код рассмотрения
ad.commission_name AS name_commission, -- наименование комиссии, принявшей решение
ad.reason_for_add_entry AS grounds, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53,
ctid
FROM public.appeal_document_dto ad
JOIN public.recruit r ON r.id = ad.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку
AND (r.current_recruitment = '${IDM_ID}' or (r.current_recruitment is null and r.target_recruitment = '${IDM_ID}')))
select
fd.*,
fd.ctid = (select max(ctid) from filtered_data) as last_row
from filtered_data fd
</sql>
<sql>SELECT ad.recruit_id,
ad.updated_at, -- дата создания обжалования
ad.appeal_number AS appeal_number, -- номер обжалуемого решения
ad.appeal_date AS appeal_date, -- дата обжалуемого решения
ad.extra_info ->> 'resultNumber' AS decision_number, -- номер принятого решения
to_date(ad.extra_info ->> 'resultDate', 'YYYY-MM-DD') AS decision_date, -- дата принятия решения
CASE ad.extra_info ->> 'result'
WHEN '1' THEN 'Удовлетворена'
WHEN '2' THEN 'Частично удовлетворена'
WHEN '3' THEN 'Отказано в удовлетворении'
END AS decision_result, -- код рассмотрения
ad.extra_info ->> 'commissionName' AS commission_name, -- наименование комиссии, принявшей решение
ad.extra_info ->> 'reasonForAddEntry' AS reason, -- основание для внесения записи
ad.hidden,
NOT ad.hidden AS has_appealing_violations_fz53
FROM public.appeal_document ad
--where ad.vk_id = '${IDM_ID}'</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -395,7 +353,7 @@ select
</GUI>
</transform>
<transform>
<name>Update</name>
<name>update_CAV</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
@ -430,13 +388,13 @@ select
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>368</yloc>
<xloc>1056</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<name>upsert_CAV</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
@ -445,33 +403,134 @@ select
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
</key>
<key>
<condition>=</condition>
<field>appeal_number</field>
<name>appeal_number</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen_appealing_violations_fz53</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>updated_at</name>
<rename>updated_at</rename>
<update>Y</update>
</value>
<value>
<name>appeal_number</name>
<rename>appeal_number</rename>
<update>N</update>
</value>
<value>
<name>appeal_date</name>
<rename>appeal_date</rename>
<update>Y</update>
</value>
<value>
<name>decision_number</name>
<rename>decision_number</rename>
<update>Y</update>
</value>
<value>
<name>decision_date</name>
<rename>decision_date</rename>
<update>Y</update>
</value>
<value>
<name>decision_result</name>
<rename>decision_result</rename>
<update>Y</update>
</value>
<value>
<name>commission_name</name>
<rename>commission_name</rename>
<update>Y</update>
</value>
<value>
<name>reason</name>
<rename>reason</rename>
<update>Y</update>
</value>
<value>
<name>hidden</name>
<rename>hidden</rename>
<update>Y</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>480</xloc>
<yloc>368</yloc>
<xloc>1056</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>upsert_job_execution_record_CAV</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>N</execute_each_row>
<insert_field/>
<quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>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
</sql>
<update_field/>
<attributes/>
<GUI>
<xloc>272</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Insert / update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -482,8 +541,8 @@ select
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>upsert_CAV</source_transform>
<target_transform>change_job_status_on_error_CAV</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -18,62 +18,417 @@
<modified_date>2025/08/11 13:16:11.204</modified_date>
</info>
<notepads>
<notepad>
<backgroundcolorblue>251</backgroundcolorblue>
<backgroundcolorgreen>232</backgroundcolorgreen>
<backgroundcolorred>201</backgroundcolorred>
<bordercolorblue>90</bordercolorblue>
<bordercolorgreen>58</bordercolorgreen>
<bordercolorred>14</bordercolorred>
<fontbold>N</fontbold>
<fontcolorblue>90</fontcolorblue>
<fontcolorgreen>58</fontcolorgreen>
<fontcolorred>14</fontcolorred>
<fontitalic>N</fontitalic>
<fontname>Segoe UI</fontname>
<fontsize>9</fontsize>
<height>42</height>
<xloc>48</xloc>
<yloc>112</yloc>
<note>тащить только те военкоматы по которым появились новые записи в бд dds?
не факт что мы можешь считать обновление recruits_info как обновление данных в dds?</note>
<width>500</width>
</notepad>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>citizen_appealing_violations_fz53_flow_delta.hpl</to>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>get_max_source_update_date</from>
<to>Table input</to>
<from>failed_appeal_document_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>citizen_appealing_violations_fz53_flow_delta.hpl 2</to>
<from>updated_idm_ids_from_appeal_document</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>citizen_appealing_violations_fz53_flow_delta.hpl 3</to>
<from>get_max_source_update_date_CAV</from>
<to>updated_idm_ids_from_appeal_document</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>citizen_appealing_violations_fz53_flow_delta.hpl 4</to>
<from>get_max_source_update_date_CAV</from>
<to>failed_appeal_document_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>citizen_appealing_violations_fz53_flow_delta.hpl 5</to>
<from>Sort rows</from>
<to>CAV_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>CAV_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>CAV_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>CAV_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>CAV_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>CAV_flow_delta.hpl</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>128</yloc>
</GUI>
</transform>
<transform>
<name>CAV_flow_delta.hpl 2</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>CAV_flow_delta.hpl 3</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>CAV_flow_delta.hpl 4</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>CAV_flow_delta.hpl 5</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>448</yloc>
</GUI>
</transform>
<transform>
<name>get_max_source_update_date_CAV</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT max(updated_at) AS max_update_date
FROM ervu_dashboard.citizen_appealing_violations_fz53;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>80</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<head_name>failed_appeal_document_idm_ids_on_delta</head_name>
<tail_name>updated_idm_ids_from_appeal_document</tail_name>
<attributes/>
<GUI>
<xloc>512</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>failed_appeal_document_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -86,316 +441,23 @@
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>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_SUCCESS')
GROUP BY recruitment_id)
SELECT r.idm_id
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
union
select r2.idm_id
from ervu_dashboard.recruitment r2
<lookup>get_max_source_update_date_CAV</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r2.idm_id = je.recruitment_id
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>citizen_appealing_violations_fz53_flow_delta.hpl</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_CREATE_DATE</variable>
<field>max_create_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>592</xloc>
<yloc>144</yloc>
</GUI>
</transform>
<transform>
<name>citizen_appealing_violations_fz53_flow_delta.hpl 2</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_CREATE_DATE</variable>
<field>max_create_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>592</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
<name>citizen_appealing_violations_fz53_flow_delta.hpl 3</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_CREATE_DATE</variable>
<field>max_create_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>592</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>citizen_appealing_violations_fz53_flow_delta.hpl 4</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_CREATE_DATE</variable>
<field>max_create_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>592</xloc>
<xloc>304</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>citizen_appealing_violations_fz53_flow_delta.hpl 5</name>
<type>PipelineExecutor</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<run_configuration>local</run_configuration>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/parallel/citizen_appealing_violations_fz53_flow_delta.hpl</filename>
<filenameInField>N</filenameInField>
<filenameField/>
<group_size>1</group_size>
<group_field/>
<group_time/>
<parameters>
<variable_mapping>
<variable>IDM_ID</variable>
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_CREATE_DATE</variable>
<field>max_create_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
<execution_time_field>ExecutionTime</execution_time_field>
<execution_result_field>ExecutionResult</execution_result_field>
<execution_errors_field>ExecutionNrErrors</execution_errors_field>
<execution_lines_read_field>ExecutionLinesRead</execution_lines_read_field>
<execution_lines_written_field>ExecutionLinesWritten</execution_lines_written_field>
<execution_lines_input_field>ExecutionLinesInput</execution_lines_input_field>
<execution_lines_output_field>ExecutionLinesOutput</execution_lines_output_field>
<execution_lines_rejected_field>ExecutionLinesRejected</execution_lines_rejected_field>
<execution_lines_updated_field>ExecutionLinesUpdated</execution_lines_updated_field>
<execution_lines_deleted_field>ExecutionLinesDeleted</execution_lines_deleted_field>
<execution_files_retrieved_field>ExecutionFilesRetrieved</execution_files_retrieved_field>
<execution_exit_status_field>ExecutionExitStatus</execution_exit_status_field>
<execution_log_text_field>ExecutionLogText</execution_log_text_field>
<execution_log_channelid_field>ExecutionLogChannelId</execution_log_channelid_field>
<result_rows_target_transform/>
<result_files_target_transform/>
<result_files_file_name_field>FileName</result_files_file_name_field>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>592</xloc>
<yloc>464</yloc>
</GUI>
</transform>
<transform>
<name>get_max_source_update_date</name>
<name>updated_idm_ids_from_appeal_document</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -405,16 +467,21 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT max(create_date) AS max_create_date
FROM ervu_dashboard.citizen_appealing_violations_fz53;</sql>
<lookup>get_max_source_update_date_CAV</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT vk_id AS recruitment_id,
mud.val as max_update_date
FROM appeal_document ad
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR ad.updated_at > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>192</xloc>
<yloc>304</yloc>
<xloc>304</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -21,39 +21,59 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>failed_deferment_liberation_permission_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_deferment_liberation</from>
<to>failed_deferment_liberation_permission_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_deferment_liberation</from>
<to>updated_idm_ids_fromrecruits_deferment</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>updated_idm_ids_fromrecruits_deferment</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>citizen_criminal_liability_fz53_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>get_max_source_update_date</from>
<to>Table input</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>citizen_criminal_liability_fz53_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>citizen_criminal_liability_fz53_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>citizen_criminal_liability_fz53_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>citizen_criminal_liability_fz53_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<type>TableInput</type>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
@ -62,35 +82,46 @@
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>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_SUCCESS')
GROUP BY recruitment_id)
SELECT r.idm_id
FROM ervu_dashboard.recruitment r
JOIN mud ON mud.recruitment_id = r.idm_id
JOIN ervu_dashboard.recruits_info ri
ON COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = r.idm_id
AND ri.updated_at > mud.max_upd_date
union
select r2.idm_id
from ervu_dashboard.recruitment r2
join etl.job_execution je
on r2.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<head_name>failed_deferment_liberation_permission_idm_ids_on_delta</head_name>
<tail_name>updated_idm_ids_fromrecruits_deferment</tail_name>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>288</yloc>
<xloc>768</xloc>
<yloc>272</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>272</yloc>
</GUI>
</transform>
<transform>
@ -145,33 +176,10 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<xloc>1264</xloc>
<yloc>128</yloc>
</GUI>
</transform>
<transform>
<name>get_max_source_update_date</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT max(updated_at) AS max_update_date
FROM ervu_dashboard.citizen_criminal_liability_fz53;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>176</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>citizen_criminal_liability_fz53_flow_delta.hpl 2</name>
<type>PipelineExecutor</type>
@ -224,7 +232,7 @@ FROM ervu_dashboard.citizen_criminal_liability_fz53;</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<xloc>1264</xloc>
<yloc>208</yloc>
</GUI>
</transform>
@ -280,7 +288,7 @@ FROM ervu_dashboard.citizen_criminal_liability_fz53;</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<xloc>1264</xloc>
<yloc>288</yloc>
</GUI>
</transform>
@ -336,7 +344,7 @@ FROM ervu_dashboard.citizen_criminal_liability_fz53;</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<xloc>1264</xloc>
<yloc>368</yloc>
</GUI>
</transform>
@ -392,10 +400,91 @@ FROM ervu_dashboard.citizen_criminal_liability_fz53;</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<xloc>1264</xloc>
<yloc>448</yloc>
</GUI>
</transform>
<transform>
<name>failed_deferment_liberation_permission_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>368</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_deferment_liberation</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(updated_at) as max_update_date
from citizen_criminal_liability_fz53;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>368</xloc>
<yloc>272</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_fromrecruits_deferment</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT COALESCE(r.current_recruitment, r.target_recruitment) AS recruitment_id,
mud.val as max_update_date
FROM recruit r
JOIN infringement i ON i.recruit_id = r.id
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR i.updated_at > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>176</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>

View file

@ -82,12 +82,48 @@
<method>none</method>
<schema_name/>
</partitioning>
<head_name>failed_deferment_liberation_permission_idm_ids_on_delta</head_name>
<tail_name>updated_idm_ids_fromrecruits_deferment</tail_name>
<attributes/>
<GUI>
<xloc>864</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>citizen_liability_fz53_flow_delta.hpl</name>
<type>PipelineExecutor</type>
@ -144,121 +180,6 @@
<yloc>128</yloc>
</GUI>
</transform>
<transform>
<name>failed_deferment_liberation_permission_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_deferment_liberation</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(updated_at) as max_update_date
from citizen_liability_fz53;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>464</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_fromrecruits_deferment</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT COALESCE(r.current_recruitment, r.target_recruitment) AS recruitment_id,
? as max_update_date
FROM recruit r
JOIN infringement i ON i.recruit_id = r.id
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR i.updated_at > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>citizen_liability_fz53_flow_delta.hpl 2</name>
<type>PipelineExecutor</type>
@ -483,6 +404,87 @@ WHERE (mud.val IS NULL OR i.updated_at > mud.val);</sql>
<yloc>448</yloc>
</GUI>
</transform>
<transform>
<name>failed_deferment_liberation_permission_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_deferment_liberation</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(updated_at) as max_update_date
from citizen_liability_fz53;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>464</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_fromrecruits_deferment</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT COALESCE(r.current_recruitment, r.target_recruitment) AS recruitment_id,
mud.val as max_update_date
FROM recruit r
JOIN infringement i ON i.recruit_id = r.id
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR i.updated_at > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>

View file

@ -1,159 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>row_last_infringement_update_date</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:51:59.611</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:51:59.611</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Copy rows to result</from>
<to>Set variables</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Copy rows to result</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Copy rows to result</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Set variables</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<field_name>max_infringement_update_date</field_name>
<variable_name>M_INFR_UP_DATE</variable_name>
<variable_type>GP_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>1232</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>with
base as (
select max(updated_at) AS max_infringement_update_date
from ervu_dashboard.citizen_criminal_liability_fz53
union all
select max(updated_at) AS max_infringement_update_date
from ervu_dashboard.citizen_liability_fz53
),
b AS (
select max(max_infringement_update_date) AS max_infringement_update_date
from base
)
select
CASE
WHEN max_infringement_update_date is null THEN '0001-01-01 00:00:00'::timestamp
ELSE max_infringement_update_date
END AS max_infringement_update_date
from b</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Write to log</name>
<type>WriteToLog</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<displayHeader>Y</displayHeader>
<fields>
</fields>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<loglevel>Basic</loglevel>
<logmessage>${M_INFR_UP_DATE}</logmessage>
<attributes/>
<GUI>
<xloc>1376</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -34,7 +34,7 @@
</parameters>
<actions>
<action>
<name>Start</name>
<name>start_job_CF</name>
<description/>
<type>SPECIAL</type>
<attributes/>
@ -228,7 +228,6 @@
</field>
</fields>
<file_variable_type>CURRENT_WORKFLOW</file_variable_type>
<filename/>
<replacevars>N</replacevars>
<parallel>N</parallel>
<xloc>240</xloc>
@ -266,7 +265,7 @@
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<from>start_job_CF</from>
<to>init_job_name</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>

View file

@ -21,68 +21,78 @@
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>create_job_execution_record_CF</from>
<to>table_input_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CF</from>
<to>abort_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Change job status on error</to>
<from>table_output_CF</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<from>table_input_CF</from>
<to>identify_last_row_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
<from>identify_last_row_CF</from>
<to>table_output_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Table output</to>
<from>identify_last_row_CF</from>
<to>detect_empty_stream_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Detect empty stream</to>
<from>table_output_CF</from>
<to>filter_last_row_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_citizenship</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_residence</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<from>update_citizen_has_foreign_citizenship</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>update_citizen_has_foreign_residence</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>identify_last_row_CF</from>
<to>filter_true_citizenship</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>abort_CF</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -94,15 +104,16 @@
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<message/>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1344</xloc>
<yloc>480</yloc>
<xloc>1456</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -133,12 +144,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1104</xloc>
<yloc>480</yloc>
<xloc>1200</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -165,12 +176,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1328</xloc>
<xloc>1456</xloc>
<yloc>176</yloc>
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<name>create_job_execution_record_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -199,7 +210,7 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<name>detect_empty_stream_CF</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
@ -216,7 +227,7 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<name>filter_last_row_CF</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
@ -244,15 +255,52 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<send_true_to>change_job_status_on_success_CF</send_true_to>
<attributes/>
<GUI>
<xloc>1328</xloc>
<xloc>1456</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<name>filter_true_citizenship</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_foreign_citizenship</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_false_to>update_citizen_has_foreign_residence</send_false_to>
<send_true_to>update_citizen_has_foreign_citizenship</send_true_to>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<name>identify_last_row_CF</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
@ -270,7 +318,7 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</GUI>
</transform>
<transform>
<name>Table input</name>
<name>table_input_CF</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -282,58 +330,36 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH base AS (
SELECT
ri.recruit_id,
ri.info
FROM ervu_dashboard.recruits_info ri
JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку
AND (ri.current_recruitment_id = '${IDM_ID}' or (ri.current_recruitment_id is null and ri.target_recruitment_id = '${IDM_ID}'))
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
OR jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
),
citizen AS (
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedIG') AS data,
<sql>WITH filtered_data AS (
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') AS data,
'citizenship' AS type
FROM base ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
UNION ALL
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedPP') AS data,
'residense' AS type
FROM base ri WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') AS data,
'residence' AS type
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
)
SELECT
recruit_id,
to_date(data->>'dataSved', 'YYYY-MM-DD') AS source_update_date, -- дата обновления сведений
CASE
WHEN type='residense' THEN data->>'osnovPriobrPP'
END::text AS residense_right_basis,
CASE
WHEN type='residense' THEN to_date(NULLIF(data->>'dataPriobrPP',''), 'YYYY-MM-DD')
END::date AS residense_right_date,
data->'oksm'->>'naimOKSM' AS country_name,
CASE
WHEN type='citizenship' THEN data->>'osnovPriobrIG'
END::text AS citizenship_basis,
CASE
WHEN type='citizenship' THEN to_date(NULLIF(data->>'dataPriobrIG',''), 'YYYY-MM-DD')
END::date AS citizenship_date,
coalesce(to_date(NULLIF(data ->> 'dataSved', ''), 'YYYY-MM-DD'), current_date) AS source_update_date, -- дата обновления сведений
data ->> CASE WHEN type = 'residence' THEN 'osnovPriobrPP' ELSE 'osnovPriobrIG' END AS basis,
to_date(data ->> CASE WHEN type = 'residence' THEN 'dataPriobrPP' ELSE 'dataPriobrIG' END, 'YYYY-MM-DD') AS acquisition_date,
data -> 'oksm' ->> 'kodOKSM' AS oksm_code,
type,
CASE
WHEN type = 'residense' THEN true
ELSE false
END AS has_foreign_residence,
CASE
WHEN type = 'citizenship' THEN true
ELSE false
END AS has_foreign_citizenship
FROM citizen</sql>
(type = 'residence') AS has_foreign_residence,
(type = 'citizenship') AS has_foreign_citizenship
FROM filtered_data;
</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -342,7 +368,7 @@ FROM citizen</sql>
</GUI>
</transform>
<transform>
<name>Table output</name>
<name>table_output_CF</name>
<type>TableOutput</type>
<description/>
<distribute>Y</distribute>
@ -360,32 +386,28 @@ FROM citizen</sql>
<stream_name>recruit_id</stream_name>
</field>
<field>
<column_name>residense_right_basis</column_name>
<stream_name>residense_right_basis</stream_name>
<column_name>source_update_date</column_name>
<stream_name>source_update_date</stream_name>
</field>
<field>
<column_name>residense_right_date</column_name>
<stream_name>residense_right_date</stream_name>
<column_name>basis</column_name>
<stream_name>basis</stream_name>
</field>
<field>
<column_name>country_name</column_name>
<stream_name>country_name</stream_name>
<column_name>acquisition_date</column_name>
<stream_name>acquisition_date</stream_name>
</field>
<field>
<column_name>citizenship_basis</column_name>
<stream_name>citizenship_basis</stream_name>
</field>
<field>
<column_name>citizenship_date</column_name>
<stream_name>citizenship_date</stream_name>
<column_name>oksm_code</column_name>
<stream_name>oksm_code</stream_name>
</field>
<field>
<column_name>type</column_name>
<stream_name>type</stream_name>
</field>
<field>
<column_name>source_update_date</column_name>
<stream_name>source_update_date</stream_name>
<column_name>source_id</column_name>
<stream_name>source_id</stream_name>
</field>
</fields>
<ignore_errors>N</ignore_errors>
@ -408,7 +430,7 @@ FROM citizen</sql>
</GUI>
</transform>
<transform>
<name>Update</name>
<name>update_citizen_has_foreign_citizenship</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
@ -421,18 +443,16 @@ FROM citizen</sql>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<ignore_flag_field/>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
<value>
<name>has_foreign_citizenship</name>
<rename>has_foreign_citizenship</rename>
@ -443,47 +463,50 @@ FROM citizen</sql>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>480</yloc>
<yloc>496</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<name>update_citizen_has_foreign_residence</name>
<type>Update</type>
<description/>
<distribute>Y</distribute>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<ignore_flag_field/>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>480</yloc>
<xloc>896</xloc>
<yloc>640</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Table output</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>table_output_CF</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -494,8 +517,20 @@ FROM citizen</sql>
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_citizen_has_foreign_citizenship</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
<fields_valuename/>
<codes_valuename/>
<max_errors/>
<max_pct_errors/>
<min_pct_rows/>
</error>
<error>
<source_transform>update_citizen_has_foreign_residence</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,68 +21,78 @@
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>update_job_execution_record_CF</from>
<to>table_input_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CF</from>
<to>abort_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<from>upsert_CF</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Change job status on error</to>
<from>table_input_CF</from>
<to>identify_last_row_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
<from>identify_last_row_CF</from>
<to>upsert_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Insert / update</to>
<from>identify_last_row_CF</from>
<to>detect_empty_stream_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>upsert_CF</from>
<to>filter_last_row_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Detect empty stream</to>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_citizenship</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_residence</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>identify_last_row_CF</from>
<to>filter_true_citizenship</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>update_citizen_has_foreign_residence</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>update_citizen_has_foreign_citizenship</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>abort_CF</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -94,15 +104,16 @@
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<message/>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1392</xloc>
<yloc>528</yloc>
<xloc>1408</xloc>
<yloc>512</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -118,8 +129,11 @@
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>Y</execute_each_row>
<insert_field/>
<quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
@ -131,14 +145,15 @@ WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<update_field/>
<attributes/>
<GUI>
<xloc>1168</xloc>
<yloc>528</yloc>
<xloc>1248</xloc>
<yloc>512</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -151,8 +166,11 @@ and recruitment_id = '${IDM_ID}';
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>Y</execute_each_row>
<insert_field/>
<quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
@ -163,6 +181,7 @@ WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<update_field/>
<attributes/>
<GUI>
<xloc>1408</xloc>
@ -170,7 +189,319 @@ and recruitment_id = '${IDM_ID}';
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<name>detect_empty_stream_CF</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform>
<name>filter_last_row_CF</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>change_job_status_on_success_CF</send_true_to>
<attributes/>
<GUI>
<xloc>1408</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>upsert_CF</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>source_id</field>
<name>source_id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>citizenship_foreign</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>source_update_date</name>
<rename>source_update_date</rename>
<update>Y</update>
</value>
<value>
<name>basis</name>
<rename>basis</rename>
<update>Y</update>
</value>
<value>
<name>acquisition_date</name>
<rename>acquisition_date</rename>
<update>Y</update>
</value>
<value>
<name>oksm_code</name>
<rename>oksm_code</rename>
<update>Y</update>
</value>
<value>
<name>type</name>
<rename>type</rename>
<update>Y</update>
</value>
<value>
<name>source_id</name>
<rename>source_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>filter_true_citizenship</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_foreign_citizenship</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_false_to>update_citizen_has_foreign_residence</send_false_to>
<send_true_to>update_citizen_has_foreign_citizenship</send_true_to>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>576</yloc>
</GUI>
</transform>
<transform>
<name>identify_last_row_CF</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>table_input_CF</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH filtered_data AS (
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') AS data,
'citizenship' AS type
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
and case when '${MAX_SOURCE_UPDATE_DATE}' &lt;&gt; ''
then to_date(ri.info -> 'svedFL' -> 'svedDeputat' -> 'deputat' ->> 'dataSved', 'YYYY-MM-DD') >
to_date('${MAX_SOURCE_UPDATE_DATE}', 'YYYY-MM-DD')
else true end
UNION ALL
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') AS data,
'residence' AS type
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
and case when '${MAX_SOURCE_UPDATE_DATE}' &lt;&gt; ''
then to_date(ri.info -> 'svedFL' -> 'svedDeputat' -> 'deputat' ->> 'dataSved', 'YYYY-MM-DD') >
to_date('${MAX_SOURCE_UPDATE_DATE}', 'YYYY-MM-DD')
else true end
)
SELECT
recruit_id,
coalesce(to_date(NULLIF(data ->> 'dataSved', ''), 'YYYY-MM-DD'), current_date) AS source_update_date, -- дата обновления сведений
data ->> CASE WHEN type = 'residence' THEN 'osnovPriobrPP' ELSE 'osnovPriobrIG' END AS basis,
to_date(data ->> CASE WHEN type = 'residence' THEN 'dataPriobrPP' ELSE 'dataPriobrIG' END, 'YYYY-MM-DD') AS acquisition_date,
data -> 'oksm' ->> 'kodOKSM' AS oksm_code,
type,
(type = 'residence') AS has_foreign_residence,
(type = 'citizenship') AS has_foreign_citizenship
FROM filtered_data;
</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>update_citizen_has_foreign_citizenship</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<key>
<condition>&lt;></condition>
<field>has_foreign_citizenship</field>
<name>has_foreign_citizenship</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_citizenship</name>
<rename>has_foreign_citizenship</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>512</yloc>
</GUI>
</transform>
<transform>
<name>update_citizen_has_foreign_residence</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>update_job_execution_record_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -201,308 +532,10 @@ and recruitment_id = '${IDM_ID}';</sql>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<attributes/>
<GUI>
<xloc>1408</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<key>
<condition>=</condition>
<field>type</field>
<name>type</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizenship_foreign</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>residense_right_basis</name>
<rename>residense_right_basis</rename>
<update>Y</update>
</value>
<value>
<name>residense_right_date</name>
<rename>residense_right_date</rename>
<update>Y</update>
</value>
<value>
<name>country_name</name>
<rename>country_name</rename>
<update>Y</update>
</value>
<value>
<name>citizenship_basis</name>
<rename>citizenship_basis</rename>
<update>Y</update>
</value>
<value>
<name>citizenship_date</name>
<rename>citizenship_date</rename>
<update>Y</update>
</value>
<value>
<name>type</name>
<rename>type</rename>
<update>Y</update>
</value>
<value>
<name>source_update_date</name>
<rename>source_update_date</rename>
<update>Y</update>
</value>
</lookup>
<update_bypassed>N</update_bypassed>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH base AS (
SELECT
ri.recruit_id,
ri.info
FROM ervu_dashboard.recruits_info ri
JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id
WHERE '${IDM_ID}' != ''
AND (ri.current_recruitment_id = '${IDM_ID}' or (ri.current_recruitment_id is null and ri.target_recruitment_id = '${IDM_ID}'))
AND (
jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
OR jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
)
),
filtered_data AS (
SELECT
recruit_id,
elem AS data,
'citizenship' AS type
FROM base ri,
LATERAL jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedIG') AS elem
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
AND to_date(elem->>'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'::date
UNION ALL
SELECT
recruit_id,
elem AS data,
'residense' AS type
FROM base ri,
LATERAL jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedPP') AS elem
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
AND to_date(elem->>'dataSved', 'YYYY-MM-DD') > '${MAX_SOURCE_UPDATE_DATE}'::date
)
SELECT
recruit_id,
to_date(data->>'dataSved', 'YYYY-MM-DD') AS source_update_date, -- дата обновления сведений
CASE
WHEN type='residense' THEN data->>'osnovPriobrPP'
END::text AS residense_right_basis,
CASE
WHEN type='residense' THEN to_date(NULLIF(data->>'dataPriobrPP',''), 'YYYY-MM-DD')
END::date AS residense_right_date,
data->'oksm'->>'naimOKSM' AS country_name,
CASE
WHEN type='citizenship' THEN data->>'osnovPriobrIG'
END::text AS citizenship_basis,
CASE
WHEN type='citizenship' THEN to_date(NULLIF(data->>'dataPriobrIG',''), 'YYYY-MM-DD')
END::date AS citizenship_date,
type,
CASE
WHEN type = 'residense' THEN true
ELSE false
END AS has_foreign_residence,
CASE
WHEN type = 'citizenship' THEN true
ELSE false
END AS has_foreign_citizenship
FROM citizen</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
<value>
<name>has_foreign_citizenship</name>
<rename>has_foreign_citizenship</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>992</xloc>
<yloc>528</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>528</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Insert / update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>upsert_CF</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -513,8 +546,20 @@ FROM citizen</sql>
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_citizen_has_foreign_citizenship</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
<fields_valuename/>
<codes_valuename/>
<max_errors/>
<max_pct_errors/>
<min_pct_rows/>
</error>
<error>
<source_transform>update_citizen_has_foreign_residence</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,68 +21,96 @@
</notepads>
<order>
<hop>
<from>Create job execution record</from>
<to>Table input</to>
<from>upsert_job_execution_record_CF</from>
<to>table_input_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<from>filter_last_row_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Detect empty stream</from>
<to>Change job status on success</to>
<from>detect_empty_stream_CF</from>
<to>change_job_status_on_success_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error</from>
<to>Abort</to>
<from>change_job_status_on_error_CF</from>
<to>abort_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Change job status on error</to>
<from>upsert_CF</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>table_input_CF</from>
<to>Identify last row in a stream</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Insert / update</to>
<to>upsert_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>Detect empty stream</to>
<to>detect_empty_stream_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>upsert_CF</from>
<to>filter_last_row_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_citizenship</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>filter_true_citizenship</from>
<to>update_citizen_has_foreign_residence</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<to>filter_true_citizenship</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Update</to>
<from>update_citizen_has_foreign_citizenship</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>update_citizen_has_foreign_residence</from>
<to>change_job_status_on_error_CF</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Abort</name>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>abort_CF</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
@ -97,12 +125,12 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1312</xloc>
<yloc>400</yloc>
<xloc>1408</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error</name>
<name>change_job_status_on_error_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -133,12 +161,12 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1120</xloc>
<yloc>400</yloc>
<xloc>1216</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<name>change_job_status_on_success_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -165,12 +193,291 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1360</xloc>
<xloc>1408</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<name>detect_empty_stream_CF</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>filter_last_row_CF</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>change_job_status_on_success_CF</send_true_to>
<attributes/>
<GUI>
<xloc>1408</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>filter_true_citizenship</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>has_foreign_citizenship</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_false_to>update_citizen_has_foreign_residence</send_false_to>
<send_true_to>update_citizen_has_foreign_citizenship</send_true_to>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>table_input_CF</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH filtered_data AS (
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') AS data,
'citizenship' AS type
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedIG') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
UNION ALL
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') AS data,
'residence' AS type
FROM ervu_dashboard.recruits_info ri
WHERE jsonb_typeof(ri.info -> 'svedFL' -> 'svedIGPP' -> 'svedPP') = 'array'
AND coalesce(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}'
)
SELECT
recruit_id,
coalesce(to_date(NULLIF(data ->> 'dataSved', ''), 'YYYY-MM-DD'), current_date) AS source_update_date, -- дата обновления сведений
data ->> CASE WHEN type = 'residence' THEN 'osnovPriobrPP' ELSE 'osnovPriobrIG' END AS basis,
to_date(data ->> CASE WHEN type = 'residence' THEN 'dataPriobrPP' ELSE 'dataPriobrIG' END, 'YYYY-MM-DD') AS acquisition_date,
data -> 'oksm' ->> 'kodOKSM' AS oksm_code,
type,
(type = 'residence') AS has_foreign_residence,
(type = 'citizenship') AS has_foreign_citizenship
FROM filtered_data;
</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>480</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>update_citizen_has_foreign_citizenship</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_citizenship</name>
<rename>has_foreign_citizenship</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>update_citizen_has_foreign_residence</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>512</yloc>
</GUI>
</transform>
<transform>
<name>upsert_CF</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<key>
<condition>=</condition>
<field>source_id</field>
<name>source_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizenship_foreign</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>source_update_date</name>
<rename>source_update_date</rename>
<update>Y</update>
</value>
<value>
<name>basis</name>
<rename>basis</rename>
<update>Y</update>
</value>
<value>
<name>acquisition_date</name>
<rename>acquisition_date</rename>
<update>Y</update>
</value>
<value>
<name>oksm_code</name>
<rename>oksm_code</rename>
<update>Y</update>
</value>
<value>
<name>type</name>
<rename>type</rename>
<update>Y</update>
</value>
<value>
<name>source_id</name>
<rename>source_id</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>upsert_job_execution_record_CF</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
@ -216,302 +523,10 @@ DO UPDATE SET
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<type>DetectEmptyStream</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>Filter rows</name>
<type>FilterRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<compare>
<condition>
<conditions>
</conditions>
<function>=</function>
<leftvalue>last_row</leftvalue>
<negated>N</negated>
<operator>-</operator>
<value>
<isnull>N</isnull>
<length>-1</length>
<name>constant</name>
<precision>-1</precision>
<text>Y</text>
<type>Boolean</type>
</value>
</condition>
</compare>
<send_true_to>Change job status on success</send_true_to>
<attributes/>
<GUI>
<xloc>1360</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<resultfieldname>last_row</resultfieldname>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Insert / update</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>type</field>
<name>type</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>citizenship_foreign</table>
<value>
<name>recruit_id</name>
<rename>recruit_id</rename>
<update>N</update>
</value>
<value>
<name>residense_right_basis</name>
<rename>residense_right_basis</rename>
<update>Y</update>
</value>
<value>
<name>residense_right_date</name>
<rename>residense_right_date</rename>
<update>Y</update>
</value>
<value>
<name>country_name</name>
<rename>country_name</rename>
<update>Y</update>
</value>
<value>
<name>citizenship_basis</name>
<rename>citizenship_basis</rename>
<update>Y</update>
</value>
<value>
<name>citizenship_date</name>
<rename>citizenship_date</rename>
<update>Y</update>
</value>
<value>
<name>type</name>
<rename>type</rename>
<update>Y</update>
</value>
<value>
<name>source_update_date</name>
<rename>source_update_date</rename>
<update>Y</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH base AS (
SELECT
ri.recruit_id,
ri.info
FROM ervu_dashboard.recruits_info ri
JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку
AND (ri.current_recruitment_id = '${IDM_ID}' or (ri.current_recruitment_id is null and ri.target_recruitment_id = '${IDM_ID}'))
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
OR jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
),
citizen AS (
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedIG') AS data,
'citizenship' AS type
FROM base ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedIG') = 'array'
UNION ALL
SELECT
ri.recruit_id,
jsonb_array_elements(ri.info->'svedFL'->'svedIGPP'->'svedPP') AS data,
'residense' AS type
FROM base ri WHERE jsonb_typeof(ri.info->'svedFL'->'svedIGPP'->'svedPP') = 'array'
)
SELECT
recruit_id,
to_date(data->>'dataSved', 'YYYY-MM-DD') AS source_update_date, -- дата обновления сведений
CASE
WHEN type='residense' THEN data->>'osnovPriobrPP'
END::text AS residense_right_basis,
CASE
WHEN type='residense' THEN to_date(NULLIF(data->>'dataPriobrPP',''), 'YYYY-MM-DD')
END::date AS residense_right_date,
data->'oksm'->>'naimOKSM' AS country_name,
CASE
WHEN type='citizenship' THEN data->>'osnovPriobrIG'
END::text AS citizenship_basis,
CASE
WHEN type='citizenship' THEN to_date(NULLIF(data->>'dataPriobrIG',''), 'YYYY-MM-DD')
END::date AS citizenship_date,
type,
CASE
WHEN type = 'residense' THEN true
ELSE false
END AS has_foreign_residence,
CASE
WHEN type = 'citizenship' THEN true
ELSE false
END AS has_foreign_citizenship
FROM citizen</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>480</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>10000</commit>
<connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored>
<lookup>
<key>
<condition>=</condition>
<field>recruit_id</field>
<name>recruit_id</name>
</key>
<schema>ervu_dashboard</schema>
<table>citizen</table>
<value>
<name>has_foreign_residence</name>
<rename>has_foreign_residence</rename>
</value>
<value>
<name>has_foreign_citizenship</name>
<rename>has_foreign_citizenship</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform_error_handling>
<error>
<source_transform>Insert / update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_citizen_has_foreign_citizenship</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
@ -522,8 +537,20 @@ FROM citizen</sql>
<min_pct_rows/>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<source_transform>update_citizen_has_foreign_residence</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>
<fields_valuename/>
<codes_valuename/>
<max_errors/>
<max_pct_errors/>
<min_pct_rows/>
</error>
<error>
<source_transform>upsert_CF</source_transform>
<target_transform>change_job_status_on_error_CF</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,38 +21,38 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>get_update_recrutiments_CF</from>
<to>citizenship_foreign_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>get_max_source_update_date</from>
<to>Table input</to>
<from>get_max_source_update_date_CF</from>
<to>get_update_recrutiments_CF</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_update_recrutiments_CF</from>
<to>citizenship_foreign_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_update_recrutiments_CF</from>
<to>citizenship_foreign_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_update_recrutiments_CF</from>
<to>citizenship_foreign_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_update_recrutiments_CF</from>
<to>citizenship_foreign_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>get_update_recrutiments_CF</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -89,7 +89,7 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<xloc>384</xloc>
<yloc>288</yloc>
</GUI>
</transform>
@ -374,7 +374,7 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
</GUI>
</transform>
<transform>
<name>get_max_source_update_date</name>
<name>get_max_source_update_date_CF</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>

View file

@ -21,33 +21,33 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>get_missed_error_recruitments_CF</from>
<to>citizenship_foreign_flow_repeat.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_missed_error_recruitments_CF</from>
<to>citizenship_foreign_flow_repeat.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_missed_error_recruitments_CF</from>
<to>citizenship_foreign_flow_repeat.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_missed_error_recruitments_CF</from>
<to>citizenship_foreign_flow_repeat.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>get_missed_error_recruitments_CF</from>
<to>citizenship_foreign_flow_repeat.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>get_missed_error_recruitments_CF</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -223,7 +223,7 @@ where je.status is null or je.status in('ERROR', 'PROCESSING');</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>560</xloc>
<xloc>544</xloc>
<yloc>384</yloc>
</GUI>
</transform>
@ -274,7 +274,7 @@ where je.status is null or je.status in('ERROR', 'PROCESSING');</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>560</xloc>
<xloc>544</xloc>
<yloc>480</yloc>
</GUI>
</transform>
@ -325,7 +325,7 @@ where je.status is null or je.status in('ERROR', 'PROCESSING');</sql>
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>560</xloc>
<xloc>544</xloc>
<yloc>560</yloc>
</GUI>
</transform>

View file

@ -21,33 +21,33 @@
</notepads>
<order>
<hop>
<from>Get all recruitments ordered by created_date</from>
<from>get_all_recruitments_CF</from>
<to>citizenship_foreign_flow.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get all recruitments ordered by created_date</from>
<from>get_all_recruitments_CF</from>
<to>citizenship_foreign_flow.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get all recruitments ordered by created_date</from>
<from>get_all_recruitments_CF</from>
<to>citizenship_foreign_flow.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get all recruitments ordered by created_date</from>
<from>get_all_recruitments_CF</from>
<to>citizenship_foreign_flow.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Get all recruitments ordered by created_date</from>
<from>get_all_recruitments_CF</from>
<to>citizenship_foreign_flow.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Get all recruitments ordered by created_date</name>
<name>get_all_recruitments_CF</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -169,8 +169,8 @@ FROM ervu_dashboard.recruitment
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>752</xloc>
<yloc>240</yloc>
<xloc>736</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
@ -220,8 +220,8 @@ FROM ervu_dashboard.recruitment
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>752</xloc>
<yloc>320</yloc>
<xloc>736</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -271,8 +271,8 @@ FROM ervu_dashboard.recruitment
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>768</xloc>
<yloc>400</yloc>
<xloc>736</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
@ -322,8 +322,8 @@ FROM ervu_dashboard.recruitment
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>752</xloc>
<yloc>480</yloc>
<xloc>736</xloc>
<yloc>464</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>deferment_decision_update_date_ervu_dashboard</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:50:31.833</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:50:31.833</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>Table output</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
created_at AS system_create_date,
CASE
WHEN updated_at is null THEN '0001-01-01 00:00:00'
ELSE updated_at
END as system_update_date,
current_timestamp AS record_created,
'deferment_decision_table' AS workflow
FROM ervu_dashboard.deferment_liberation
WHERE updated_at = (SELECT MAX(updated_at) FROM ervu_dashboard.deferment_liberation)
limit 1</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>Table output</name>
<type>TableOutput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>1000</commit>
<connection>ervu-dashboard</connection>
<fields>
</fields>
<ignore_errors>N</ignore_errors>
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_monthly>Y</partitioning_monthly>
<return_keys>N</return_keys>
<schema>public</schema>
<specify_fields>N</specify_fields>
<table>recruit_create</table>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1216</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>job_last_update_date_deferment_decision</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/06/02 14:48:05.666</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:48:05.666</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>592</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>deferment_decision_update_date_ervu_dashboard.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation/deferment_decision_update_date_ervu_dashboard.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>848</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_deferment_decision_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation/row_last_deferment_decision_update_date.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1248</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1568</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>deferment_decision_update_date_ervu_dashboard.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>deferment_decision_update_date_ervu_dashboard.hpl</from>
<to>row_last_deferment_decision_update_date.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_deferment_decision_update_date.hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -70,14 +65,34 @@
<to>Detect empty stream</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
</order>
@ -98,7 +113,7 @@
<attributes/>
<GUI>
<xloc>1408</xloc>
<yloc>464</yloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
@ -134,7 +149,7 @@ and recruitment_id = '${IDM_ID}';
<attributes/>
<GUI>
<xloc>1200</xloc>
<yloc>464</yloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
@ -282,67 +297,32 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning>
<connection>postgres.decision-document-service</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH
part_recruits AS (
SELECT
id
FROM public.recruit
WHERE '${IDM_ID}' != '' -- Проверка на пустую строку
AND (current_recruitment = '${IDM_ID}' or (current_recruitment is null and target_recruitment = '${IDM_ID}'))
),
p_deferment_decision AS (
SELECT
d.id,
d.recruit_id,
d.base_deferment,
d.created_at,
d.updated_at,
d.postponement_date,
d.hidden,
d.fact_provision,
ddt.code AS type_code
FROM public.deferment_decision d
JOIN public.deferment_decision_type ddt ON d.type_id = ddt.id
)
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'deferment' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_deferment,--Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
false AS has_liberation
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '1' -- отсрочка
UNION ALL
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'liberation' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
false AS has_deferment,
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_liberation-- Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '2' -- освобождение</sql>
<limit/>
<sql>SELECT
dd.id AS deferment_id,
dd.recruit_id,
dd.base_deferment,
dd.created_at,
dd.updated_at,
dd.postponement_date,
dd.hidden,
CASE ddt.code
WHEN '1' THEN 'deferment'
WHEN '2' THEN 'liberation'
END AS type,
-- 'fact' AS permission_fact,
dd.fact_provision AS has_deferment_raw,
-- true только если тип "освобождение" и факт предоставления = 1
case when (ddt.code = '2' AND dd.fact_provision = '1') then 1
else 0 end AS has_liberation_raw
FROM public.deferment_decision dd
JOIN public.recruit r
ON r.id = dd.recruit_id
AND (r.current_recruitment = '${IDM_ID}'
OR (r.current_recruitment IS NULL AND r.target_recruitment = '${IDM_ID}'))
JOIN public.deferment_decision_type ddt
ON dd.type_id = ddt.id
WHERE ddt.code IN ('1', '2');</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -455,8 +435,8 @@ WHERE d.type_code = '2' -- освобождение</sql>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>880</xloc>
<yloc>464</yloc>
<xloc>1152</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
@ -490,7 +470,139 @@ WHERE d.type_code = '2' -- освобождение</sql>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>464</yloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_deferment_raw</aggregate>
<subject/>
<type>MAX</type>
<valuefield/>
</field>
<field>
<aggregate>has_liberation_raw</aggregate>
<subject/>
<type>MAX</type>
<valuefield/>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<linenr_fieldname/>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>816</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_deferment</field_name>
<formula_string>has_deferment_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_liberation</field_name>
<formula_string>has_liberation_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1520</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1312</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -508,7 +620,7 @@ WHERE d.type_code = '2' -- освобождение</sql>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -66,18 +61,38 @@
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>Insert / update</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
</order>
@ -98,7 +113,7 @@
<attributes/>
<GUI>
<xloc>1392</xloc>
<yloc>512</yloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -134,7 +149,7 @@ and recruitment_id = '${IDM_ID}';
<attributes/>
<GUI>
<xloc>1184</xloc>
<yloc>512</yloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -354,68 +369,33 @@ and recruitment_id = '${IDM_ID}';</sql>
</partitioning>
<connection>postgres.decision-document-service</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH
part_recruits AS (
SELECT
id
FROM public.recruit
WHERE '${IDM_ID}' != '' -- Проверка на пустую строку
AND (current_recruitment = '${IDM_ID}' or (current_recruitment is null and target_recruitment = '${IDM_ID}'))
),
p_deferment_decision AS (
SELECT
d.id,
d.recruit_id,
d.base_deferment,
d.created_at,
d.updated_at,
d.postponement_date,
d.hidden,
d.fact_provision,
ddt.code AS type_code
FROM public.deferment_decision d
JOIN public.deferment_decision_type ddt ON d.type_id = ddt.id
WHERE d.updated_at >= '${M_DEFDEC_UP_DATE}'::timestamp
)
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'deferment' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_deferment,--Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
false AS has_liberation
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '1' -- отсрочка
UNION ALL
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'liberation' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
false AS has_deferment,
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_liberation-- Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '2' -- освобождение</sql>
<sql>SELECT
dd.id AS deferment_id,
dd.recruit_id,
dd.base_deferment,
dd.created_at,
dd.updated_at,
dd.postponement_date,
dd.hidden,
CASE ddt.code
WHEN '1' THEN 'deferment'
WHEN '2' THEN 'liberation'
END AS type,
'fact' AS permission_fact,
(dd.fact_provision = '1') AS has_deferment,
-- true только если тип "освобождение" и факт предоставления = 1
(ddt.code = '2' AND dd.fact_provision = '1') AS has_liberation
FROM public.deferment_decision dd
JOIN public.recruit r
ON r.id = dd.recruit_id
AND (r.current_recruitment = '${IDM_ID}'
OR (r.current_recruitment IS NULL AND r.target_recruitment = '${IDM_ID}'))
JOIN public.deferment_decision_type ddt
ON dd.type_id = ddt.id
WHERE ddt.code IN ('1', '2')
and case when '${MAX_SOURCE_UPDATE_DATE}' &lt;&gt; ''
then dd.updated_at > to_date('${MAX_SOURCE_UPDATE_DATE}', 'YYYY-MM-DD')
else true end;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -423,6 +403,100 @@ WHERE d.type_code = '2' -- освобождение</sql>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1584</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1376</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_deferment_raw</aggregate>
<type>MAX</type>
</field>
<field>
<aggregate>has_liberation_raw</aggregate>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>880</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
@ -458,8 +532,41 @@ WHERE d.type_code = '2' -- освобождение</sql>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>512</yloc>
<xloc>1216</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_deferment</field_name>
<formula_string>has_deferment_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_liberation</field_name>
<formula_string>has_liberation_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>1040</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
@ -493,7 +600,7 @@ WHERE d.type_code = '2' -- освобождение</sql>
<attributes/>
<GUI>
<xloc>752</xloc>
<yloc>512</yloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -511,7 +618,7 @@ WHERE d.type_code = '2' -- освобождение</sql>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -66,18 +61,38 @@
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>Insert / update</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
</order>
@ -97,8 +112,8 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1312</xloc>
<yloc>400</yloc>
<xloc>1264</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -133,8 +148,8 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1120</xloc>
<yloc>400</yloc>
<xloc>1072</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -305,7 +320,6 @@ DO UPDATE SET
<condition>=</condition>
<field>deferment_id</field>
<name>deferment_id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>deferment_liberation</table>
@ -370,67 +384,30 @@ DO UPDATE SET
</partitioning>
<connection>postgres.decision-document-service</connection>
<execute_each_row>N</execute_each_row>
<sql>WITH
part_recruits AS (
SELECT
id
FROM public.recruit
WHERE '${IDM_ID}' != '' -- Проверка на пустую строку
AND (current_recruitment = '${IDM_ID}' or (current_recruitment is null and target_recruitment = '${IDM_ID}'))
),
p_deferment_decision AS (
SELECT
d.id,
d.recruit_id,
d.base_deferment,
d.created_at,
d.updated_at,
d.postponement_date,
d.hidden,
d.fact_provision,
ddt.code AS type_code
FROM public.deferment_decision d
JOIN public.deferment_decision_type ddt ON d.type_id = ddt.id
)
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'deferment' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_deferment,--Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
false AS has_liberation
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '1' -- отсрочка
UNION ALL
SELECT
d.id AS deferment_id,
d.recruit_id,
d.base_deferment, --Основание на отсрочку от призыва/Основание на освобождение от призыва
d.created_at,--Дата начала действия отсрочки от призыва/Дата начала действия отвобождения от призыва
d.updated_at,
d.postponement_date, --Дата окончания действия отсрочки от призыва/Дата окончания действия освобождения от призыва
d.hidden,
'liberation' AS type,
'fact' AS permission_fact, -- ключ принадлежности к решению по отсрочке/освобождению
false AS has_deferment,
CASE
WHEN d.fact_provision = '1' THEN true
ELSE false
END AS has_liberation-- Факт предоставления отсрочки от призыва/Факт предоставления освобождения от призыва (1 - предоставлено, 2 - не предоставлено)
FROM p_deferment_decision d
JOIN part_recruits r ON r.id = d.recruit_id
WHERE d.type_code = '2' -- освобождение</sql>
<sql>SELECT
dd.id AS deferment_id,
dd.recruit_id,
dd.base_deferment,
dd.created_at,
dd.updated_at,
dd.postponement_date,
dd.hidden,
CASE ddt.code
WHEN '1' THEN 'deferment'
WHEN '2' THEN 'liberation'
END AS type,
'fact' AS permission_fact,
(dd.fact_provision = '1') AS has_deferment,
-- true только если тип "освобождение" и факт предоставления = 1
(ddt.code = '2' AND dd.fact_provision = '1') AS has_liberation
FROM public.deferment_decision dd
JOIN public.recruit r
ON r.id = dd.recruit_id
AND (r.current_recruitment = '${IDM_ID}'
OR (r.current_recruitment IS NULL AND r.target_recruitment = '${IDM_ID}'))
JOIN public.deferment_decision_type ddt
ON dd.type_id = ddt.id
WHERE ddt.code IN ('1', '2');</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -438,6 +415,100 @@ WHERE d.type_code = '2' -- освобождение</sql>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1488</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1280</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_deferment_raw</aggregate>
<type>MAX</type>
</field>
<field>
<aggregate>has_liberation_raw</aggregate>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
@ -473,8 +544,41 @@ WHERE d.type_code = '2' -- освобождение</sql>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>832</xloc>
<yloc>400</yloc>
<xloc>1120</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_deferment</field_name>
<formula_string>has_deferment_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_liberation</field_name>
<formula_string>has_liberation_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -508,7 +612,7 @@ WHERE d.type_code = '2' -- освобождение</sql>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>400</yloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -526,7 +630,7 @@ WHERE d.type_code = '2' -- освобождение</sql>
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,73 +21,56 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>failed_deferment_liberation_permission_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_deferment_liberation</from>
<to>failed_deferment_liberation_permission_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_deferment_liberation</from>
<to>updated_idm_ids_fromrecruits_deferment</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>updated_idm_ids_fromrecruits_deferment</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>deferment_liberation_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>deferment_liberation_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>deferment_liberation_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>deferment_liberation_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>deferment_liberation_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH 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_SUCCESS')
GROUP BY recruitment_id)
SELECT r.idm_id
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
union
select r2.idm_id
from ervu_dashboard.recruitment r2
join etl.job_execution je
on r2.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>deferment_liberation_flow_delta.hpl</name>
<type>PipelineExecutor</type>
@ -135,8 +118,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>128</yloc>
<xloc>1152</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
@ -186,8 +169,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>656</xloc>
<yloc>208</yloc>
<xloc>1152</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -237,8 +220,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>672</xloc>
<yloc>288</yloc>
<xloc>1152</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
@ -288,8 +271,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>672</xloc>
<yloc>384</yloc>
<xloc>1152</xloc>
<yloc>464</yloc>
</GUI>
</transform>
<transform>
@ -339,8 +322,142 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>464</yloc>
<xloc>1152</xloc>
<yloc>544</yloc>
</GUI>
</transform>
<transform>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<head_name>updated_idm_ids_fromrecruits_deferment</head_name>
<tail_name>failed_deferment_liberation_permission_idm_ids_on_delta</tail_name>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>failed_deferment_liberation_permission_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>496</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_deferment_liberation</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(updated_at) as max_update_date
from deferment_liberation;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>304</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_fromrecruits_deferment</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT COALESCE(r.current_recruitment, r.target_recruitment) AS recruitment_id,
mud.val as max_update_date
FROM public.deferment_decision dd
JOIN recruit r ON dd.recruit_id = r.id
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR dd.updated_at > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>496</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -1,168 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>row_last_deferment_decision_update_date</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:51:59.611</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:51:59.611</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Copy rows to result</from>
<to>Set variables</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Copy rows to result</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Set variables</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>128</yloc>
</GUI>
</transform>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<default_value/>
<field_name>MAX_DEFERMENT_DECISION_UPDATE_DATE</field_name>
<variable_name>M_DEFDEC_UP_DATE</variable_name>
<variable_type>GP_WORKFLOW</variable_type>
</field>
<field>
<default_value/>
<field_name>MAX_RECRUITS_DEFERMENT_UPDATE_DATE</field_name>
<variable_name>M_RECDEF_UP_DATE</variable_name>
<variable_type>GP_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>1232</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>with base as(
SELECT
(SELECT system_update_date
FROM public.recruit_create
WHERE workflow = 'deferment_decision_table'
AND system_update_date = (SELECT MAX(system_update_date) FROM public.recruit_create)
ORDER BY record_created DESC
LIMIT 1) AS MAX_DEFERMENT_DECISION_UPDATE_DATE,
(SELECT system_update_date
FROM public.recruit_create
WHERE workflow = 'recruits_deferment_table'
AND system_update_date = (SELECT MAX(system_update_date) FROM public.recruit_create)
ORDER BY record_created DESC
LIMIT 1) AS MAX_RECRUITS_DEFERMENT_UPDATE_DATE
)
select
CASE
WHEN MAX_DEFERMENT_DECISION_UPDATE_DATE is null THEN '0001-01-01 00:00:00'
ELSE MAX_DEFERMENT_DECISION_UPDATE_DATE
END AS MAX_DEFERMENT_DECISION_UPDATE_DATE,
CASE
WHEN MAX_RECRUITS_DEFERMENT_UPDATE_DATE is null THEN '0001-01-01 00:00:00'
ELSE MAX_RECRUITS_DEFERMENT_UPDATE_DATE
END AS MAX_RECRUITS_DEFERMENT_UPDATE_DATE
from base</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Write to log</name>
<type>WriteToLog</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<displayHeader>Y</displayHeader>
<fields>
</fields>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<loglevel>Basic</loglevel>
<logmessage>${M_RECDEF_UP_DATE}
${M_DEFDEC_UP_DATE}</logmessage>
<attributes/>
<GUI>
<xloc>1440</xloc>
<yloc>176</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -260,29 +260,25 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>with filtered_data as (SELECT
d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
d.hidden,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
NOT d.hidden AS defer_conscription, -- наличие права на отсрочку от призыва
CTID
<sql>SELECT d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
false,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
true AS defer_conscription -- наличие права на отсрочку от призыва
FROM public.recruits r
JOIN public.recruits_deferment d
ON r.id = d.recruit_id
JOIN public.ervu_reason_for_deferment rd
ON d.ervu_reason_for_deferment_id = rd.id
WHERE (r.current_recruitment_id = '${IDM_ID}'
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
))
select fd.*,
fd.ctid = (select max(ctid) from filtered_data) as last_row
from filtered_data fd</sql>
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
)
and rd.hidden is false;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -337,32 +337,28 @@ and recruitment_id = '${IDM_ID}';</sql>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>with filtered_data as (SELECT
d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
d.hidden,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
NOT d.hidden AS defer_conscription, -- наличие права на отсрочку от призыва
CTID
FROM public.recruits r
JOIN public.recruits_deferment d
ON r.id = d.recruit_id
JOIN public.ervu_reason_for_deferment rd
ON d.ervu_reason_for_deferment_id = rd.id
WHERE (r.current_recruitment_id = '${IDM_ID}'
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
)
and case when '${MAX_SOURCE_UPDATE_DATE}' &lt;&gt; ''
<sql>SELECT d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
false,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
true AS defer_conscription -- наличие права на отсрочку от призыва
FROM public.recruits r
JOIN public.recruits_deferment d
ON r.id = d.recruit_id
JOIN public.ervu_reason_for_deferment rd
ON d.ervu_reason_for_deferment_id = rd.id
WHERE (r.current_recruitment_id = '${IDM_ID}'
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
)
and rd.hidden is false
and case when '${MAX_SOURCE_UPDATE_DATE}' &lt;&gt; ''
then d.system_update_date > to_date('${MAX_SOURCE_UPDATE_DATE}', 'YYYY-MM-DD')
else true end )
select fd.*,
fd.ctid = (select max(ctid) from filtered_data) as last_row
from filtered_data fd</sql>
else true end;</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -352,29 +352,25 @@ DO UPDATE SET
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>with filtered_data as (SELECT
d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
d.hidden,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
NOT d.hidden AS defer_conscription, -- наличие права на отсрочку от призыва
CTID
<sql>SELECT d.id AS deferment_id,
d.recruit_id,
rd.code AS base_deferment, -- коды основания права на отсрочку
d.postponement_date, -- Дата окончания действия права на отсрочку
d.date_of_information, -- Дата начала действия права на отсрочку
false,
d.system_create_date AS created_at,
d.system_update_date AS updated_at,
'permission' AS permission_fact, -- ключ принадлежности к праву на отсрочку
true AS defer_conscription -- наличие права на отсрочку от призыва
FROM public.recruits r
JOIN public.recruits_deferment d
ON r.id = d.recruit_id
JOIN public.ervu_reason_for_deferment rd
ON d.ervu_reason_for_deferment_id = rd.id
WHERE (r.current_recruitment_id = '${IDM_ID}'
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
))
select fd.*,
fd.ctid = (select max(ctid) from filtered_data) as last_row
from filtered_data fd</sql>
OR (r.current_recruitment_id IS NULL AND r.target_recruitment_id = '${IDM_ID}')
)
and rd.hidden is false</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -82,6 +82,8 @@
<method>none</method>
<schema_name/>
</partitioning>
<head_name>updated_idm_ids_fromrecruits_deferment</head_name>
<tail_name>failed_deferment_liberation_permission_idm_ids_on_delta</tail_name>
<attributes/>
<GUI>
<xloc>592</xloc>
@ -471,7 +473,7 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<lookup>max_update_date_from_deferment_liberation</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT COALESCE(r.current_recruitment_id, r.target_recruitment_id) AS recruitment_id,
? as max_update_date
mud.val as max_update_date
FROM recruits r
JOIN recruits_deferment rd ON rd.recruit_id = r.id
JOIN max_update_date mud ON TRUE

View file

@ -134,7 +134,7 @@ WHERE code = 'educationLevel';</sql>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
key,
key as code,
value ->> 'value' as value,
NOT hidden as actual,
updated_at as update_date

View file

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>job_last_update_date_subpoena</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/06/02 14:48:05.666</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:48:05.666</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>400</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_update_date_ervu_dashboard.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/subpoena/subpoena_update_date_ervu_dashboard.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>784</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_subpoena_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/subpoena/row_last_subpoena_update_date.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1600</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>subpoena_update_date_ervu_dashboard.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>subpoena_update_date_ervu_dashboard.hpl</from>
<to>row_last_subpoena_update_date.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_subpoena_update_date.hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -70,14 +65,34 @@
<to>sort_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table output</from>
<to>Filter rows</to>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
</order>
@ -97,8 +112,8 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1424</xloc>
<yloc>512</yloc>
<xloc>1408</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -133,8 +148,8 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1200</xloc>
<yloc>512</yloc>
<xloc>1184</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -251,6 +266,61 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_sent_summons</aggregate>
<subject>has_sent_summons</subject>
<type>MAX</type>
<valuefield/>
</field>
<field>
<aggregate>has_served_summons</aggregate>
<subject>has_served_summons</subject>
<type>MAX</type>
<valuefield/>
</field>
<field>
<aggregate>appeared_to_recruitment_center</aggregate>
<subject>appeared_to_recruitment_center</subject>
<type>MAX</type>
<valuefield/>
</field>
<field>
<aggregate>not_appeared_by_valid_excuse</aggregate>
<subject>not_appeared_by_valid_excuse</subject>
<type>MAX</type>
<valuefield/>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<linenr_fieldname/>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>864</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
@ -283,50 +353,43 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<sql>SELECT
s.id, --id повестки
CASE
WHEN s.send_date is not null THEN true
ELSE false
END AS has_sent_summons, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN s.system_stages->'subpoenaAwarded' != 'true' THEN true
ELSE false
END AS has_served_summons, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN s.system_stages->'recruitAttendanceConfirm' != 'true' THEN true
ELSE false
END AS appeared_to_recruitment_center, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN true
ELSE false
END AS not_appeared_by_valid_excuse, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type
-- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
s.id, --id повестки
CASE
WHEN (s.system_stages->>'subpoenaDirected')::text = 'true' THEN 1
ELSE 0
END AS has_sent_summons_raw, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN (s.system_stages->>'subpoenaAwarded') = 'true' THEN 1
ELSE 0
END AS has_served_summons_raw, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN (s.system_stages->>'recruitAttendanceConfirm') = 'true' THEN 1
ELSE 0
END AS appeared_to_recruitment_center_raw, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN 1
ELSE 0
END AS not_appeared_by_valid_excuse_raw, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type -- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
FROM public.subpoena s
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'</sql>
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE s.department_id = '${IDM_ID}'</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -424,7 +487,7 @@ WHERE
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>912</xloc>
<xloc>1040</xloc>
<yloc>320</yloc>
</GUI>
</transform>
@ -471,8 +534,8 @@ WHERE
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>512</yloc>
<xloc>1232</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
@ -492,7 +555,7 @@ WHERE
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>recruit_id</name>
@ -506,7 +569,112 @@ WHERE
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>512</yloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_sent_summons</field_name>
<formula_string>has_sent_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_served_summons</field_name>
<formula_string>has_served_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>appeared_to_recruitment_center</field_name>
<formula_string>appeared_to_recruitment_center_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>not_appeared_by_valid_excuse</field_name>
<formula_string>not_appeared_by_valid_excuse_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1632</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1408</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -524,7 +692,7 @@ WHERE
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -66,18 +61,38 @@
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>Insert / update</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
</order>
@ -97,8 +112,8 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1488</xloc>
<yloc>880</yloc>
<xloc>1456</xloc>
<yloc>800</yloc>
</GUI>
</transform>
<transform>
@ -133,8 +148,8 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1312</xloc>
<yloc>880</yloc>
<xloc>1280</xloc>
<yloc>800</yloc>
</GUI>
</transform>
<transform>
@ -390,47 +405,43 @@ and recruitment_id = '${IDM_ID}';</sql>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<sql>SELECT
s.id, --id повестки
CASE
WHEN s.send_date is not null THEN true
ELSE false
END AS has_sent_summons, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN s.system_stages->'subpoenaAwarded' != 'true' THEN true
ELSE false
END AS has_served_summons, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN s.system_stages->'recruitAttendanceConfirm' != 'true' THEN true
ELSE false
END AS appeared_to_recruitment_center, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN true
ELSE false
END AS not_appeared_by_valid_excuse, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type
-- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
s.id, --id повестки
CASE
WHEN (s.system_stages->>'subpoenaDirected')::text = 'true' THEN 1
ELSE 0
END AS has_sent_summons_raw, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN (s.system_stages->>'subpoenaAwarded') = 'true' THEN 1
ELSE 0
END AS has_served_summons_raw, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN (s.system_stages->>'recruitAttendanceConfirm') = 'true' THEN 1
ELSE 0
END AS appeared_to_recruitment_center_raw, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN 1
ELSE 0
END AS not_appeared_by_valid_excuse_raw, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type -- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
FROM public.subpoena s
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE s.department_id = '${IDM_ID}'
AND s.status_change_date >= '${M_S_UP_DATE}'::timestamp</sql>
<variables_active>Y</variables_active>
<attributes/>
@ -439,6 +450,112 @@ WHERE
<yloc>704</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1760</xloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1536</xloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_sent_summons</aggregate>
<subject>has_sent_summons</subject>
<type>MAX</type>
</field>
<field>
<aggregate>has_served_summons</aggregate>
<subject>has_served_summons</subject>
<type>MAX</type>
</field>
<field>
<aggregate>appeared_to_recruitment_center</aggregate>
<subject>appeared_to_recruitment_center</subject>
<type>MAX</type>
</field>
<field>
<aggregate>not_appeared_by_valid_excuse</aggregate>
<subject>not_appeared_by_valid_excuse</subject>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>992</xloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform>
<name>Update</name>
<type>Update</type>
@ -482,8 +599,57 @@ WHERE
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>880</yloc>
<xloc>1360</xloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_sent_summons</field_name>
<formula_string>has_sent_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_served_summons</field_name>
<formula_string>has_served_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>appeared_to_recruitment_center</field_name>
<formula_string>appeared_to_recruitment_center_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>not_appeared_by_valid_excuse</field_name>
<formula_string>not_appeared_by_valid_excuse_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>1184</xloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform>
@ -503,7 +669,7 @@ WHERE
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>recruit_id</name>
@ -517,7 +683,7 @@ WHERE
<attributes/>
<GUI>
<xloc>848</xloc>
<yloc>880</yloc>
<yloc>960</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -535,7 +701,7 @@ WHERE
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -45,11 +45,6 @@
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Identify last row in a stream</to>
@ -66,18 +61,38 @@
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<from>Insert / update</from>
<to>Filter rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Group by</from>
<to>User defined Java expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Update</from>
<to>Change job status on error 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>sort_by_recruit_id</from>
<to>Group by</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>User defined Java expression</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update</from>
<to>Filter rows</to>
<from>Change job status on error 2</from>
<to>Abort 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream</from>
<to>sort_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
</order>
@ -97,8 +112,28 @@
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1472</xloc>
<yloc>752</yloc>
<xloc>1424</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Abort 2</name>
<type>Abort</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<abort_option>ABORT_WITH_ERROR</abort_option>
<always_log_rows>Y</always_log_rows>
<row_threshold>0</row_threshold>
<attributes/>
<GUI>
<xloc>1760</xloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform>
@ -133,8 +168,44 @@ and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1280</xloc>
<yloc>752</yloc>
<xloc>1232</xloc>
<yloc>656</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on error 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1536</xloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform>
@ -269,6 +340,56 @@ DO UPDATE SET
<yloc>560</yloc>
</GUI>
</transform>
<transform>
<name>Group by</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_sent_summons</aggregate>
<subject>has_sent_summons</subject>
<type>MAX</type>
</field>
<field>
<aggregate>has_served_summons</aggregate>
<subject>has_served_summons</subject>
<type>MAX</type>
</field>
<field>
<aggregate>appeared_to_recruitment_center</aggregate>
<subject>appeared_to_recruitment_center</subject>
<type>MAX</type>
</field>
<field>
<aggregate>not_appeared_by_valid_excuse</aggregate>
<subject>not_appeared_by_valid_excuse</subject>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>992</xloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform>
<name>Identify last row in a stream</name>
<type>DetectLastRow</type>
@ -305,7 +426,6 @@ DO UPDATE SET
<condition>=</condition>
<field>id</field>
<name>id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>subpoena</table>
@ -405,49 +525,45 @@ DO UPDATE SET
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>SELECT
s.id, --id повестки
CASE
WHEN s.send_date is not null THEN true
ELSE false
END AS has_sent_summons, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN s.system_stages->'subpoenaAwarded' != 'true' THEN true
ELSE false
END AS has_served_summons, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN s.system_stages->'recruitAttendanceConfirm' != 'true' THEN true
ELSE false
END AS appeared_to_recruitment_center, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN true
ELSE false
END AS not_appeared_by_valid_excuse, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type
-- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
s.id, --id повестки
CASE
WHEN (s.system_stages->>'subpoenaDirected')::text = 'true' THEN 1
ELSE 0
END AS has_sent_summons_raw, --факт направления повестки///Признак наличия направленной повестки
CASE
WHEN (s.system_stages->>'subpoenaAwarded') = 'true' THEN 1
ELSE 0
END AS has_served_summons_raw, --has_served_summons//Признак наличия врученной повестки
CASE
WHEN (s.system_stages->>'recruitAttendanceConfirm') = 'true' THEN 1
ELSE 0
END AS appeared_to_recruitment_center_raw, -- appeared_to_recruitment_center//Признак явки в военный комиссариат
CASE
WHEN ss.code = '5.1' THEN 1
ELSE 0
END AS not_appeared_by_valid_excuse_raw, -- not_appeared_by_valid_excuse//Признак неявки в военкомат по уважительной причине
s.recruit_id,
s.send_date, --дата направления повестки
s.series, --серия повестки
s.number, --новер повестки
s.reason_id AS subpoena_reason, --причина вызова по повестке /// код передавать или сразу наименование?
s.full_name_responsible_user, --фио военного комиссара(фио пользователя сформировавшео повестку)
s.sig_info, --сертификат ключа проверки ЭП
s.recruitment_name, --наименование ВК
s.recruitment_address, --адрес, по которому необходимо явиться
s.visit_date, --дата и время явки
--, --способ направления // искать в subpoena_send_info
--, --УН заказного почтового отправления // искать в subpoena_send_info
s.status_id, --статус // ссылка на справочник subpoena_status/// AS subpoena_status
s.create_date, --дата создания // для загрузки данных
s.status_change_date, --дата обновления // для загрузки данных (timestamp without time zone)
sr.type AS subpoena_reason_type -- поля для карточки, раздел "Сведения о направлении повестки военного комиссариата"
FROM public.subpoena s
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
</sql>
join public.subpoena_status ss on s.status_id = ss.id
join public.subpoena_reason sr on sr.id = s.reason_id
WHERE s.department_id = '${IDM_ID}'</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -498,8 +614,57 @@ WHERE
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1056</xloc>
<yloc>752</yloc>
<xloc>1360</xloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform>
<name>User defined Java expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_sent_summons</field_name>
<formula_string>has_sent_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_served_summons</field_name>
<formula_string>has_served_summons_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>appeared_to_recruitment_center</field_name>
<formula_string>appeared_to_recruitment_center_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>not_appeared_by_valid_excuse</field_name>
<formula_string>not_appeared_by_valid_excuse_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>1184</xloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform>
@ -519,7 +684,7 @@ WHERE
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<unique_rows>N</unique_rows>
<fields>
<field>
<name>recruit_id</name>
@ -533,7 +698,7 @@ WHERE
<attributes/>
<GUI>
<xloc>848</xloc>
<yloc>752</yloc>
<yloc>816</yloc>
</GUI>
</transform>
<transform_error_handling>
@ -551,7 +716,7 @@ WHERE
</error>
<error>
<source_transform>Update</source_transform>
<target_transform>Change job status on error</target_transform>
<target_transform>Change job status on error 2</target_transform>
<is_enabled>Y</is_enabled>
<nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename>

View file

@ -21,33 +21,111 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>failed_subpoena_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena</from>
<to>failed_subpoena_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena</from>
<to>updated_idm_ids_from_subpoena</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>updated_idm_ids_from_subpoena</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>subpoena_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<head_name>failed_subpoena_idm_ids_on_delta</head_name>
<tail_name>updated_idm_ids_from_subpoena</tail_name>
<attributes/>
<GUI>
<xloc>704</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>864</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>failed_subpoena_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -60,32 +138,42 @@
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>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_SUCCESS')
GROUP BY recruitment_id)
SELECT r.idm_id
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
union
select r2.idm_id
from ervu_dashboard.recruitment r2
<lookup>max_update_date_from_subpoena</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r2.idm_id = je.recruitment_id
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<yloc>288</yloc>
<xloc>496</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_subpoena</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(status_change_date) as max_update_date
from subpoena;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>304</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -112,6 +200,11 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -135,8 +228,36 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>128</yloc>
<xloc>1088</xloc>
<yloc>144</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_from_subpoena</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_subpoena</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT department_id,
? as max_update_date
FROM subpoena s
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR s.status_change_date > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>496</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
@ -163,6 +284,11 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -186,8 +312,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>208</yloc>
<xloc>1088</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform>
@ -214,6 +340,11 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -237,8 +368,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>288</yloc>
<xloc>1088</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
@ -265,6 +396,11 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -288,8 +424,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>368</yloc>
<xloc>1088</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
@ -316,6 +452,11 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<field>idm_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -339,8 +480,8 @@ where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>448</yloc>
<xloc>1088</xloc>
<yloc>464</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -1,142 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>row_last_subpoena_update_date</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:51:59.611</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:51:59.611</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Copy rows to result</from>
<to>Set variables</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Copy rows to result</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Set variables</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>176</yloc>
</GUI>
</transform>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<default_value/>
<field_name>MAX_SUBPOENA_UPDATE_DATE</field_name>
<variable_name>M_S_UP_DATE</variable_name>
<variable_type>GP_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>1232</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
system_update_date AS MAX_SUBPOENA_UPDATE_DATE--,
--record_created
FROM public.recruit_create
WHERE system_update_date = (select max(system_update_date) from public.recruit_create where workflow = 'subpoena_table')
order by record_created desc
limit 1</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Write to log</name>
<type>WriteToLog</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<displayHeader>Y</displayHeader>
<fields>
</fields>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<loglevel>Basic</loglevel>
<logmessage>${M_S_UP_DATE}</logmessage>
<attributes/>
<GUI>
<xloc>1360</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>subpoena_update_date_ervu_dashboard</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:50:31.833</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:50:31.833</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>Table output</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
COALESCE(MAX(create_date), '0001-01-01 00:00:00'::timestamp) AS system_create_date,
COALESCE(MAX(status_change_date), '0001-01-01 00:00:00'::timestamp) AS system_update_date,
current_timestamp AS record_created,
'subpoena_table' AS workflow
FROM ervu_dashboard.subpoena</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>Table output</name>
<type>TableOutput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>1000</commit>
<connection>ervu-dashboard</connection>
<fields>
</fields>
<ignore_errors>N</ignore_errors>
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_monthly>Y</partitioning_monthly>
<return_keys>N</return_keys>
<schema>public</schema>
<specify_fields>N</specify_fields>
<table>recruit_create</table>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1216</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -279,7 +279,7 @@
<hop>
<from>IF job_parallel_recruits_info_citizen SUCCESS</from>
<to>job_parallel_subpoena_decision_archive_person.hwf</to>
<enabled>N</enabled>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>

View file

@ -25,119 +25,23 @@
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>Y</parallel>
<xloc>688</xloc>
<parallel>N</parallel>
<xloc>784</xloc>
<yloc>1232</yloc>
<attributes_hac/>
</action>
<action>
<name>citizen_liability_fz53_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_liability_fz53/citizen_liability_fz53_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<parameter>
<name>M_INFR_UP_DATE</name>
<value>${M_INFR_UP_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1040</yloc>
<attributes_hac/>
</action>
<action>
<name>citizen_criminal_liability_fz53_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_criminal_liability_fz53/citizen_criminal_liability_fz53_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<parameter>
<name>M_INFR_UP_DATE</name>
<value>${M_INFR_UP_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>976</yloc>
<attributes_hac/>
</action>
<action>
<name>citizen_appealing_violations_fz53_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/citizen_appealing_violations_fz53_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<parameter>
<name>M_R_UP_DATE</name>
<value>${M_R_UP_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>912</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1664</xloc>
<xloc>1408</xloc>
<yloc>1232</yloc>
<attributes_hac/>
</action>
<action>
<name>deferment_liberation_job.hwf</name>
<name>job_reference_data.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
@ -145,17 +49,9 @@
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation/deferment_liberation_job.hwf</filename>
<filename>${PROJECT_HOME}/info_recruits/reference_data/job_reference_data.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_DEFDEC_UP_DATE</name>
<value>${M_DEFDEC_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
@ -164,76 +60,12 @@
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1104</yloc>
<attributes_hac/>
</action>
<action>
<name>deferment_liberation_permission_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation_permission/deferment_liberation_permission_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_RECDEF_UP_DATE</name>
<value>${M_RECDEF_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1168</yloc>
<attributes_hac/>
</action>
<action>
<name>recruit_archive_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/recruit_archive/recruit_archive_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_RECARCH_UP_DATE</name>
<value>${M_RECARCH_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<xloc>960</xloc>
<yloc>1232</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_job.hwf</name>
<name>job_deferment_fz53.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
@ -241,340 +73,8 @@
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/subpoena/subpoena_job.hwf</filename>
<filename>${PROJECT_HOME}/info_recruits/raw_data/job_deferment_fz53.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_S_UP_DATE</name>
<value>${M_S_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1488</yloc>
<attributes_hac/>
</action>
<action>
<name>restriction_document_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/restriction_document/restriction_document_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_RESTRDOC_UP_DATE</name>
<value>${M_RESTRDOC_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1296</yloc>
<attributes_hac/>
</action>
<action>
<name>restriction_document_item_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/restriction_document_item/restriction_document_item_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_RDI_UP_DATE</name>
<value>${M_RDI_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1360</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_appearance_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_appearance/subpoena_appearance_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_SA_UP_DATE</name>
<value>${M_SA_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1424</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_send_info_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_send_info/subpoena_send_info_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_S_UP_DATE</name>
<value>${M_S_UP_DATE}</value>
</parameter>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1264</xloc>
<yloc>1552</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_subpoena.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/subpoena/job_last_update_date_subpoena.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>1488</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_appeal_document.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_appealing_violations_fz53/job_last_update_date_appeal_document.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>912</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_deferment_decision.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/deferment_liberation/job_last_update_date_deferment_decision.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>1104</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_restriction_document.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/restriction_document/job_last_update_date_restriction_document.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>1296</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_restriction_document_item.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/restriction_document_item/job_last_update_date_restriction_document_item.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>1360</yloc>
<attributes_hac/>
</action>
<action>
<name>job_last_update_date_subpoena_appearance.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_appearance/job_last_update_date_subpoena_appearance.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>1424</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_infringement_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/citizen_liability_fz53/row_last_infringement_update_date.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>Y</parallel>
<xloc>944</xloc>
<yloc>976</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_recruit_archive_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/citizen_tables/recruit_archive/row_last_recruit_archive_update_date.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
@ -584,271 +84,73 @@
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>944</xloc>
<yloc>1232</yloc>
<xloc>1200</xloc>
<yloc>1136</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_restriction_archive_job.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_restriction_archive_job.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1200</xloc>
<yloc>1328</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>citizen_liability_fz53_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>citizen_criminal_liability_fz53_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>citizen_appealing_violations_fz53_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>deferment_liberation_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>deferment_liberation_permission_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>recruit_archive_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>subpoena_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>restriction_document_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>restriction_document_item_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>subpoena_appearance_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>subpoena_send_info_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_subpoena.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_last_update_date_subpoena.hwf</from>
<to>subpoena_send_info_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_last_update_date_subpoena.hwf</from>
<to>subpoena_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_appeal_document.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_last_update_date_appeal_document.hwf</from>
<to>citizen_appealing_violations_fz53_job.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_last_update_date_deferment_decision.hwf</from>
<to>deferment_liberation_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_deferment_decision.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_restriction_document.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_last_update_date_restriction_document.hwf</from>
<to>restriction_document_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_restriction_document_item.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_last_update_date_restriction_document_item.hwf</from>
<to>restriction_document_item_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_last_update_date_subpoena_appearance.hwf</from>
<to>subpoena_appearance_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_last_update_date_subpoena_appearance.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_last_update_date_deferment_decision.hwf</from>
<to>deferment_liberation_permission_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>citizen_appealing_violations_fz53_job.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>Start</from>
<to>row_last_infringement_update_date.hpl</to>
<to>job_reference_data.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>row_last_infringement_update_date.hpl</from>
<to>citizen_criminal_liability_fz53_job.hwf</to>
<from>job_reference_data.hwf</from>
<to>job_deferment_fz53.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_infringement_update_date.hpl</from>
<to>citizen_liability_fz53_job.hwf</to>
<from>job_reference_data.hwf</from>
<to>subpoena_restriction_archive_job.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>row_last_recruit_archive_update_date.hpl</to>
<from>job_deferment_fz53.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_recruit_archive_update_date.hpl</from>
<to>recruit_archive_job.hwf</to>
<from>subpoena_restriction_archive_job.hwf</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
<notepad>
<backgroundcolorblue>251</backgroundcolorblue>
<backgroundcolorgreen>232</backgroundcolorgreen>
<backgroundcolorred>201</backgroundcolorred>
<bordercolorblue>90</bordercolorblue>
<bordercolorgreen>58</bordercolorgreen>
<bordercolorred>14</bordercolorred>
<fontbold>N</fontbold>
<fontcolorblue>90</fontcolorblue>
<fontcolorgreen>58</fontcolorgreen>
<fontcolorred>14</fontcolorred>
<fontitalic>N</fontitalic>
<fontname>Segoe UI</fontname>
<fontsize>9</fontsize>
<height>26</height>
<xloc>832</xloc>
<yloc>848</yloc>
<note>в следующий пайплайн(check_status_job_info_recruits_from_json.hpl) родительского воркфлоу вписать новый созданный воркфлоу, который создан тут</note>
<width>849</width>
</notepad>
<notepad>
<backgroundcolorblue>251</backgroundcolorblue>
<backgroundcolorgreen>232</backgroundcolorgreen>
<backgroundcolorred>201</backgroundcolorred>
<bordercolorblue>90</bordercolorblue>
<bordercolorgreen>58</bordercolorgreen>
<bordercolorred>14</bordercolorred>
<fontbold>N</fontbold>
<fontcolorblue>90</fontcolorblue>
<fontcolorgreen>58</fontcolorgreen>
<fontcolorred>14</fontcolorred>
<fontitalic>N</fontitalic>
<fontname>Segoe UI</fontname>
<fontsize>9</fontsize>
<height>26</height>
<xloc>1600</xloc>
<yloc>1376</yloc>
<note>rdi</note>
<width>24</width>
</notepad>
</notepads>
<attributes/>
</workflow>

View file

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>job_last_update_date_subpoena_appearance</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<created_user>-</created_user>
<created_date>2025/06/02 14:48:05.666</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:48:05.666</modified_date>
<parameters>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>384</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>subpoena_appearance_update_date_ervu_dashboard.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_appearance/subpoena_appearance_update_date_ervu_dashboard.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>720</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>row_last_subpoena_appearance_update_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/raw_data/subpoena_appearance/row_last_subpoena_appearance_update_date.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1232</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
<action>
<name>Success</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>1584</xloc>
<yloc>352</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>Start</from>
<to>subpoena_appearance_update_date_ervu_dashboard.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>subpoena_appearance_update_date_ervu_dashboard.hpl</from>
<to>row_last_subpoena_appearance_update_date.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>row_last_subpoena_appearance_update_date.hpl</from>
<to>Success</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>

View file

@ -265,14 +265,11 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>select sa.*
from public.subpoena_appearance sa
join public.subpoena s on s.id = sa.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND '${M_R_CR_DATE}' >= sa.created_date_time
${LIMIT_FW}</sql>
WHERE s.department_id = '${IDM_ID}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -327,14 +324,11 @@ ${LIMIT_FW}</sql>
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_field/>
<partitioning_monthly>Y</partitioning_monthly>
<return_field/>
<return_keys>N</return_keys>
<schema>ervu_dashboard</schema>
<specify_fields>Y</specify_fields>
<table>subpoena_appearance</table>
<tablename_field/>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>

View file

@ -341,12 +341,8 @@ and recruitment_id = '${IDM_ID}';</sql>
<sql>select sa.*
from public.subpoena_appearance sa
join public.subpoena s on s.id = sa.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND sa.change_date_time >= '${M_SA_UP_DATE}'::timestamp
${LIMIT_FW}</sql>
WHERE s.department_id = '${IDM_ID}';
AND sa.change_date_time >= '${MAX_UPDATE_DATE}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -288,13 +288,11 @@ DO UPDATE SET
<condition>=</condition>
<field>id</field>
<name>id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>created_date_time</field>
<name>created_date_time</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>subpoena_appearance</table>
@ -354,14 +352,11 @@ DO UPDATE SET
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>select sa.*
from public.subpoena_appearance sa
join public.subpoena s on s.id = sa.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND '${M_R_CR_DATE}' >= sa.created_date_time
${LIMIT_FW}</sql>
WHERE s.department_id = '${IDM_ID}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -21,33 +21,111 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>failed_subpoena_appearance_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena_appearance</from>
<to>failed_subpoena_appearance_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena_appearance</from>
<to>updated_idm_ids_from_subpoena_appearance</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>updated_idm_ids_from_subpoena_appearance</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>subpoena_appearance_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_appearance_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_appearance_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_appearance_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_appearance_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<head_name>updated_idm_ids_from_subpoena_appearance</head_name>
<tail_name>failed_subpoena_appearance_idm_ids_on_delta</tail_name>
<attributes/>
<GUI>
<xloc>784</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>976</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
<name>failed_subpoena_appearance_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -60,18 +138,42 @@
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>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 = 'subpoena_appearance_job'
where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');</sql>
<lookup>max_update_date_from_subpoena_appearance</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>576</xloc>
<yloc>528</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_subpoena_appearance</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(change_date_time) as max_update_date
from subpoena_appearance;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<yloc>288</yloc>
<xloc>384</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -98,6 +200,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -121,8 +228,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>128</yloc>
<xloc>1216</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform>
@ -172,8 +279,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>208</yloc>
<xloc>1216</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
@ -223,8 +330,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>288</yloc>
<xloc>1216</xloc>
<yloc>400</yloc>
</GUI>
</transform>
<transform>
@ -274,8 +381,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>368</yloc>
<xloc>1216</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
@ -325,8 +432,37 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>608</xloc>
<yloc>448</yloc>
<xloc>1216</xloc>
<yloc>560</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_from_subpoena_appearance</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_subpoena_appearance</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT s.department_id AS recruitment_id,
mud.val as max_update_date
FROM subpoena_appearance sa
JOIN subpoena s ON s.id = sa.subpoena_id
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR sa.change_date_time > mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>576</xloc>
<yloc>336</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -1,142 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>row_last_subpoena_appearance_update_date</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:51:59.611</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:51:59.611</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Copy rows to result</from>
<to>Set variables</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Copy rows to result</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Set variables</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
</order>
<transform>
<name>Copy rows to result</name>
<type>RowsToResult</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>176</yloc>
</GUI>
</transform>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<default_value/>
<field_name>MAX_SUBPOENA_APPEARANCE_UPDATE_DATE</field_name>
<variable_name>M_SA_UP_DATE</variable_name>
<variable_type>GP_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>1232</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
system_update_date AS MAX_SUBPOENA_APPEARANCE_UPDATE_DATE--,
--record_created
FROM public.recruit_create
WHERE system_update_date = (select max(system_update_date) from public.recruit_create where workflow = 'subpoena_appearance_table')
order by record_created desc
limit 1</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>688</xloc>
<yloc>320</yloc>
</GUI>
</transform>
<transform>
<name>Write to log</name>
<type>WriteToLog</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<displayHeader>Y</displayHeader>
<fields>
</fields>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<loglevel>Basic</loglevel>
<logmessage>${M_SA_UP_DATE}</logmessage>
<attributes/>
<GUI>
<xloc>1424</xloc>
<yloc>240</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>subpoena_appearance_update_date_ervu_dashboard</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/06/02 14:50:31.833</created_date>
<modified_user>-</modified_user>
<modified_date>2025/06/02 14:50:31.833</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>Table output</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT
COALESCE(MAX(created_date_time), '0001-01-01 00:00:00'::timestamp) AS system_create_date,
COALESCE(MAX(change_date_time), '0001-01-01 00:00:00'::timestamp) AS system_update_date,
current_timestamp AS record_created,
'subpoena_appearance_table' AS workflow
FROM ervu_dashboard.subpoena_appearance</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform>
<name>Table output</name>
<type>TableOutput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>1000</commit>
<connection>ervu-dashboard</connection>
<fields>
</fields>
<ignore_errors>N</ignore_errors>
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_monthly>Y</partitioning_monthly>
<return_keys>N</return_keys>
<schema>public</schema>
<specify_fields>N</specify_fields>
<table>recruit_create</table>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>
<use_batch>Y</use_batch>
<attributes/>
<GUI>
<xloc>1216</xloc>
<yloc>304</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>check_if_need_to_repeat_job</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/08/08 12:27:51.630</created_date>
<modified_user>-</modified_user>
<modified_date>2025/08/08 12:27:51.630</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<field_name>need_to_repeat_job</field_name>
<variable_name>NEED_TO_REPEAT_JOB</variable_name>
<variable_type>ROOT_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT EXISTS (SELECT 1
FROM ervu_dashboard.recruitment r
LEFT JOIN etl.job_execution je
ON r.idm_id = je.recruitment_id
and job_name = 'subpoena_send_info_job'
where je.status is null or je.status in ('ERROR', 'PROCESSING')
limit 1
) as need_to_repeat_job;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>336</xloc>
<yloc>288</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<pipeline>
<info>
<name>check_if_subpoena_send_info_job_exists</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<pipeline_version/>
<pipeline_type>Normal</pipeline_type>
<parameters>
</parameters>
<capture_transform_performance>N</capture_transform_performance>
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
<created_user>-</created_user>
<created_date>2025/08/05 13:28:46.661</created_date>
<modified_user>-</modified_user>
<modified_date>2025/08/05 13:28:46.661</modified_date>
</info>
<notepads>
</notepads>
<order>
<hop>
<from>Set variables</from>
<to>Write to log</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Set variables</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Set variables</name>
<type>SetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<field_name>job_executed_flag</field_name>
<variable_name>JOB_EXECUTED_FLAG</variable_name>
<variable_type>PARENT_WORKFLOW</variable_type>
</field>
</fields>
<use_formatting>Y</use_formatting>
<attributes/>
<GUI>
<xloc>672</xloc>
<yloc>336</yloc>
</GUI>
</transform>
<transform>
<name>Table input</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>SELECT EXISTS (
SELECT 1
FROM etl.job_execution
WHERE job_name = 'subpoena_send_info_job'
limit 1
) AS job_executed_flag;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>384</xloc>
<yloc>336</yloc>
</GUI>
</transform>
<transform>
<name>Write to log</name>
<type>WriteToLog</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<displayHeader>Y</displayHeader>
<fields>
</fields>
<limitRows>N</limitRows>
<limitRowsNumber>0</limitRowsNumber>
<loglevel>Basic</loglevel>
<logmessage>${STATUS}</logmessage>
<attributes/>
<GUI>
<xloc>944</xloc>
<yloc>224</yloc>
</GUI>
</transform>
<transform_error_handling>
</transform_error_handling>
<attributes/>
</pipeline>

View file

@ -265,14 +265,11 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<sql>select ssi.*
<sql>select ssi.*,
current_timestamp as update_date
from public.subpoena_send_info ssi
join public.subpoena s on s.id = ssi.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND s.create_date >= '${M_R_UP_DATE}'::timestamp
${LIMIT_FW}</sql>
join public.subpoena s on s.id = ssi.subpoena_id
WHERE s.department_id = '${IDM_ID}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -355,14 +352,11 @@ ${LIMIT_FW}</sql>
<only_when_have_rows>N</only_when_have_rows>
<partitioning_daily>N</partitioning_daily>
<partitioning_enabled>N</partitioning_enabled>
<partitioning_field/>
<partitioning_monthly>Y</partitioning_monthly>
<return_field/>
<return_keys>N</return_keys>
<schema>ervu_dashboard</schema>
<specify_fields>Y</specify_fields>
<table>subpoena_send_info</table>
<tablename_field/>
<tablename_in_field>N</tablename_in_field>
<tablename_in_table>Y</tablename_in_table>
<truncate>N</truncate>

View file

@ -368,14 +368,12 @@ and recruitment_id = '${IDM_ID}';</sql>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit/>
<sql>select ssi.*
<sql>select ssi.*,
current_timestamp as update_date
from public.subpoena_send_info ssi
join public.subpoena s on s.id = ssi.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND s.status_change_date >= '${M_S_UP_DATE}'::timestamp
${LIMIT_FW}</sql>
join public.subpoena s on s.id = ssi.subpoena_id
WHERE s.department_id = '${IDM_ID}'
and s.status_change_date > '${MAX_UPDATE_DATE}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -288,7 +288,6 @@ DO UPDATE SET
<condition>=</condition>
<field>id</field>
<name>id</name>
<name2/>
</key>
<schema>ervu_dashboard</schema>
<table>subpoena_send_info</table>
@ -383,14 +382,12 @@ DO UPDATE SET
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<sql>select ssi.*
<limit/>
<sql>select ssi.*,
current_timestamp as update_date
from public.subpoena_send_info ssi
join public.subpoena s on s.id = ssi.subpoena_id
WHERE
'${IDM_ID}' != '' -- Проверка на пустую строку
AND s.department_id = '${IDM_ID}'
AND s.create_date >= '${M_R_UP_DATE}'::timestamp
${LIMIT_FW}</sql>
join public.subpoena s on s.id = ssi.subpoena_id
WHERE s.department_id = '${IDM_ID}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -21,33 +21,111 @@
</notepads>
<order>
<hop>
<from>Table input</from>
<from>failed_subpoena_appearance_idm_ids_on_delta</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena_appearance</from>
<to>failed_subpoena_appearance_idm_ids_on_delta</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>max_update_date_from_subpoena_appearance</from>
<to>updated_idm_ids_from_subpoena_appearance</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>updated_idm_ids_from_subpoena_appearance</from>
<to>Append streams</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Append streams</from>
<to>Sort rows</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Sort rows</from>
<to>subpoena_send_info_flow_delta.hpl</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_send_info_flow_delta.hpl 2</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_send_info_flow_delta.hpl 3</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_send_info_flow_delta.hpl 4</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<from>Sort rows</from>
<to>subpoena_send_info_flow_delta.hpl 5</to>
<enabled>Y</enabled>
</hop>
</order>
<transform>
<name>Table input</name>
<name>Append streams</name>
<type>Append</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<head_name>updated_idm_ids_from_subpoena_appearance</head_name>
<tail_name>failed_subpoena_appearance_idm_ids_on_delta</tail_name>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>Sort rows</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>out</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruitment_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1104</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
<name>failed_subpoena_appearance_idm_ids_on_delta</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
@ -60,18 +138,42 @@
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>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 = 'subpoena_send_info_job'
where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING');</sql>
<lookup>max_update_date_from_subpoena_appearance</lookup>
<sql>select r.idm_id as recruitment_id,
? as max_update_date
from ervu_dashboard.recruitment r
join etl.job_execution je
on r.idm_id = je.recruitment_id
where je.status in ('DELTA_ERROR', 'DELTA_PROCESSING')
and je.job_name = '${JOB_NAME}';</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>720</xloc>
<yloc>448</yloc>
</GUI>
</transform>
<transform>
<name>max_update_date_from_subpoena_appearance</name>
<type>TableInput</type>
<description/>
<distribute>N</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>select max(update_date) as max_update_date
from subpoena_send_info;</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>352</xloc>
<yloc>288</yloc>
<xloc>528</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
@ -98,6 +200,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -121,8 +228,36 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>128</yloc>
<xloc>1360</xloc>
<yloc>192</yloc>
</GUI>
</transform>
<transform>
<name>updated_idm_ids_from_subpoena_appearance</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>postgres.subpoena</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<lookup>max_update_date_from_subpoena_appearance</lookup>
<sql>WITH max_update_date(val) AS (SELECT CAST(? AS timestamp))
SELECT DISTINCT s.department_id AS recruitment_id,
mud.val as max_update_date
FROM subpoena s
JOIN max_update_date mud ON TRUE
WHERE (mud.val IS NULL OR s.status_change_date> mud.val);</sql>
<variables_active>N</variables_active>
<attributes/>
<GUI>
<xloc>720</xloc>
<yloc>256</yloc>
</GUI>
</transform>
<transform>
@ -149,6 +284,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -172,8 +312,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>208</yloc>
<xloc>1360</xloc>
<yloc>272</yloc>
</GUI>
</transform>
<transform>
@ -200,6 +340,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -223,8 +368,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>288</yloc>
<xloc>1360</xloc>
<yloc>352</yloc>
</GUI>
</transform>
<transform>
@ -251,6 +396,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -274,8 +424,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>368</yloc>
<xloc>1360</xloc>
<yloc>432</yloc>
</GUI>
</transform>
<transform>
@ -302,6 +452,11 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<field>recruitment_id</field>
<input/>
</variable_mapping>
<variable_mapping>
<variable>MAX_UPDATE_DATE</variable>
<field>max_update_date</field>
<input/>
</variable_mapping>
<inherit_all_vars>Y</inherit_all_vars>
</parameters>
<execution_result_target_transform/>
@ -325,8 +480,8 @@ where je.status in ('SUCCESS', 'DELTA_ERROR', 'DELTA_SUCCESS', 'DELTA_PROCESSING
<executors_output_transform/>
<attributes/>
<GUI>
<xloc>624</xloc>
<yloc>448</yloc>
<xloc>1360</xloc>
<yloc>512</yloc>
</GUI>
</transform>
<transform_error_handling>

View file

@ -70,32 +70,6 @@
<yloc>224</yloc>
<attributes_hac/>
</action>
<action>
<name>recruitment_param_create_date.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/recruitment/recruitment_param_create_date.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>336</xloc>
<yloc>320</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
@ -105,20 +79,6 @@
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>recruitment_param_create_date.hpl</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>recruitment_param_create_date.hpl</from>
<to>recruitment.hpl</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>recruitment.hpl</to>

View file

@ -27,7 +27,7 @@
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>432</xloc>
<yloc>352</yloc>
<yloc>416</yloc>
<attributes_hac/>
</action>
<action>
@ -224,8 +224,6 @@
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/reference_data/deferment_reason.hpl</filename>
<logext/>
<logfile/>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>

View file

@ -0,0 +1,325 @@
<?xml version="1.0" encoding="UTF-8"?>
<workflow>
<name>job_general_info_recruits</name>
<name_sync_with_filename>Y</name_sync_with_filename>
<description/>
<extended_description/>
<workflow_version/>
<workflow_status>0</workflow_status>
<created_user>-</created_user>
<created_date>2025/05/21 13:22:33.264</created_date>
<modified_user>-</modified_user>
<modified_date>2025/05/21 13:22:33.264</modified_date>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<default_value/>
<description/>
</parameter>
<parameter>
<name>M_R_UP_DATE</name>
<default_value/>
<description/>
</parameter>
</parameters>
<actions>
<action>
<name>Start</name>
<description/>
<type>SPECIAL</type>
<attributes/>
<DayOfMonth>1</DayOfMonth>
<hour>12</hour>
<intervalMinutes>60</intervalMinutes>
<intervalSeconds>0</intervalSeconds>
<minutes>0</minutes>
<repeat>N</repeat>
<schedulerType>0</schedulerType>
<weekDay>1</weekDay>
<parallel>N</parallel>
<xloc>720</xloc>
<yloc>672</yloc>
<attributes_hac/>
</action>
<action>
<name>job_recruitment.hwf 2</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/recruitment/job_recruitment.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>976</xloc>
<yloc>672</yloc>
<attributes_hac/>
</action>
<action>
<name>job_parallel_recruits_info_citizen.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/job_parallel_recruits_info_citizen.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1216</xloc>
<yloc>672</yloc>
<attributes_hac/>
</action>
<action>
<name>job_info_recruits_from_json.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/job_info_recruits_from_json.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<parameter>
<name>M_R_UP_DATE</name>
<value>${M_R_UP_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2400</xloc>
<yloc>768</yloc>
<attributes_hac/>
</action>
<action>
<name>check_status_parallel_recruits_info_citizen.hpl</name>
<description/>
<type>PIPELINE</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<clear_files>N</clear_files>
<clear_rows>N</clear_rows>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/supportive_jobs/check_status_parallel_recruits_info_citizen.hpl</filename>
<loglevel>Basic</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1664</xloc>
<yloc>672</yloc>
<attributes_hac/>
</action>
<action>
<name>IF job_parallel_recruits_info_citizen ERROR</name>
<description/>
<type>SIMPLE_EVAL</type>
<attributes/>
<comparevalue>ERROR</comparevalue>
<fieldtype>boolean</fieldtype>
<successbooleancondition>true</successbooleancondition>
<successcondition>equal</successcondition>
<successnumbercondition>equal</successnumbercondition>
<successwhenvarset>N</successwhenvarset>
<valuetype>variable</valuetype>
<variablename>JOB_PARALLEL_ERROR_EXITS</variablename>
<parallel>N</parallel>
<xloc>2048</xloc>
<yloc>528</yloc>
<attributes_hac/>
</action>
<action>
<name>IF job_parallel_recruits_info_citizen SUCCESS</name>
<description/>
<type>SIMPLE_EVAL</type>
<attributes/>
<comparevalue>SUCCESS</comparevalue>
<fieldtype>boolean</fieldtype>
<successbooleancondition>false</successbooleancondition>
<successcondition>equal</successcondition>
<successnumbercondition>equal</successnumbercondition>
<successwhenvarset>N</successwhenvarset>
<valuetype>variable</valuetype>
<variablename>JOB_PARALLEL_ERROR_EXITS</variablename>
<parallel>N</parallel>
<xloc>2048</xloc>
<yloc>768</yloc>
<attributes_hac/>
</action>
<action>
<name>Abort parallel_recruits_info_citizen</name>
<description/>
<type>ABORT</type>
<attributes/>
<always_log_rows>N</always_log_rows>
<parallel>N</parallel>
<xloc>2400</xloc>
<yloc>528</yloc>
<attributes_hac/>
</action>
<action>
<name>job_parallel_subpoena_decision_archive_person.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/info_recruits/job_parallel_subpoena_decision_archive_person.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<parameter>
<name>M_R_CR_DATE</name>
<value>${M_R_CR_DATE}</value>
</parameter>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>2400</xloc>
<yloc>880</yloc>
<attributes_hac/>
</action>
<action>
<name>Success_recruits_info_from_json</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2720</xloc>
<yloc>768</yloc>
<attributes_hac/>
</action>
<action>
<name>Success_subpoena_decisions</name>
<description/>
<type>SUCCESS</type>
<attributes/>
<parallel>N</parallel>
<xloc>2720</xloc>
<yloc>880</yloc>
<attributes_hac/>
</action>
</actions>
<hops>
<hop>
<from>job_parallel_recruits_info_citizen.hwf</from>
<to>check_status_parallel_recruits_info_citizen.hpl</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>IF job_parallel_recruits_info_citizen SUCCESS</from>
<to>job_info_recruits_from_json.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>check_status_parallel_recruits_info_citizen.hpl</from>
<to>IF job_parallel_recruits_info_citizen ERROR</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>check_status_parallel_recruits_info_citizen.hpl</from>
<to>IF job_parallel_recruits_info_citizen SUCCESS</to>
<enabled>Y</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>IF job_parallel_recruits_info_citizen SUCCESS</from>
<to>job_parallel_subpoena_decision_archive_person.hwf</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>Start</from>
<to>job_recruitment.hwf 2</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_recruitment.hwf 2</from>
<to>job_parallel_recruits_info_citizen.hwf</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>IF job_parallel_recruits_info_citizen ERROR</from>
<to>Abort parallel_recruits_info_citizen</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_info_recruits_from_json.hwf</from>
<to>Success_recruits_info_from_json</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
<hop>
<from>job_parallel_subpoena_decision_archive_person.hwf</from>
<to>Success_subpoena_decisions</to>
<enabled>Y</enabled>
<evaluation>Y</evaluation>
<unconditional>N</unconditional>
</hop>
</hops>
<notepads>
</notepads>
<attributes/>
</workflow>