Мета
Цей алгоритм використовується для пошуку активної людини на основі фіксованого набору даних. Цей алгоритм використовується в наступних WS:
TRUSTED PIS. Patient sign-in | Search or create user
TRUSTED PIS. Confidant patient sign-in
Ключові положення
Цей алгоритм використовує дані набору даних, щоб отримати ідентифікатор активної особи з бази даних mpi.
Цей алгоритм використовує tax_id або document як основні параметри пошуку, тому одне з цих полів має бути присутнім. Прізвище та ім'я обов'язкові.
Якщо активну особу неможливо чітко ідентифікувати за допомогою набору даних, повертається помилка.
Цей алгоритм можна використовувати в різних процесах і не обмежується конкретним процесом
Специфікація
Діаграма
Джерело:
Перевірити набір даних
Перевірити, що набір диних містить всі обов'язкові поля (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')
Сервісна логіка
Отримати набір даних для пошуку персони, перевірити його формат:
якщо набір даних містить поле ‘tax_id’, використовуйте значення ‘persons.tax_id’ як основну умову пошуку.
якщо набір даних містить поле ‘document’,, використовуйте ‘person_documents.number’ і ‘person_documents.type’ як основну умову пошуку.
Виконати первинний пошук активної персони (status = ‘active’ та is_active = true) в базі даних mpi використовуючи одну з умов кроку p.1:
якщо квері повернуло 0 запитів - повернути помилку ‘No active person found’, та здійснити пошук.
якщо квері повернуло 1 або більше записів - перейти до кроку p.3.
Фільтруйте отримані записи активних осіб за допомогою поля ‘document’ за такою логікою:
якщо первинний пошук було виконано по ‘tax_id’ умова пошуку та поле містить набір даних ‘document’, профільтрувати активну персону по ‘person_documents.number’ = ‘dataset.document.number’ та ‘person_documents.type’ = ‘dataset.document.type’
якщо квері повернуло 0 записів - повернути помилку ‘No active person found’, та здійснити пошук.
якщо квері повернуло 1 або більше записів - перейти на крок p.4.
якщо первинний пошук виконувався з умовою пошуку ‘tax_id’, а набір даних не містить поля ‘document’ або первинний пошук виконувався з умовою пошуку ‘document’ - перейти до п.4.
Відфільтруйте отримані записи активних осіб за допомогою поля ‘last_name’ за такими кроками:
виконати нормалізацію поля ‘persons.last_name’ знайдених активних персон та поля ‘dataset.last_name’
перевірити, що поле ‘persons.last_name’ знайдених активних персон рівне полю ‘dataset.last_name’
якщо профільтрована квері повернуло 0 записів - повернути помилку ‘No active person found’, завершити пошук
якщо профільтрована квері повернула 1 або більше записів - перейти на крок p.5.
Відфільтруйте отримані записи про активних осіб за допомогою поля ‘given_name’, виконавши наступні дії: ('persons.first_name' дорівнює або присутній у ‘dataset.given_name’):
виконати нормалізацію з’єднаних полів ‘persons.first_name’ і ‘persons.second_name’ знайдених активних осіб і поля ‘dataset.given_name’
перевірити з'єднані поля ‘persons.first_name’ та ‘persons.second_name’ на відповідність значень полів по з'єднаним активним персонам ‘dataset.given_name’
якщо профільтрована квері повернуло 0 записів - повернути помилку ‘No active person found’, end search.
якщо профільтрована квері повернула 1 запис - використати
person_id
як результат, завершити пошук.якщо профільтрована квері повернула більше одного запису - повернути помилку ‘Impossible to clearly identify an active person’, завершити пошук.