ЕСОЗ - публічна документація
PreQualify Service Request_UA
Вимоги
Apiary
Валідації
Авторизація
Перевірити валідність токену доступу
Повернути код (401, 'unauthorized') в разі неуспішної валідації
Перевірити, що токен діючий
в разі помилки - повернути код (401, 'unauthorized')
Перевірити скуопи користувачів на можливість виконання даної дії (scope = 'service_request:write')
Повернути код (403, 'invalid scopes') в разі невалідних скоупів
Перевірити запит використовуючи JSON Schema
Повернути код 422 зі списком помилок валідації в разі неуспішної валідації
Перевірити юридичну особу
Перевірити тип юридичної особи: вона повинна бути в конфігураційних параметрах me_allowed_transactions_le_types, має статус = active
в разі помилки повернути код 409 "Action is not allowed for the legal entity"
Перевірити запит на сервіс
Перевірити ID запиту на сервіс на унікальність
$.id повинен бути унікальним
в разі помилки повернути код 409 - "Service request with such id already exists"
Реквізити - це загальний ідентифікатор для групи запитів на сервіс та повинен співпадати з одним з епізодів пацієнта по номеру лікування
$.requisition повинен співпадати з одним з епізодів пацієнта по номеру лікування
в разі помилки повернути код 409 - "Incorrect requisition number"
Категорія запитів на сервіси повинні посилатися на валідний довідник
$.category.coding[*].system == "eHealth/SNOMED/service_request_categories"
в разі помилки повернути код 409 "Incorrect service request category"
Код процедури повинен посилатися на валідний довідник
$.code.coding[*].system == "eHealth/SNOMED/procedure_codes"
в разі помилки повернути код 409 "Incorrect procedure code"
Пацієнт має бути активним
$.patient.identifier.type.coding[*].system == "eHealth/resources"
$.patient.identifier.type.coding[*].code == "patient"
$.patient.identifier.value посилатися на активний MPI (is_active == true та status == 'active')
в разі patients.preperson == true
перевірити PREPERSON_SERVICE_REQUEST_ALLOWED_CATEGORIES (дані з довідника: eHealth/SNOMED/service_request_categories) конфігурація відповідна дозволеним категорія преперсон
в разі помилки повернути код 422 (Category of service request is not allowed for prepersons)
Контекст повинен бути активним візитом
$.context.identifier.type.coding[*].system == "eHealth/resources"
$.context.identifier.type.coding[*].code == "encounter"
$.context.identifier.value посилатися на існуючий візит (status == 'finished')
Створення є валідна дата-час в майбутньому
$.occurrenceDateTime
$.occurrence_date_time - ISO дата повинна бути більше поточної дати-часу
$.occurrencePeriod.start
$.occurrence_period.start - ISO дата повинна бути більше поточної дати-часу
$.occurrence_period.end - ISO дата повинна бути більше поточної дати-часу та більше ніж $.occurrencePeriod.start
в разі based_on не вказано в запиті
якщо активність плану лікування має detail.scheduled_timing.repeat.bounds_period - перевірити спвіпадіння по періоду bounds_period
якщо активність плану лікування має detail.scheduled_period - перевірити спвіпадіння по періоду scheduled_period
в інщому випадку - перевірити спвіпадіння по періоду care_plan.period
Authored On це валідна дата-час в минулому
$.authored_on - ISO дата повинна бути меньше ніж поточна дата-час
Requester_employee повинен бути активний співробітник з поточною юридичної особою
$.requester_employee.identifier.type.coding[*].system == "eHealth/resources"
$.requester_employee.identifier.type.coding[*].code == "employee"
$.requester_employee.identifier.value посилається на активного співробітника з поточною юридичною особою (employee.status == approved та employee.is_active == true та employee.legal_entity_id == token.client_id)
Requester_legal_enity повинна бути поточна юридична особа
Тип виконавця повинен посилатися на валідний довідник
$.performer_type.coding[*].system == "eHealth/SNOMED/service_request_performer_roles"
в разі помилки повернути код 409 "Incorrect service request category"
Супроводжуюча інформація повинна посилатися на валідний об'єкт медичної події (Episode of Care) з вказанням конкретного пацієнта.
$.supporting_info.identifier.type.coding[*].system == "eHealth/resources"
в разі помилки повернути код 409 "Incorrect supporting info"
Посилання на причину повинна посилатися на валідний об'єкт медичної події (Observation, Condition) з вказанням конкретного пацієнта.
$.reason_reference.identifier.type.coding[*].system == "eHealth/resources"
$.reason_reference.identifier.type.coding[*].code in ("condition", "observation")
в разі помилки повернути код 409 "Incorrect reason reference"
Дозволений Епізод лікування (Episode of care) повинен посилатися на валідний об'єкт медичної події (Episode of Care) з вказанням конкретного пацієнта.
$.permitted_episodes.identifier.type.coding[*].system == "eHealth/resources"
$.permitted_episodes.identifier.type.coding[*].code == "episode_of_care"
в разі помилки повернути код 409 "Incorrect reason reference"
Перевірити, що код в існуючому сервісі або групі сервісів дозволений для використання в service_request
в разі, якщо не знайдено або is_active == false повернути код 422 "Service(Service group) not found"
if request_allowed==false повернути код 422 "Service request is not allowed for this service(service_group)"
в разі based_on передано в запиті
якщо service_requests.code.identifier.value це сервіс, перевірити $based_on[].activity.code.identifier.value = service_requests.code.identifier.value
в разі помилки повернути код 422, "Service in activity differs from service in service request"
Якщо service_requests.code.identifier.value це service_group, перевірити $based_on[].activity.code.identifier.value = service_requests.code.identifier.value
в разі помилки повернути код 422, "Service group in care plan activity differ from service group in service request"
якщо service_requests.code.identifier.value це сервіс/група сервісів, перевірити $based_on[].activity.code.identifier.value is service/service group
в разі помилки повернути код 422, "Activity referes to '#{service/service group}' but service request refers to '#{service group/service}'"
Перевірити категорію сервісу на відповідність категорії запиту сервісу в разі, якщо сервіс було визначено як код (не service_group)
Вибрати категорію з PRM.services де id = $.code.identifier.value
якщо PRM.services.category!=$.category OR PRM.services.category не NULL повернути код 422 "Service category does not match with service request category"
Для кожної програми перевірити, що вона в існуючій програмі сервісів (type=service)
в разі, якщо не знайдено або is_active==false записати результат в колекції даних у відповідності до apiary
в разі, якщо type!= service записати результат в колекції даних у відповідності до apiary - "Invalid program type"
перевірити, що medical_programs.medical_program_settings.care_plan_required == true тоді запит повинен мати based_on з планом лікування та активністю з тою ж програмою
в разі помилки повернути код 422 з повідомленням ("Care plan and activity with the same program should be present in request")
перевірити, що программа відповідє $.activity[].program
в разі помилки повернути код 422 з повідомленням ("Program from activity should be equal to program from request")
Для кожної програми перевірити, що сервіс (або service_group) діючий учасник програми
Вибрати request_allowed, is_active з PRM.program_services де service_id(or group_id) == $.signed_content.code.identifier.value та program_id=$.program.identifier.value
якщо не знайдено або is_active==false записати результат в колекції даних у відповідності до apiary - "Service is not included in the program"
якщо request_allowed==false записати результат в колекції даних у відповідності до apiary - "Service request is not allowed for this service(service_group) in this programm"
Для кожної програми перевірити, що лікар може створювати запит на сервіс з програмою для поточного пацієнта
$.requester має активну декларацію з OR пацієнта
$.requester works в тій же MSP з лікарем, який має активну декларацію з пацієнтом та для лікаря employee_type== DOCTOR
в разі помилки записати результат в колекції даних у відповідності до apiary - "User is not allowed to create service request with the program for the patient"
Перевірити based_on
якщо вказано, перевірити, що поле є масивом з двома значеннями типу Reference: одна - це валідний ресурс плану лікування, інший - ресурс активності.
в разі помилки повернути код 422 з повідомленням ("expected a minimum of %{min} items but got %{actual}")
Перевірити План лікування:
Вона повинна належати тому ж пацієнту як набір в запиті сервісів
в разі помилки повернути код 422 з повідомленням ("Care plan with such id is not found")
Він повинен бути активним
в разі помилки повернути код 422 з повідомленням ("Care plan is not active")
Дата закінчення періоду плану лікування (якщо заповнено) повинна бути більна ніж поточна дата або більше.
Перевірити вказану активність:
Вона відповідає Плану лікування.
в разі помилки повернути код 422 з повідомленням ("Activity with such id is not found")
Вона має activity.detail.kind=service_request; activity.detail.product_reference=service_request.code[].value.
в разі помилки повернути код 422 з повідомленням ("Invalid activity kind")
Вона має статус scheduled, in_progress
в разі помилки повернути код 422 з повідомленням ("Invalid activity status")
якщо вказана кількість, то перевірити, що remaining_quantity більше нуля:
в разі помилки повернути код 422, "The number of available services according to the care plan activity has been exhausted"
Перевірити період активності:
На наявність scheduled_timing:
якщо bounds_period.end відрізняється, то перевірити, що від більше поточної дати або дорівнює.
На наявність scheduled_period:
якщо scheduled_period.endвідрізняється, то перевірити, що від більше поточної дати або дорівнює.
Якщо пацієнт це person - перевірити статус верифікації:
Якщо SR має based_on з валідною активністю, то пропустити перевірку.
Перевірити, що verification_status пацієнта не дорівнює NOT_VERIFIED.
в разі NOT_VERIFIED - повернути помилку 409, "Patient is not verified"
В противному випадку, якщо програма відповідає вимогам - записати "Valid" у відповідності до apiary.
ЕСОЗ - публічна документація