How do I handle different tax lot accounting conventions?

LUSID supports full tax lot accounting. This article describes how this can be used in LUSID.

There are two ways that tax lot accounting can be performed in LUSID.

  • If you have a source system which provides specific tax lot ("versus purchase") details on all transactions then you can setup the Portfolio's subholding keys to segregate the Instrument-level holdings into separate tax lots
  • If your source system doesn't always provide tax lot information and you want LUSID to calculate tax lots based on a standard algorithm, you can instead configure this as part of the Portfolio setup process

Using SubholdingKeys to segregate holdings into tax lots

Inputting Data

  1. Define a Transaction Property to store the tax lot identifier
  2. Create a Transaction Portfolio with the property as the SubholdingKey
  3. Upsert Transactions to the Portfolio including a value for the property to indicate which taxlot to book each Transaction against

Extracting Data

Using this configuration, the holdings and aggregation apis will return tax lots without any further parameters.

Having LUSID determine tax lots automatically

Inputting Data

  1. When creating a Transaction Portfolio, the field accountingMethod allows you to set a default method to use to create tax lots: Default, AverageCost, FirstInFirstOut, LastInFirstOut, HighestCostFirst, LowestCostFirst. More details on what these values mean can be found on Tax-lot accounting methods.
  2. Upsert Transactions to the Portfolio. The transactions can specify an accounting method using the property Trade/default/TaxLotSelectionMethod. If none is specified, the default method set on the Portfolio will be used instead. LUSID will automatically create/update the tax lots as appropriate based on the accounting method and the values in transaction.

Extracting Data

  • The holdings api has a parameter byTaxlots which indicates whether taxlot level information is required
  • The aggregations api will return taxlot level information if not specific grouping parameters are specified.