Мета
Надати можливість адміністратору НСЗУ/Дата стюарту (співробітник НСЗУ з відповідними скоупи) зберегти оновлення персональних даних персон, на основі отриманих від персон офіційних звернень в НСЗУ, які по факту є легальною авторизацією на зміну персональних даних пацієнтів.
Схема
Дизайн
Специфікація
Ключові положення
Процес ініціюється співробітником НСЗУ (тільки через адміністративну панель НСЗУ) з відповідними скоупами та ініціює передачу (за допомогою graphQL мутації) підписного контенту (signed_content)
. Це включає JSON з персональними даними, де id існуючої персони та no ключів та параметрів методів аутентифікації.
Він має схожість до частини оновлення (update part) в поцесі IL.Update-person-request (w/o declaration) , але є основні відмінності:
Запис по Person_request створюється на BE в статусі
SIGNED
на основіsigned_content
(який підписано цифровим підписом) з FE. Без проміжних записів до DB з такими статусами, якNEW
,APPROVED
.Під час процесу оновлення персональних даних персони до таблиці
MPI.person
відсутня необхідність в підтвердженні від персони в форматі ONLINE/OFFLINE.Є два нових параметри для контролю об'єму змін та уникнення ризику надлишкової автоматичної дедублікації:
PERSON_ONLINE_DEDUPLICATION_UPDATE_SCORE_NHS_ADMIN
PERSON_ONLINE_DEDUPLICATION_MATCH_SCORE_NHS_ADMIN
Дані параметри можуть бути включені\виключені за допомогою:PERSON_ONLINE_DEDUPLICATION_UPDATE_SCORE_NHS_ACTIVE
=true
PERSON_ONLINE_DEDUPLICATION_MATCH_SCORE_NHS_ACTIVE
=true
Наявні наступні обов'язкові поля в запиті:
nhs_request_number nhs_request_comment
Та є наступні відмінності в полях, значеннях та перевірках:
$.patient_signed
та$.process_disclosure_data_consent
не повинні бути вказані в запиті та тому значенняnull
має бути встановлено вIL.person_requests
. Та нарешті, в таблиціMPI.persons
дані значення повинні бути перезаписані.друкована форма не обов'язкова
IL.person_requests.(new record).channel = 'NHS'
Один додатковий параметр переданий від FE до BE
updatedAtForValidation
second_name
таunzr
мають бути встановлені вnull
.no_tax_id
таtax_id
можуть бути передані в повідомленні якnull
, якщо вони обидва встановлені вnull
.
Процес є синхронним. Якщо всі валідації пройдено, синхронний процес по оновленню персони починається з обробки запиту.
Скоупи та ролі
Назва скоупу | Ролі | Опис |
---|---|---|
Новий
|
| Скоуп для створеня запису |
Пов'язані статті
# | Шлях | Посилання та стаття |
---|---|---|
1 | E-Health > Persons > Ідентифіковані персони > Person Requests Technical Requirements | IL.Create/Update person request (w/o declaration) |
2 | Public. Medical Service Provider Integration Layer > Person Requests |
Авторизація
Перевірити валідність токену доступу
Повернути помилку 401 в разі неуспішної валідації
Перевірити скоупи користувача
person_request:write_nhs
Повернути помилку 403 в разі невалідних скоупів
Цифровий підпис
Декодувати контент: що зашивровано в цифровому підписі.
Використати цифровий підпис запиту. Метод перевіряє цифровий підпис та повертає результат.
Див сервіс specification
Перевірити ДРФО
Перевірити, що DRFO в деталях сертифікату присутній в запиті
Перевірити, що DRFO в деталях сертифікату відповідає DRFO для Party
Отримати party.tax_id використовуючи employee_id в даних персони
Порівняти DRFO в сертифікаті з party.tax_id
Змінити DRFO та TAX_ID на великі літери
Порівняти DRFO та TAX_ID на літери кирилиці
Змінити DRFO на кирилицю та перевірити на коректність
В разі неуспішних валідацій - віддати помилку 422
Співвідношення латиниці та кирилиці
%{"A" => "А", "B" => "В", "C" => "С", "E" => "Е", "H" => "Н", "I" => "І", "K" => "К", "M" => "М", "O" => "О", "P" => "Р", "T" => "Т", "X" => "Х"} |
Перевірка підписного контенту
Отримати глобальні параметри
Для подальших перевірок, викликати Global parameters для отримання:
no_self_auth_age
cURL приклад
curl -X GET \ {:host}/api/global_parameters
Валідації | |
---|---|
1 | Перевірка на одночасні корегування даних (нове)Якщо дані персони не змінювались іншими користувачами (MSP, NHS) в системі НСЗУ. Шляхом попереднього збереження
|
2 | Перевірити статус персони в базі даних та інструментах дедублікації
|
3 | Перевірити “patient_signed” признак.Дане поле не повинно передаватися. І тому BE не повинен здійснювати пошук його в DB |
4 | Перевірити “process_disclosure_data_consent” признак.Дане поле не повинно передаватися. І тому BE не повинен здійснювати пошук його в DB |
5 | Перевірити довірену особу
Перевірити вік довіреної персони >= prm.global_parameters.no_self_auth_age:
перевірити наявність секретного слова:
|
6 | Перевірити "tax_id"
|
7 | Перевірити признак "no_tax_id"
|
8 | Перевірити документи персони
|
9 | Перевірити поля запиту NHS
|
Схема валідації JSON
Перелік додаткових вимог для панелі адміністрування НСЗУ
Основною приймається дана схема JSON Schema validator (https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589266986#Update-person-request ). Окрім:
“
patient_signed
" та "process_disclosure_data_consent
" не обов'язкові і не мають бути наявними.дозволити значення
null
в поліsecond_name
об'єкту персон."second_name": { "type": [ "string", "null" ] }
дозволити значення null в полі
unzr
об'єкту персон"unzr": { "type": [ "string", "null" ], "pattern": "^[0-9]{8}-[0-9]{5}$" }
дозволити в повідомлення обидва tax_id, no_tax_id зі значенням
null
якщо вони обидва приймають значенняnull
ключ
updatedAtForValidation
та ключ групуванняnhs_request_number
,nhs_request_comment
перевіряються згідно наступної схеми валідації:
Виконання
Оновлення пошуку person_requests в IL.person_requests
Пошук запиту персони в IL.person_requests для попередження випадків одночасного оновлення даних:
WHERE IL.person_requests.person_id = :($.person.id) AND IL.person_requests.status IN ('NEW', 'APPROVED')
Відмінити person_requests records в IL.person_requests
Змінити статус всіх знайдених запитів персони:
SET IL.person_requests.status = 'CANCELED' WHERE IL.person_requests.id IN (:LIST of Search results)
Створити новий запис в IL.person_requests
Додати
[new record]
доIL.person_requests
:Встановити
status = 'SIGNED
'.Встановити id персони,
person_id = $.person.id
Встановити
inserted_at= now()
(отримати поточні дату та час)Встановити
inserted_by
- user_id (отримати користувача з токену)Встановити
channel
,IL.person_request.(newrecord).channel = 'NHS'
Встановити
printout_form
= null
Зберегти signed_content
у відповідному бакеті Person_request
Оновити персону в MPI.persons
Оновити дані персони в
MPI.persons.(id = $.person.id)
з вказаними новими даними$
(включно два$.nhsRequestNumber
та$.nhsRequestComment
).Встановити
updated_at
- now() (Отримати поточну дату та час)Встановити
updated_by
- user_id (Отримати користувача з токену)Створити відповідний запис на основі вказаних нових даних
$
(включно два$.nhsRequestNumber
та$.nhsRequestComment
) в:MPI.person_documents
MPI.person_phones
MPI.person_addresses
Направити персону на верифікацію
Створити або оновити існуючий запис в таблиці person_verifications для персони у відповідності до логікив секції нижче. Також, встановити:
updated_at = now()
updated_by = user uuid
inserted_at = now() (для нових записів)
inserted_by = user uuid (для нових записів)
Мануальна верифікація NHS
Встановити верифіцію персони у відповідності до логіки https://e-health-ua.atlassian.net/wiki/spaces/DRACS/pages/17249206422/IL.Sign+person+request+modified#Manual-NHS-verification
Верифікація по реєстру DRFO
Встановити верифіцію персони у відповідності до логіки https://e-health-ua.atlassian.net/wiki/spaces/DRACS/pages/17249206422/IL.Sign+person+request+modified#DRFO-registry-verification
Верифікація по актам смерті з реєстру DRACS
Встановити верифіцію персони у відповідності до логіки https://e-health-ua.atlassian.net/wiki/spaces/DRACS/pages/17249206422/IL.Sign+person+request+modified#DRACS-death-acts-registry-verification
Розрахувати кумулятивний статус верифікації
Розрахувати кумулятивний статус верифікації у відповідності до логіки https://e-health-ua.atlassian.net/wiki/spaces/DRACS/pages/17249206422/IL.Sign+person+request+modified#Calculate-cumulative-verification-status