Table of Contents | ||||
---|---|---|---|---|
|
...
Перевірити 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"
в разі, якщо сервіс бути вказаний як код (не група сервісів) перевірити service_request.category=service.category from $code.identifier.value
в разі помилки повернути код 422, "Category mismatch"
якщо категорія в (hospitalization, transfer_of_care), не перевіряти service_request.category=service.category from $code.identifier.value
Пацієнт має бути активним
$.patient.identifier.type.coding[*].system == "eHealth/resources"
$.patient.identifier.type.coding[*].code == "patient"
$.patient.identifier.value посилатися на активний MPI (is_active == true та status == 'active')
якщо category = transfer_of_care, пацієнт може бути персоною та преперсоною
в разі іншох категоріх преперсони - повернути код 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')
якщо category = transfer_of_care,
перевірити encounter.hospitalization.Discharge_Disposition='transfer_general', в разі помилки повернути код 422, "Context is not valid for service request with type $type"
Створення є валідна дата-час в майбутньому
$.occurrenceDateTime
$.occurrence_date_time - ISO дата повинна бути більше поточної дати-часу
$.occurrencePeriod.start
$.occurrence_period.start - ISO дата повинна бути більше поточної дати-часу
$.occurrence_period.end - ISO дата повинна бути більше поточної дати-часу та більше ніж $.occurrencePeriod.start
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 and employee.is_active == true та employee.legal_entity_id == token.client_id та employee.type=DOCTOR OR SPECIALIST)
Той, хто направив запит є одним з поточних співробітників користувача
в разі помилки повернути код 422 "User is not allowed to create service request for the employee"
Requester_legal_enity повинна бути поточна юридична особа
Супроводжуюча інформація повинна посилатися на валідний об'єкт медичної події (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"
Перевірити, що дозволений епізод не вказаний для категорії "laboratory_procedure"
в разі помилки повернути код 422 "Permitted episodes are not allowed for laboratory category of service request"
Перевірити, що expiration_date в майбутньому
в разі помилки повернути код 422 "Expiration date can not be in past"
Перевірити, що код в існуючому сервісі або групі сервісів дозволений для використання в service_request
Примітка. Для service_request.code дозволено "service", "service_group"в разі, якщо не знайдено або 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}'"
Якщо було вказано програму, перевірити, що вона в інуючій програмі сервісів (type=service)
в разі, якщо не знайдено або is_active==false повернути помилку 422 "Program not found"
у випадку type!= service повернути код 422 "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"
Перевірити performer
якщо category = transfer_of_care,
виконавець направлений, в разі помилки вказати код 422, "performer is mandatory for category `transfer_of_care`"
виконавець є діючим LE зі status=Active та is_Active=true, в разі помилки повернути код 422, "performer is not active legal entity"
перевірити LocationReference
якщо category = transfer_of_care,
LocationReference це діючий підрозділ з типом (CLINIC, LICENSED_UNIT,AMBULANT_CLINIC,FAP) та status=Active та is_active=true, в разі помилки повернути код 422, "LocationReference is not an active division"
LocationReference division.legal_entity_id=Performer, в разі помилки повернути код 422, "Division does not belong to performer legal entity"
Перевірити PerformerType
якщо category = hospitalization
PerformerType направлено, в разі помилки повернути код 422, "PerformerType is mandatory for category hospitalization"
PerformerType це код з dictionary.SPECIALITY_TYPE та відповідає конфігураційному файлу 'SERVICE_REQUEST_HOSPITALIZATION_SPECIALITY_TYPES', в разі помилки повернути код 422, "PerformerType=$PerformerType is forbidden for category hospitalization"
Перевірити 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")
Якщо activity.program вказана то $.service_request.program з таким же значенням повинен бути в запиті
в разі помилки повернути код 409 з повідомленням ('Program from activity should be present in request')
якщо activity.quantity вказано, то перевірити activity.remaining_quantity більше нуля:
в разі помилки повернути код 409 "The number of available services according to the care plan activity has been exhausted"
Перевірити статус верифікаціїпацієнта:
Якщо направлення має based_on з валідною активністю, пропустити валідацію.
В іншому випадку, перевірити, що статус пацієнта verification_status не рівняється NOT_VERIFIED.
в разі помилки повернути код 409, "Patient is not verified"
Логіка сервісу
Згенерувати номер (див
Human readable requisition number ) на основі encounter idЗберегти підписний контент до фалового сховища
Зберегти дати до відповідної колекції в DB
Зберегти посилання до підписного контенту в сховищі запитів на сервіс
Якщо була вказана програма, змінити program_processing_status на New
...
Якщо за-замовчування метод автентифікації пацієнта визначено як Determination of a default authentication method and return person's active auth_methods OTP або third_person.OTP, відправити SMS пацієнтом з номером.
...