Re-KYC » History » Version 1
prin methirattanasophon, 03/25/2026 03:36 AM
| 1 | 1 | prin methirattanasophon | # Re-KYC (Foreign) |
|---|---|---|---|
| 2 | |||
| 3 | **1. Objective** |
||
| 4 | To enable users to update their personal information in order to maintain compliance with ongoing regulatory requirements. |
||
| 5 | |||
| 6 | **2. Environment & Routing** |
||
| 7 | - Environment: UAT |
||
| 8 | - Page Route: https://uat.finansiaportal.com/authentication/re-kyc/foreign |
||
| 9 | |||
| 10 | |||
| 11 | **3. Data Source** |
||
| 12 | User identification and authorization data are securely extracted from the Bearer Token. |
||
| 13 | |||
| 14 | Token (Decoded): |
||
| 15 | |key|type|description|value| |
||
| 16 | |--|--|--|--| |
||
| 17 | |CustomerType|int|Identifies the classification of the customer based on the system enumeration|1| |
||
| 18 | |||
| 19 | **4.Customer Type Enumeration** |
||
| 20 | The CustomerType integer maps to the following defined constants: |
||
| 21 | ``` |
||
| 22 | const ( |
||
| 23 | CustomerTypeIndividual CustomerType = iota + 1 // Value: 1 |
||
| 24 | CustomerTypeForeigner // Value: 2 |
||
| 25 | CustomerTypeCorporate // Value: 3 |
||
| 26 | ) |
||
| 27 | ``` |
||
| 28 | |||
| 29 | **5. API Specification** |
||
| 30 | This section defines the API endpoints used in the Re-KYC process. The process is divided into two main steps: Initialization and Submission. |
||
| 31 | |||
| 32 | ***5.1 Initialize Re-KYC Information (Init)***: |
||
| 33 | Used to retrieve or initialize the customer's current KYC information before they make updates. |
||
| 34 | - Method: POST |
||
| 35 | - Path: /api/v1/customer/info/rekyc/info |
||
| 36 | - payload: {} |
||
| 37 | |||
| 38 | Headers: |
||
| 39 | |key|value|description| |
||
| 40 | |--|--|--| |
||
| 41 | |Authorization|Bearer {token}|Access token extracted from the user's session.| |
||
| 42 | |||
| 43 | ***5.2 Submit Re-KYC Information (Submit)***: |
||
| 44 | Used to submit the user's updated KYC information to the system. |
||
| 45 | - Method: POST |
||
| 46 | - Path: /api/v1/customer/info/rekyc/update |
||
| 47 | |||
| 48 | Headers: |
||
| 49 | |key|value|description| |
||
| 50 | |--|--|--| |
||
| 51 | |Authorization|Bearer {token}|Access token extracted from the user's session.| |
||
| 52 | |||
| 53 | Payload: |
||
| 54 | |key|type|description| |
||
| 55 | |--|--|--| |
||
| 56 | |info|object|| |
||
| 57 | |info.fullname|string|| |
||
| 58 | |info.registerId|string|| |
||
| 59 | |info.customerCode|number|| |
||
| 60 | |info.birthdate|string|| |
||
| 61 | |info.age|number|| |
||
| 62 | |info.marriageStatus|string|| |
||
| 63 | |info.countryOfIncome|string|| |
||
| 64 | |info.education|string|| |
||
| 65 | |info.occupation|string|| |
||
| 66 | |info.office|string|| |
||
| 67 | |info.businessType|string|| |
||
| 68 | |info.position|string|| |
||
| 69 | |info.salary|string|| |
||
| 70 | |info.sourceOfIncome|string|| |
||
| 71 | |info.passportNumber|string|| |
||
| 72 | |investmentObjectives|object|| |
||
| 73 | |investmentObjectives.registerId|string|| |
||
| 74 | |investmentObjectives.shortTermInvestment|boolean|| |
||
| 75 | |investmentObjectives.longTermInvestment|boolean|| |
||
| 76 | |investmentObjectives.taxesInvestment|boolean|| |
||
| 77 | |investmentObjectives.retireInvestment|boolean|| |
||
| 78 | |fatca|object|| |
||
| 79 | |fatca.form|object|| |
||
| 80 | |fatca.form.registerId|string|| |
||
| 81 | |fatca.form.isFatca|boolean|| |
||
| 82 | |fatca.form.fatcaInfo|string|| |
||
| 83 | |fatca.form.isKnowLedgeDone|boolean|| |
||
| 84 | |fatca.form.knowLedgeTestResult|number|| |
||
| 85 | |fatca.w8|object / null|| |
||
| 86 | |fatca.w9|object / null|| |
||
| 87 | |suiteTest|object|| |
||
| 88 | |suiteTest.answers|array[string]|| |
||
| 89 | |suiteTest.result|object|| |
||
| 90 | |suiteTest.result.id|string|| |
||
| 91 | |suiteTest.result.registerId|string|| |
||
| 92 | |suiteTest.result.totalScore|number|| |
||
| 93 | |suiteTest.result.level|number|| |
||
| 94 | |suiteTest.result.investorTypeRisk|string|| |
||
| 95 | |suiteTest.result.additional|string|| |
||
| 96 | |suiteTest.result.answers|array[string] / null|| |
||
| 97 | |investorType|object|| |
||
| 98 | |investorType.investorType|number|| |
||
| 99 | |investorType.investorDocumentType|string|| |
||
| 100 | |investorType.investorTypeKnowledge|string|| |
||
| 101 | |investorType.filePath|string|| |
||
| 102 | |selfIdentification|object|| |
||
| 103 | |selfIdentification.passportNumber|string|| |
||
| 104 | |||
| 105 | |||
| 106 | Workflow: |
||
| 107 | <img style="width: 608px;" src="clipboard-202603250954-ladcm.png"><br> |
||
| 108 | |||
| 109 | ``` |
||
| 110 | @startuml rekyc_sequence |
||
| 111 | |||
| 112 | actor "Foreign Citizen" as u |
||
| 113 | participant "ReKYC Page" as f |
||
| 114 | participant "Backend API" as b |
||
| 115 | database "Database" as d |
||
| 116 | database "Session Storage" as s |
||
| 117 | participant "Appman" as a |
||
| 118 | |||
| 119 | activate u |
||
| 120 | activate f |
||
| 121 | |||
| 122 | group "User info and income" |
||
| 123 | u -> f: access reKYC page |
||
| 124 | f -> b: POST: api/v1/customer/info/rekyc/info |
||
| 125 | activate b |
||
| 126 | b->d: get user data |
||
| 127 | activate d |
||
| 128 | d --> b: |
||
| 129 | deactivate d |
||
| 130 | b --> f: user data |
||
| 131 | deactivate b |
||
| 132 | f->s: store user data in session |
||
| 133 | f --> u: display user data and reKYC form |
||
| 134 | end |
||
| 135 | |||
| 136 | group "Suitability test" |
||
| 137 | u -> f: click "do suitability test" |
||
| 138 | f --> u: redirect to suitability test page |
||
| 139 | u-> f: submit suitability test |
||
| 140 | f->s: update session store |
||
| 141 | f --> u: redirect to reKYC page |
||
| 142 | end |
||
| 143 | |||
| 144 | group "Verification" |
||
| 145 | u->f: click "do verification" |
||
| 146 | f -> b: init appman session |
||
| 147 | activate b |
||
| 148 | b -> a: create appman session |
||
| 149 | activate a |
||
| 150 | a --> b: |
||
| 151 | deactivate a |
||
| 152 | b --> f: appman session id |
||
| 153 | deactivate b |
||
| 154 | f -> a: user do verification on appman page |
||
| 155 | activate a |
||
| 156 | a --> f: |
||
| 157 | deactivate a |
||
| 158 | f -> b: sent appman result |
||
| 159 | activate b |
||
| 160 | b -> a: check appman result |
||
| 161 | activate a |
||
| 162 | a --> b: |
||
| 163 | deactivate a |
||
| 164 | b -> d: store verification result |
||
| 165 | activate d |
||
| 166 | d --> b: |
||
| 167 | deactivate d |
||
| 168 | b --> f: verification result |
||
| 169 | deactivate b |
||
| 170 | f -> s: update session store |
||
| 171 | f --> u: redirect to reKYC page with verification result |
||
| 172 | end |
||
| 173 | |||
| 174 | group "Form Submission" |
||
| 175 | u -> f: fill passport number |
||
| 176 | u -> f: select investor type and upload document |
||
| 177 | u -> f: submit form |
||
| 178 | f->s: update session store with form data |
||
| 179 | f -> b: POST: /api/v1/customer/info/rekyc/update |
||
| 180 | activate b |
||
| 181 | b -> d: store reKYC form data |
||
| 182 | activate d |
||
| 183 | d --> b: |
||
| 184 | deactivate d |
||
| 185 | b --> f: submission result |
||
| 186 | deactivate b |
||
| 187 | f --> u: display submission result |
||
| 188 | end |
||
| 189 | |||
| 190 | deactivate f |
||
| 191 | deactivate u |
||
| 192 | |||
| 193 | @enduml |
||
| 194 | ``` |