ЕСОЗ - публічна документація
RC_warranty_UA_PIS. Patient sign-up validation
Мета
Цей WS призначений для перевірки підписаного вмісту як частини процесу реєстрації, вилучення даних пацієнта, якщо вони дійсні, і створення токену сессії для виконання подальших кроків.
Ключові положення
Цей метод має використовуватися лише інтерфейсом Auth
Перевіряє підписаний вміст, а також дані jwt і пацієнтів у ньому
Генерує токен сессії (jwt) для підтвердження запиту на реєстрацію
Специфікація
Перевірити підписаний контент
Перевірити, що
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'
для порівняння;якщо значення містить хоча б одну літеру, виконати зворотну транслітерацію поля використовуючи існуючий алгоритм (описаний тут), потім перевірити, що це значення рівне номеру паспорта з врахуванням 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')
Перевірити запит на реєстрацію
Запит на реєстрацію персони має містити дані персони, деякі згоди та валідний JWT як частину авторизації PIS
Перевірити дані персони у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/PCAB/pages/17599399482/warranty_Rules+to+validate+patient+data#Regular-person
Перевірити значення поля
patient_signed
, що воно рівне ‘true’в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що значення поля
process_disclosure_data_consent
рівне ‘true’в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити JWT
перевірити підпис JWT
перевірити емітента (
iss
= Ehealth)перевірити строк дії (
exp
у майбутньому)в разі будь-якої помилки - повернути 401 ('JWT is invalid')
Сервісна логіка
Generate JWT
Отримтаи значення JWT TTL з параметру
JWT_LOGIN_TTL
(в хвилинах).Отримати поле
signed_content
та розрахувати хеш MD5.Згенерувати JWT з наступними параметрами:
alg =
RS512
aud =
pis-registration
content_hash = MD5 хеш з поля
signed_content
exp = iat +
JWT_LOGIN_TTL
iat = now()
iss =
EHealth
jti = згенерований uuid з JWT
nbf = now() - 1 секунда
sub = content_hash
typ =
access
Відобразити дані персони
Відобразити дані персони (пацієнта) у відповідності до специфікації
ЕСОЗ - публічна документація