A transaction registers a change to the quantity and/or cost of an instrument held in a transaction portfolio, for example the purchase of a number of BP shares at a particular price, or the exchange of a quantity of GBP for USD at a particular rate.
LUSID is a transaction-based system. It does not maintain a static record of your holdings in a portfolio but rather generates them on demand from the stored history of transactions, replayed in date order.
Note the following:
- A transaction you create is known as an input transaction, to distinguish it from an output transaction automatically generated or processed by LUSID. More information.
- A transaction must resolve to a mastered instrument so LUSID can update its calculation of your holding in that instrument in the portfolio.
- A transaction must resolve to a known transaction type that determines the precise economic impact on holdings. The type is very likely to impact your holding in the transacted instrument, and possibly holdings in other instruments too (for example, currency holdings).
- By default, LUSID operates a ‘data load first’ policy, so transactions are upserted and resolution failures must be handled as a post-process step. You can increase the level of validation to reject transactions that do not resolve to instruments and to transaction types. More information.
- A transaction has a minimal set of data fields. You can add custom properties to extend the data model and store additional information, for example the name of the executing broker or the code of the exchange.
- You can add certain system properties to a transaction to record additional information that LUSID can then use in business operations, for example an exchange rate for a foreign currency transaction so LUSID can maintain the cost basis of the portfolio.
- You can strategy tag a transaction with one or more of the sub-holding keys (SHKs) registered with the portfolio, to divide your holding in the underlying instrument. By default, LUSID reports one holding per underlying instrument, with all transactions in that instrument contributing to the calculation.
You can see the stored history of all transactions for a portfolio in the LUSID web app by navigating to Dashboard > Transactions:
Alternatively, you can interact with transactions programmatically:
- Using the APIs in the Transaction Portfolios collection.
- Using equivalent methods in the LUSID SDKs.
- If you have a Luminesce license, by writing SQL queries.
- Understanding how LUSID uses transaction types to generate holdings
- Grouping related transaction types using scopes and sources
- Transaction types 1: Ensuring different transaction codes have the same economic impact
- Transaction types 2: Ensuring the same transaction code has different economic impacts
- Transaction types 3: Reducing a cash balance by the cost of broker commission
- Transaction types 4: Breaking out broker commission as a separate cash holding
- Input and output transactions
- Validating transactions
- Strategy-tagging transactions using SHKs
- Transactions and exchange rates
- Transaction syncing in derived transaction portfolios
- Adding system properties to transactions and to transaction types
- How does LUSID resolve transactions to transaction types?
- What is a transaction type?
- What is a transaction type alias?
- How do transaction type class and roles work?
- What is a movement?
- What movement types are available?
- What is a side?
- What built-in transaction types and sides are provided with LUSID?