Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Замінив параметр speciality_types_to_create_medication_request на speciality_types_allowed

...

  1. Забрати employee_id з запиту

  2. Перевірити співробітника

    1. На існування

      1. в разі помилки повернути код 422 з повідомленням ("Employee not found")

    2. Перевірити, що $.employees.status == APPROVED

      1. в разі помилки повернути код 409 з повідомленням ("Employee is not active")

    3. Перевірити, що $.employees.legal_entity_id == client_id from token

      1. в разі помилки повернути код 422 з повідомленням ("Employee does not belong to legal entity from token")

    4. Перевірити, що $.employees.employee_type == <employee_type>

      1. якщо medical_program_id є в запиті перевірити medical_program_settings.skip_employee_validation == false (або відсутня)

        1. перевірити <employee_type>

          1. отримати $.medical_programs.medical_program_setting по medical_program_id з запиту

            1. перевірити, що employee_type наявна в параметрі employee_types_for_create_medication_request

              1. в разі помилки повернути код 422 з повідомленням ("Employee type can't create medication request with medical program from request") 

              2. якщо employee_type = DOCTOR

                1. отримати $.declarations by employee_id, person_id, status=ACTIVE або перевірити параметр MEDICATION_REQUEST_DECLARATION_VERIFY (який дозволяє створити запит на рецепт для будь-якого лікаря в LE де персона має декларацію)

                  1. якщо не знайдено - повернути код 422 (повідомлення: "Employee must have an active declaration with the patient to create medication request!")

              3. якщо employee_type = SPECIALIST

                1. отримати $.employees.speciality.speciality(speciality_officio == true)

                2. перевірити, що вказана спеціальність in$.medical_programs.medical_program_setting.speciality_types_to_create_medication_request variableallowed variable

                  1. в разі помилки повернути код 422 з повідомленням ("Employee's specialty doesn't allow create medication request with medical program from request") 

              4. якщо employee_type = <XXX>

                1. в разі помилки повернути код 422 з повідомленням ("Employee type can't create medication request with medical program from request")

      2. якщо medical_program_settings.skip_employee_validation == true або відсутня medical_program_id в запиті, будь-який користувач, який має скоуп може створити запит на рецепт

...

  1. Перевірити, що created_at, started_at, ended_at в форматі дати

    • в разі помилки повернути код 422 в повідомленні ("expected \"%{actual}\" to be a valid ISO 8601 date")

  2. Перевірити ended_at >= started_at

    1. якщо помилка - повернути код 422  (повідомлення: "Ended date must be >= Started date!")

  3. Перевірити started_at` >= created_at

    1. якщо помилка - повернути код 422  (повідомлення: "Started date must be >= Created date!")

  4. Перевірити started_at >= current_date()

    1. якщо помилка - повернути код 422  (повідомлення: "Started date must be >= current date!")

  5. Перевірити created_at >= current_date() - mrr_delay_input

    1. якщо помилка - повернути код  422  (повідомлення: "Create date must be = current date!")

  6. Перевірити started_at у відповідності до частоти отримання препаратів

    1. отримати $.medical_programs.medical_program_setting по medical_program_id з запиту

      1. перевірити параметр skip_mnn_in_treatment_period

        1. в разі skip_mnn_in_treatment_period == FALSE (or absent)

          1. перевірити запит на відповідність: /wiki/spaces/MRIN/pages/2041217051

        2. в разі skip_mnn_in_treatment_period == TRUE

          1. пропустити перевірку періодичності отримання препаратів

  7. Перевірити created_at у відповідності до періодичності отримання препаратів

    1. отримати $.medical_programs.medical_program_setting по medical_program_id з запиту

      1. перевірити параметр skip_mnn_in_treatment_period 

        1. в разі skip_mnn_in_treatment_period == FALSE (або відсутня)

          1. перевірити запит у відповідності до логіки: /wiki/spaces/MRIN/pages/2041217051

        2. в разі skip_mnn_in_treatment_period == TRUE

          1. пропустити перевірку періодичності отримання препаратів

  8. Перевірити тривалість періоду (ended_at - started_at):

    1. Якщо медична программа була вказана:

      1. перевірити запит на відповідність логіки: PreQualify Medication request: 7. Validate period

    2. в іншому випадку:

      1. Перевірити, що період рецепту меньше або дорівнює MEDICATION_REQUEST_MAX_PERIOD_DAY параментру з чартів

        1. в разі помилки - повернути код 409 “Period length exceeds default maximum value“ 

Перевірити препарат

Ціль валідації: Перевірити FK, status `is_active`=TRUE, type = INNM_DOSAGE

...

  1. Перевірити План лікування:

    1. Від повинен належати тій же персоні, що і набір в MRR

      1. в разі помилки повернути код 422 з повідомленням ("Care plan not found")

    2. Від повинен бути в статусі active

  2. Перевірити вказану активність:

    1. Вона відповідає Плану лікування.

      1. в разі помилки повернути код 422 з повідомленням ("Activity not found")

    2. Вона має activity.detail.kind=medication_request; activity.detail.product_reference=medication_id.

      1. в разі помилки повернути код 422 з повідомленням ("Invalid activity kind")

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

    4. Якщо вона має quantity порахувати remaining quantity:

      1. вибрати всі MRR в статусі NEW які створені на основі даної активності

      2. вибрати всі MR в статусах ACTIVE, COMPLETED які створені на основі даної активності

      3. порахувати зарезервовану на сьогодні кількість, як суму medication_qty у профільтрованому MRR  та MR списку, включаючи medication_qty з поточного MRR

      4. порахувати вказану кількість шляхом віднімання зарезервованої кількості з кількості активностей

      5. Перевірити remaining quantity більше або дорівнює 0 

        1. в разі помилки повернути код 409 "The total amount of the prescribed medication quantity exceeds quantity in care plan activity"

    5. перевірити, що medical_program_id дорівнює $.activity[].program

      1. в разі помилки повернути код 422 з повідомленням ("Medical program from activity should be equal to medical program from request")

  3. Перевірити started_at/ended_at для запиту рецепту: 

    1. Якщо активність плану лікування має detail.scheduled_timing.repeat.bounds_period - перевірити started_at/ended_at включаючи bounds_period

    2. Якщо план активності має detail.scheduled_period - перевірити started_at/ended_at включаючи scheduled_period

    3. в іншому випадку - перевірити started_at/ended_at включаючи care_plan.period

      1. у випадку якщо started_at/ended_at не в межах care_plan.period повернути код 422 з повідомленням ("Invalid care plan period")


Перевірити медичну програму

  1. Перевірити, що medical_program_id - medical_program_id існує

    1. в разі помилки повернути код 422 ("Medical program not found")

  2. Перевірити контекст на наявність взаємодії в запиті

    1. в разі помилки повернути 422 ("Context with encounter is required as medical program is present in the request")

  3. Перевірити параметри medical_programs.medical_program_setting

    1. перевірити, що care_plan_required == true тоді запит повинен містити based_on на план лікування і активність, що містять ту ж програму

      1. в разі помилки повернути код 422 з повідомленням ("Care plan and activity with the same medical program should be present in request")

    2. Якщо вказано параметр CONDITIONS_ICD10_AM_ALLOWED, то:

      1. Перевірити що первинні діагнози зі взаємодії в контексті має код з довідника eHealth/ICD10_AM/condition_codes 

        1. Перевірити, що код діагнозу з CONDITIONS_ICD10_AM_ALLOWED

          1. в разі помилки - повернути 422 “Encounter in context has no primary diagnosis allowed for the medical program“

    3. Якщо вказано параметр CONDITIONS_ICPC2_ALLOWED, то:

      1. Перевірити що первинні діагнози зі взаємодії в контексті має код з довідника eHealth/ICPC2/condition_codes 

        1. Перевірити, що код діагнозу з CONDITIONS_ICPC2_ALLOWED

          1. в разі помилки - повернути 422 “Encounter in context has no primary diagnosis allowed for the medical program“

Перевірити множинність та запит на рецепт дозволений учасникам

...

  • Згенерувати номер для рецепту (See specs)

    Code Block
    Structure number XXXX-1234-5678-9012-345-C , where:
    - XXXX - series: numbers + only some letters (A, E, H, K, M, P, T, X)
    - 1234-5678-9012-345 - randomly generated numbers
    - C - checksum: Should be calculated using the Damn algorithm or Verhoeff algorithm
    After new Request number was generated we should check that it is unique in the DB (entity: medication_request + medication_request_request
    • Згенерувати verification_code для MPI.person_authentication_methods == OTP або OFFLINE

      Code Block
      Structure code 1234, where:
      - 1234 - randomly generated numbers 


...

  • Згенерувати структуру даних відповіді для веб-сервісу

    • Встановити структуру для IL.medication_request_requests 

  • якщо відповідь VALID доповнити відповідь urgent_data:

    • отримати authetification_method по person_id та повернути зашифрований номер (в будь-якому випадку)

Code Block
"urgent": {
    "authentication_method_current": {
      "type": "OTP",
      "number": "+38093*****85"
    }
  }