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

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

« Previous Version 2 Current »

Мета

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

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

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

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

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

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

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

 search dataset
{
	"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’, завершити пошук.

  • No labels