Table of Contents |
---|
...
Verify Care plan:
It should be in active status
in case of error - return 409 (message: "Care plan is not active")
Care plan's period end (if exist) should be greater than current date or equal.
in case of error - return 409 (message: “Care plan expired“)
Verify care plan Activity:
It has scheduled, in_progress status
in case of error - return 409 (message: "Invalid activity status")
If it has quantity then calculate remaining quantity:
select all MRR in status NEW which based on current activity
select all MR in statuses ACTIVE, COMPLETED based on current activity
calculate reserved at the moment medication quantity as sum of medication_qty in the filtered MRR and MR list, including medication_qty from current MRR
calculate remaining quantity by subtracting reserved quantity from activity quantity
Check remaining quantity is greater then or equal to zero
in case of error return 409 "The total amount of the prescribed medication quantity exceeds quantity in care plan activity"
Validate division
If division_id submitted:
Validate division is active
in case of error - return 409 ("Division is not active")
Validate division belongs to user's legal entity
in case of error - return 409 ("Division does not belong to user's legal entity")
If chart parameter DISPENSE_DIVISION_DLS_VERIFY is on, then validate division is DLS verified (dls_verified=true)
in case of error - return 409 "Division is not verified in DLS"
If chart parameter MEDICAL_PROGRAM_PROVISION_VERIFY, then check division provide each submitted program. For each medical program provision validate:
it is exist and active:
in case of error - return 409 ("Division is not provide the medical program")
it relate to the actual reimbursement contract: contract.start_date <= current_date <= contract.end_date, is_active = true, status = VERIFIED.
in case of error - return 409 ("Medical program provision is not actual for the current date")
Logic for qualify (analyze compliance with programs)
...
Check INNM_dosage compliance for the programs
Applies to the following programs:
Dostupni liky
Netsukrovyy diabet
Insuliny z doplatoyu
Insuliny bezoplatno
Epilepsiya
Rozlady psykhiky ta povedinky
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.
Get info from Medication request by id in payload, set temp variable object `_MR`
Validate the compatibility of innm with the medication program list
if data is not found:
add to response: status = INVALID
add to response: rejection_reason = "Innm not on the list of approved innms for program '#{program.name}"
|
Check absence a same medication for the programs
...
Dostupni liky
Netsukrovyy diabet
Insuliny z doplatoyu
Insuliny bezoplatno
Epilepsiya
Rozlady psykhiky ta povedinky
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
Example validation: without crossing time
P | Preconditions # 1 | Result validate #1 | Preconditions #2 | Result validate #2 | Preconditions #3 | Result validate #2 |
---|---|---|---|---|---|---|
PreQualifyMedicationRequestRequest | No records in | OK | Create record in | Not valid | Medications request | Not valid |
QualifyMedicationRequestByID | No records in | Not possible | Create record in | OK | Medications request | Not valid |
For info - status charts: Medication Request Status Chart & Medication Dispense Status Chart
Get `check_innm_id`
Code Block SELECT I.innm_child_id FROM ingredients I WHERE I.parent_id = _MR.medication_id AND I.is_primary = TRUE
Get Medication requests with their linked completed Medication dispense by person_id & innm_id
Code Block SELECT * FROM medication_requests MR INNER JOIN medication_dispense MD ON MD.medication_request_id = MR.id AND MD.status IN (PROCESSED) INNER JOIN ingredients I ON I.parent_id = MR.medication_id -- type = INNM_DOSAGE AND I.innm_child_id = `check_innm_id` AND I.is_primary = TRUE WHERE MR.person_id == _MR.person_id AND MR.status IN (ACTIVE, COMPLETED) AND NOT($.started_at> MR.ended_at OR $.ended_at < MR.started_at)
Validate medication request_id
for medication_dispense.medication_request_id !== $.id
Validate exist (IF EXIST () - that is any crossing calculating term (started_at + ended_at) for payload with terms selecting Medication requests with linked Medication dispense (started_at + ended_at)).
if found
get $.medical_programs.medical_program_setting by medical_program_id from request
validate skip_mnn_in_treatment_period variable
in case skip_mnn_in_treatment_period == FALSE (or absent)
validate request according to logic:
add to response: status = INVALID
add to response: rejection_reason = "For the patient at the same term there can be only 1 dispensed medication request per one and the same innm!"
in case skip_mnn_in_treatment_period == TRUE
skip validating frequency of receiving drugs
for medication_dispense.medication_request_id = $.id
Validate medication request qty: sum(medication_dispenses.medication_qty) >= medication_request.medication_qty
if found
add to response: status = INVALID
add to response: rejection_reason = "Sum of dispense's medication quantity can not be more then medication_request.medication_qty"
...