...
Перевірити, що вказани
signed_content
таsigned_content_encoding
в разі помилки - повернути 422 ('required property signed_content was not present' or ‘required property signed_content_encoding was not present')
Перевірити, що поле
signed_content
це валідна строка в форматі base64в разі помилки - повернути 422 ('Invalid signed content')
Перевірити, що поле
signed_content_encoding
рівне 'base64'в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що цифровий підпис валідний
в разі помилки - повернути 401 з текстом помилки валідації цифрового підпису
Перевірити, що значення drfo з цифрового підпису належить персоні в запиті на реєстрацію, на основі формату поля:
якщо значення рівне tax_id враховуючи regexp (
^[0-9]{10}$
), поле містить tax_id, використати полеtax_id
з запиту на реєстрацію для порвіняння;якщо значення рівне номеру national_id враховуючи regexp (
^[0-9]{9}$
), поле містить номер national_id, використовувати полеdocuments.number
зdocuments.type = 'NATIONAL_ID'
для порівняння;якщо значення містить хоча б одну літеру, виконати зворотну транслітерацію поля, використовуючи існуючий алгоритм (описано here тут), тоді перевірити, що значення рівне номеру паспорта враховуючи regexp (
^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$
), якщо рівний, поле містить номер паспорту, використати полеdocuments.number
зdocuments.type = 'PASSPORT'
для порівняння;в разі помилки - повернути 409 ('Registration person and person that sign should be the same')
Перевірити, що last_name з цифрового підпису належить персоні з запиту на реєстрацію, поле last_name
в разі помилки - повернути 422 ('Input name doesn't match name from digital signature')
Перевірити, що first_name з запиту на реєстрацію вказано в рядку given_nameз цифрового підпису
в разі помилки - повернути 422 ('Input name doesn't match name from digital signature')
...
Встановити значення drfo з цифрового підпису.
Здійснити пошук існуючого користувача в базі даних mithril, таблиця
users
, де tax_id = drfo з цифрового підпису та is_active = true.якщо користувача знайдено - перевірити, що він не заблокований (is_blocked <> true)
якщо заблокований - повернути 401 ('User is blocked.').
якщо не заблокований - зберегти
user_id
та перейти до p.3.
якщо користувача не було знайдено - перейти до https://e-health-ua.atlassian.net/wiki/spaces/PCABEH/pages/1741514363017525605723/PIS.+Patient+sign-up+registration#Search-or-create-person
Здійснити пошук персони в базі даних mpi, таблиця
persons
, з id = person_id зі знайденого корис тувача, status = active та is_active = trueв разі, якщо персону не було знайдено - повернути 401 ('Person not found.')
в разі, якщо персону знайдено - перевірити, що його вік більше ніж значення глобального параметру no_self_auth_age
в разі помилки - повернути 401 ('Incorrect person age for such an action.')
в разі, якщо вік персони коректний - зберегти
user_id
та перейти до https://e-health-ua.atlassian.net/wiki/spaces/PCABEH/pages/1741514363017525605723/PIS.+Patient+sign-up+registration#Generate-authorization-token
...
Здійснити пошук активної персони в базі даних mpi з даними по персоні з запиту на реєстрацію у відповідності до існуючого процесу, описаного тут 1f1fa-1f1e6Create/Update person request | Search person
Розразувати скор згідно результатів порівнянн між знайденою активною персоною та персоною з запиту на реєстрацію, використовуючи процес дедублікації, описаний тут Deduplication process
Порівняти отриманий скор з конфіг параметром PIS_ONLINE_DEDUPLICATION_MATCH_SCORE, встановленим на рівні ‘0.95’:якщо одна активна персона з порівняльним скором > PIS_ONLINE_DEDUPLICATION_MATCH_SCORE була знайдена - перевірити, що її вік більше за значення глобального параметру no_self_auth_age
в разі помилки - повернути 401 ('Incorrect person age for such an action.')
в разі, якщо вік персони коректний - зберегти
person_id
та перейти до p.2.
якщо більше одної персони з порівняльним скором > PIS_ONLINE_DEDUPLICATION_MATCH_SCORE було знайдено - повернути 401 ('It is impossible to uniquely identify the person.')
якщо відсутністі активні персони з порівняльним скором > PIS_ONLINE_DEDUPLICATION_MATCH_SCORE було знайдено - перейти до p.3.
Здійснити пошук активного користувача в базі даних mithril, таблиця
users
, з person_id = person_id знайденої персони та is_active = true.якщо користувача було знайдено - перевірити, що він не заблокований (is_blocked <> true)
в разі якщо заблокований - повернути 401 ('User is blocked.').
в разі, якщо не заблокований - оновити користувача, встановити tax_id = drfo з цифрового підпису, встановити settings.trusted_source = true, зберегти
user_id
та перейти до https://e-health-ua.atlassian.net/wiki/spaces/PCABEH/pages/1741514363017525605723/PIS.+Patient+sign-up+registration#Generate-authorization-token
якщо користувача не було знайдено - перейти до https://e-health-ua.atlassian.net/wiki/spaces/PCABEH/pages/1741514363017525605723/PIS.+Patient+sign-up+registration#Create-user
Створити нову персону в базу даних mpi, встановит значення в наступних таблицях на основі персони з запиту на реєстрацію:
persons
таблицяperson_phones
таблицяperson_addresses
таблицяperson_documents
таблицяperson_authentication_methods
таблиця
Зберегти підписаний контент до медіа-сховища
Відправити персону на перевірку - створити запит в таблиці
person_verifications
дляperson_id
, встановити значення для кожного стріма з верифікації:Ручна верифікація NHS
якщо
$.person.documents
містить документи з типом = 'PERMANENT_RESIDENCE_PERMIT' або$.person.unzr
не пусто та перші 8 цифр$.person.unzr
!=$.person.birth_date
або$.person.documents
містить документ з типом з конфігураційного параметру PIS_PERSON_LEGAL_CAPACITY_DOCUMENT_TYPES
- скан-копії документів персони мають бути завантажені до сховища даних після реєстрації персони по Initialize Person documents uploadвстановити nhs_verification_status = NOT_VERIFIED
встановити nhs_verification_reason = DOCUMENTS_TRIGGERED
в іншому випадку - скан-копії документів персони не потрібні, встановити статус верифікації у відповідності до логіки, описаної тут: IL.Sign person request (modified)_EN | Manual NHS https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589430849/Sign+person+request#Manual-NHS-verification
верифікація з реєстром DRFO - у відповідності до логіки, описаної тут: IL.Sign person request (modified)_EN | DRFO registry https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589430849/Sign+person+request#DRFO-registry-verification
верифікація з реєстром актів смерті DRACS -у відповідності до логіки, описаної тут: IL.Sign person request (modified)_EN | DRACS death acts registry https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589430849/Sign+person+request#DRACS-death-acts-registry-verification
Розрахувати кумулятивний статус верифікації у відповідності до логіки, описаної тут: IL.Sign person request (modified)_EN | Calculate cumulative verification https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589430849/Sign+person+request#Calculate-cumulative-verification-status
Створити користувача
Створорити користувача для активного пацієнта в базі даних mithril, таблиця
users
, встановити:id = автогенерований uuid
settings = ‘{“trusted_source”: true}’
priv_settings = ‘{"login_hstr": [], "otp_error_counter": 0}’
inserted_at = now()
updated_at = now()
password_set_at = now()
tax_id = значення
drfo
з цифрового підписуperson_id =
person_id
персони, що була знайдена на кроці ‘Search or create patient’.
Створити глобальну роль для створеного користувача в базі даних mithril, таблиця
global_user_roles
, встановити:id = автогенерований uuid
user_id = user_id користувача, створеного на кроці p.4
role_id = id ролі з назвою ‘PATIENT’
inserted_at = now()
updated_at = now()
...