Table of Contents |
---|
...
Перевірити валідність токену доступу
В разі помилки повернути 401 ('Access denied')
Перевірити скоупи користувачів encounter:write на можливість виконання даної дії
В разі помилки згенерувати відповідь 403 ('Invalid scopes')
...
Перевірити, що id адміністрування ЛЗ це первинний ключ (Submit Encounter Data Package#Primarykeyvalidation)
Перевірити part_of
перевірити, що процедура або medication_administration відносяться до одного і того ж пацієнта
procedure.patient_id=@person_id
medication_administration.patient_id=@person_id
в разі помилки повернути 409 "Procedure/Medication administration was made for another person"
перевірити, що процедура або medication_administration не в статусі `entered_in_error`
в разі помилки повернути 409, "Procedure/Medication administration is not active"
якщо part_of.identifier.value є валідацією процедури та це процедура з бази даних або в бєклозі
в разі помилки повернути 422, "Procedure with such id is not found"
Перевірити ЛЗ
перевірити, що ЛЗ з типом 'BRAND'
в разі помилки повернути 422, "Medication should be of type brand"
ЛЗ посилається на INNM_DOSAGE ЛЗ з request.medication
"select count(*) from ingredients where parent_id=‘medication_administration.medication.id’ and medication_child_id = ‘medication_request.medication_id’ " >=1
в разі помилки повернути 422, "Medication should correspond to the one in request"
Перевірити, що контекст адміністрування ЛЗ в поточній взаємодії
$.medication_administration[*].context.identifier.value == $.encounter.id
в разі помилки повернути "Submitted context is not allowed for the medication administration"
Перевірити performed_date_time <= now()
в разі помилки повернути 422, "performed_date_time should be in the past"
Перевірити виконавця відповідно до Rule
перевірити, що виконавець це активний лікар з поточного legal_entity
$..performer.identifier.value це ID існуючого співробітника з PRM.employee
в разі помилки повернути "Employee with such id is not found"
$..performer.identifier.value == PRM.employees.id where (PRM.employees.status == "APPROVED" та PRM.employees.employee_type в ("DOCTOR","SPECIALIST"))
"Employee is not an active doctor"
перевірити reason_references
перевірити Condition|Observation|DiagnosticReport як посилання
перевірити Condition|Observation|DiagnosticReportне в статусі "entered_in_error"
в разі помилки повернути 409, "Reason reference should be active"
перевірити Condition|Observation|DiagnosticReport виконані для того ж пацієнта
в разі помилки повернути 409, "Reason reference was made for another person"
перевірити Condition|Observation|DiagnosticReport існує в базі даних або в беклог
в разі помилки повернути 422, "Condition|Observation|DiagnosticReport with such id is not found"
Перевірити request
перевірити medication_request як посилання
перевірити medication_request в активному статусі medication_request.status='ACTIVE' та is_active=true
в разі помилки повернути 409, "medication request is not active"
перевірити medication request is made for the same person
в разі помилки повернути 409, "medication request was made for another person"
перевірити medication_request.started_at < now()
в разі помилки повернути 409, "Medication request started at should be in the past"
Перевірити дозування
...
Перевірити за json schema
Перевірити, що id процедури це первинний ключ (Submit Encounter Data Package#Primarykeyvalidation)
Перевірити code
Перевірити код, як посилання (Referencevalidation)
Перевірити, що procedure.service.is_active = true
в разі помилки повернути 409, "Service is not active"
Перевірити, що service_request, має посилання з based_on, та
перевірити, що service_request містить параметр based_on
в разі based_on наявний в service_request
перевірити care_plan:
він має бути в статусі active
Період плану лікування end (якщо вказано) повинен бути більше поточної дати або дорівнювати.
перевірити activity:
Вона має activity.detail.kind=service_request; activity.detail.product_reference=service_id.
Вона має статус scheduled, in_progress
в разі based_on не вказана в запиті - пропустити попередні валідації.
Перевірити encounter
$.procedure[*].encounter.identifier.value == $.encounter.id
в разі помилки повернути 409, "Submitted encounter is not allowed for procedure"
Перевірити performed_date_time
performed_date_time дійсний
в разі помилки повернути 422, "Performed_date_time in invalid"
performed_date_time <= now
в разі помилки повернути 422 "Procedure cannot be registered in future"
Перевірити recorded_by
Перевірити recorded_by як посилання (Referencevalidation)
$..recorded_by.identifier.value є ID існуючого співробітника в PRM.employee
в разі помилки повернути 422, "Employee with such id is not found"
Перевірити recorded_by це співробітник зі status='APPROVED' та is_active= true та end_date є null або більше поточної дати
в разі помилки повернути 409, "This action is prohibited for current employee"
Перевірити employees.legal_entity_id=$managing_organization.identifier.value
в разі помилки повернути 409, "Employee should be from current legal entity"
Перевірити asserter
Перевірити division
Перевірити відділення як посилання (Referencevalidation)
$division є ID в PRM.divisions
в разі помилки повернути 422, "Division with such id is not found"
division.status=ACTIVE та is_active=true
в разі помилки повернути 409, "Division is not active"
division.legal_entity_id = $client_id або division.legal_entity_id=$managing_organization.identifier.value
в разі помилки повернути 409, "Division is not in current legal_entity"
Перевірити managing_organization це поточний legal_entity з відповідним типом
як посилання (Referencevalidation)
$managing_organization є ID в PRM.legal_entities
в разі помилки повернути 422, "Legal entity with such id is not found"
перевірити для managing_organization статус є 'ACTIVE' та is_active=true
в разі помилки повернути 422 ('Legal entity is not active')
перевірити тип legal_entity є в ('PRIMARY_CARE','MSP','MSP_PHARMACY','MSP_PHARMACY') (використати `ME_ALLOWED_TRANSACTIONS_LE_TYPES` з чартів)
в разі помилки повернути 422, "Legal entity with type $legal_entity.type cannot perform procedures"
перевірити $managing_organization.identifier.value = $client_id
в разі помилки повернути 409 "Managing organization does not correspond to user's legal entity."
Перевірити reason_references
Перевірити reason_reference як посилання (Referencevalidation)
Перевірити reason_refernce.identifier.value є станом не в статусі`entered_in_error`
в разі помилки повернути 422, "Condition is canceled"
Перевірити outcome
перевірити висновок як посилання (Referencevalidation)
перевірити outcome.coding.object.system є в довіднику eHealth/procedure_outcomes
в разі помилки повернути 422, "outcome not in dictionary eHealth/procedure_outcomes"
Перевірити complication_details
перевірити complication_details як посилання (Referencevalidation)
перевірити complication_details.identifier.value посилається на стан в тому ж пакеті взаємодії
в разі помилки повернути 422, "complication_details does not correspond to condition in this encounter package"
Перевірити category
відповідно до довідника 'eHealth/procedure_categories' - по схемі
Перевірити, що категорія процедури відноситься до категорії сервісу, що вказана як код процедури
$.procedure.category=PRM.services.category де PRM.services.id=$.procedure.code.identifier.value
в разі помилки повернути 422 "Procedure category does not match with the service category"
Якщо пацієнт це person - перевірити статус verification:
Якщо процедура включає based_on з направленням, то пропустити валідації.
В іншому випадку перевірити, що verification_status не дорівнює NOT_VERIFIED.
в разі NOT_VERIFIED - повернути помилку 409, "Patient is not verified"
Перевірити
...
клінічну оцінку
Перевірити згідно json schema
Перевірити, що клінічні враження клінічна оцінка це первинний ключ (Primarykeyvalidation)
Перевірити status
Перевірити, що код відповідає значенням словника (eHealth/clinical_impression_statuses)
в разі помлки - повернути 422 ('value is not allowed in enum')
Перевірити, що значення = completed
в разі помлки - повернути 422 ('value is not allowed in enum')
Перевірити code
Перевірити, що код відповідає значенням словника (eHealth/clinical_impression_patient_categories)
в разі помлки - повернути 422 ('value is not allowed in enum')
Перевірити code.coding в залежності від кількості кодів. Максимум один код дозволено
в разі помлки - повернути 422 ('Only one code is allowed')
Перевірити по code.coding[0].code та code.coding[0].system активні правила в rule_engine_rules collection
в разі наявності хочі б одного активного коду - перевірити тільки запит по наступним валідаціям
в разі наявності коду в колекції - перевірити запит з наступними валідаціями та додатковими з налаштувань бізнес-правил
Перевірити description
Перевірити, що тип значення строковий
в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')
Перевірити encounter
Перевірити, що значення є валідним посиланням на ресурс взаємодії
Перевірити, що значення це об'єкт з посиланнями типів взаємодій
в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що значення є валідним посиланням на ресурс взаємодії
Перевірити, що $.clinical_impressions[*].encounter.identifier.value == $.encounter.id
в разі помилки - повернути 422 ('Invalid reference')
Перевірити, що effective_period це період (PeriodValidation)
Перевірити значення в полі $.effective_period
Перевірити, що $.effective_period.start <= encounter.date
в разі помилки - повернути 422 ('Start date must be in the past')
Перевірити, що $.effective_period.end >= $.effective_period.start
в разі помилки - повернути 422 ('End date must be greater than or equal the start date')
Перевірити, шо $.effective_period.end в допустимих лімітах
Перевірити, що $.effective_period.end <= current_time
в разі помилки - повернути 422 ('Date must be in past')
Перевірити, що $.effective_period.end >= current_date-clinical_impression_max_days_passed
в разі помилки - повернути 422 ('Date must be greater than {{current_date-clinical_impression_max_days_passed}}')
Перевірити effective_date_time
Перевірити, що field $.effective_date_time типу строковий
в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')
Перевірити, що поле $.effective_date_time <= current_time
в разі помилки - повернути 422 ('Date must be in past')
Перевірити, що поле $.effective_date_time >= current_date-clinical_impression_max_days_passed
в разі помилки - повернути 422 ('Date must be greater than {{current_date-clinical_impression_max_days_passed}}')
Перевірити assessor
Перевірити, що автор це посилання (Referencevalidation)
$.assessor.identifier.value це ID існуючого співробітника в PRM.employee
в разі помилки - повернути 422 ('Employee with such id is not found')
Перевірити, що це співробітник зі статусом status='APPROVED' та is_active= true та end_date нуль або більше ніж сьогодні
в разі помилки - повернути 422 ('Invalid employee status')
Перевірити previous
Перевірити, що значенням є валідне посилання на ресурс клінічного враженняклінічної оцінки
Перевірити, що значення це об'єкт з посиланням на тип clinical_impression
в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що клінічне враження активне клінічна оцінка активна (status не є entered_in_error)
в разі помилки - повернути 422 ('Clinical impression in "entered_in_error" status can not be referenced')
Перевірити, що клінічне враження клінічна оцінка належить пацієнту ($.subject)
в разі помилки - повернути 422 ('Clinical impression with such id is not found')
Перевірити problems
Перевірити, що значення це масив з посиланнями на тип стану
в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що кожний стан є активним (verification_status не є entered_in_error)
в разі помилки - повернути 422 ('Condition in "entered_in_error" status can not be referenced')
Перевірити, що стан належить пацієнту ($.subject)
в разі помилки - повернути 422 ('Condition with such id is not found')
Перевірити finding
Перевірити, що значення є масив об'єктів
Перевірити item_reference
Перевірити, що значення це об'єкт з посиланнями на ресурси станів, аналізів (далі <Medical event resource>)
в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що <Medical event resource> активний (статус не entered_in_error)
в разі помилки - повернути 422 ('<Medical event resource> in "entered_in_error" status can not be referenced')
Перевірити, що кожне посилання:
валідний ME для визначеного типу вище
належать пацієнту ($.subject)
в разі помилки - повернути 422 (<Medical event resource> with such ID is not found')
Якщо декілька ресурси наявні в активному правилу, перевірити, що вони відповідають зконфігурованим парвилам
в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')
Перевірити basis
Перевірити, що значення типу строковий
в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')
Перевірити supporting_info
Перевірити, що знаення це масив посилань типу episode_of_care, procedure, diagnostic report, encounter (further <Medical event resource>)
в разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що <Medical event resource> активний (статус не entered_in_error)
в разі помилки - повернути 422 ('<Medical event resource> in "entered_in_error" status can not be referenced')
Перевірити, що кожне посилання:
це валідний ME визначених типів вище
належить пацієнту ($.subject)
в разі помилки - повернути 422 (<Medical event resource> with such ID is not found')
В разі, якщо деякі ресурси наявні в активному правилі, перевірити, що вони відповідають конфігурації по правилу
в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')
Перевірити note
Перевірити, що значення типу строковий
в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')
Перевірити patient
В разі, параметри по пацієнту наявні в активному правилі, отримати дані згідно предмету та перевірити, що вони відповідають конфігурації правил
в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')
В разі наявності даних по погашенню рецепту в активному правилі, отримати дані погашення рецепту в контексті пацієнта (згідно предмету) та перевірити, що вони відповідають конфігураційним параметрам
в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')
Перевірка первинного ключа
...
Зберегти signed_content до сховища даних
Зберегти дані до відповідної колекції в базі даних
Зберегти посилання на підписний контент до взаємодії
Доповнити encounter.diagnoses:
вибрати condition.code з бази даних по медичим подіям (або з тіла запиту) де condition.id==diagnoses[@].condition.identifier.value
встановити diagnoses[@].code = select 1
Зберегти дагнози зі взаємодії до episodes.current_diagnoses
ME.patients.episodes.diagnoses = $.encounter.diagnoses
Додати запис до ME.patient.episodes{episode_id}.diagnoses_hstr
date = current_date
evidence = reference to encounter ($.encounter.id)
diagnoses = $.encounter.diagnoses
Встановити display_value для співробітників для всіх вказаних об'єктів
Вибрати PRM.parties.first_name, PRM.parties.second_name, PRM.parties.last_name з PRM.parties де (PRM.parties.id == (Select PRM.employees.party_id з PRM.employees де PRM.employees.id== $.care_manager.identifier.value))
ME.patients.encounters{encounter_id}.performer.display== Select 1
ME.conditions{condition_id}.asserter.display == Select 1
ME.observations{observation_id}.performer.display == Select 1
ME.patients.immunizations{immunization_id}.performer.display == Select 1
ME.patients.allergy_intolerance{ai_id}.asserter.display == Select 1
ME.patients.devices{device_id}.asserter.display == Select 1
ME.patients.medication_statements{ms_id}.asserter.display == Select 1
ME.patients.risk_assessment{rs_id}.asserter.display == Select 1
ME.patients.diagnostic_reports{dr_id}.performer.reference.display == Select 1
ME.patients.diagnostic_reports{dr_id}.recorded_by.reference.display == Select 1
ME.patients.diagnostic_reports{dr_id}.results_interpreter.reference.display == Select 1
В разі наявності реакції ($.observations[?].reaction_on) в запиті, оновити вказані щеплення з реакцією:
Встановити в ME.patient.immunization.reaction.detail $.observation.id як посилання
примітка: $.observations[?].reaction_on should not be saved in observation, only in corresponding immunization
Встановити display_value для legal_entities
ME.patients.diagnostic_reports{dr_id}.managing_organization.display
Встановити managing_organization для вказаних observations, conditions, encounter
ME.conditions{cond_id}.managing_organization=token.client_id
ME.observations{observ_id}.managing_organization=token.client_id
ME.encounters{encounter_id}.managing_organization=token.client_id
В разі encounter.incoming_referral було заповнено, встановити episode_origin до взаємодії
Вибрати візит де id== (вибрати ME.encounter.episode.identifier.value де encounter.id==(вибрати ME.service_requests.context.identifier.value де id==$.encounter.incoming_referral.identifier.value))
В разі diagnostic_reports.based_on було заповнено, встановити episode_origin до дігностичного звіту
Вибрати візит де id== (вибрати ME.encounter.episode.identifier.value де encounter.id==(вибрати ME.service_requests.context.identifier.value де id==$.diagnostic_reports.based_on.identifier.value))
В разі encounter.incoming_referral було заповнено, встановити $.encounter.id та зв'язати $.service_request activity[].outcome_reference
В разі procedures.based_on було заповнено, встановити $.procedures.id та зв'язати $.service_request $.activity[].outcome_reference
В разі diagnostic_reports.based_on було заповнено, встановити $.diagnostic_reports.id та зв'язати $.service_request activity[].outcome_reference
Оновити $ .activity.status до in_progress якщо попередній активний статус було заплановано
Оновити параметр $ .activity.remaining_quantity шляхом віднімання кількості артефактів, які мають посилання на сервіс, що містять $.based_on.[]activity
Збагатити дані взаємодії даними performer speciality:
SELECT speciality -> 'speciality' FROM employees WHERE speciality ->> 'speciality_officio' = 'true' AND id = $.encounter.performer.identifier.value
Встановити encounter.performer_speciality як тип CodeableConcept системи = SPECIALITY_TYPE
В разі encounter.clinical_impression наповнити даними з $.context_episode_id в моделі даних clinical_impressions (encounters.context.[].episode.value=clinical_impression.context_episode_id)