# 02-Comprehensive-Guide



02-Comprehensive-Guide [#02-comprehensive-guide]

Originator: Sender's Data Type [#originator-senders-data-type]

<Mermaid
  chart="graph LR
%% Scenario 1: Natural Person
	subgraph Originator1 [Originator1 - Sender is a natural person]
		direction LR
		O1((Originator)) -- &#x22;Sender account data bundle&#x22; --> OP1[originatorPersons]
		O1 -- &#x22;Sender account wallet address&#x22; --> AN1[accountNumber]
		OP1 -- &#x22;Individual user (KYC Info)&#x22; --> NP1(naturalPerson)
	end

%% Scenario 2: Legal Entity (Single CEO)
	subgraph Originator2 [Originator2 - Sender is a legal entity Single CEO]
		direction LR
		O2((Originator)) -- &#x22;Sender account data bundle&#x22; --> OP2[originatorPersons]
		O2 -- &#x22;Sender account wallet address&#x22; --> AN2[accountNumber]
		OP2 -- &#x22;Legal user (KYB info)&#x22; --> LP2(legalPerson)
		OP2 -- &#x22;CEO of the entity (KYB info)&#x22; --> NP2(naturalPerson)
	end

%% Scenario 3: Legal Entity (Multi CEO)
	subgraph Originator3 [Originator3 - Sender is a legal entity Multi CEO]
		direction LR
		O3((Originator)) -- &#x22;Sender account data bundle&#x22; --> OP3[originatorPersons]
		O3 -- &#x22;Sender account wallet address&#x22; --> AN3[accountNumber]
		OP3 -- &#x22;Legal user (KYB info)&#x22; --> LP3(legalPerson)
		OP3 -- &#x22;CEO 1 of the entity (KYB info)&#x22; --> NP3a(naturalPerson)
		OP3 -- &#x22;CEO 2 of the entity (KYB info)&#x22; --> NP3b(naturalPerson)
		NP3b -.-> Extra[&#x22;Add as many 'naturalPerson' as needed&#x22;]
	end

%% Styling to match the original image colors
	style NP1 fill:#f8d7da,stroke:#842029
	style NP2 fill:#f8d7da,stroke:#842029
	style NP3a fill:#f8d7da,stroke:#842029
	style NP3b fill:#f8d7da,stroke:#842029
	style LP2 fill:#d1ecf1,stroke:#0c5460
	style LP3 fill:#d1ecf1,stroke:#0c5460"
/>

Beneficiary: Recipient's Data Type [#beneficiary-recipients-data-type]

<Mermaid
  chart="graph LR
%% Scenario 1: Natural Person Recipient
	subgraph Beneficiary1 [Beneficiary1 - Recipient is a natural person]
		direction LR
		B1((Beneficiary)) -- &#x22;Recipient account data bundle&#x22; --> BP1[beneficiaryPersons]
		B1 -- &#x22;Recipient account wallet address&#x22; --> AN1[accountNumber]
		BP1 -- &#x22;User-entered info&#x22; --> NP1(naturalPerson)
	end

%% Scenario 2: Legal Entity Recipient (Single CEO)
	subgraph Beneficiary2 [Beneficiary2 - Recipient is a legal entity Single CEO]
		direction LR
		B2((Beneficiary)) -- &#x22;Recipient account data bundle&#x22; --> BP2[beneficiaryPersons]
		B2 -- &#x22;Recipient account wallet address&#x22; --> AN2[accountNumber]
		BP2 -- &#x22;User-entered info&#x22; --> LP2(legalPerson)
		BP2 -- &#x22;User-entered info&#x22; --> NP2(naturalPerson)
	end

%% Scenario 3: Legal Entity Recipient (Multi CEO)
	subgraph Beneficiary3 [Beneficiary3 - Recipient is a legal entity Multi CEO]
		direction LR
		B3((Beneficiary)) -- &#x22;Recipient account data bundle&#x22; --> BP3[beneficiaryPersons]
		B3 -- &#x22;Recipient account wallet address&#x22; --> AN3[accountNumber]
		BP3 -- &#x22;User-entered info&#x22; --> LP3(legalPerson)
		BP3 -- &#x22;User-entered info&#x22; --> NP3a(naturalPerson)
		BP3 -- &#x22;User-entered info&#x22; --> NP3b(naturalPerson)
		NP3b -.-> Extra[&#x22;Add as many 'naturalPerson' as needed&#x22;]
	end

%% Styling to match the visual cues
	style NP1 fill:#f8d7da,stroke:#842029
	style NP2 fill:#f8d7da,stroke:#842029
	style NP3a fill:#f8d7da,stroke:#842029
	style NP3b fill:#f8d7da,stroke:#842029
	style LP2 fill:#d1ecf1,stroke:#0c5460
	style LP3 fill:#d1ecf1,stroke:#0c5460"
/>

'Legal to Legal' Deposit/Withdraw Guide [#legal-to-legal-depositwithdraw-guide]

<Mermaid
  chart="graph LR
    %% Main Bundle
    ivms101([&#x22;ivms101<br/>(Travel Rule messaging bundle)&#x22;])

    %% Originator Path (01)
    ivms101 --- Originator[&#x22;Originator<br/>(Sender account data bundle)&#x22;]
    Originator --- originatorPersons[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
    originatorPersons --- OP_LP[&#x22;legalPerson<br/>(Legal entity (KYB info))&#x22;]
    originatorPersons --- OP_NP1[&#x22;naturalPerson<br/>(CEO 1 of the entity(KYB info))&#x22;]
    originatorPersons --- OP_NP2[&#x22;naturalPerson<br/>(CEO 2 of the entity(KYB info))&#x22;]
    Originator --- OP_AN[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]

    %% Beneficiary Path (02)
    ivms101 --- Beneficiary[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;]
    Beneficiary --- beneficiaryPersons[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
    beneficiaryPersons --- BP_LP[&#x22;legalPerson<br/>(User-entered info)&#x22;]
    beneficiaryPersons --- BP_NP1[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
    beneficiaryPersons --- BP_NP2[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
    Beneficiary --- BP_AN[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]

    %% VASP Info
    ivms101 --- OriginatingVASP[&#x22;OriginatingVASP<br/>(Origin VASP legal entity info)&#x22;]
    ivms101 --- BeneficiaryVASP[&#x22;BeneficiaryVASP<br/>(Beneficiary VASP legal entity info)&#x22;]

    %% Styling to match image
    style ivms101 fill:#fff,stroke:#333,stroke-width:2px
    style OP_LP fill:#e0f7fa,stroke:#00acc1
    style BP_LP fill:#e0f7fa,stroke:#00acc1
    style OP_NP1 fill:#fce4ec,stroke:#d81b60
    style OP_NP2 fill:#fce4ec,stroke:#d81b60
    style BP_NP1 fill:#fce4ec,stroke:#d81b60
    style BP_NP2 fill:#fce4ec,stroke:#d81b60"
/>

To do when withdraw [#to-do-when-withdraw]

1. Acquire necessary information
   1. The originator information is populated using the data stored in our database, which was obtained during the KYB process.
   2. The 'dateOfBirth' field under the 'naturalPerson' of the originator entity is not required. The recipient information is obtained from the customer.
   3. The 'dateOfBirth' field under the recipient entity's 'naturalPerson' is not required.
   4. Required data may differ by the counterparty VASP's policy. Check their policy before sending legal entity Travel Rule information.
2. Check for counterparty VASP's policy
   1. Transfers involving legal entity may differ by country regulations and each VASP's internal policy.
      1. e.g) Korean regulation: Beneficiary  CEO('naturalPerson') info under 'legalPerson' of Beneficiary is also required
      2. e.g) VASP policy: Some VASPs allow transfers between 1st-party only.
      3. e.g) VASP policy: Some VASPs may require all information of CEO for multi-CEO entity

To do when deposit [#to-do-when-deposit]

1. Save sender account data
   1. Please store it to comply with the Travel Rule.
   2. Make sure it is properly mapped to data such as TxID or Transfer ID.
2. Legal entity check
   1. Verify if 'legalPerson' exists in the originator or beneficiary data.
3. Query user data
   1. Based on the accountNumber (recipient wallet address), retrieve from our legal entity customer database.
   2. The data obtained through KYB during the customer's onboarding process must be stored in advance.
4. Check internal policy
   1. Verify whether our policy allows deposits for the 'legal to legal' type.
   2. Review which data fields must match (entity info, representative info, or both).
   3. If multiple representatives exist, check whether all or at least one must match.
5. Verify beneficiary data and our user data
   1. Representative information of a legal entity is often obtained during the KYB process rather than through a separate KYC procedure.
   2. Text mismatches may occur due to naming format differences

'Legal to Natural' Deposit/Withdraw Guide [#legal-to-natural-depositwithdraw-guide]

<Mermaid
  chart="graph LR
    %% Root Node
    ivms101([&#x22;ivms101<br/>(Travel Rule messaging bundle)&#x22;])

    %% Originator Branch (Legal Entity)
    ivms101 --- Originator[&#x22;Originator<br/>(Sender account data bundle)&#x22;]
    Originator --- originatorPersons[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
    originatorPersons --- OP_LP[&#x22;legalPerson<br/>(Legal user (KYB info))&#x22;]
    originatorPersons --- OP_NP1[&#x22;naturalPerson<br/>(CEO 1 of the entity(KYB info))&#x22;]
    originatorPersons --- OP_NP2[&#x22;naturalPerson<br/>(CEO 2 of the entity(KYB info))&#x22;]
    Originator --- OP_AN[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]

    %% Beneficiary Branch (Natural Person)
    ivms101 --- Beneficiary[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;]
    Beneficiary --- beneficiaryPersons[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
    beneficiaryPersons --- BP_NP[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
    Beneficiary --- BP_AN[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]

    %% VASP Info
    ivms101 --- OriginatingVASP[&#x22;OriginatingVASP<br/>(Origin VASP legal entity info)&#x22;]
    ivms101 --- BeneficiaryVASP[&#x22;BeneficiaryVASP<br/>(Beneficiary VASP legal entity info)&#x22;]

    %% Styling
    style ivms101 fill:#fff,stroke:#333,stroke-width:2px
    style OP_LP fill:#e0f7fa,stroke:#00acc1
    style OP_NP1 fill:#fce4ec,stroke:#d81b60
    style OP_NP2 fill:#fce4ec,stroke:#d81b60
    style BP_NP fill:#fce4ec,stroke:#d81b60"
/>

To do when withdraw [#to-do-when-withdraw-1]

1. Acquire necessary information
   1. The originator information is populated using the data stored in our database, which was obtained during the KYB process.
   2. The 'dateOfBirth' field under the 'naturalPerson' of the originator entity is not required.
      The recipient information is obtained from the customer.
   3. The 'dateOfBirth' field under the recipient entity's 'naturalPerson' is not required.
2. Check for counterparty VASP's policy
   1. Check if the counterparty accepts deposits from legal entities or only allows first-party transfers.

To do when deposit [#to-do-when-deposit-1]

1. Save sender account data
   1. Please store it to comply with the Travel Rule.
   2. Make sure it is properly mapped to data such as TxID or Transfer ID.
2. Legal entity check
   1. Verify if 'legalPerson' exists in the originator or beneficiary data.
3. Query user data
   1. Based on the accountNumber (recipient wallet address), retrieve from our legal entity customer database.
4. Check internal policy
   1. Verify whether our policy allows deposits for the 'legal to natural ' type.
5. Verify beneficiary data and our user data
   1. Verify if the Travel Rule recipient data matches our customer's KYC data.
   2. Adding a name-order switching logic (first ↔ last) can increase match accuracy.

'Natural to Legal' Deposit/Withdraw Guide [#natural-to-legal-depositwithdraw-guide]

<Mermaid
  chart="graph LR
    %% Main Root
    ivms101([&#x22;ivms101<br/>Travel Rule messaging bundle&#x22;])

    %% Originator Section (01)
    subgraph sg01 [&#x22;01&#x22;]
        Originator[&#x22;Originator<br/>(Sender account data bundle)&#x22;]
        originatorPersons[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
        orig_naturalPerson[&#x22;naturalPerson<br/>(Individual user (KYC info))&#x22;]
        orig_accountNumber[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]

        Originator --> originatorPersons
        Originator --> orig_accountNumber
        originatorPersons --> orig_naturalPerson
    end

    %% Beneficiary Section (02)
    subgraph sg02 [&#x22;02&#x22;]
        Beneficiary[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;]
        beneficiaryPersons[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
        bene_legalPerson[&#x22;legalPerson<br/>(User-entered info)&#x22;]
        bene_naturalPerson1[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        bene_naturalPerson2[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        bene_accountNumber[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]

        Beneficiary --> beneficiaryPersons
        Beneficiary --> bene_accountNumber
        beneficiaryPersons --> bene_legalPerson
        beneficiaryPersons --> bene_naturalPerson1
        beneficiaryPersons --> bene_naturalPerson2
    end

    %% VASP Info
    OriginatingVASP[&#x22;OriginatingVASP<br/>(Origin VASP legal entity info)&#x22;]
    BeneficiaryVASP[&#x22;BeneficiaryVASP<br/>(Beneficiary VASP legal entity info)&#x22;]

    %% Central Connections
    ivms101 --- Originator
    ivms101 --- Beneficiary
    ivms101 --- OriginatingVASP
    ivms101 --- BeneficiaryVASP

    %% Styling
    style ivms101 fill:#fff,stroke:#333,stroke-width:2px
    style orig_naturalPerson fill:#fce4ec,stroke:#d81b60
    style bene_naturalPerson1 fill:#fce4ec,stroke:#d81b60
    style bene_naturalPerson2 fill:#fce4ec,stroke:#d81b60
    style bene_legalPerson fill:#e0f7fa,stroke:#00acc1
    style OriginatingVASP fill:#e0f7fa,stroke:#00acc1
    style BeneficiaryVASP fill:#e0f7fa,stroke:#00acc1
    
    %% Subgraph Styling
    style sg01 fill:#fafafa,stroke:#999,stroke-width:1px
    style sg02 fill:#fafafa,stroke:#999,stroke-dasharray: 5 5"
/>

To do when withdraw [#to-do-when-withdraw-2]

1. Acquire necessary information
   1. The originator information is populated using the data stored in our database, which was obtained during the KYB process.
   2. The 'dateOfBirth' field under the 'naturalPerson' of the originator entity is not required. The recipient information is obtained from the customer.
   3. The 'dateOfBirth' field under the recipient entity's 'naturalPerson' is not required.
   4. Required data may differ by the counterparty VASP's policy. Check their policy before sending legal entity Travel Rule information.
2. Check for counterparty VASP's policy
   1. Transfers involving legal entity may differ by country regulations and each VASP's internal policy.
      1. e.g) Korean regulation: Beneficiary  CEO('naturalPerson') info under 'legalPerson' of Beneficiary is also required
      2. e.g) VASP policy: Some VASPs allow transfers between 1st-party only.
      3. e.g) VASP policy: Some VASPs may require all information of CEO for multi-CEO entity

Tips [#tips]

'naturalPerson' Data Source [#naturalperson-data-source]

<Mermaid
  chart="graph LR
    %% Scenario 1: Individual Originator
    subgraph S1 [&#x22;Individual Originator (Sender)&#x22;]
        direction LR
        O1[&#x22;Originator<br/>(Sender account data bundle)&#x22;] --> OP1[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
        O1 --> AN1[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]
        OP1 --> NP1[&#x22;naturalPerson<br/>(Individual user (KYC Info))&#x22;]
        
        %% Note for S1
        Note1[KYC completed]
        NP1 -.-> Note1
    end

    %% Scenario 2: Legal Entity Originator
    subgraph S2 [&#x22;Legal Entity Originator (Sender)&#x22;]
        direction LR
        O2[&#x22;Originator<br/>(Sender account data bundle)&#x22;] --> OP2[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
        O2 --> AN2[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]
        OP2 --> LP2[&#x22;legalPerson<br/>(Legal user (KYB info))&#x22;]
        OP2 --> NP2[&#x22;naturalPerson<br/>(CEO of the entity (KYB info))&#x22;]
        
        %% Note for S2
        Note2[KYB completed]
        NP2 -.-> Note2
    end

    %% Scenario 3: Individual Beneficiary
    subgraph S3 [&#x22;Individual Beneficiary (Recipient)&#x22;]
        direction LR
        B3[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;] --> BP3[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
        B3 --> AN3[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]
        BP3 --> NP3[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        
        %% Note for S3
        Note3[From the origin VASP's withdrawal UI]
        NP3 -.-> Note3
    end

    %% Scenario 4: Legal Entity Beneficiary
    subgraph S4 [&#x22;Legal Entity Beneficiary (Recipient)&#x22;]
        direction LR
        B4[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;] --> BP4[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
        B4 --> AN4[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]
        BP4 --> LP4[&#x22;legalPerson<br/>(User-entered info)&#x22;]
        BP4 --> NP4[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        
        %% Note for S4
        Note4[From the origin VASP's withdrawal UI]
        NP4 -.-> Note4
    end

    %% Global Styling
    classDef natural fill:#fce4ec,stroke:#d81b60,stroke-width:1px
    classDef legal fill:#e0f7fa,stroke:#00acc1,stroke-width:1px
    classDef bundle fill:#f5f5f5,stroke:#333,stroke-width:2px
    classDef note fill:none,stroke:none,font-style:italic

    class NP1,NP2,NP3,NP4 natural
    class LP2,LP4 legal
    class O1,O2,B3,B4 bundle
    class Note1,Note2,Note3,Note4 note"
/>

When the Originator is a 'naturalPerson' [#when-the-originator-is-a-naturalperson]

* The 'naturalPerson' information comes from the KYC database

When the Originator is a 'legalPerson' [#when-the-originator-is-a-legalperson]

* The 'naturalPerson' information comes from the KYB database
* When processing and saving the data:
  * Collect both local and English names.
  * Store the first name and last name separately.
  * Design a refined fallback process for name verification.

When the Beneficiary is a 'naturalPerson' [#when-the-beneficiary-is-a-naturalperson]

* The 'naturalPerson' information comes from the origin VASP's withdrawal UI
* It was entered by the user.

When the Beneficiary is a 'legalPerson' [#when-the-beneficiary-is-a-legalperson]

* The 'naturalPerson' information comes from the origin VASP's withdrawal UI
* May require multiple name input fields

'naturalPerson' Date of Birth [#naturalperson-date-of-birth]

<Mermaid
  chart="graph LR
    %% Scenario 1: Individual Originator
    subgraph S1 [&#x22;Individual Originator (Sender)&#x22;]
        direction LR
        O1[&#x22;Originator<br/>(Sender account data bundle)&#x22;] --> OP1[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
        O1 --> AN1[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]
        OP1 --> NP1[&#x22;naturalPerson<br/>(Individual user (KYC Info))&#x22;]
        NP1 --> DOB1[&#x22;'dateOfBirth' <b style='color:red'>Required</b>&#x22;]
    end

    %% Scenario 2: Legal Entity Originator
    subgraph S2 [&#x22;Legal Entity Originator (Sender)&#x22;]
        direction LR
        O2[&#x22;Originator<br/>(Sender account data bundle)&#x22;] --> OP2[&#x22;originatorPersons<br/>(Sender account info)&#x22;]
        O2 --> AN2[&#x22;accountNumber<br/>(Sender account wallet address)&#x22;]
        OP2 --> LP2[&#x22;legalPerson<br/>(Legal user (KYB info))&#x22;]
        OP2 --> NP2[&#x22;naturalPerson<br/>(CEO of the entity (KYB info))&#x22;]
        NP2 --> DOB2[&#x22;'dateOfBirth' Optional&#x22;]
    end

    %% Scenario 3: Individual Beneficiary
    subgraph S3 [&#x22;Individual Beneficiary (Recipient)&#x22;]
        direction LR
        B3[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;] --> BP3[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
        B3 --> AN3[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]
        BP3 --> NP3[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        NP3 --> DOB3[&#x22;'dateOfBirth' Optional&#x22;]
    end

    %% Scenario 4: Legal Entity Beneficiary
    subgraph S4 [&#x22;Legal Entity Beneficiary (Recipient)&#x22;]
        direction LR
        B4[&#x22;Beneficiary<br/>(Recipient account data bundle)&#x22;] --> BP4[&#x22;beneficiaryPersons<br/>(Recipient account info)&#x22;]
        B4 --> AN4[&#x22;accountNumber<br/>(Recipient account wallet address)&#x22;]
        BP4 --> LP4[&#x22;legalPerson<br/>(User-entered info)&#x22;]
        BP4 --> NP4[&#x22;naturalPerson<br/>(User-entered info)&#x22;]
        NP4 --> DOB4[&#x22;'dateOfBirth' Optional&#x22;]
    end

    %% Styling to match the visual cues
    classDef natural fill:#fce4ec,stroke:#d81b60,stroke-width:1px
    classDef legal fill:#e0f7fa,stroke:#00acc1,stroke-width:1px
    classDef bundle fill:#f5f5f5,stroke:#333,stroke-width:2px
    classDef dob fill:#333,color:#fff,stroke:none

    class NP1,NP2,NP3,NP4 natural
    class LP2,LP4 legal
    class O1,O2,B3,B4 bundle
    class DOB1,DOB2,DOB3,DOB4 dob"
/>
