Purpose
API paragraph not found
Specification
Link | |
Resource | /api/service_requests/{{service_request_id}}/actions/use |
Scope | service_request:use |
Components | Service request |
Microservices | API paragraph not found |
Protocol type | REST |
Request type | PATCH |
Sync/Async | Async |
Public/Private/Internal | Public |
Logic
...
Input parameters
Input parameter | Values | Type | Description | Example |
---|---|---|---|---|
service_request_id |
| String | Unique service request identifier |
|
Request structure
See on Apiary
Example:
Expand | ||
---|---|---|
| ||
|
Authorize
Verify the validity of access token
Return (401, 'unauthorized') in case of validation fails
Verify that token is not expired
in case of error - return (401, 'unauthorized')
Check user scopes in order to perform this action (scope = 'service_request:use')
Return (403, 'invalid scopes') in case of invalid scope(s)
Request to process the request using a token in the headers
Headers
Наприклад:
Content-Type:application/json
Authorization:Bearer mF_9.B5f-4.1JqM
api-key:aFBLVTZ6Z2dON1V
Request data validation
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
in case of error return 409 "Action is not allowed for the legal entity"
Validate transition
Only active and unused (released) service request with a specified medical program can be used
Get service request by ID
Service request contains medical program
$.program is NOT NULL
in case of error return 409 "Service request without a program can not be used"
Service request must be active
$.status == "active"
in case of error return 409 "Invalid service request status"
Service request must be unused
$.used_by_legal_enity is empty object
in case of error return 409 "Service request is already used"
Validate program
Validate program is an existing service program (type=service)
in case not found or is_active==false return 422 "Program not found"
in case type!= service return 409 "Invalid program type"
Service(or service_group) is an active member of the program
Select request_allowed, is_active from PRM.program_services where service_id(or group_id) == $.signed_content.code.identifier.value and program_id=$.program.identifier.value
if not found or is_active==false return 409 "Service is not included in the program"
Qualify service request
Validate request
Get token metadata
Extract user_id, client_id, client_type
Ensure that employee belongs to client
$.used_by_employee.identifier.type.coding[*].system == "eHealth/resources"
$.used_by_employee.identifier.type.coding[*].code == "employee"
$.used_by_employee.identifier.value must belong to client_id (prm.employees.legal_entity_id == :client_id)
in case of error return 422 "You can assign service request only to employee within your legal entity"
Check employee_type:
in $.used_by_employee field validate employee_type == DOCTOR, SPECIALIST, ASSISTANT OR LABORANT :
if service_request.category="laboratory_procedure", "diagnostic_procedure" OR "procedure" check employee_type == DOCTOR, SPECIALIST, ASSISTANT OR LABORANT
else employee_type == DOCTOR OR SPECIALIST
in case of error, return 422 "Invalid employee type"
Validate used_by_legal_entity is a current legal_entity
$.used_by_legal_entity.identifier.value==token.client_id
in case of error return 409 "You can assign service request only to your legal entity"
Validate used_by_division
if SR.category = hospitalization
validate used_by_division is sent, in case error return 422, "Division is mandatory for $category category"
validate used_by_division.legal_entity_id = used_by_legal_entity_id
Is SR.category = transfer_of_care
validate used_by_division is sent, in case error return 422, "Division is mandatory for $category category"
Validate $division.legal_entity_id = SR.Performer, in case error return 422, "Patient is transferred to another legal entity"
Processing
Service logic
Update service request attributes
Set Medical Events DB:
If used_by_employee exists in requests set service_requests[<id>].used_by_employee = Request: $.used_by_employee
set service_requests[<id>].used_by_legal_entity = Request: $.used_by_legal_entity
if medical program exists in request
Set Medical Events DB: service_requests[<id>].medical_program = Request: $.medical_program.identifier.value
Change program_processing_status to `in_queue`
Response structure
See on Apiary
Example:
Expand | ||
---|---|---|
| ||
|
Post-processing processes
API paragraph not found
HTTP status codes
HTTP status code | Message | What caused the error |
---|---|---|
202 |
|
|
...