ЕСОЗ - публічна документація

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Purpose

This job is designed for initial and further regular synchronization of Persons with the EIS MVS registry in order to check if their passport documents are among stolen or lost ones.

Configuration

Value

Description

Example

MVS_PERSON_SYNCHRONIZATION_SCHEDULE

Cron parameter, represents start time of the MVS data synchronization

"0 1 * * *"

MVS_PERSON_VALIDATION_PERIOD_DAYS

Represents period in days when the existing saved MVS data should be validated in MVS registry if it still valid.

"270"

MVS_PASSPORT_PERSONS_SYNCHRONIZATION_BATCH_SIZE

Amount of persons processed by MVS passport data synchronization job at once

"100"

Data flow

Scheduller starts according to MVS_PERSON_SYNCHRONIZATION_SCHEDULE cron parameter. It creates oban job that selects MVS_PASSPORT_PERSONS_SYNCHRONIZATION_BATCH_SIZE Persons that match to some filter parameters. For each the job receives Person’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 - verification status is set to NOT_VERIFIED.

  • if Passport is not found for the person - verification status is set to VERIFIED.

  • If Passport is absent - the person receives VERIFICATION_NOT_NEEDED status.

  • If incorrect passport data - verification status is set to NOT_VERIFIED.

  • if technical error received - the verification status and reason doesn’t change. A mvs data is not saved, Person is not updated;

mvs passport status check v7.drawio.png

Step description

Step 1. Get list of Persons

Get the list of active Persons (status=active, is_active=true) who meet the following criteria (using logical AND):

  • mpi.person_verifications.mvs_passport_synced_at <= current_date - MVS_PERSON_VALIDATION_PERIOD_DAYS OR mvs_passport_synced_at is null

  • exclude persons 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 or MANUAL (should be at the top of the list)

Update person_verifications record by person_id:

  • mvs_passport_verification_status = IN_REVIEW

  • mvs_passport_verification_reason = AUTO

Step 1.1 Update Person

Invoke the Step If person_verifications.mvs_passport_verification_status still IN_REVIEW

Make data pre-estimation for a synchronization:

  1. If a person has no passport document (NATIONAL_ID or PASSPORT) at all, then update person_verifications record by person_id:

    1. mvs_passport_data_id = null

    2. mvs_passport_data_status = null

    3. mvs_passport_synced_at = null

    4. mvs_passport_verification_status = VERIFICATION_NOT_NEEDED

    5. mvs_passport_verification_reason = AUTO_DATA_ABSENT

    6. mvs_passport_unverified_at = null

  2. Check If the person matches both rules:

    • it has only one passport document: NATIONAL_ID or PASSPORT

    • passport number matches the regex for its type:

      • ^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$ for the PASSPORT

      • ^[0-9]{9}$ for the NATIONAL_ID

Else, update person_verifications record by person_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 mpi.person_documents.type = NATIONAL_ID

  • pass_type = 0101

  • pas_number= mpi.persons_documents.number

If mpi.person_documents.type = PASSPORT

  • pass_type = 0101

  • pas_number = mpi.persons_documents.number (number as last six symbols)

  • pas_serial = mpi.persons_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.

 Set data to NEW record
  • id - generate uuid

  • pass_type - PassType from CheckPassportStatus request

  • pas_serial - PasSerial from CheckPassportStatus request

  • pas_number - PasNumber from CheckPassportStatus request

  • pas_status - PasStatus from CheckPassportStatus response

  • inserted_at - current date and time

  • updated_at - current date and time (set even record is not changed, but synchronized)

  • if found - updated the record.

 Set data to EXISTING record
  • pas_status - PasStatus from CheckPassportStatus response

  • updated_at - current date and time (set even record is not changed, but synchronized)

Step 4. Update Person

Invoke the Step If person_verifications.mvs_passport_verification_status still IN_REVIEW (because if changed to VERIFICATION_NEEDED+ONLINE_TRIGGERED, then it means that person record has been changed while current sync with EIS MVS performed)

After mvs_passport_data record was stored in Step 3 - update persons record in MPI db:

Update person_verifications record by person_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 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 another 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 4.2. Update Party

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 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 5. Update Person

Invoke the Step If person_verifications.mvs_passport_verification_status still IN_REVIEW

If passport wasn’t fount (PasStatus = 0) in the register at Step 2, then update person_verification for the person_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 Person is considered unprocessed.

If person_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)

  • No labels