ЕСОЗ - публічна документація
RC_(CSI-2483,CR-441)_Sign Medication request Request
Purpose
This WS is designed to sign Request fo Medication request (patch). If successful signed - automatically create Medication request.
Specification
Key points
Only authenticated and authorized users with appropriate scope can Sign Medication Request Request (MRR)
Request should be signed with DS.
MRR data should be changed when it has submitted to the method.
Authorize
Verify the validity of access token
in case of error - return 401 (“Invalid access token”) in case of validation fails
Verify that token is not expired
in case of error - return 401 (“Invalid access token”)
Check user scopes in order to perform this action (scope = 'medication_request_request:sign')
return 403 (“Your scope does not allow to access this resource. Missing allowances: medication_request_request:sign”) in case of invalid scope(s)
Validations
Validate employee
Validate employee from the medication request request relates to user from token.
in case of error - return 403 “Only doctor that in Medication request Request can sign it“
Perform another validation described at Create MRR: Validate employee
Validate division
Validate division as described on Create MRR: Validate division
Validate context
Validate division as described on Create MRR: Validate context
Validate medical program
Validate medical_program_id: medical_program_id exists and has medication_request_allowed = true
in case of error return 422 ("Forbidden to create medication request for this medical program!")
Validate existing medication request request
If medical program setting skip_treatment_period = false (absent), then validate division as described on PreQualify Medication request: 2. Check absence the same medications for the programs
Validate digital signature
Decode content that is encrypted in an electronic digital signature.
Use Digital signature WS. Method checks digital signature and returns result.
Validate request status
Purpose validation: Valid ability transition.
For info - status charts: Medication request status model
Get Medication request Request status by $.id
Check status == NEW
if invalid - return 409 error (message: "Invalid status Medication request Request for sign transition!")'
Validate person
Validate person with it’s verification status as described on Create MRR: Validate person
Validate signed content
Purpose validation: Check equality decoded signed content with previously created on IL.db.
Get data
SELECT data FROM medication_request_requests WHERE id = $.id
If they are not equal with decoded signed content - generate 422 error (message: "Signed content does not match the previously created content!")
Validate authorize_with
Get value of THIRD_PERSON_CONFIDANT_PERSON_RELATIONSHIP_CHECK
config parameter, if it is set to true
:
If
authorize_with
of medication request request is not empty and contains authentication method with type = THIRD_PERSON - validate that person from value is an approved confidant for a person from request – exists active and approved confidant person relationship between person from request and person_id from authentication method value (using following logic: https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17667883028 withperson_id
= person_id from request andconfidant_person_id
= value from auth method - expected:ok, :approved
response)in case of error - return 422 ('Cannot be verified by method with not approved confidant person relationship')
Service Logic
Save signed medication request to media storage
Get url for medication request upload.
Upload signed medication request request to media storage
Parameter | Source |
---|---|
action | GET |
bucket | from MEDIA_STORAGE_MEDICATION_REQUEST_REQUEST_BUCKET chart var |
resource_id | medication_request_id |
resource_name | signed_content |
Create medication request
Create new record in medication_requests with status ACTIVE
if there is existing record in the medication_requests table with the same id and medication_request_request_id, return ok to IL
Mapping (where <rd> = medication_request_request.data )
Destination | Source |
---|---|
id |
|
request_number | <rd>.request_number |
verification_code | <rd>.verification_code |
created_at | <rd>.created_at |
started_at | <rd>.started_at |
ended_at | <rd>.ended_at |
dispense_valid_from | <rd>.dispense_valid_from |
dispense_valid_to | <rd>.dispense_valid_to |
person_id | <rd>.person_id |
employee_id | <rd>.employee_id |
division_id | <rd>.division_id |
medication_id | <rd>.medication_id |
medication_qty | <rd>.medication_qty |
medical_program_id | <rd>.medical_program_id |
status | ACTIVE |
is_active | true |
recall_at | NULL |
recalled_by |
NULL |
recall_reason |
NULL |
request_for_medication_request_id | $.id |
inserted_at | :timestamp |
inserted_by | user_id |
updated_at | :timestamp |
updated_by | user_id |
intent | <rd>.intent |
category | <rd>.category |
context | <rd>.context |
dosage_instructions | <rd>.dosage_instructions |
container_dosage | <rd>.container_dosage |
priority | <rd>.priority |
prior_prescription | <rd>.prior_prescription |
authorize_with | <rd>.authorize_with |
Generate printout form
Invoke ael.api in order to render MEDICATION_REQUEST_TEMPLATE
Template parameters
Parameter | Source |
---|---|
bar code
| request_number |
| created_at |
| dispense_valid_to |
| program.name |
| person.short_name |
| person.age |
| medication.name |
| medication_qty |
| started_at |
| ended_at |
| dosage_instruction_text |
| employee.short_name |
| employee.phone_number |
| legal_entity.name |
| division.name |
| legal_entity.address |
| legal_entity.edrpou |
| legal_entity.license |
| legal_entity.license.license_number |
| legal_entity.license.what_licensed |
| legal_entity.license.issued_date |
| legal_entity.license.issued_by |
| legal_entity.license.active_from_date |
| legal_entity.license.expiry_date |
| legal_entity.license.order_no |
| person.authentication_method |
| program.mr_blank_type getFromDictionary(<rd>.container-dosage.unit;'MR_BLANK_TYPES') |
<% funding_source = get_in(assigns, ~w(program funding_source)a) %>
<%= if funding_source = "PERSON" do %>повна оплата пацієнтом<% else if funding_source in ["NHS", "LOCAL"]) %>з доплатою/безоплатно<% else %><% end %> | program.funding_source
|
<%= if funding_source == "PERSON" do %><% else %><%= if funding_source in ["NHS", "LOCAL"] do %>
<tr>
<td>Власник програми:</td>
<td><%=get_in(assigns, ~w(program funding_source_text)a) %></td>
</tr>
<% end %><% end %>
| program.funding_source_text if {program.funding_source}<>"PERSON" then getFromDictionary({program.funding_source},'FUNDING_SOURCE)' else "" endif |
| person.age_unit returns in years ("р.") |
| medication.innm_primary_denumerator_unit getFromDictionary({innm_primary.dosage.denumerator_unit};'MEDICATION_UNIT'), |
| container_dosage.value <rd>container_dosage.value
|
| container_dosage.unit getFromDictionary(<rd>container_dosage.unit;'MEDICATION_UNIT') |
Medication request form example:
Update Medication request Request status
Update Medication request Request:
Send SMS for person
If MR has program with medical program setting request_notification_disabled = true, then don't send SMS.
Else:
Get authentication_method from
authorize_with
(if exists and not empty), else get authentication_method of MPIIf authentication_method == OTP - send SMS:
Generate text SMS (call Man method- templates rendering service with template "TEMPLATE_SMS_FOR_SIGN_MEDICATION_REQUEST".
Sending SMS for MPI
If authentication_method == OFFLINE - set medication_request_request.verification_code to MEDICATION_REQUEST_TEMPLATE
Calculate and set remaining quantity for the activity
If the medication request request is based on activity with quantity:
recalculate and set remaining_quantity for the activity as described at PreQualify Medication Request: 6.Check Care Plan and Activity (p. 2.d )
ЕСОЗ - публічна документація