Multicurrency Events Lifecycle Guide

This brief guide describes a sample lifecycle for multicurrency account (without term) events. We won't be able to explore everything that can happen in an account, but it should give you a good idea of the major events you can expect in such an account. For clarity, we're focusing on user-initiated transactions. System managed activities, such as Produce Statement and Issuance of Bills, are not shown.

Scenario

In this scenario, we're assuming that the origination/onboarding process which initiates account creation have already happened, and that an API is initiated to create the account.

We'll look at the following lifecycle events:

  • Creation of a multicurrency master account.
  • Creation of a multicurrency sub account.
  • Position transfer, where funds are transferred from one multicurrency sub account to another.
  • Multicurrency account closure.

Lifecycle Diagram

Legend

Multicurrency API box

The API URL that's used to carry out this business process.

API action

API request (typically, a command to perform an operation).

Multicurrency Event box The event type that's emanated. 
Event Business event emanating after the process is completed by the system. 
Business process Business process in the system.
End of business process Completion of the business process in the system. 

Tip: Click diagram to expand.

Multicurrency Lifecycle Diagram

Multicurrency Master Account Creation

API
The API that's used to create the multicurrency account.

POST/ v1.0.0/holdings/accounts/multiCurrencyAccounts

 

Event
The event that's emanated at multicurrency master account creation.

multiCurrency.createAccount.accountCreated

 

Event Payload

baseDetails

Typically contains all the basic account information – – such as the account reference, system name, transaction reference, and the effective date of the event - and is defaulted for all events.

feeDetails Contains the fee definitions for the term deposit. For example, a fee for early (premature) withdrawal. 
accountsBaseDetails Carries the overdraft and dormancy statuses (TBCs can have multiple OD and Dormancy statuses, and are configurable).If the account is a multi-currency (MCY) account, it also carries the MCY details and their individual balances. Not populated if the account is a normal account. 
alternateReferences Carries the list of alternate references that have been recorded for this account as Type/ID pair. 
Sample Code: Multicurrency Master Account Creation Event

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
  "productName": "dddddddd",
  "originalContractDate": "ee",
  "tenor": "dddddddd",
  "maturityDate": "dddddddd",
   "contractAmount": "eeeeeeeeee"
    
    "baseDetails": [
      {
        "contractReference": "DDDDDD",
        "systemReference": "CCCC",
        "companyReference": "BBBBB",
        "eventName": "",
        "baseEventIdentifier": "b",
        "effectiveDate": "ddddddddd",
        "bookingDate": "EEEE",
        "contractCurrency": "AAAAAA",
        "channel": "BBBBBBBB",
        "branch": "eeeeee",
        "lineOfBusiness": "CCCCCCCC",
        "activityDateTimeStamp": "ccccccccc",
        "transactionReference": "ddddd",
        "reversalIndicator": false,
        "originationReference": "",
        "contractStatus": "BBB",
        
        "feeDetails": [
          {
            "feeName": "DDDDDDD",
            "feeAmount": "",
            "feeCurrency": "bbbbb",
            "adjustFeeAmount": "aaaa",
            "adjustFeeReason": ""
          }
        ],
        
      "alternateReferences": [
      {
        "alternateIdType": "eeeeeeeee",
        "alternateId": "CCCCC"
      }
    ],
    "party": [
      {
        "partyReference": "eeeeeeeee",
        "partyRole": "bbbbbbbbb"
      }
    ],
    "repaymentDetails": [
      {
        "effectiveDate": "AAAA",
        "schedules": [
          {
            "repaymentType": "B",
            "description": "ddd",
            "paymentMethod": "AAA",
            "paymentFrequency": "dd",
            "paymentFrequencyDescription": "dddddd",
            "payments": [
              {
                "startDate": "bb",
                "endDate": "EEEEEE",
                "numberOfPayments": "e",
                "calculatedPaymentAmount": "AAA"
              }
            ],
            "nextPaymentDate": "EE"
          }
        ]
      }
    ],
    "limit": [
      {
        "limitKey": "DD",
        "limitReference": "EEEE",
        "limitSerial": "CCCCCCCCC"
      }
    ],
    "interest": [
      {
        "rateName": "bbbb",
        "rateDescription": "",
        "interestConditions": [
          {
            "effectiveDate": "BBB",
            "rateTierType": "CCCC",
            "tierDetails": [
              {
                "fixedRate": "BBBBB",
                "floatingIndex": "D",
                "periodicDetails": [
                  {
                    "periodicIndex": "bbbbb",
                    "periodicType": "cc",
                    "periodicRate": "CCCC",
                    "periodicPeriod": "CCC",
                    "periodicMethod": "",
                    "initialResetDate": "AA",
                    "periodicReset": "AAAAAAA",
                    "nextResetDate": "ccccc"
                  }
                ],
                "margins": [
                  {
                    "marginType": "ccccccc",
                    "marginOperand": "b",
                    "marginRate": "c"
                  }
                ],
                "tierAmount": "E",
                "tierPercent": "",
                "effectiveRate": "cccc",
                "linkedRateIndicator": "BBBBBBBB"
              }
            ]
          }
        ]
      }
    ],
    "settlementDetails": [
      {
        "payinSettlement": [
          {
            "payinPaymentTypes": [
              {
                "payinPaymentType": "aaaaaaaaa",
                "description": "AAA"
              }
            ],
            "payinDetails": [
              {
                "payInPoProduct": "eeeee",
                "payInAccount": "B",
                "payInBeneficiary": "ddd"
              }
            ]
          }
        ],
        "payoutSettlement": [
          {
            "payoutDetails": [
              {
                "payoutAccount": "aaaaaaa",
                "payoutBeneficiary": "eeee",
                "payOutPoProduct": "cccccccc"
              }
            ],
            "payOutPropertyClasses": [
              {
                "propertyClassId": "DDDDDDDD",
                "propertyClassName": "CCC"
              }
            ],
            "payOutProperties": [
              {
                "propertyId": "cc",
                "propertyName": "d"
              }
            ]
          }
        ],
        "defaultSettlementAccounts": [
          {
            "defaultSettlementAccount": ""
          }
        ]
      }
    ],
    "officerDetails": [
      {
        "primaryOfficer": "BBBBBBBBB",
        "otherOfficers": [
          {
            "otherOfficer": "c",
            "otherOfficerRole": ""
          }
        ]
      }
    ],
    "productCategoryId": "dddd",
    "shortTitles": [
      {
        "id":"dddd"
      }
    ],
    "coolingOffDate": "aaaaaaaaa",
    "renewalDate": "EEE"
  }



Multicurrency Sub Account Creation

API
The API that's used to create the multicurrency sub account.

POST/v1.0.0/holdings/accounts/multiCurrencyAccounts/subAccounts

 

Event
The event that's emanated at multicurrency subaccount creation.

multiCurrency.createAccount.accountCreated

 

Event Payload

baseDetails

Typically contains all the basic account information – – such as the account reference, system name, transaction reference, and the effective date of the event - and is defaulted for all events.

feeDetails Contains the fee definitions for the term deposit. For example, a fee for early (premature) withdrawal. 
accountsBaseDetails Carries the overdraft and dormancy statuses (TBCs can have multiple OD and Dormancy statuses, and are configurable).If the account is a multi-currency (MCY) account, it also carries the MCY details and their individual balances. Not populated if the account is a normal account. 
alternateReferences Carries the list of alternate references that have been recorded for this account as Type/ID pair. 
Sample Code: Multicurrency Sub Account Creation


{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
  "productName": "dddddddd",
  "originalContractDate": "ee",
    
    "baseDetails": [
      {
        "contractReference": "DDDDDD",
        "systemReference": "CCCC",
        "companyReference": "BBBBB",
        "eventName": "",
        "baseEventIdentifier": "b",
        "effectiveDate": "ddddddddd",
        "bookingDate": "EEEE",
        "contractCurrency": "AAAAAA",
        "channel": "BBBBBBBB",
        "branch": "eeeeee",
        "lineOfBusiness": "CCCCCCCC",
        "activityDateTimeStamp": "ccccccccc",
        "transactionReference": "ddddd",
        "reversalIndicator": false,
        "originationReference": "",
        "contractStatus": "BBB",
        "accountId": "BBBBB",
        "overdue": "",
        "feeDetails": [
          {
            "feeName": "DDDDDDD",
            "feeAmount": "",
            "feeCurrency": "bbbbb",
            "adjustFeeAmount": "aaaa",
            "adjustFeeReason": ""
          }
        ],
        "balances": [
          {
            "balanceName": "cccccccc",
            "closingBalance": "A",
            "dateType": "A",
            "debitTotalAmount": "",
            "creditTotalAmount": "bbbbbbbb",
            "timeStamp": "dddd"
          }
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "DDDDDDDDD",
        "dormancyStatus": "",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "cccccccc",
            "currency": "ddd",
            "multiCurrencyAccountBalances": [
              {
                "currency": "aaaaaaa",
                "balances": [
                  {
                    "balanceName": "eeeeee",
                    "closingBalance": "",
                    "dateType": "EEEEEE",
                    "debitTotalAmount": "DDDD",
                    "creditTotalAmount": "eeeeeeeee",
                    "timeStamp": "ccccc"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "alternateReferences": [
      {
        "alternateIdType": "eeeeeeeee",
        "alternateId": "CCCCC"
      }
    ],
    "party": [
      {
        "partyReference": "eeeeeeeee",
        "partyRole": "bbbbbbbbb"
      }
    ],
    "repaymentDetails": [
      {
        "effectiveDate": "AAAA",
        "schedules": [
          {
            "repaymentType": "B",
            "description": "ddd",
            "paymentMethod": "AAA",
            "paymentFrequency": "dd",
            "paymentFrequencyDescription": "dddddd",
            "payments": [
              {
                "startDate": "bb",
                "endDate": "EEEEEE",
                "numberOfPayments": "e",
                "calculatedPaymentAmount": "AAA"
              }
            ],
            "nextPaymentDate": "EE"
          }
        ]
      }
    ],
    "limit": [
      {
        "limitKey": "DD",
        "limitReference": "EEEE",
        "limitSerial": "CCCCCCCCC"
      }
    ],
    "interest": [
      {
        "rateName": "bbbb",
        "rateDescription": "",
        "interestConditions": [
          {
            "effectiveDate": "BBB",
            "rateTierType": "CCCC",
            "tierDetails": [
              {
                "fixedRate": "BBBBB",
                "floatingIndex": "D",
                "periodicDetails": [
                  {
                    "periodicIndex": "bbbbb",
                    "periodicType": "cc",
                    "periodicRate": "CCCC",
                    "periodicPeriod": "CCC",
                    "periodicMethod": "",
                    "initialResetDate": "AA",
                    "periodicReset": "AAAAAAA",
                    "nextResetDate": "ccccc"
                  }
                ],
                "margins": [
                  {
                    "marginType": "ccccccc",
                    "marginOperand": "b",
                    "marginRate": "c"
                  }
                ],
                "tierAmount": "E",
                "tierPercent": "",
                "effectiveRate": "cccc",
                "linkedRateIndicator": "BBBBBBBB"
              }
            ]
          }
        ]
      }
    ],
    "settlementDetails": [
      {
        "payinSettlement": [
          {
            "payinPaymentTypes": [
              {
                "payinPaymentType": "aaaaaaaaa",
                "description": "AAA"
              }
            ],
            "payinDetails": [
              {
                "payInPoProduct": "eeeee",
                "payInAccount": "B",
                "payInBeneficiary": "ddd"
              }
            ]
          }
        ],
        "payoutSettlement": [
          {
            "payoutDetails": [
              {
                "payoutAccount": "aaaaaaa",
                "payoutBeneficiary": "eeee",
                "payOutPoProduct": "cccccccc"
              }
            ],
            "payOutPropertyClasses": [
              {
                "propertyClassId": "DDDDDDDD",
                "propertyClassName": "CCC"
              }
            ],
            "payOutProperties": [
              {
                "propertyId": "cc",
                "propertyName": "d"
              }
            ]
          }
        ],
        "defaultSettlementAccounts": [
          {
            "defaultSettlementAccount": ""
          }
        ]
      }
    ],
    "officerDetails": [
      {
        "primaryOfficer": "BBBBBBBBB",
        "otherOfficers": [
          {
            "otherOfficer": "c",
            "otherOfficerRole": ""
          }
        ]
      }
    ],
    "productCategoryId": "dddd",
    "shortTitles": [
      {
        "language": "CCCCCCC",
        "shortTitle": "BBBBBBB"
      }
    ],
    "coolingOffDate": "aaaaaaaaa",
    "renewalDate": "EEE"
  }



Position Transfer

API
The API that's used to transfer funds from one multicurrency sub account to another.

POST/v1.0.0/ holdings/accounts/multiCurrencyAccounts/{multiCurrencyAccountId}/positionTransfers

 

Event
The event that's emanated when a position transfer is made between two multicurrency sub accounts.

multiCurrency.internalSweep.transactionExecuted

 

Event Payload

balances Contains the details of the amount credited, and the balances of the term deposit impacted by funding.
context Carries information if the debit/credit happened within a specific context – for example, if the credit was performed with 100 rolled coins. These are typically used in pricing 0, if the fee is computed based on the number of rolled coins.
Sample Code: Position Transfer Event

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "transactionCurrency": "dddddddd",
    "transactionAmount": "ee",
    "contractAmount": "ccccccccc",
    "baseDetails": [
      {
        "contractReference": "EEEEEEEE",
        "systemReference": "",
        "companyReference": "DDDDDD",
        "eventName": "CCCC",
        "baseEventIdentifier": "BBBBB",
        "effectiveDate": "",
        "bookingDate": "b",
        "contractCurrency": "ddddddddd",
        "channel": "EEEE",
        "branch": "AAAAAA",
        "lineOfBusiness": "BBBBBBBB",
        "activityDateTimeStamp": "eeeeee",
        "transactionReference": "CCCCCCCC",
        "reversalIndicator": false,
        "originationReference": "e",
        "contractStatus": "AAAAAAAAA",
  
        "feeDetails": [
          {
            "feeName": "AAAA",
            "feeAmount": "aaaaaaaaa",
            "feeCurrency": "DDDDDDD",
            "adjustFeeAmount": "",
            "adjustFeeReason": "bbbbb"
          }
        ],
        "context": [
          {
            "contextName": "",
            "contextValue": "AAAA",
            
          }
        ]
      }
    ],
  
    "subAccounts": [
      {
        "subAccount": "",
        "currency": "dddd"
      },
      
    ]
  }
}



Sample Code: Loan Repayment Event Payload

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "baseDetails": [
      {
        "contractReference": "DDDDDD",
        "systemReference": "CCCC",
        "companyReference": "BBBBB",
        "eventName": "",
        "baseEventIdentifier": "b",
        "effectiveDate": "ddddddddd",
        "bookingDate": "EEEE",
        "contractCurrency": "AAAAAA",
        "channel": "BBBBBBBB",
        "branch": "eeeeee",
        "lineOfBusiness": "CCCCCCCC",
        "activityDateTimeStamp": "ccccccccc",
        "transactionReference": "ddddd",
        "reversalIndicator": false,
        "originationReference": "",
        "contractStatus": "BBB",
        "accountId": "BBBBB",
        "overdue": "",
        "feeDetails": [
          {
            "feeName": "DDDDDDD",
            "feeAmount": "",
            "feeCurrency": "bbbbb",
			"adjustFeeAmount": "aaaa",
            "adjustFeeReason": ""
          }
        ],
        "balances": [
          {
            "balanceName": "cccccccc",
            "closingBalance": "A",
            "dateType": "AAAAA",
            "debitTotalAmount": "bbbbbb",
            "creditTotalAmount": "bbbbbbbb",
            "timeStamp": "dddd"
          }
        ]
      }
    ],
	 "numberOfInstallments": "",
     "paymentHolidays": [
	 {
            "paymentType": "B",
            "description": "ddd",
            "billType": "AAA",
            "billTypeDescription": "dd",
            "holidayStartDate": "dddddd",
            "holidayPeriods": [
              {
                "holidayDate": "bb",
                "originalPaymentAmount": "EEEEEE",
                "newPaymentAmount": "FFFF",
                }
            ],
	 
	 "cancelledHolidays": [
	 {
		 
            "cancelledHolidayDate": "EE",
			"cancelledOriginalPaymentAmount": "AAAA",,
			"cancelledNewPaymentAmount": "BBBB",
			
          }
        ]
      }
	  ]
  }
  
}


Close Multicurrency Account

API
The API allows bank customers and bank users to close multicurrency account accounts and pay the payoff balance to other account.

POST/v1.0.0/holdings/accounts/multiCurrencyAccounts/{multiCurrencyAccountId}/accountClosures

 

Event
The event that's emanated after the multicurrency account closure API is executed.

multiCurrency.close.accountClosed

 

Event Payload

contractStatus

Carries a status of 'Closed'.

closureReason Indicates the reason the account was closed. closureNotes displays any notes the officer entered, and closureDate displays the date the account was closed.
Sample Code: Multicurrency Account Closure

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "baseDetails": [
      {
        "contractReference": "DDDDDDD",
        "systemReference": "ccccccc",
        "companyReference": "eee",
        "eventName": "EEEEEEEE",
        "baseEventIdentifier": "",
        "effectiveDate": "DDDDDD",
        "bookingDate": "CCCC",
        "contractCurrency": "BBBBB",
        "channel": "",
        "branch": "b",
        "lineOfBusiness": "ddddddddd",
        "activityDateTimeStamp": "EEEE",
        "transactionReference": "AAAAAA",
        "reversalIndicator": true,
        "originationReference": "dddd",
        "contractStatus": "bbb",
      
        "feeDetails": [
          {
            "feeName": "EEEEEEEE",
            "feeAmount": "AAAAAAA",
            "feeCurrency": "dddddd",
            "adjustFeeAmount": "AAAA",
            "adjustFeeReason": "aaaaaaaaa"
          }
        ],
       
    "closureReason": "cccccccc",
    "closureNotes": "eeeeeeee",
    "closureDate": "eee"
	    "subAccounts": [
          {
            "subAccount":: "EEEEEEEE",
            "currency": "aaaaaaaaa"
          }
        ],
  }
}



Sample Code: Term Deposit Manual Rollover Event

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
     
    "baseDetails": [
      {
        "contractReference": "DDDDDD",
        "systemReference": "CCCC",
        "companyReference": "BBBBB",
        "eventName": "",
        "baseEventIdentifier": "b",
        "effectiveDate": "ddddddddd",
        "bookingDate": "EEEE",
        "contractCurrency": "AAAAAA",
        "channel": "BBBBBBBB",
        "branch": "eeeeee",
        "lineOfBusiness": "CCCCCCCC",
        "activityDateTimeStamp": "ccccccccc",
        "transactionReference": "ddddd",
        "reversalIndicator": false,
        "originationReference": "",
        "contractStatus": "BBB",
        "accountId": "BBBBB",
        "overdue": "",
        "feeDetails": [
          {
            "feeName": "DDDDDDD",
            "feeAmount": "",
            "feeCurrency": "bbbbb",
            "adjustFeeAmount": "aaaa",
            "adjustFeeReason": ""
          }
        ],
        "balances": [
          {
            "balanceName": "cccccccc",
            "closingBalance": "A",
            "dateType": "A",
            "debitTotalAmount": "",
            "creditTotalAmount": "bbbbbbbb",
            "timeStamp": "dddd"
          }
        ]
      }
    ],
   }


Accounting Events

Accounting events are emitted in addition to business events for a variety of banking products, including multicurrency accounts, savings accounts, current accounts, and other kinds of bank account. For more information, see the Accounting Event Lifecycle Guide