Purpose
This process describes approving previously created Confidant Person relationship request.
Key points
This WS is used to approve Confidant Person relationship requests for creating new or deactivating existing confidant person relationships.
Confidant Person relationship requests flow is based on
action
field of request.
Specification
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 =
confidant_person_relationship_request:write
)Return (403, 'Your scope does not allow to access this resource. Missing allowances: confidant_person_relationship_request:write') in case of invalid scope(s)
Validation
Validate Person
Get person_id from URL
Validate person status is active (status = ‘active' & is_active = 'true’)
in case of error - return 404 ('Person is not found')
Validate request
Check that confidant person relationship request from URL exists in https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17613422609/IL#confidant_person_relationship_requests table with person_id = person_id from URL
in case of error - return 404 ('Confidant person relationship request is not found')
Check that confidant person relationship request from URL has status = NEW
in case of error - return 409 ('Invalid transition')
Check absence of extra parameters from request
in case of error - return 422 ('schema does not allow additional properties')
Validate OTP
Based on value of authentication_method_current.type
of confidant person relationship request:
if type = OTP - invoke OTP Verification module to verify OTP that is submitted in
$.verification_code
fieldin case of error - return 403 ('Invalid verification code')
if type = OFFLINE - proceed to Check uploaded documents
Check uploaded documents
Get list of document types that must be uploaded to media content storage in documents_relationship
field of confidant person relationship request.
If list is empty - skip validation
If list is not empty - check that documents were uploaded, using Media Content Storage
in case of error - return 409 ('Document <<document_types_to_upload>> is not uploaded') with types of documents that must be uploaded to media content storage
Service logic
Create or deactivate confidant person relationship
Based on action field of confidant person relationship request:
Create confidant person relationship (action = INSERT)
Create confidant person relationship between person and confidant person:
Call /wiki/spaces/CSI/pages/17612832814 , set values:
person_id = confidant_person_relationship_request.person_id
confidant_person_id = confidant_person_relationship_request.confidant_person_id
verification_status = “VERIFICATION_NEEDED”
verification_reason based on relationship document:
if
documents_relationship
contains document with type BIRTH_CERTIFICATE, set verification_reason = “ONLINE_TRIGGERED”if
documents_relationship
does not contain document with type BIRTH_CERTIFICATE, set verification_reason = “MANUAL_CREATED_BY_DOCTOR”
confidant_person_relationship_documents = confidant_person_relationship_request.confidant_person_relationship.documents_relationship
In case if persons age < person_full_legal_capacity_age years old:
calculate relationship_expiration_date - date when person becomes person_full_legal_capacity_age years old
check if $.active_to <= relationship_expiration_date
if true - set active_to = $.active_to
if false or $.active_to = null - set active_to = relationship_expiration_date
Check existence of authentication method with type = THIRD_PERSON, value = confidant_person_id from request, is_active = true and ended_at > now() or null
if not found - create authentication method for person, set values:
id = autogenerate uuid
person_id = confidant_person_relationship_request.person_id
type = THIRD_PERSON
value = confidant_person_relationship_request.confidant_person_id
inserted_at = now()
updated_at = now()
started_at = now()
ended_at: if person.age < person_full_legal_capacity_age
ended_at = birth_date + person_full_legal_capacity_age - 1d
else ended_at = start_date + third_person_term global parameter
inserted_by = user_id (from token)
updated_by = user_id (from token)
If found - do not create authentication method for person
Deactivate confidant person relationship (action = DEACTIVATE)
Deactivate existing confidant person relationship for person:
Deactivate relationship record in relationship https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17613488166/MPI#confidant_person_relationships table where id =
confidant_person_relationship_id
and is_active = true, set values:active_to = now()
updated_at = now()
updated_by = user_id (from token)
Save documents from documents_relationship field to https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17613488166/MPI#confidant_person_relationship_documents table for deactivated confidant person relationship, set values:
id = autogenerate uuid
confidant_person_relationship_id =
confidant_person_relationship_id
of deactivated relationshiptype =
documents_relationship[i].type
number =
documents_relationship[i].number
issued_at =
documents_relationship[i].issued_at
issued_by =
documents_relationship[i].issued_by
inserted_by = user_id (from token)
updated_by = user_id (from token)
inserted_at = now()
updated_at = now()
For deactivated relationship - deactivate person authentication methods in https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17613488166/MPI#person_authentication_methods table with type = THIRD_PERSON and value =
confidant_person_relationships.confidant_person_id
, set values:ended_at = now()
updated_at = now()
updated_by = user_id (from token)
Update confidant person relationship request
Update confidant person relationship request in https://e-health-ua.atlassian.net/wiki/spaces/CSI/pages/17613422609/IL#confidant_person_relationship_requests table, set values:
status = COMPLETED
updated_at = now()
updated_by = user_id (from token)
confidant_person_relationship_id = confidant_person_relationship.id of created relationship (from action = INSERT)