Project

General

Profile

Re-KYC » History » Revision 2

Revision 1 (prin methirattanasophon, 03/25/2026 03:36 AM) → Revision 2/4 (prin methirattanasophon, 03/25/2026 04:07 AM)

# Re-KYC (Foreign) 

 **1. Objective** 
 To enable users to update their personal information in order to maintain compliance with ongoing regulatory requirements. 

 --- 

 **2. Environment & Routing** 
  - Environment: UAT 
  - Page Route: https://uat.finansiaportal.com/authentication/re-kyc/foreign 

 --- 

 


 **3. Data Source** 
 User identification and authorization data are securely extracted from the Bearer Token. 

 Token (Decoded): 
 |key|type|description|value| 
 |--|--|--|--| 
 |CustomerType|int|Identifies the classification of the customer based on the system enumeration|1| 

 --- 

 **4.Customer Type Enumeration** 
 The CustomerType integer maps to the following defined constants: 
 ``` 
 const ( 
	 CustomerTypeIndividual CustomerType = iota + 1 // Value: 1 
	 CustomerTypeForeigner                            // Value: 2 
	 CustomerTypeCorporate                            // Value: 3 
 ) 
 ``` 
 --- 

 **5. API Specification** 
 This section defines the API endpoints used in the Re-KYC process. The process is divided into two main steps: Initialization and Submission. 

 ***5.1 Initialize Re-KYC Information (Init)***: 
 Used to retrieve or initialize the customer's current KYC information before they make updates. 
 - Method: POST 
 - Path: /api/v1/rekyc/foreign/info /api/v1/customer/info/rekyc/info 
 - payload: {} 

 Headers: 
 |key|value|description| 
 |--|--|--| 
 |Authorization|Bearer {token}|Access token extracted from the user's session.| 

 --- 

 ***5.2 Submit Re-KYC Information (Submit)***: 
 Used to submit the user's updated KYC information to the system. 
 - Method: POST 
 - Path: /api/v1/rekyc/foreign/update /api/v1/customer/info/rekyc/update 

 Headers: 
 |key|value|description| 
 |--|--|--| 
 |Authorization|Bearer {token}|Access token extracted from the user's session.| 

 Payload: 
 |key|type|description| 
 |--|--|--| 
 |info|object|| 
 |info.fullname|string|| 
 |info.registerId|string|| 
 |info.customerCode|number|| 
 |info.birthdate|string|| 
 |info.age|number|| 
 |info.marriageStatus|string|| 
 |info.countryOfIncome|string|| 
 |info.education|string|| 
 |info.occupation|string|| 
 |info.office|string|| 
 |info.businessType|string|| 
 |info.position|string|| 
 |info.salary|string|| 
 |info.sourceOfIncome|string|| 
 |info.passportNumber|string|| 
 |investmentObjectives|object|| 
 |investmentObjectives.registerId|string|| 
 |investmentObjectives.shortTermInvestment|boolean|| 
 |investmentObjectives.longTermInvestment|boolean|| 
 |investmentObjectives.taxesInvestment|boolean|| 
 |investmentObjectives.retireInvestment|boolean|| 
 |fatca|object|| 
 |fatca.form|object|| 
 |fatca.form.registerId|string|| 
 |fatca.form.isFatca|boolean|| 
 |fatca.form.fatcaInfo|string|| 
 |fatca.form.isKnowLedgeDone|boolean|| 
 |fatca.form.knowLedgeTestResult|number|| 
 |fatca.w8|object / null|| 
 |fatca.w9|object / null|| 
 |suiteTest|object|| 
 |suiteTest.answers|array[string]|| 
 |suiteTest.result|object|| 
 |suiteTest.result.id|string|| 
 |suiteTest.result.registerId|string|| 
 |suiteTest.result.totalScore|number|| 
 |suiteTest.result.level|number|| 
 |suiteTest.result.investorTypeRisk|string|| 
 |suiteTest.result.additional|string|| 
 |suiteTest.result.answers|array[string] / null|| 
 |investorType|object|| 
 |investorType.investorType|number|| 
 |investorType.investorDocumentType|string|| 
 |investorType.investorTypeKnowledge|string|| 
 |investorType.filePath|string|| 
 |selfIdentification|object|| 
 |selfIdentification.passportNumber|string|| 

 --- 

 **5.3 Initialize Appman (Init Appman)**: 
 Used to initialize the Appman verification process. 
 - Endpoint: /api/v1/rekyc/foreign/appman/init 
 - Method: GET 

 Headers: 
 |key|value|description| 
 |--|--|--| 
 |Content-Type|application/json|| 
 |Authorization|Bearer {token}|| 

 Query Parameters: 
 |key|type|description| 
 |--|--|--| 
 |registerId|string|| 

 --- 

 **5.4 Appman Result**: 
 - Endpoint: /api/v1/rekyc/foreign/appman/result 
 - Method: POST 

 Headers: 
 |key|value|description| 
 |--|--|--| 
 |Content-Type|application/json|| 

 Payload: 
 |key|type|description| 
 |--|--|--| 
 |verifyid|string|| 
 |verified|boolean|| 
 |isMobile|boolean|| 

 Response (200 OK): 
 |key|type|description| 
 |--|--|--| 
 |response|object|| 
 |response.registerId|string|| 

 --- 

 


 Workflow: 
 <img style="width: 608px;" src="clipboard-202603250954-ladcm.png"><br> 

 ``` 
 @startuml rekyc_sequence 

 actor "Foreign Citizen" as u 
 participant "ReKYC Page" as f 
 participant "Backend API" as b 
 database "Database" as d 
 database "Session Storage" as s 
 participant "Appman" as a 

 activate u 
 activate f 

 group "User info and income" 
 u -> f: access reKYC page 
 f -> b: POST: api/v1/customer/info/rekyc/info 
 activate b 
 b->d: get user data 
 activate d 
 d --> b:  
 deactivate d 
 b --> f: user data 
 deactivate b 
 f->s: store user data in session 
 f --> u: display user data and reKYC form 
 end 

 group "Suitability test" 
 u -> f: click "do suitability test" 
 f --> u: redirect to suitability test page 
 u-> f: submit suitability test 
 f->s: update session store 
 f --> u: redirect to reKYC page 
 end 

 group "Verification" 
 u->f: click "do verification" 
 f -> b: init appman session 
 activate b 
 b -> a: create appman session 
 activate a 
 a --> b: 
 deactivate a 
 b --> f: appman session id 
 deactivate b 
 f -> a: user do verification on appman page 
 activate a 
 a --> f:  
 deactivate a 
 f -> b: sent appman result 
 activate b 
 b -> a: check appman result 
 activate a 
 a --> b: 
 deactivate a 
 b -> d: store verification result 
 activate d 
 d --> b: 
 deactivate d 
 b --> f: verification result 
 deactivate b 
 f -> s: update session store 
 f --> u: redirect to reKYC page with verification result 
 end 

 group "Form Submission" 
 u -> f: fill passport number 
 u -> f: select investor type and upload document 
 u -> f: submit form 
 f->s: update session store with form data 
 f -> b: POST: /api/v1/customer/info/rekyc/update 
 activate b 
 b -> d: store reKYC form data 
 activate d 
 d --> b: 
 deactivate d 
 b --> f: submission result 
 deactivate b 
 f --> u: display submission result 
 end 

 deactivate f 
 deactivate u 

 @enduml 
 ```