Purpose
This WS is designed for registration equipments in divisions of legal entities.
Specification
Apiary TBD
Service logic
- Only authenticated and authorized HR, ADMIN employees can register equipments.
- Equipments can be registered in MSP, OUTPATIENT, PRIMARY_CARE and EMERGENCY legal entities.
- Equipment can heave only one active link with division. One division can have many equipments.
- Legal entity can register equipments for its own divisions only.
Authentication
- Verify the validity of access token
- Return 401 in case validation fails
- Check user scopes in order to perform this action (scope = 'equipment:write')
- Return 403 in case invalid scope(s)
Validate request
Validate request using JSON schema (TBD)
Validate legal entity
Check that legal entity is active (status = ACTIVE, SUSPENDED)
- Extract client_id from token (token.client_id == legal_entity_id)
- Check legal entity status (status = ACTIVE, SUSPENDED)
- In case of error - return 409 (Legal entity must be ACTIVE or SUSPENDED)
Validate division
If division_id passed in request body:
- Validate division_id in request body - division exists and is_active = true
- Return 422 in case validation fails
- Check division_id belongs to the same legal_entity_id (from token) as the user
- Return 422 with message "Division is not within current legal entity" in case validation fails.
- Check division status =ACTIVE.
- Return 422 with message "Division is not active" in case validation fails.
Validate type
Validate that an equipment type is a valid value from corresponding dictionary:
- Check type.coding[*].system = "eHealth/equipment_types"
- in case of error "Submitted system is not allowed for this field"
- Check type.coding[*].code value exists in dictionary "eHealth/equipment_types"
- in case of error "Submitted code is not allowed for this field"
Example
"type": { "coding": [ { "system": "eHealth/equipment_types", "code": "MRI" } ] }
Validate external identifier
A legal entity must have only one active equipment with an external_id.
- Check external_id within the legal_entity_id.
- Return 409 (Duplicated equipment) in case such record already exists
Save object to DB
1. equipments table
Parameter | Source | Description |
---|---|---|
id | UUID | Autogenerated |
type | Request: type | Get from request body |
external_id | Request: external_id | Get from request body |
legal_entity_id | Token: client_id | Extract client from token |
status | Const: ACTIVE | By default ACTIVE for new records |
is_active | Const: TRUE | Always TRUE for new records |
inserted_at | Timestamp: now() | Get current date-time |
inserted_by | Token: user_id | Extract user from token |
updated_at | Timestamp: now() | Get current date-time |
updated_by | Token: user_id | Extract user from token |
2. equipment_status_hstr table
Parameter | Source | Description |
---|---|---|
id | UUID | Autogenerated |
equipment_id | UUID | Reference to equipments.id |
status | Const: ACTIVE | By default ACTIVE for new records |
inserted_by | Token: user_id | Extract user from token |
inserted_at | Timestamp: now() | Get current date-time |
3. division_equipment table.
It's filled only if the division_id is submitted.
Parameter | Source | Description |
---|---|---|
id | UUID | Autogenerated |
status | Const: ACTIVE | By default ACTIVE for new records |
division_id | Request: division_id | Get from request body |
equipment_id | UUID | Reference to equipments.id |
is_active | Const: TRUE | Always TRUE for new records |
inserted_at | Timestamp: now() | Get current date-time |
inserted_by | Token: user_id | Extract user from token |
updated_at | Timestamp: now() | Get current date-time |
updated_by | Token: user_id | Extract user from token |