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
The API URL that's used to carry out this business process. |
|
API request (typically, a command to perform an operation). |
|
The event type that's emanated. | |
Business event emanating after the process is completed by the system. | |
Business process in the system. | |
Completion of the business process in the system. |
Tip: Click diagram to expand.
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