Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

...

  1. Перевірити валідність токену доступу

    1. В разі помилки повернути 401 ('Access denied')

  2. Перевірити скоупи користувачів encounter:write на можливість виконання даної дії

    1. В разі помилки згенерувати відповідь 403 ('Invalid scopes')

...

  1. Перевірити, що id адміністрування ЛЗ це первинний ключ (Submit Encounter Data Package#Primarykeyvalidation)

  2. Перевірити part_of 

    1. перевірити, що процедура або medication_administration відносяться до одного і того ж пацієнта

      1. procedure.patient_id=@person_id

      2. medication_administration.patient_id=@person_id

        1. в разі помилки повернути 409 "Procedure/Medication administration was made for another person"

    2. перевірити, що процедура або medication_administration не в статусі `entered_in_error`

      1. в разі помилки повернути 409, "Procedure/Medication administration is not active"

    3. якщо part_of.identifier.value є валідацією процедури та це процедура з бази даних або в бєклозі

      1. в разі помилки повернути 422, "Procedure with such id is not found"

  3. Перевірити ЛЗ

    1. перевірити, що ЛЗ з типом 'BRAND'

      1. в разі помилки повернути 422, "Medication should be of type brand"

    2. ЛЗ посилається на INNM_DOSAGE ЛЗ з request.medication 

      1. "select count(*) from ingredients where parent_id=‘medication_administration.medication.id’ and medication_child_id = ‘medication_request.medication_id’ " >=1

        1. в разі помилки повернути 422,  "Medication should correspond to the one in request"

  4. Перевірити, що контекст адміністрування ЛЗ в поточній взаємодії

    1. $.medication_administration[*].context.identifier.value == $.encounter.id

      1. в разі помилки повернути "Submitted context is not allowed for the medication administration"

  5. Перевірити performed_date_time <= now()

    1. в разі помилки повернути 422, "performed_date_time should be in the past"

  6. Перевірити виконавця відповідно до Rule

    1. перевірити, що виконавець це активний лікар з поточного legal_entity

      1. $..performer.identifier.value це ID існуючого співробітника з PRM.employee

        1. в разі помилки повернути "Employee with such id is not found"

      2. $..performer.identifier.value == PRM.employees.id where (PRM.employees.status == "APPROVED" та PRM.employees.employee_type в ("DOCTOR","SPECIALIST"))

        1. "Employee is not an active doctor"

  7. перевірити reason_references

    1. перевірити  Condition|Observation|DiagnosticReport як посилання

    2. перевірити Condition|Observation|DiagnosticReportне в статусі "entered_in_error"

      1. в разі помилки повернути 409, "Reason reference should be active"

    3. перевірити Condition|Observation|DiagnosticReport виконані для того ж пацієнта

      1. в разі помилки повернути 409, "Reason reference was made for another person"

    4. перевірити Condition|Observation|DiagnosticReport існує в базі даних або в беклог

      1. в разі помилки повернути 422, "Condition|Observation|DiagnosticReport with such id is not found"

  8. Перевірити request

    1. перевірити medication_request як посилання

    2. перевірити medication_request в активному статусі medication_request.status='ACTIVE' та is_active=true

      1. в разі помилки повернути 409, "medication request is not active"

    3. перевірити medication request is made for the same person

      1. в разі помилки повернути 409, "medication request was made for another person"

    4. перевірити medication_request.started_at < now()

      1. в разі помилки повернути 409, "Medication request started at should be in the past"

  9. Перевірити дозування

...

  1. Перевірити за json schema

  2. Перевірити, що id процедури це первинний ключ (Submit Encounter Data Package#Primarykeyvalidation)

  3. Перевірити code

    1. Перевірити код, як посилання (Referencevalidation)

    2. Перевірити, що procedure.service.is_active = true

      1. в разі помилки повернути 409, "Service is not active"

  4. Перевірити, що service_request, має посилання з based_on, та

    1. перевірити, що service_request містить параметр based_on

      1. в разі based_on наявний в service_request

        1. перевірити care_plan:

          1. він має бути в статусі active 

          2. Період плану лікування end (якщо вказано) повинен бути більше поточної дати або дорівнювати.

        2. перевірити activity:

          1. Вона має activity.detail.kind=service_request; activity.detail.product_reference=service_id. 

          2. Вона має статус scheduled, in_progress 

      2. в разі based_on не вказана в запиті - пропустити попередні валідації.

  5. Перевірити encounter

    1. $.procedure[*].encounter.identifier.value == $.encounter.id

      1. в разі помилки повернути 409, "Submitted encounter is not allowed for procedure"

  6. Перевірити performed_date_time

    1.  performed_date_time дійсний

      1. в разі помилки повернути 422, "Performed_date_time in invalid"

    2. performed_date_time <= now

      1. в разі помилки повернути 422 "Procedure cannot be registered in future"

  7. Перевірити recorded_by

    1. Перевірити recorded_by як посилання (Referencevalidation)

    2. $..recorded_by.identifier.value є ID існуючого співробітника в PRM.employee

      1. в разі помилки повернути 422, "Employee with such id is not found"

    3. Перевірити recorded_by це співробітник зі status='APPROVED' та is_active= true та end_date є null або більше поточної дати

      1. в разі помилки повернути 409, "This action is prohibited for current employee" 

    4. Перевірити employees.legal_entity_id=$managing_organization.identifier.value

      1. в разі помилки повернути 409, "Employee should be from current legal entity"

  8. Перевірити asserter

  9. Перевірити division

    1. Перевірити відділення як посилання (Referencevalidation)

    2. $division є ID в PRM.divisions

      1. в разі помилки повернути 422, "Division with such id is not found"

    3. division.status=ACTIVE та is_active=true

      1. в разі помилки повернути 409, "Division is not active"

    4. division.legal_entity_id = $client_id або division.legal_entity_id=$managing_organization.identifier.value

      1. в разі помилки повернути 409, "Division is not in current legal_entity"

  10. Перевірити managing_organization це поточний legal_entity з відповідним типом

    1.  як посилання (Referencevalidation)

    2. $managing_organization є ID в PRM.legal_entities

      1. в разі помилки повернути 422, "Legal entity with such id is not found"

    3. перевірити для managing_organization статус є 'ACTIVE' та is_active=true

      1. в разі помилки повернути 422 ('Legal entity is not active')

    4. перевірити тип legal_entity є в ('PRIMARY_CARE','MSP','MSP_PHARMACY','MSP_PHARMACY') (використати `ME_ALLOWED_TRANSACTIONS_LE_TYPES` з чартів)

      1. в разі помилки повернути 422, "Legal entity with type $legal_entity.type cannot perform procedures"

    5. перевірити $managing_organization.identifier.value = $client_id

      1. в разі помилки повернути 409 "Managing organization does not correspond to user's legal entity."

  11. Перевірити reason_references

    1. Перевірити reason_reference як посилання (Referencevalidation)

    2. Перевірити reason_refernce.identifier.value є станом не в статусі`entered_in_error`

      1. в разі помилки повернути 422, "Condition is canceled"

  12. Перевірити outcome

    1. перевірити висновок як посилання (Referencevalidation)

    2. перевірити outcome.coding.object.system є в довіднику eHealth/procedure_outcomes

      1. в разі помилки повернути 422, "outcome not in dictionary eHealth/procedure_outcomes"

  13. Перевірити complication_details

    1. перевірити complication_details як посилання (Referencevalidation)

    2. перевірити complication_details.identifier.value посилається на стан в тому ж пакеті взаємодії

      1. в разі помилки повернути 422, "complication_details does not correspond to condition in this encounter package"

  14. Перевірити category

    1. відповідно до довідника 'eHealth/procedure_categories' - по схемі

    2. Перевірити, що категорія процедури відноситься до категорії сервісу, що вказана як код процедури

      1. $.procedure.category=PRM.services.category де PRM.services.id=$.procedure.code.identifier.value

        1. в разі помилки повернути 422 "Procedure category does not match with the service category"

  15. Якщо пацієнт це person - перевірити статус verification:

    1. Якщо процедура включає based_on з направленням, то пропустити валідації.

    2. В іншому випадку перевірити, що verification_status не дорівнює NOT_VERIFIED.

      1. в разі NOT_VERIFIED - повернути помилку 409, "Patient is not verified"

Перевірити

...

клінічну оцінку

  1. Перевірити згідно json schema

  2. Перевірити, що клінічні враження клінічна оцінка це первинний ключ (Primarykeyvalidation)

  3. Перевірити status

    1. Перевірити, що код відповідає значенням словника (eHealth/clinical_impression_statuses)

      • в разі помлки - повернути 422 ('value is not allowed in enum')

    2. Перевірити, що значення = completed

      • в разі помлки - повернути 422 ('value is not allowed in enum')

  4. Перевірити code

    1. Перевірити, що код відповідає значенням словника (eHealth/clinical_impression_patient_categories)

      1. в разі помлки - повернути 422 ('value is not allowed in enum')

    2. Перевірити code.coding в залежності від кількості кодів. Максимум один код дозволено

      1. в разі помлки - повернути 422 ('Only one code is allowed')

    3. Перевірити по code.coding[0].code та code.coding[0].system активні правила в rule_engine_rules collection

      1. в разі наявності хочі б одного активного коду - перевірити тільки запит по наступним валідаціям

      2. в разі наявності коду в колекції - перевірити запит з наступними валідаціями та додатковими з налаштувань бізнес-правил

  5. Перевірити description

    1. Перевірити, що тип значення строковий

      1. в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')

  6. Перевірити encounter

    1. Перевірити, що значення є валідним посиланням на ресурс взаємодії

      • Перевірити, що значення це об'єкт з посиланнями типів взаємодій

        • в разі помилки - повернути 422 ('value is not allowed in enum')

    2. Перевірити, що значення є валідним посиланням на ресурс взаємодії

      • Перевірити, що $.clinical_impressions[*].encounter.identifier.value == $.encounter.id

        1. в разі помилки - повернути 422 ('Invalid reference')

  7. Перевірити, що effective_period це період (PeriodValidation)

    1. Перевірити значення в полі $.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')

    2. Перевірити, шо $.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}}')

  8. Перевірити effective_date_time

    1. Перевірити, що field $.effective_date_time типу строковий

      1. в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')

    2. Перевірити, що поле $.effective_date_time <= current_time

      1. в разі помилки - повернути 422 ('Date must be in past')

    3. Перевірити, що поле $.effective_date_time >= current_date-clinical_impression_max_days_passed

      1. в разі помилки - повернути 422 ('Date must be greater than {{current_date-clinical_impression_max_days_passed}}')

  9. Перевірити assessor

    1. Перевірити, що автор це посилання (Referencevalidation)

      1. $.assessor.identifier.value це ID існуючого співробітника в PRM.employee

        1. в разі помилки - повернути 422 ('Employee with such id is not found')

    2. Перевірити, що це співробітник зі статусом status='APPROVED' та is_active= true та end_date нуль або більше ніж сьогодні

      1. в разі помилки - повернути 422 ('Invalid employee status')

  10. Перевірити previous

    1. Перевірити, що значенням є валідне посилання на ресурс клінічного враженняклінічної оцінки

      • Перевірити, що значення це об'єкт з посиланням на тип 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')

  11. Перевірити problems

    1. Перевірити, що значення це масив з посиланнями на тип стану

      • в разі помилки - повернути 422 ('value is not allowed in enum')

    2. Перевірити, що кожний стан є активним (verification_status не є entered_in_error)

      1. в разі помилки - повернути 422 ('Condition in "entered_in_error" status can not be referenced')

    3. Перевірити, що стан належить пацієнту ($.subject)

      • в разі помилки - повернути 422 ('Condition with such id is not found')

  12. Перевірити finding

    1. Перевірити, що значення є масив об'єктів

      1. Перевірити item_reference

        1. Перевірити, що значення це об'єкт з посиланнями на ресурси станів, аналізів (далі <Medical event resource>)

          1. в разі помилки - повернути 422 ('value is not allowed in enum')

        2. Перевірити, що <Medical event resource> активний (статус не entered_in_error)

          1. в разі помилки - повернути 422 ('<Medical event resource> in "entered_in_error" status can not be referenced')

        3. Перевірити, що кожне посилання:

          1. валідний ME для визначеного типу вище

          2. належать пацієнту ($.subject)

            1. в разі помилки - повернути 422 (<Medical event resource> with such ID is not found')

        4. Якщо декілька ресурси наявні в активному правилу, перевірити, що вони відповідають зконфігурованим парвилам

          1. в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')

      2. Перевірити basis

        1. Перевірити, що значення типу строковий

          1. в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')

  13. Перевірити supporting_info

    1. Перевірити, що знаення це масив посилань типу episode_of_care, procedure, diagnostic report, encounter (further <Medical event resource>)

      1. в разі помилки - повернути 422 ('value is not allowed in enum')

    2. Перевірити, що <Medical event resource> активний (статус не entered_in_error)

      1. в разі помилки - повернути 422 ('<Medical event resource> in "entered_in_error" status can not be referenced')

    3. Перевірити, що кожне посилання:

      1. це валідний ME визначених типів вище

      2. належить пацієнту ($.subject)

        1. в разі помилки - повернути 422 (<Medical event resource> with such ID is not found')

    4. В разі, якщо деякі ресурси наявні в активному правилі, перевірити, що вони відповідають конфігурації по правилу

      1. в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')

  14. Перевірити note

    1. Перевірити, що значення типу строковий

      1. в разі помилки - повернути 422 ('type mismatch. Expected string but got {entered type}')

  15. Перевірити patient

    1. В разі, параметри по пацієнту наявні в активному правилі, отримати дані згідно предмету та перевірити, що вони відповідають конфігурації правил

      1. в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')

    2. В разі наявності даних по погашенню рецепту в активному правилі, отримати дані погашення рецепту в контексті пацієнта (згідно предмету) та перевірити, що вони відповідають конфігураційним параметрам

      1. в разі помилки - повернути 409 ('Submitted patient category does not correspond to rule engine rule')

Перевірка первинного ключа

...

  1. Зберегти signed_content до сховища даних

  2. Зберегти дані до відповідної колекції в базі даних

  3. Зберегти посилання на підписний контент до взаємодії

  4. Доповнити encounter.diagnoses:

    1. вибрати condition.code з бази даних по медичим подіям (або з тіла запиту)  де condition.id==diagnoses[@].condition.identifier.value 

    2. встановити diagnoses[@].code = select 1

  5. Зберегти дагнози зі взаємодії до episodes.current_diagnoses

    1. ME.patients.episodes.diagnoses = $.encounter.diagnoses 

  6. Додати запис до ME.patient.episodes{episode_id}.diagnoses_hstr

    1. date = current_date

    2. evidence = reference to encounter  ($.encounter.id)

    3. diagnoses = $.encounter.diagnoses 

  7. Встановити display_value для співробітників для всіх вказаних об'єктів

    1. Вибрати 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))

    2. ME.patients.encounters{encounter_id}.performer.display== Select 1

    3. ME.conditions{condition_id}.asserter.display == Select 1

    4. ME.observations{observation_id}.performer.display == Select 1

    5. ME.patients.immunizations{immunization_id}.performer.display == Select 1

    6. ME.patients.allergy_intolerance{ai_id}.asserter.display == Select 1

    7. ME.patients.devices{device_id}.asserter.display == Select 1

    8. ME.patients.medication_statements{ms_id}.asserter.display == Select 1

    9. ME.patients.risk_assessment{rs_id}.asserter.display == Select 1

    10. ME.patients.diagnostic_reports{dr_id}.performer.reference.display == Select 1

    11. ME.patients.diagnostic_reports{dr_id}.recorded_by.reference.display == Select 1

    12. ME.patients.diagnostic_reports{dr_id}.results_interpreter.reference.display == Select 1

  8. В разі наявності реакції ($.observations[?].reaction_on) в запиті, оновити вказані щеплення з реакцією:

    1. Встановити в ME.patient.immunization.reaction.detail $.observation.id як посилання
      примітка: $.observations[?].reaction_on should not be saved in observation, only in corresponding immunization

  9. Встановити display_value для legal_entities

    1. ME.patients.diagnostic_reports{dr_id}.managing_organization.display

  10. Встановити managing_organization для вказаних observations, conditions, encounter

    1. ME.conditions{cond_id}.managing_organization=token.client_id

    2. ME.observations{observ_id}.managing_organization=token.client_id

    3. ME.encounters{encounter_id}.managing_organization=token.client_id

  11. В разі encounter.incoming_referral було заповнено, встановити episode_origin до взаємодії

    1. Вибрати візит де id== (вибрати ME.encounter.episode.identifier.value де encounter.id==(вибрати ME.service_requests.context.identifier.value де id==$.encounter.incoming_referral.identifier.value))

  12. В разі diagnostic_reports.based_on було заповнено, встановити episode_origin до дігностичного звіту

    1. Вибрати візит де id== (вибрати ME.encounter.episode.identifier.value де encounter.id==(вибрати ME.service_requests.context.identifier.value де id==$.diagnostic_reports.based_on.identifier.value))

  13. В разі encounter.incoming_referral було заповнено, встановити $.encounter.id та зв'язати $.service_request activity[].outcome_reference

  14. В разі procedures.based_on було заповнено, встановити $.procedures.id та зв'язати $.service_request $.activity[].outcome_reference

  15. В разі diagnostic_reports.based_on було заповнено, встановити $.diagnostic_reports.id та зв'язати $.service_request activity[].outcome_reference

  16. Оновити $ .activity.status до in_progress якщо попередній активний статус було заплановано

  17. Оновити параметр $ .activity.remaining_quantity шляхом віднімання кількості артефактів, які мають посилання на сервіс, що містять $.based_on.[]activity

  18. Збагатити дані взаємодії даними performer speciality:

    1. SELECT speciality -> 'speciality' FROM employees WHERE speciality ->> 'speciality_officio' = 'true' AND id = $.encounter.performer.identifier.value

    2.  Встановити encounter.performer_speciality як тип CodeableConcept системи = SPECIALITY_TYPE

  19. В разі encounter.clinical_impression наповнити даними з $.context_episode_id в моделі даних clinical_impressions (encounters.context.[].episode.value=clinical_impression.context_episode_id)