Purpose
This WS is designed to change status of contract request to PENDING_NHS_SIGN by legal entity side. After the contract was approved by NHS side (status=APPROVED) MSP employee can change status of contract request and approve it from his side.
Design
TBD
Specification
Validation
Validate token
- Verify the validity of access token
- Return 401 in case validation fails
- Check if token is not expired
- in case error return 401 - "Token is expired"
Validate user
extract user_id from token
extract client_id from token
- Check if user is active
- in case error return 403 - (user is not active)
- check contractor_legal_entity is active
- in case error return 403 - (Client is not active)
- Validate $client_id=contractor_legal_entity_id.
- in case of error return 403 - Client is not allowed to modify contract_request
Validate scopes
- Check user scopes in order to perform this action (scope = 'contract_requests:approve')
- Return 403 in case invalid scope(s) "Your scope does not allow to access this resource. Missing allowances: contract_requests:approve"
Validate data
- Validate contract request id.
- Check contract_requests.id = $.id
- in case error return 404 ("Contract request with id=$id doesn't exist")
- Check contract_requests.id = $.id
- Validate contract_request.status=APPROVED
- in case error return 409 - "Incorrect status of contract request to modify it"
- Validate contractor_legal_entity_id
- Legal_entities.id = $.contractor_legal_entity_id and Legal_entities.status='ACTIVE' and legal_entities.nhs_verified = true
- in case error return 422 ("Legal entity in contract request should be active")
- Legal_entities.id = $.contractor_legal_entity_id and Legal_entities.status='ACTIVE' and legal_entities.nhs_verified = true
- Validate contractor_owner_id
- Employee is_active=true and status='APPROVED' and employees.legal_entity_id=contractor_legal_entity_id
- in case error return 422, $contractor_owner_id (Contractor owner must be active within current legal entity in contract request)
- Employee is_active=true and status='APPROVED' and employees.legal_entity_id=contractor_legal_entity_id
- Validate contractor_divisions
- Check divisions belongs to legal_entity and divisions.status='active'
- in case of error return 422 error view $divisions ('Division must be active and within current legal_entity')
- Check divisions belongs to legal_entity and divisions.status='active'
- For capitation only: Validate contractor_employee_divisions
- Employees from employee_divisions has employee_type='DOCTOR', status='APPROVED'
- in case of error return 422 error view $employee ('Employee must be an active DOCTOR')
- Check contractor_employee_divisions.division_id is present in contractor_divisions.id
- in case of error return 422 error $divisions ('The division is not belong to contractor_divisions')
- Employees from employee_divisions has employee_type='DOCTOR', status='APPROVED'
- Validate start_date
- start_date > now()
- in case error return 422 $start_date ("Contract request start date should be in future")
- start_date > now()
- For reimbursement only: Validate medical_program_id is ACTIVE
Response
Save response data to DB
set status='PENDING_NHS_SIGN'
Mapping
field | value |
---|---|
updated_by | $.user_id |
updated_at | now() |
status | PENDING_NHS_SIGN |
Add to event manager
After status was changed (status = APPROVED, DECLINED, PENDING_NHS_SIGN, TERMINATED or SIGNED) - add new status to event_manager
field | value |
---|---|
event_type | StatusChangeEvent |
entity_type | Contract_request |
entity_id | $.id |
properties.status. | $.status |
event_time | $.update_at |
changed_by | $.user_id |
inserted_at | now() |
updated_at | now() |