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

UA_Active person search algorithm

Мета

Цей алгоритм використовується для пошуку активної людини на основі фіксованого набору даних. Цей алгоритм використовується в наступних WS:

Ключові положення

  1. Цей алгоритм використовує дані набору даних, щоб отримати ідентифікатор активної особи з бази даних mpi.

  2. Цей алгоритм використовує tax_id або document як основні параметри пошуку, тому одне з цих полів має бути присутнім. Прізвище та ім'я обов'язкові.

  3. Якщо активну особу неможливо чітко ідентифікувати за допомогою набору даних, повертається помилка.

  4. Цей алгоритм можна використовувати в різних процесах і не обмежується конкретним процесом

Специфікація

{ "tax_id": "2323232323", "document": { "type": "PASSPORT", "number": "СТ123123" }, "last_name": "Петров", "given_name": "Петро Петрович" }

Діаграма

Джерело:

Перевірити набір даних

  • Перевірити, що набір диних містить всі обов'язкові поля (tax_id або document.type та document.number, last_name, given_name)

    • в разі помилки - повернути ('tax_id або документ, last_name, given_name поля обов'язкові для пошуку')

  • Перевірити, що поле tax_id з набору даних відповідає наступному з врахуванням regexp: ^[0-9]{10}$

    • в разі помилки - повернути ('Invalid tax_id format for active person search')

  • Перевірити, що поле document.type з набору даних містить документ з типом, що відповідає значенню з довідника DOCUMENT_TYPE

    • в разі помилки - повернути ('Invalid document type for active person search')

  • Перевіри, що поле document.type з набору даних містить документ з типом, що дозволено для використання для пошуку активної персони, значення поля вказано в конфігураційному параметрі ACTIVE_PERSON_SEARCH_DOCUMENT_TYPES

    • в разі помилки - повернути ('Forbidden document type for active person search')

  • Перевіри, що поле document.number з набору даних рівне наступному з врахуванням regexp (для кожного document.type):

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

    • NATIONAL_ID – ^[0-9]{9}$

    • BIRTH_CERTIFICATE, TEMPORARY_PASSPORT – ^((?![ЫЪЭЁыъэё@%&$^#`~:,.*|}{?!])[A-ZА-ЯҐЇІЄ0-9№\/()-]){2,25}$

    • TEMPORARY_CERTIFICATE – ^(((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{4,6}|[0-9]{9}|((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{5}\/[0-9]{5})$

    • BIRTH_CERTIFICATE_FOREIGN, PERMANENT_RESIDENCE_PERMIT – рядок зі значеннями між 1 та 255 символами

      • в разі помилки - повернути ('Invalid document number for active person search')

Сервісна логіка

  1. Отримати набір даних для пошуку персони, перевірити його формат:

    1. якщо набір даних містить поле ‘tax_id’, використовуйте значення ‘persons.tax_id’ як основну умову пошуку.

    2. якщо набір даних містить поле ‘document’,, використовуйте ‘person_documents.number’ і ‘person_documents.type’ як основну умову пошуку.

  2. Виконати первинний пошук активної персони (status = ‘active’ та is_active = true) в базі даних mpi використовуючи одну з умов кроку p.1:

    1. якщо квері повернуло 0 запитів - повернути помилку ‘No active person found’, та здійснити пошук.

    2. якщо квері повернуло 1 або більше записів - перейти до кроку p.3.

  3. Фільтруйте отримані записи активних осіб за допомогою поля ‘document’ за такою логікою:

    1. якщо первинний пошук було виконано по ‘tax_id’ умова пошуку та поле містить набір даних ‘document’, профільтрувати активну персону по ‘person_documents.number’ = ‘dataset.document.number’ та ‘person_documents.type’ = ‘dataset.document.type’

      1. якщо квері повернуло 0 записів - повернути помилку ‘No active person found’, та здійснити пошук.

      2. якщо квері повернуло 1 або більше записів - перейти на крок p.4.

    2. якщо первинний пошук виконувався з умовою пошуку ‘tax_id’, а набір даних не містить поля ‘document’ або первинний пошук виконувався з умовою пошуку ‘document’ - перейти до п.4.

  4. Відфільтруйте отримані записи активних осіб за допомогою поля ‘last_name’ за такими кроками:

    1. виконати нормалізацію поля ‘persons.last_name’ знайдених активних персон та поля ‘dataset.last_name’

    2. перевірити, що поле ‘persons.last_name’ знайдених активних персон рівне полю ‘dataset.last_name’

      1. якщо профільтрована квері повернуло 0 записів - повернути помилку ‘No active person found’, завершити пошук

      2. якщо профільтрована квері повернула 1 або більше записів - перейти на крок p.5.

  5. Відфільтруйте отримані записи про активних осіб за допомогою поля ‘given_name’, виконавши наступні дії: ('persons.first_name' дорівнює або присутній у ‘dataset.given_name’):

    1. виконати нормалізацію з’єднаних полів ‘persons.first_name’ і ‘persons.second_name’ знайдених активних осіб і поля ‘dataset.given_name’

    2. перевірити з'єднані поля ‘persons.first_name’ та ‘persons.second_name’ на відповідність значень полів по з'єднаним активним персонам ‘dataset.given_name’

      1. якщо профільтрована квері повернуло 0 записів - повернути помилку ‘No active person found’, end search.

      2. якщо профільтрована квері повернула 1 запис - використати person_id як результат, завершити пошук.

      3. якщо профільтрована квері повернула більше одного запису - повернути помилку ‘Impossible to clearly identify an active person’, завершити пошук.

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