ЕСОЗ - публічна документація
RC_Create approval_v2_UA
- 1 Ціль
- 2 Специфікація
- 3 Авторизація
- 4 Перевірити запит
- 5 Додаткова логіка
Ціль
Даний веб-сервіс (WS) розроблено для створення дозволу на сутність, що є агрегуючою сутністю (контекстом) для інших сутностей (episode_of_care, diagnostic_report, care_plan), АБО заборонену групу АБО дігностичний звіт, АБО на service_request з врахуванням його permitted_resources АБО на відміну взаємодії чи процедури.
Дозволи обробляються асинхронним шляхом.
Тільки автентифіковані та авторизовані співробітники з відповідним скоупом можуть створювати доступи.
Специфікація
Авторизація
Перевірити валідність токену доступу
в разі помилки - повернути 401 (“Invalid access token”) в разі неуспішної валідації
Перевірити, що токен дійсний
в разі помилки - повернути 401 (“Invalid access token”)
Перевірити скоупи користувача на можливість виконання даної дії (scope = 'approval:create ')
повернути 403 (“Your scope does not allow to access this resource. Missing allowances: approval:create ”) в разі невалідних скоупів
Перевірити запит
Перевірити користувача
Granted_to.employee_id повинні бути активні
в разі помилки - повернути 422 “Should be active“
Перевірити, що співробітник належіть тій самій юридичній особі що і користувач:
client_id з токену повинен бути пов'язаний з employee_id з об'єкту granted_to.
в разі помилки - повернути 422 “Employee <employee_id> doesn't belong to your legal entity“
Перевірити ресурси чи блоки ресурсів
Дозволи відпрацьовуються асинхронно
Перевірити ресурси
якщо episode_of_care вказано в запиті як код ресурсу
Перевірити, що episode_of_care в рапиті існує та знаходиться в статусі активний або закритий в DB
в разі помилки - повернути 422 (Episode is canceled)
якщо diagnostic_report вказано в запиті як код ресурсу
Перевірити, що блок diagnostic_report в запиті існує в фінальному статусі в DB
в разі помилки - повернути 422 (Diagnostic report in \"entered_in_error\" status can not be referenced or Diagnostic report with such id is not found)
якщо care_plan вказано в запиті як код ресурсу
Перевірити care_plan з запиту присутній в DB
в разі помилки - повернути 422 (Care plan with such id is not found)
Перевірити, що в запиті відсутні інші об'єкти
в разі помилки - повернути 422 (Approval for care plan can not contain other entities)
якщо взаємодія наявна вказана в запиті як код ресурсу
Перевірити, що взаємодія з запиту присутня в DB
в разі помилки - повернути 422 (not found)
якщо процедура присутня в запиті як блок ресурсу
Перевірити, що процедура з запиту присутня в DB
в разі помилки - повернути 422 (not found)
Перевірити service_request
Якщо блок service_request присутній в запиті
Get Service_request details (тільки в активному стані)
використати Response.permitted_resources як ресурс для доступу (можуть бути епізод чи diagnostic_report).
Перевірити forbidden_group
Якщо блок forbidden_group вказано в запиті
Check forbidden group in the request exists and is_active in DB
in case of error return - 404 (not found)
Перевірити diagnoses_group
Якщо diagnoses_group block вказано в запиті
Check diagnoses_group in the request exists and is_active in DB
in case of error return - 404 (not found)
Перевірити пацієнта
Якщо patient block вказано в запиті
Отримати patient_id з URL:
Перевірити, що person_id з запиту відповідає patient_id з URL
в разі помилки - повернути 404 (“Approval for one patient can not be created in another patient’s context”)
існує та is_active в DB
в разі помилки - повернути 404 (Person is not found)
Перевірити блок child_resource
Якщо child_resource не пустий:
перевірити, що access_level == read
в разі помилки - повернути 422 ("$.access_level. value is not allowed in enum")
перевірити, що контекст $.child_resource.identifier.value відповідає $.resource.identifier.value
в разі помилки - повернути 422 (Child resource context id is not equal to granted resource id)
перевірити, що service_requests / forbidden_groups / diagnoses_group / patients не заповнені
в разі помилки - повернути 422 (schema does not allow additional properties)
перевірити, що максимальна кількість сутностей в ресурсі = 1
в разі помилки - повернути 422 ($.resources.expected a maximum of 1 items but got 2)
Перевірити authentication_method персони
Перевірити patient_id:
якщо належить person, то GET auth_method використовує MPI {patient_id}
якщо це OTP:
направити SMS на auth_phone по otpч_verification сервіс POST /verifications
зберегти погодження до DB
зберегти authentication_method_current.type та номер до DB
повернути authentication_method_current.type = OTP
якщо оф-лайн
зберегти доступ до DB
зберегти authentication_method_current.type and number to DB
повернути authentication_method_current.type = offline
якщо це null:
повернути error 409 (Person does not have active authentication method)
якщо належить preperson:
зберегти погодження до DB
встановити для доступу status = active
встановити для доступу urgent = null
Перевірити access_level
Перевірити, що access_level відповідає granted_resources:
в разі помилки повернути 422 ("Resource types [\"$.granted_resources[].code\"] not allowed to use write access_level")
Блок | granted_resources | access_level | Доступ на | reason |
---|---|---|---|---|
resources | episode_of_care | read | Читання всіх даних по вказаному в доступі епізоду | null |
diagnostic_report | read | Читання всіх даних по вказаному в дозволі діагностичному звіті | null | |
diagnostic_report | write | Відмінити пакет по діагностичному звіту | ||
care_plan | read | Читання всіх даних по вказаному в дозволі плану лікування | null | |
care_plan | write | Створення активностей для плану лікування, відміна рецептів або відкликання\відміна сервіс реквестів, які основуються на плану лікування | ||
encounter | write | Відміна пакету по взаємодії | null | |
procedure | write | Відміна процедури | null | |
child_resources | diagnostic_report | read | Читання всіх даних, які вказані в контекстні для diagnostic_report та на сам diagnostic_report | null |
encounter | Читання всіх даних, які вказані в контекстні для encounter та на сам encounter | null | ||
condition | Читання всіх даних, які вказані в контекстні для condition та на сам condition | null | ||
observation | Читання всіх даних, які вказані в контекстні для observation та на сам observation | null | ||
activity | Читання всіх даних, які вказані в контекстні для activity та на сам activity | null | ||
clinical_impression | Читання всіх даних, які вказані в контекстні для clinical_impression та на сам clinical_impression | null | ||
allergy_intolerance | Читання всіх даних, які вказані в контекстні для allergy_intolerance та на сам allergy_intolerance | null | ||
immunization | Читання всіх даних, які вказані в контекстні для immunization та на сам immunization | null | ||
device | Читання всіх даних, які вказані в контекстні для device та на сам device | null | ||
risk_assessment | Читання всіх даних, які вказані в контекстні для risk_assessment та на сам risk_assessment | null | ||
procedure | Читання всіх даних, які вказані в контекстні для procedure та на сам procedure | null | ||
service_request | episode_of_care | read | Читання даних з granted_resources в доступі направлення | service_request |
diagnostic_report | read | |||
forbidden_group | forbidden_group | read | Читання всіх медичних даних з даними (codes/services/service_groups), які вказані в доступі на заборонені групи | null |
diagnoses_group | episode_of_care array | read | Читання всіх даних на епізод з current_diagnoses.codes, які вказані в доступах на діагностичні групи | null |
patient_id | patient_id | read | Читання всіх даних по вказаному пацієнту | null |
Перевірити authorize_with
Пацієнт може передати id його auth_method, яким він хоче підтвердити доступ. Необхідний метод auth може бути знайдений шляхом Get person's auth methods
перевірити auth_method.id в UUID
в разі помилки повернути 422
знайти метод автентифікації в MPI.person_authentication_method
в разі помилки повернути 422, "such authentication method doesn't exist"
знайти метод автентифікації пацієнта, де MPI.person_authentication_method.person_id = $.patient.id
в разі помилки повернути 422, "such authentication method does not belong to this person"
перевірити, що auth_method.type = NA
повернути помилку 422, "Сannot be confirmed by a method with type= NA. Use a different method."
перевірити, що метод автентифікації активний (authentication_method.ended_at > now() та is_active = true)
Поле опційне та встановити в нове поле authorize_with
та зберегти type
та phone_number
в approvals.urgent.authentication_method_current.
Якщо дозвіл не має цього поля, то вибрати той метод, який повертається з mpi як person's default method.
Відмінити існуючий дозвіл
Знайти, якщо існують активні та дійсні дозволи, надані поточним patient_id, для тих же granted_resources, granted_to та access_level з запиту.
Якщо знайдено - встановити їх статус на
terminated
. Такод, встановити updated_at та updated_by поточному користувачу.
Додаткова логіка
Всі дозволи в статусі "new" повинна бути видалена через 12 hours після створення - env. configuration parameter
Всі дозволи з forbidden_group має свій власний expires_at config parameter - env. configuration parameter
Всі дозволи з care_plan має свій власний expires_at config parameter - env. configuration parameter
Всі дозволи на картку пацієнта має свій власний expires_at config parameter - env. configuration parameter
Дозволи з child_resources буде створено на сутність, яка є контекстом для child_resources
Для дозволів на child_resource з ресурсом або service_request:
встановити child_resource до блоку reason
встановити service_request до блоку reason
Перевірити, чи granted_resource та\чи reason мають коди заборонених груп:
якщо є записи з заборонених груп
перевірити тип authentication_method для пацієнта
якщо тип 'OTP' відправити SMS (Код <code> для доступу до даних про ВІЛ/РПП eHealth )
якщо немає записів з заборонених груп та блок diagnoses_group вказано в запиті
якщо група діагнозів містить коди з довідника ICD10:
перевірити тип authentication_method для пацієнта
якщо тип 'OTP' відправити SMS (Код <code>: доступ на групу діагнозів {diagnoses_group_code} eHealth )
якщо група діагнозів містить коди з довідника ICPC2:
перевірити тип authentication_method для пацієнта
якщо тип 'OTP' відправити SMS (Код <code> доступ на групу діагнозів {diagnoses_group_code} eHealth )
якщо відсутні коди заборонених груп
перевірити тип authentication_method по пацієнту
якщо тип = 'OTP' відправити SMS (Код авторизації дій в системі eHealth: <code>')
ЕСОЗ - публічна документація