Специфікація
Перевірити запит
Перевірити запит на основі схеми JSON
Авторизація
Перевірити валідність токену доступу
Перевірити скоупи користувачів approval:create на можливість виконання даної операції
Логіка
Апрували виконуються в асинхронний спосіб
Користувач може сворити апрувал тільки для співробітника його юридичної особи
client_id з токену повинен бути поєднаним з employee_id від об'єкту granted_to.
granted_to.employee_id повинен бути активним.
Тільки користувачі з типами працівника "DOCTOR", "SPECIALIST", "ASSISTANT" можуть створювати апрувал
Перевірити granted_to.identifier.value: employee_type = "DOCTOR"/"SPECIALIST"/"ASSISTANT" і працівник у статусі APPROVED у базі даних
у разі помилки повернути - 422 з повідомленням “Invalid employee type“
Якщо блок service_request наявний в запиті
(тільки в статусі active)
використовуй Response.permitted_resources як ресурси для апрувал (може бути епізод (episode) або diagnostic_report).
якщо блок forbidden_group вказано в запиті
Перевірити, що заборона група з запиту існує та is_active в БД
в разі помилки повернути - 404 (not found)
Перевірити patient_id:
якщо належить person, тоді отримати/GET auth_method з MPI використовуючи {patient_id}
якщо це OTP:
надіслати SMS до auth_phone за допомогою сервісу otp_verification POST /verifications
зберегти апрувал в БД
зберегти authentication_method_current.type та номер в БД
повернути authentication_method_current.type = OTP
якщо це офлайн
зберегти апрувал в БД
зберегти authentication_method_current.type та номер в БД
повернути authentication_method_current.type = offline
якщо це null:
повернути помилку error 409 (Person hasn’t active authentication methods. It is necessary to add)
якщо належить до preperson:
зберегти апрувал до БД
встановити статус апрувал 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 | access to | |
---|---|---|---|
resources | episode_of_care | read | Читання всіх даних, вказаних в епізоді на апрувал |
diagnostic_report | read | Читання всіх даних, вказаних в діагностичному звіті на апрувал | |
care_plan | read | Читання всіх даних, вказаних в плані лікування на апрувал | |
care_plan | write | Створення активностей для плану лікування | |
service_request | episode_of_care diagnostic_report | read | Читання данних з permitted_resources в запиті апрувала |
forbidden_group | forbidden_group | read | Читання всіх медичних даних з елементами (codes/services/service_groups) вказаних в апрувалі на заборонені групи |
Перевірити authorize_with
Пацієнт може передати id його auth_method з яким він має намір дати апрувал. Потрібний метод автентифікації (auth method) може бути знайдений за допомогою Get person's auth methods
перевірити що auth_method.id це UUID
в разі помилки код 422
знайти auth method в MPI.person_authentication_method
в разі помилки код 422, "such authentication method doesn't exist"
знайти auth method даного пацієнта, де 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.
Додаткова логіка
Всі апрували в статусі "new" повинні бути видалені через 12 годин після створення - env. configuration parameter
Всі апрувалз на forbidden_group має власний expires_at конфігуруємий параметр (не довше, ніж для інших апрувалів) - env. configuration parameter