Purpose
This WS is designed to recall previously created Service request.
Specification
Authorization
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 = 'service_request:recall')
return 403 (“Your scope does not allow to access this resource. Missing allowances: service_request:recall”) in case of invalid scope(s)
Validations
Validate request using JSON Schema
Return 422 with the list of validation errors in case validation fails
Validate legal entity
Check legal entity type: it has to be in me_allowed_transactions_le_types config parameter, has status = active and nhs_verified = true
in case of error return 409 "Action is not allowed for the legal entity"
Validate digital signature
Validate request is signed
in case of error - return 400 (“document must be signed by 1 signer but contains 0 signatures”)
Check DS is valid and not expired
Validate that DS belongs to the user
Check that DRFO from DS and party.tax_id matches
in case of error - return 422 (“Does not match the signer drfo“)
Ensure that $.requester.identifier.value matches with user employees
Check if service request based on Care plan if not match:
Determine at least one of the user employees has an active approval on write this Care plan
in case of error - return 409 ('Employees related to this party_id not in current MSP')
Validate transition
Only active service request can be recalled
Get current service request status
Check that status in ('active')
in case of error - return 409 error ('Service request in status %status% cannot be recalled')
Validate cancelation reason
Validate $.reject_reason_code is a value from eHealth/service_request_recall_reasons dictionary
in case of error - return 422 ("value is not allowed in enum")
Validate content
Signed content must match with service request in DB in order to be recalled
Render service request from DB
Exclude $.status_reason and $.explanatory_letter from signed content
Compare rendered service request and signed content
In case both object doesn't match - return 422 ('Signed content doesn't match with previously created service request')
Service logic
Save signed content to media storage
Update service request status to recalled (update also updated_at, updated_by)
Write record to status history
Send SMS to patient (if authentication_method_current == SMS, do NOT send sms in case performer is present in SR)
Async! Revoke all approvals made by this service request
If the service request is based on activity with quantity:
Recalculate and set remaining_quantity for the activity as described at https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17629119560/RC.+PreQualify+Service+Request+EN