Table of Contents |
---|
Purpose
This WS allows to create a participant of medication program with device type.
Key points
This is a graphQl method used in Administration panel only.
Only authenticated and authorized NHS employee with appropriate scope can create Program device.
Specification
Expand | |||||
---|---|---|---|---|---|
| |||||
|
Expand | |||||
---|---|---|---|---|---|
| |||||
|
Authorization
Verify the validity of access token
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 = 'program_device:write')
Return (403, 'Your scope does not allow to access this resource. Missing allowances: program_device:write') in case of invalid scope(s)
Validate legal entity
Extract client_id from token.
Check legal entity status (status = ACTIVE)
In case of error - return 409 ('client_id refers to legal entity that is not active')
Check client type (type = NHS)
In case of error - return 403 ('You don't have permission to access this resource')
Validate request
Validate device definition submitted in
$.deviceDefinitionId
Check that device definition by id exists in device_definitions table (PRM DB) and is active (is_active = true)
in case of error - return 422 ('Device definition not found')
Validate medical program submitted in
$.medicalProgramId
Check that medical program by id exists in medical_programs table (PRM DB) and is active (is_active = true)
in case of error - return 422 ('Medical program not found')
Check that medical program has type DEVICE
in case of error - return 422 ('Medical program type should be DEVICE')
Validate reimbursement details submitted in
$.reimbursement
If
$.reimbursement.type = FIXED
, than$.reimbursement.reimbursementAmount
field is requiredIf
$.reimbursement.type = PERCENTAGE
, than$.reimbursement.percentageDiscount
field is requiredin case of error - return 422 ('can't be blank')
If
$.reimbursement.percentageDiscount
submitted, check that its value is in range from 0 to 100in case of error - return 422 ('expected the value to be <= 100')
Validate program device start date submitted in
$.startDate
If
$.endDate
is submitted, check that program device start date is lesser than end datein case of error - return 422 ('must be earlier than the end date')
Service logic
Create program device entity in program_devices table in PRM DB with values from input. Also, set values:
id = autogenerate uuid
is_active = true
inserted_at = now()
updated_at = now()
inserted_by = user_id from token
updated_by = user_id from token
Render a response according to specification.