Ціль
Даний веб-сервіс дозволяє створити План лікування з активностями для одного пацієнта.
Основні положення
Тільки автотифікований та авторизований користувач (DOCTOR або SPECIALIST) з відповідною спеціальністю, вказаної в config, має можливість створення Плану лікування.
План лікування може бути створений від юридичної особи MSP, PRIMARY_CARE або OUTPATIENT.
План лікування повинен бути підписаний за допомогою електронного ключа.
Плін лікування створюється в асинхронний спосіб, як і всі медичні події.
Активності до Плану лікування додаються за допомогою сервісу Create Care Plan activities. Але, План лікування може бути відокремлено створено без активностей.
Специфікація
Авторизація
Перевірити валідність токену доступу
в разі помилки валідації - повернути код 401 (“Invalid access token”)
Перевірити строк дії токену доступу
в разі помилки - повернути код 401 (“Invalid access token”)
Перевірити скопи користувачів на наявність запрошеної операції (scope = 'care_plan:write')
в разі відсутності запрошеного скоупу повернути код помилки 403 (“Your scope does not allow to access this resource. Missing allowances: care_plan:write”)
Перевірити запит
Перевірити закодований та декодований запит, використовуючи схему. Повернути 422 з переліком помилок перевірок, якщо є невідповідність схемам.
Первірити електронний підпис
Перевірити, що на запит закладено підпис
в разі помилки - повернути код 422 (“document must be signed by 1 signer but contains 0 signatures”)
Перевірити валідність цифрового підпису, та строк його дії
Перевірити, що цифровий підпис належить автору Плану лікування ($.author)
Первірити, що DRFO електронного підпису та party.tax_id автору співпадають
в разі помилки - повернути код 409 (“Signer DRFO doesn't match with requester tax_id“)
Перевірити юридичну особу
Отриманий client_id з токену.
в разі помилки - повернути код 403 (“Your scope does not allow to access this resource. Missing allowances: care_plan:write”)
Перевірити статус юридичної особи (status = ACTIVE)
в разі помилки - повернути код 409 ('client_id refers to legal entity that is not active')
Перевірити, що тип юридичної особи відповідє конфігураційному параметру ME_ALLOWED_TRANSACTIONS_LE_TYPES
в разі помилки - повернути код 409 ('client_id refers to legal entity with type that is not allowed to create medical events transactions')
Перевірити План лікування
Перевірити наступні параметри Плану лікування:
1. Суб'єкт
Перевірити, що дані пов'язані з person_id з URL, відповідають.
Отримати patient_id з URL
Первірити статус пацієнта/неідентифікованої особи активний
в разі помилки - повернути код 409 ('Person is not active')
Захешувати patient_id та зберегти в поле $.subject
2. Автор
Первірити наявність заповненого значення в полі $.author.
Отримати user_id з токену. Первірити, що автор належить до користувачів, які є співробітниками.
в разі помилки - повернути код 422 ('User is not allowed to create care plan for the employee')
Первірити, що автор активний та погоджений та належить до юридичної особи (client_id from token).
в разі помилки - повернути код 403 ('Access denied')
Первірити тип співробітника:
якщо SPECIALIST:
Перевірити, що співробітник має хоча б одну роль, яка:
активна та має активний статус
відповідає сервісу healthcare зі значенням providing_conditions=$.terms_of_service
в разі помилки - повернути код 422 ('Employee does not have active role that correspond to the submitted terms of service')
Для DOCTOR, додаткові перевірки не потрібні
Перевірити спеціалізацію автора (speciality_officio == true) вказану в config для вказаної категорії плану лікування.
в разі помилки - повернути код 409 (“Invalid employee speciality”)
3. Категорія
Перевірити наявність заповненого значення в полі $.category.
Перевірити, що значення допустиме згідно довідника
eHealth/care_plan_categories
(diabetics, по-замовчуванню).в разі помилки - повернути код 422 ('value is not allowed in enum')
Якщо до довідника додається нове значення, в такому разі відповідні параметри для налаштування в чартах повинні бути створені
4. Взаємодії
Перевірити начвність заповненого значення в полі $.encounter.
Первірити, що посилання валідне на ресурс взаємодії
Перевірити, що взаємодія активна (статус НЕ entered_in_error)
в разі помилки - повернути код 422 ('Encounter in "entered_in_error" status can not be referenced')
Первірити, що взаємодія пов'язана з пацієнтом ($.subject)
в разі помилки - повернути код 422 ('Encounter with such id is not found')
Первірити первинні діагнози у взаємодії:
Перевірити, що код стану є в переліку доступних кодів станів для категоріїї Плану лікування
diabetics
(значення чартів: в config)в разі помилки - повернути код 422 ('Primary diagnosis condition code and care plan category mismatch')
Первірити, що system/codes повністю відповідають значенню в полі Addresses
в разі помилки - повернути код 422 ('Primary diagnosis condition codes do not match with codes in addresses'), для випадку, коли код станів в addresses не таке як діагнозі взаємодії.
Перевірити, що епізод пов'язаний зі взаємодією:
існує
в разі помилки - повернути код 422 ('Encounter refers to episode that does not exist')
активний
в разі помилки - повернути код 422 ('Encounter refers to episode that is not active')
керуюча компанія відповідє юридичній особі автора (client_id)
в разі помилки - повернути код 422 ('Encounter is from another legal entity')
5. Адреси
Первірити заповненість поля $.addresses.
Первірити наявність масиву на наявність в ньому даних з відповідним типом кодування
в разі помилки - повернути код 422 про невідповідність типу або помилку некоректної перевірки схеми
Перевірити, що система є значенням з довідника
eHealth/ICD10_AM/condition_codes
абоeHealth/ICPC2/condition_codes
(повинні відповідати первинні діагнози систем/кодів у взаємодії)в разі помилки - повернути код 422 ('value is not allowed in enum')
6. Умови надання послуг
Перевірити заповненність значення в полі $.terms_of_service
Первірити, що значення з довідника
PROVIDING_CONDITION
.в разі помилки - повернути код 422 ('value is not allowed in enum')
Перевірити отримані дані:
Якщо спеціальність автора - DOCTOR, то значення FIELD та OUTPATIENT допустимі
Якщо спеціальність автора - SPECIALIST, то значення INPATIENT та OUTPATIENT допустимі
в разі помилки - повернути код 422 ('Not allowed for <employee type>')
7. Період
Первірити заповненність значення в полі $.period.
Перевірити, що $.period.start >=encounter.date.
в разі помилки - повернути код 422 ('Start date must be in the future')
Перевірити, що $.period.end >= $.period.start
в разі помилки - повернути код 422 ('End date must be greater than or equal the start date')
8. Створено на основі
Первірити заповненість значення в полі $.based_on.
Перевірити, що План лікування, на яке є посилання - валідний
Перевірити План лікування, на який є посилання:
Перевірити, що він відноситься до того ж пацієнта ($.subject)
Повернути 422 ('Care plan with such id is not found')
9. Приналежність
Перевірити заповненість значення в полі $.part_of
Перевірити, що План лікування, на яке є посилання - валідний
Перевірити План лікування, на який є посилання:
Перевірити, що він відноситься до того ж пацієнта ($.subject)
Повернути 422 ('Care plan with such id is not found')
10. Супроводжуюча інформація
Перевірити заповненість значення в полі $.supporting_info
Первірити, що значення є в масиві типів episode_of_care, procedure або diagnostic report
в разі помилки - повернути код 422 ('value is not allowed in enum')
Первірити, що кожне посилання є:
валідною медичною подією з визначеним типом вище
належить пацієнту ($.subject)
в разі помилки - повернути код 422 ('<medical event type> with such ID is not found')
11. Врач на заміну
Перевірити заповненість значення в полі $.contributor
Перевірити, що значення є в масиві типів співробітників
в разі помилки - повернути код 422 ('value is not allowed in enum')
Перевірити, що кожен співробітник, на якого є посилання - активний та погоджений
в разі помилки - повернути код 422 ('Invalid employee status')
12. Ідентифікатор Плану лікування
Первірити, що поле заповнене $.id
Перевірити, о воно унікальне та в форматі UUID
в разі помилки - повернути код 409 ("Care plan with such id already exists")
13. Статус
Перевірити, що поле заповнене $.status
Перевірити, що воно має значення =new
в разі помилки - повернути код 422 ('value is not allowed in enum')
Сформувати заявку
Сгенерувати номер заявки (див Human readable requisition number), який має посилання на id Плану лікування
Встановити атрибути $.requisition
Примітка: номер заявки повинен бути унікальним для кожного Плану лікування і не повинен співпадати з номером інших сутностей.
Логіка сервісу
Зберегти підписаний контент до файлового сховища
Зберегти дату до колекції care_plans в БД у відповідності до Care plan data model
Зберегти посилання з файлового сховища до поля $.signed_content_links в колекції плану лікування
Створитии задачу та повернути її id.
Відправити СМС-повідомлення
Якщо пацієнт - не неідентифікована особа та його метод автентифікації визначений Determination of a default authentication method and return person's active auth_methods як OTP або third_person.OTP, відправити СМС до пацієнта з номером заявки.