Advisor Onboarding Blueprint
Registration and onboarding process for independent financial advisors with CID approval and mandate signing
| Feature | advisor-onboarding |
| Category | Workflow |
| Version | 1.0.0 |
| Tags | advisor-registration, approval-workflow, financial-services |
| YAML Source | View on GitHub |
| JSON API | advisor-onboarding.json |
Actors
| ID | Name | Type | Description |
|---|---|---|---|
advisor | Advisor | human | |
onboarding_officer | Onboarding Officer | human | |
cid_officer | CID Officer | human | |
esignature_service | eSignature Service | external |
Fields
| Name | Type | Required | Label | Description |
|---|---|---|---|---|
onboarding_id | number | Yes | Validations: required | |
identification_number | text | Yes | Validations: required, unique | |
passport_number | text | No | ||
first_name | text | Yes | Validations: required, maxLength | |
last_name | text | Yes | Validations: required, maxLength | |
email | Yes | Validations: required, email | ||
mobile_phone | phone | Yes | Validations: required, phone | |
advisor_code | text | Yes | Validations: required, pattern | |
status | select | Yes | Validations: required | |
cancellation_reason | text | No | ||
envelope_id | text | No |
States
State field: status
Values:
| State | Initial | Terminal |
|---|---|---|
initiated | Yes | |
in_progress | ||
waiting_approval | ||
approved | ||
mandate_signing | ||
mandate_signed | Yes | |
cancelled | Yes | |
expired | Yes |
Rules
- validation: ID and passport must be unique in system, Valid email and phone required, Advisor code format alphanumeric 6-10 chars
- permissions: Onboarding-Activ8 creates and manages, Onboarding-CID approves, Advisor views own onboarding
SLA
| Scope | Max Duration | Escalation |
|---|---|---|
| max_duration | 30d |
Outcomes
Create_advisor_onboarding_duplicate (Priority: 0) — Error: DUPLICATE_IDENTITY
Given:
- ANY:
identification_number(db) exists ORpassport_number(db) exists
Then:
- emit_event event:
validation.duplicate_found
Result: Error duplicate found
Create_advisor_onboarding (Priority: 1)
Given:
identification_number(input) existsemail(input) existsadvisor_code(input) existsclient.role(session) eqOnboarding-Activ8
Then:
- create_record target:
onboarding - emit_event event:
onboarding.created
Result: Advisor onboarding created
Send_to_approval (Priority: 3)
Given:
onboarding_id(input) existsstatus(db) ininitiated,in_progressidentification_number(db) existsclient.role(session) eqOnboarding-Activ8
Then:
- transition_state field:
statusfrom:in_progressto:waiting_approval - emit_event event:
approval.submitted
Result: Sent for CID approval
Cid_approve_onboarding (Priority: 4)
Given:
onboarding_id(input) existsstatus(db) eqwaiting_approvalclient.role(session) eqOnboarding-CID
Then:
- transition_state field:
statusfrom:waiting_approvalto:approved - emit_event event:
approval.granted
Result: CID approved onboarding
Complete_onboarding_mandate (Priority: 5)
Given:
onboarding_id(input) existsstatus(db) eqapprovedclient.role(session) eqOnboarding-Activ8
Then:
- transition_state field:
statusfrom:approvedto:mandate_signing - set_field target:
envelope_idvalue:generated - emit_event event:
mandate.generated
Result: Mandate sent to eSignature service
Handle_mandate_signed (Priority: 6)
Given:
onboarding_id(input) existsstatus(db) eqmandate_signingenvelope_status(input) eqsigned
Then:
- transition_state field:
statusfrom:mandate_signingto:mandate_signed - emit_event event:
mandate.signed
Result: Mandate signed, onboarding complete
Get_advisor_onboarding (Priority: 10)
Given:
onboarding_id(input) existsclient.role(session) inOnboarding-Activ8,Onboarding-CID
Then:
- emit_event event:
onboarding.retrieved
Result: Returns advisor onboarding data
Update_advisor_onboarding (Priority: 11)
Given:
onboarding_id(input) existsstatus(db) ininitiated,in_progressclient.role(session) eqOnboarding-Activ8
Then:
- set_field target:
updated_atvalue:now - emit_event event:
onboarding.updated
Result: Advisor onboarding updated
Cancel_advisor_onboarding (Priority: 12)
Given:
onboarding_id(input) existscancellation_reason(input) existsstatus(db) not_inmandate_signed,cancelledclient.role(session) eqOnboarding-Activ8
Then:
- transition_state field:
statusfrom:currentto:cancelled - set_field target:
cancellation_reasonvalue:from_input - emit_event event:
onboarding.cancelled
Result: Onboarding cancelled
Get_creator_onboardings (Priority: 20)
Given:
client.role(session) eqOnboarding-Activ8
Then:
- emit_event event:
list.retrieved
Result: Returns created onboardings
Get_cid_onboardings (Priority: 21)
Given:
client.role(session) eqOnboarding-CID
Then:
- emit_event event:
list.retrieved
Result: Returns pending approvals
Errors
| Code | Status | Message | Retry |
|---|---|---|---|
ONBOARDING_NOT_FOUND | 404 | Onboarding not found | No |
DUPLICATE_IDENTITY | 409 | Advisor with this identity exists | No |
INVALID_STATUS_TRANSITION | 400 | Invalid status transition | No |
MISSING_REQUIRED_FIELD | 400 | Required field missing | No |
INVALID_EMAIL_FORMAT | 400 | Invalid email | No |
INVALID_PHONE_FORMAT | 400 | Invalid phone | No |
UNAUTHORIZED_ACCESS | 403 | Unauthorized | No |
INVALID_ADVISOR_CODE | 400 | Invalid advisor code | No |
DOCU_SIGN_ERROR | 500 | eSignature service error | No |
MANDATE_GENERATION_FAILED | 500 | Mandate generation failed | No |
Events
| Event | Description | Payload |
|---|---|---|
onboarding.created | Advisor onboarding created | onboarding_id |
onboarding.retrieved | Onboarding retrieved | onboarding_id |
onboarding.updated | Onboarding updated | onboarding_id |
onboarding.cancelled | Onboarding cancelled | onboarding_id |
validation.duplicate_found | Duplicate found | identification_number |
approval.submitted | Submitted for approval | onboarding_id |
approval.granted | Approval granted | onboarding_id |
mandate.generated | Mandate generated | onboarding_id |
mandate.signed | Mandate signed | onboarding_id |
list.retrieved | List retrieved | filter |
Related Blueprints
| Feature | Relationship | Reason |
|---|---|---|
| client-onboarding | recommended | |
| proposals-quotations | optional | |
| user-auth | required |