3 KiB
This exercise is to model a pensions system.
original text from the client (named ACME)
ACME operates a Master Trust Pension. A ACME pension consist of units of Assets held on behalf of the member. These units, and any associated cash, are recorded in an internal ledger. The actual units of each asset are aggregated into a single holding held by an external Asset Custodian on behalf of ACME. Asset units are bought and sold on behalf of members. The process of buying and selling assets takes several days trades are only placed periodically and take several days to settle. The basic process for buying assets is:
flowchart TD
member([Member])-- Invest cash -->create_buy_trade
create_buy_trade[Create buy trade]-->aggregate
aggregate[Aggregate into an external buy trade]-.->external_buy_trade
external_buy_trade[Place an external buy trade]-->buy_assets
buy_assets[Buy assets]-->custodian
custodian([Asset custodian]) -. Trade priced .-> move_to_pots1
custodian -. Trade settled .-> move_to_pots2
move_to_pots1[Move assets to pots]-->move_cash_to_custodian
move_cash_to_custodian[Move cash from pots to custodian account]
move_to_pots2[Move assets to pots]
Dotted arrow is delayed operation
Round shape indicates an actor
The platform is intended to support up to 5 million members. The following are the meanings of terms used by ACME:
- Internal Account - a logical account within the internal ledger that records the holding of an amount of cash or units of assets
- Pot - a collection of Internal Accounts that belong to a Member, ACME, an external body, e.g. an Asset Custodian
- External Account - a real account in an external organisation, e.g. a bank account with a bank or an asset account with an asset custodian.
- Re-balancing - the process of adjusting the number of units held for each of a number of assets in the asset Internal Account in a Pot to ensure the mix is correct for the chosen risk profile.
- Asset custodian - a body that holds asset units on behalf of ACME and trades them when instructed.
Consider the description above in an event driven platform with information stored in a database. How would you design such a system and what challenges would you expect to find? The solution should consider the following:
- ACME is regulated by 3 financial authorities and the data we hold must be 100% accurate
- Assets may be bought and sold
- There are some automated processes, e.g. re-balancing, that generate large numbers of buy and sell trades as the prices of assets move.
- There are some processes that must process large amounts of data, e.g. reconciliation
- This is not a real time trading environment, prices are always closing prices, external trades are only placed with asset custodians on a daily basis.
Assuming the platform is implemented in Go, what patterns would you use to enable large numbers (c200-300) processes to be produced in a consistent and repeatable manner by multiple teams?