Overview
Procedure can be registered in eHealth as a part of encounter pckg or service request or just by itself. This WS is designed to create a new procedure separately from encounter pckg or service request.
Procedure should be registered in the system after it was performed for a patient.
Requirements
Specification
- Apiary
Validations
Authorization
- 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 = 'procedure:write')
- Return (403, 'invalid scopes') in case of invalid scope(s)
Validate digital signature
Decode content that is encrypted in an electronic digital signature.
Use Digital signature WS. Method checks digital signature and returns result.
See service specification
1. Ensure that digital signature is valid
2. Validate that requester of service request is a current user
2.1. Get token metadata
- Extract user_id, client_id, client_type
2.2. Determine the party_id associated with this user_id
SELECT pu.party_id FROM party_users pu WHERE pu.user_id = :user_id;
2.3. Determine employees related to this party_id in current MSP
SELECT e.id FROM employees e WHERE e.party_id = :party_id AND e.legal_entity_id = :client_id;
2.4 Ensure that $.requester.identifier.value matches with user employees
3. Validate that DS belongs to the requester of encounter
3.1. Determine the party_id associated with requester ($.requester.identifier.value)
SELECT p.tax_id FROM employees e, parties p WHERE e.party_id = p.id AND e.id = :requester;
Validate request using JSON Schema
Return 422 with the list of validation errors in case validation fails
Validate procedure
- Validate that procedure ID is unique
- $.id must be unique
- in case of error return 409 - "Procedure with such id already exists"
- $.id must be unique
- Validate status
- Procedure status must refer to a certain dictionary (values: entered_in_error, not_done, completed)
- in case error return 422, "Status not in the dictionary"
- Procedure status must refer to a certain dictionary (values: entered_in_error, not_done, completed)
- Validate status_reason
- If status = 'not_done' check if status reason is provided
- in case error return 422, "Status reason is mandatory for not done procedure"
- If status = 'not_done' check if status reason is provided
- Validate encounter
- encounter id exists
- encounter status in ()
- Validate datetime
- datetime <= now
- in case error return 409 "Procedure cannot be registered in future"
- datetime <= now
Service logic
- Save signed content to media storage
- Save data to corresponding collection in DB
- Save link to the signed content in service request storage