Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Purpose

This WS is designed to qualify Medication request (post) - check the ability to use Medication request within the Medication program and receive program participants

...

Page Properties

Link

https://ehealthmisapi1.docs.apiary.io/#reference/public.-reimbursement/medication-request/qualify-medication-request-by-id

Посилання на Apiary або Swagger

Resource

/api/medication_requests/{{id}}/actions/qualify

Посилання на ресурс, наприклад: /api/persons/create

Scope

medication_request:details

Scope для доступу

Components

ePrescription

Зазначається перелік бізнес компонентів, які використовують цей метод, наприклад: ePrescription

Microservices

API paragraph not found

Перелік мікросервісів, які використовує метод API, наприклад: Auth, ABAC

Protocol type

REST

Тип протоколу, який використовується запитом, наприклад: SOAP | REST

Request type

POST

Тип запиту API, наприклад: GET, POST, PATCH…

Sync/Async

Sync

Метод є синхронним чи асинхронним?

Public/Private/Internal

Public

Logic

API paragraph not found

...

  1. Verify Care plan:

    1. It should be in active status

      1. in case of error - return 409 (message: "Invalid care plan status").

    2. Care plan's period end (if exist) should be greater than current date or equal

      1. in case of error - return 409 (message: “Care plan expired“).

  2. Verify care plan Activity:

    1. It has scheduled, in_progress status

      1. in case of error - return 409 (message: "Invalid activity status").

Validate division

  1. Validate division is active

    1. in case of error - return 409 ("Division is not active")

  2. Validate division belongs to user's legal entity

    1. in case of error - return 409 ("Division does not belong to user's legal entity")

  3. If chart parameter DISPENSE_DIVISION_DLS_VERIFY is on, then validate division is DLS verified (dls_verified=true)

    1. in case of error - return 409 "Division is not verified in DLS"

  4. Check division participates in submitted programs. Validate Provision for each Medical Program:

    1. If the medical program has no setting skip_contract_provision_verify or it is equal to false/null:

      1. if medical program in the request has funding_source one of NHS, LOCAL

        1. In case of error - return status=INVALID for a program, rejection_reason="Program was configured incorrectly. Either incorrect source of funding or option skip_contract_provision_verify"

      2. provision exist and active for the division:

        1. in case of error - return status=INVALID for a program, rejection_reason= "Division does not provide the medical program"

      3. if medical program in the request has funding_source = NHS:

        1. provision relates to the actual reimbursement contract: contract.start_date <= current_date <= contract.end_date, is_active = true, status = VERIFIED, contracts.type==reimbursement, contracts.contractor_legal_entity_id=token.client_id, contracts.medical_program_id==$.medical_program_id

          1. in case of error - return status=INVALID for a program, rejection_reason="Medical program provision is not related to any actual contract for the current date"

        2. contract is_suspended = false

          1. in case of error - return status=INVALID for a program, rejection_reason="Contract with number <contract_number> is suspended"

      4. if medical program in the request has funding_source = LOCAL, then check medical_program_provision.msp_legal_entity_id = medication_request.legal_entity_id

        1. in case of error - return status=INVALID for a program, rejection_reson = "Medical program can not be provided for the legal entity specified in the medication request"

    2. else if skip_contract_provision_verify = true, then skip provision verification for the medical program

  5. Get license_types_allowed parameter from settings of medical program from request $.medical_program_id:

    1. if it is exists and not empty, get list of all license types from parameter.
      Check that division has active healthcare services with following parameters:

      1. legal_entity_id = client_id from access token

      2. division_id = division_id from request

      3. status = 'ACTIVE'

      4. licensed_healthcare_service.status = 'ACTIVE'

      5. healthcare_service.license_id is not null and licenses.type = value from license_types_allowed parameter

        1. in case of error - return status=INVALID for a program, rejection_reason = 'Division does not have active licenses to provide the medical program'

Logic for qualify (analyze compliance with programs)

...

  • Each Medical program may have its unique conditions for the medication dispense. It can be based on analysis of personal info, medications list, terms, locations and combinations of them.

  • For now there are only conditions for the following programs "Dostupni liky", "Netsukrovyy diabet", "Insuliny z doplatoyu", "Insuliny bezoplatno" and we check them.

  • Also, it is possible to have the medication dispense without any Medical program.

  • However for any Medical program we need a separate block of branching logic.

  • Check compatibility only for programs which are available in payload (array)

  • If program status is invalid, the reason must be saved and returned in response

...

Check INNM_dosage compliance for the programs

Applies to the following programs:

  1. Dostupni liky

  2. Netsukrovyy diabet

  3. Insuliny z doplatoyu

  4. Insuliny bezoplatno

Validation purpose:  There is a list of medications (which links to innm_dosage) which can be used for the program. It must be check whether there is at least one available medication for the innm_dosage for the particular program.

...

Check absence a same medication for the programs

Applies to the following programs:

  1. Dostupni liky

  2. Netsukrovyy diabet

  3. Insuliny z doplatoyu

  4. Insuliny bezoplatno

Validation purpose: It could be done several dispenses for one medication request per one innm for one patient until sum(medication_dispenses.medication_qty) < medication_request.medication_qty

...

  • Collect response array for all programs in payload with status for each (VALID or INVALID) and rejection_reason

  • For all VALID programs - Get linked medications (type = BRAND) with reimbursement info 

  • Show only active program medications based on start_date and end (start_date must be earlier or equal to current date or empty, end_date must be greater or equal to current date or empty)

    • Filter participants simultaneously by container_dosage and max_request_dosage

Code Block
SELECT *
FROM program_medications pm
    INNER JOIN ingredients i ON (i.parent_id = pm.medication_id
                                 AND i.medication_child_id = :medication_request_medication_id
                                 AND i.is_primary = TRUE)
    INNER JOIN medications m ON (m.id = pm.medication_id)
WHERE pm.medical_program_id = $.id
      AND pm.is_active = TRUE
      AND m.is_active = TRUE
      AND (pm.start_date <= now() OR pm.start_date IS NULL)
      AND (pm.end_date >= now() OR pm.end_date IS NULL)
 
-- added 2022-05-20:
      AND (
      ((M.container ->> 'numerator_unit' = $mr.container_dosage.code) AND
      (M.container ->> 'numerator_value' <>  $mr.container_dosage.value)) OR
           ( ($mr.dosage_container.code is NULL) AND ($mr.container_dosage.value is NULL) )
        )
      AND (M.max_request_dosage >= $.medication_qty or M.max_request_dosage is null)

...