Purpose
This job is designed for initial and further regular synchronization of Parties with the EIS MVS registry in order to check if their passport documents are among stolen or lost ones.
Configuration
Value | Description | Example |
---|---|---|
MVS_PARTY_SYNCHRONIZATION_SCHEDULE | Cron parameter, represents start time of the EIS MVS party document synchronization with register of stolen or lost passport documents |
|
MVS_PARTY_VALIDATION_PERIOD_DAYS | Represents period in days when the existing saved MVS data should be validated in EIS MVS registry if it still valid. |
|
MVS_PASSPORT_PARTIES_SYNCHRONIZATION_BATCH_SIZE | Amount of parties processed by MVS passport data synchronization job at once |
|
Data flow
Scheduller starts according to MVS_PARTY_SYNCHRONIZATION_SCHEDULE cron parameter. It creates oban job that selects MVS_PASSPORT_PARTIES_SYNCHRONIZATION_BATCH_SIZE Parties that match to some filter parameters. For each the job receives Party’s passport data on input and returns the result of reconciliation with the EIS MVS registry to output (details in “Step description” section below):
if Passport is found - set verification status to NOT_VERIFIED.
if Passport is not found for the Party - set verification status to VERIFIED.
If Passport is absent - sync isn’t performed, the Party receives VERIFICATION_NOT_NEEDED status.
If incorrect passport data - set verification status to NOT_VERIFIED.
if technical error received - the verification status and reason doesn’t change. The mvs data is not saved, Party is not updated;
Step description
Step 1. Get list of Parties
Get list of Parties that meets the following criteria (using logical AND):
has at least one active and approved Employee
prm.party_verifications.mvs_passport_synced_at <= current_date - MVS_PARTY_VALIDATION_PERIOD_DAYS OR mvs_passport_synced_at is null
exclude parties who has mvs_passport_verification_status = IN_REVIEW, NOT_VERIFIED, VERIFICATION_NOT_NEEDED
Order selected records in descending way by:
mvs_passport_verification_status = VERIFICATION_NEEDED and mvs_passport_verification_reason = ONLINE_TRIGGERED (should be at the top of the list)
Update party_verifications record by party_id:
mvs_passport_verification_status = IN_REVIEW
mvs_passport_verification_reason = AUTO
Step 1.1 Update Party
Invoke the Step If party_verifications.mvs_passport_verification_status still IN_REVIEW
Make data pre-estimation for a synchronization:
If party has no passport document (
NATIONAL_ID
orPASSPORT
) at all, then update party_verifications record by party_id:mvs_passport_data_id = null
mvs_passport_data_status = null
mvs_passport_synced_at = null
mvs_passport_verification_status = VERIFICATION_NOT_NEEDED
mvs_passport_verification_reason = AUTO_DATA_ABSENT
mvs_passport_unverified_at = null
Check If the party matches both rules:
it has only one passport document:
NATIONAL_ID
orPASSPORT
passport number matches the regex for its type:
^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$
for thePASSPORT
^[0-9]{9}$
for theNATIONAL_ID
Else, update party_verifications record by party_id:
mvs_passport_data_id = null
mvs_passport_data_status = null
mvs_passport_synced_at = null
mvs_passport_verification_status = NOT_VERIFIED
mvs_passport_verification_reason = AUTO_INCORRECT_DATA
mvs_passport_unverified_at = current datetime
Step 2. Call CheckPassportStatus
Call CheckPassportStatus with third-party service https://e-health-ua.atlassian.net/wiki/spaces/EDDR/pages/18052513879/MVS+Trembita+methods#CheckPassportStatus using the following request params:
If prm.party.documents.type = NATIONAL_ID
pass_type = 0101
pas_number= prm.party.documents.number
If prm.party.documents.type = PASSPORT
pass_type = 0101
pas_number = prm.party.documents.number (number as last six symbols)
pas_serial = prm.party.documents.number (serial as first two symbols)
Step 3. Create or update mvs_passport_data
If Step 2 was successful and PasStatus
= 1 returned. Get a record from mimir.mvs_passport_data table by pass_type, pas_serial, pas_number :
if not found - create a record.
if found - updated the record.
Step 4. Update Party
Invoke the Step If party_verifications.mvs_passport_verification_status still IN_REVIEW (because if changed to VERIFICATION_NEEDED+ONLINE_TRIGGERED, then it means that party record has been changed while current sync with EIS MVS performed)
After mvs_passport_data record was stored in Step 3 - update party record in PRM db:
Update party_verifications record by party_id:
mvs_passport_data_id = mimir.mvs_passport_data.id
mvs_passport_data_status = 1
mvs_passport_synced_at = date and time when synchronization has been performed (current datetime)
mvs_passport_verification_status = NOT_VERIFIED
mvs_passport_verification_reason = AUTO_LOST
mvs_passport_unverified_at = current datetime
Step 4.1. Update another Parties
Invoke the Step If party_verifications.mvs_passport_verification_status is not IN_REVIEW
If mvs_passport_data has been changed at Step 3, then find another Parties with the same document_type (PASSPORT or NATIONAL_ID) and document number. If such was fount, set for them also:
mvs_passport_data_id = mimir.mvs_passport_data.id
mvs_passport_data_status = 1
mvs_passport_synced_at = date and time when synchronization has been performed (current datetime)
mvs_passport_verification_status = NOT_VERIFIED
mvs_passport_verification_reason = AUTO_LOST
mvs_passport_unverified_at = current datetime
Step 4.2. Update Persons
Invoke the Step if person_verifications.mvs_passport_verification_status is not IN_REVIEW
If mvs_passport_data has been changed at Step 3, then find Persons with the same document_type (PASSPORT or NATIONAL_ID) and document number. If such was fount, set for them also:
mvs_passport_data_id = mimir.mvs_passport_data.id
mvs_passport_data_status = 1
mvs_passport_synced_at = date and time when synchronization has been performed (current datetime)
mvs_passport_verification_status = NOT_VERIFIED
mvs_passport_verification_reason = AUTO_LOST
mvs_passport_unverified_at = current datetime
Step 5. Update Party
Invoke the Step If party_verifications.mvs_passport_verification_status still IN_REVIEW
If passport wasn’t fount (PasStatus
= 0) in the register at Step 2, then update party_verification for the party_id:
mvs_passport_data_id = null
mvs_passport_data_status = 0
mvs_passport_synced_at = date and time when synchronization has been performed (current datetime)
mvs_passport_verification_status = VERIFIED
mvs_passport_verification_reason = AUTO_NOT_LOST
mvs_passport_unverified_at = null
Step 6. Technical error returned
If technical error: PasStatus
= -2, -1, timeout, etc. returned in Step 2 - the Party is considered unprocessed.
If party_verifications.mvs_passport_verification_status still IN_REVIEW:
rollback to previous mvs_passport_verification_status and mvs_passport_verification_reason (that were before IN_REVIEW, set in Step 2)