Table of Contents |
---|
...
Page Properties | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Logic
...
Input parameters
ATTRIBUTES - see on Apiary
...
No
Request structure
See on Apiary
Example:
Expand | ||
---|---|---|
| ||
|
...
Validate request according to JSON Schema
Return 422 with list of validation errors in case validation fails.
Request data validation
Validate container_dosage field
$.container_dosage - volume of a medication’s primary container, which is requested by a doctor or issuer of a medication request, to be dispensed to patient.
Validate $.container_dosage field by schemata
$.container_dosage.code and $.container_dosage.value should be both filled
in case of error return 422 error ("required property %{property} was not present")
$.container_dosage.system should be “MEDICATION_UNIT”
in case of error return 422 error ("value is not allowed in enum")
if $.container_dosage is filled then $.container_dosage.unit should be checked with the MEDICATION_UNIT dictionary by $.container_dosage.code as a key.in case of error return 422 error ("value is not allowed in enum")
Validate priority
Check by schemata if $.priority is filled with the value of MEDICATION_REQUEST_PRIORITY dictionary
in case of error return 422 error ("value is not allowed in enum")
Validate prior_prescription
Check that $.prior_prescription is UUID, exists and belongs to this person:
is_active = true, and the same person.
in case of error - return 422 (message: "Prior prescription is not found")
Validate employee
Validation of an employee for the possibility of creating a medication request.
Invoke employee_id from request
Validate employee
Validate that exists
in case invalid return 422 error with msg ("Employee not found")
Validate that $.employees.status == APPROVED
in case invalid return 409 error with msg ("Employee is not active")
Validate that $.employees.legal_entity_id == client_id from token
in case invalid return 422 error with msg ("Employee does not belong to legal entity from token")
If medical program has medical_program_settings.skip_employee_validation == false (or absent), then validate <employee_type>:
validate if employee_type is present in medical_program_settings.employee_types_for_create_medication_request variable
in case invalid return 422 error with msg ("Employee type can't create medication request with medical program from request")
in case employee_type = DOCTOR
if variable skip_medication_request_employee_declaration_verify = false or null/absent
then: get $.declarations by employee_id, person_id, status=ACTIVE
if not found - return 422 error "Only doctors with an active declaration with the patient can create medication request with medical program from request!"
else skip declaration verification on employee level (if true)
if variable skip_medication_request_legal_entity_declaration_verify = false or null/absent
then: get $.declarations by employee's legal_entity_id, person_id, status=ACTIVE
if not found - return 422 error "Only legal entity with an active declaration with the patient can create medication request with medical program from request!"
else skip declaration verification on legal entity level (if true)
else if both are true - skip declaration verification at all
in case employee_type = SPECIALIST
get $.employees.speciality.speciality(speciality_officio == true)
validate that speciality present in $.medical_programs.medical_program_setting.speciality_types_allowed variable
in case invalid return 422 error with msg ("Employee's specialty doesn't allow create medication request with medical program from request")
in case employee_type = MED_COORDINATOR
skip validation that speciality present in $.medical_programs.medical_program_setting.speciality_types_allowed variable
If medical program has medical_program_settings with medical_program_settings.skip_employee_validation == true any user who has a scope can create medication request
...
Validate that created_at, started_at, ended_at in date format
in case invalid return 422 with msg ("expected \"%{actual}\" to be a valid ISO 8601 date")
Validate ended_at >= started_at
if invalid - return 422 error (message: "Ended date must be >= Started date!")
Validate started_at` >= created_at
if invalid - return 422 error (message: "Started date must be >= Created date!")
Validate started_at >= current_date()
if invalid - return 422 error (message: "Started date must be >= current date!")
Validate created_at >= current_date() - MEDICATION_REQUEST_REQUEST_DELAY_INPUT chart param
if invalid - return 422 error (message: "Create date must be >= Current date - MRR delay input!")
Validate started_at regarding frequency of receiving drugs
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: PreQualify Medication request: 2. Check absence the same medications for the programs
in case skip_mnn_in_treatment_period == TRUE
skip validating frequency of receiving drugs
Validate created_at regarding frequency of receiving drugs
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: PreQualify Medication request: 2. Check absence the same medications for the programs
in case skip_mnn_in_treatment_period == TRUE
skip validating frequency of receiving drugs
Validate period length (ended_at - started_at):
If medical program has been submitted:
validate request according to logic: PreQualify Medication request: 7. Validate period
else:
Check that medication request period less than or equal to MEDICATION_REQUEST_MAX_PERIOD_DAY parameter from charts
in case of error - return 409 “Period length exceeds default maximum value“
...
Verify Care plan:
It should belong to the same person as set in MRR
in case of error return 422 with msg ("Care plan not found")
It should be in active status
Verify submitted Activity:
It belongs to the Care plan.
in case of error return 422 with msg ("Activity not found")
It has activity.detail.kind=medication_request; activity.detail.product_reference=medication_id.
in case of error return 422 with msg ("Invalid activity kind")
It has scheduled, in_progress status.
in case of error return 422 with msg ("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"
check that medical_program_id equal to $.activity[].program
in case of error return 422 with msg ("Medical program from activity should be equal to medical program from request")
Validate started_at/ended_at of Medication request Request:
if care plan activity has detail.scheduled_timing.repeat.bounds_period - validate started_at/ended_at within bounds_period
if care plan activity has detail.scheduled_period - validate started_at/ended_at within scheduled_period
else - validate started_at/ended_at
crossingwithin care_plan.periodin the case of started_at/ended_at is not within care_plan.period return 422 with msg ("Invalid care plan period")
...
Validate medical_program_id is present in the request
in case of error return 422 ("required property medical_program_id was not present")
Validate medical_program_id - medical_program_id exists
in case of error return 422 ("Medical program not found")
Validate medical_programs.medical_program_setting parameters
check if care_plan_required == true then the request should contain a based_on with care plan and activity that contains the same medical program
in case of error return 422 with msg ("Care plan and activity with the same medical program should be present in request")
If there is conditions_icd10_am_allowed parameter, then:
Check if primary diagnosis from the encounter in context has code from eHealth/ICD10_AM/condition_codes dictionary
Check diagnosis code in conditions_icd10_am_allowed
in case of error - return 422 “Encounter in context has no primary diagnosis allowed for the medical program“
If there is conditions_icpc2_allowed parameter, then:
Check if primary diagnosis from the encounter in context has code from eHealth/ICPC2/condition_codes dictionary
Check diagnosis code in conditions_icpc2_allowed
in case of error - return 422 “Encounter in context has no primary diagnosis allowed for the medical program“.
if skip_medication_request_employee_declaration_verify = false or null/absent
then: get $.declarations by employee_id, person_id, status=ACTIVE
if not found - return 422 error "Only doctors with an active declaration with the patient can create medication request!"
else skip declaration verification on employee level (if true).
if skip_medication_request_legal_entity_declaration_verify = false or null/absent
then: get $.declarations by employee's legal_entity_id, person_id, status=ACTIVE
if not found - return 422 error "Only legal entity with an active declaration with the patient can create medication request!"
else skip declaration verification on legal entity level (if true).
If medical program has funding_source = LOCAL , then invoke validation described at PreQualify Medication request request | 11.-Check-provision-for-a-programs
...
set:
dispense_valid_from = created_at
dispensed_valid_to = dispensed_valid_from + dispense_period
Fill 'data' structure for Response & save in IL.medication_request_requests
If encounter is present in the request context then based on it - fill the IL.medication_request_requests.context_episode_id
Fill separately
data_employee_id,
data_intent,
data_based_on_care_plan_id,
data_based_on_activity_id,
data_context_id,
data_patient_id,
data_legal_entity_id
Generate content for response
...
Code Block |
---|
"urgent": { "authentication_method_current": { "type": "OTP", "number": "+38093*****85" } } |
Response structure
See on Apiary
Example:
Expand | ||
---|---|---|
| ||
|
...