How do I create a fund?

Prev Next

You can create a fund that marshalls all the components necessary to strike a NAV and generate other financial reports for different audiences at regular intervals.

Methods

Call the CreateFund API, for example:

curl -X POST 'https://<your-domain>.lusid.com/api/api/funds/v2/FundV2'
  -H 'Content-Type: application/json-patch+json' 
  -H 'Authorization: Bearer <your-API-access-token>'
  -d '{
  "code": "FundCode",
  "displayName": "Fund Name",
  "description": "Standard Fund",
  "baseCurrency": "USD",
  "portfolioIds": [
    {
      "scope": "Scope1",
      "code": "Portfolio1",
      "portfolioEntityType": "SinglePortfolio"
    }
  ],
  "fundConfigurationId": {
    "scope": "FundConfigurationScope",
    "code": "FundConfigurationCode"
  },
  "shareClassInstrumentScopes": [
    "Scope1"
  ],
  "shareClassInstruments": [
    {
      "instrumentIdentifiers": {
        "Instrument/default/Figi": "GB0007980598"
      }
    },
    {
      "instrumentIdentifiers": {
        "Instrument/default/ClientInternal": "ShareClassA"
      }
    }
  ],
  "type": "Master",
  "inceptionDate": "2024-01-01T00:00:00.0000000+00:00",
  "decimalPlaces": 6,
  "primaryNavType": {
    "code": "PrimaryNav1",
    "displayName": "PrimaryNav1",
    "description": "This is the primary NAV type",
    "chartOfAccountsId": {
      "scope": "ChartOfAccountsScope",
      "code": "ChartOfAccountsCode"
    },
    "postingModuleCodes": [
      "PostingModule1"
    ],
    "cleardownModuleCodes": [
      "CleardownModule1"
    ],
    "valuationRecipeId": {
      "scope": "RecipeScope",
      "code": "RecipeCode"
    },
    "holdingRecipeId": {
      "scope": "RecipeScope",
      "code": "RecipeCode"
    },
    "accountingMethod": "FirstInFirstOut",
    "subHoldingKeys": [],
    "amortisationMethod": "EffectiveYield",
    "transactionTypeScope": "TransactionTypeScope",
    "cashGainLossCalculationDate": "Default"
  },
  "additionalNavTypes": [
    {
      "code": "taxNav",
      "displayName": "Tax Nav",
      "description": "Tax Nav description",
      "chartOfAccountsId": {
        "scope": "TaxChartOfAccountsScope",
        "code": "TaxChartOfAccountsCode"
      },
      "postingModuleCodes": [
        "TaxPostingModule1"
      ],
      "cleardownModuleCodes": [
        "TaxCleardownModule1"
      ],
      "valuationRecipeId": {
        "scope": "TaxRecipeScope",
        "code": "TaxRecipeCode2"
      },
      "holdingRecipeId": {
        "scope": "TaxRecipeScope",
        "code": "TaxRecipeCode3"
      },
      "accountingMethod": "FirstInFirstOut",
      "subHoldingKeys": [],
      "amortisationMethod": "EffectiveYield",
      "transactionTypeScope": "TransactionTypeScope",
      "cashGainLossCalculationDate": "Default"
    }
  ],
  "properties": {
    "Fund/MyScope/FundManagerName": {
      "key": "Fund/MyScope/FundManagerName",
      "value": {
        "labelValue": "Smith"
      },
      "effectiveFrom": "2024-01-01T00:00:00.0000000+00:00"
    }
  }
}'

Navigate to Fund Accounting > Funds and click Create fund:

Write a Luminesce SQL query using the Lusid.Fund.Writer provider and execute it using a tool such as the LUSID web app, for example:

Data fields and properties

This section supplements the API documentation and on-screen help text in the LUSID web app.

Fields

A fund is identified by a scope and a code that must be unique within that scope.

A fund must:

  • Have a type. You should set this to Standalone for now. Other options are under development.

  • Reference one or more transaction portfolios from an IBOR.

  • Have a baseCurrency that is an ISO 4217 currency code, for example GBP. Note all referenced transaction portfolios must have the same base currency.

  • Have an inceptionDate. Note this must be prior to the creation date of all referenced transaction portfolios.

  • Reference a pricing template.

  • Have an investorStructure. The default is Classes. You can set this to Unitised if you want. If you opt for Classes, you must reference:

  • A primaryNavType that contains all the settings necessary to strike a NAV and generate other financial reports for a particular audience. More information.

  • Optionally, any number of additionalNavTypes to strike NAVs for different audiences using the same underlying data.

Properties

You can optionally extend the data model of a fund by adding custom properties from the Fund domain, either when you create it or subsequently using the UpsertFundProperties API.

Subsequent updates

You can change most aspects of an existing fund using the PatchFund API.

Understanding NAV types

A fund must have at least one primary NAV, containing all the settings required to strike a NAV and generate other financial reports for a particular audience, and can have as many additional NAVs as you need. For example, you might specify:

  • A primary OFFICIAL NAV to process subscriptions and redemptions to run each weekday at EOD.

  • An additional TAX NAV that uses a different tax lot methodology and market data to run at end of year.

  • An additional REPORT NAV that uses a different chart of accounts to run monthly or quarterly to satisfy regulatory requirements.

When used in combination with a valuation point, LUSID closes an accounting period for a NAV and persists the underlying data so reports are always reproducible.

The following settings can be configured independently for each NAV:

Setting

Information

Chart of accounts (CoA)

Identifies the chart of accounts (CoA) to use.

Posting modules

You must reference at least one posting module from the above CoA. If you reference more than one, the order is significant; for each journal entry line, LUSID uses the first matching rule found.

Cleardown modules

If the CoA contains cleardown module(s), you must reference at least one. If you reference more than one, the order is significant; for each journal entry line, LUSID uses the first matching rule found.

Valuation recipe

This recipe must contain the following:

  • Market data rules able to locate market data loaded into LUSID suitable for valuing every holding in every underlying transaction portfolio on the effective date of the valuation point.

  • Pricing model rules suitable for the instruments held in every underlying transaction portfolio. If only instruments of type Equity are held, there is nothing to do here. However, for most other instruments we strongly recommend changing the default pricing model.

Holding recipe

If any underlying transaction portfolio contains an instrument for which LUSID requires market data in order to generate holdings (such as floating-rate or inflation-linked bonds), this recipe must contain market data rules able to locate that data.

Accounting method

You must specify a tax lot liquidation strategy.

Note there is an option to choose the AverageCost method, which effectively means ‘no strategy’.

Amortisation method

You must specify an amortisation strategy for all instruments of type Bond, ComplexBond and InflationLinkedBond held in underlying transaction portfolios.

Note there is an option to choose ‘no strategy’.

Cash gain/loss calculation date

You must specify a cost normalisation strategy that nominates either settlement date or transaction date.

Transaction type scope

You have the option to specify a custom scope containing transaction types defining the economic impact of transactions in underlying portfolios. If you omit this, LUSID expects to find all transaction types in use residing in the default scope.

Note: If you specify a custom scope you must recreate every transaction type and side in that scope. LUSID does not fall back from a custom to the default scope.

Sub-holding keys

If your fund has share classes, you must (for now) specify the Transaction/default/ShortClassShareCode system property as a sub-holding key (SHK) for each NAV.

You can optionally specify as many other SHKs from underlying transaction portfolio(s) as you wish. These SHKs are then available for grouping purposes when you generate a fund holdings report.

If you do not specify any SHKs (either omit the field or set it to an empty array) then no SHKs are available; they are not inherited from underlying portfolios.

Leader/follower status

By default, each NAV operates on its own timeline, and you can close a period for one NAV while keeping the others open.

You can choose to align the timelines of additional NAVs with a particular NAV if you wish, though note if you close the period of the leader the periods of followers automatically close.

To do this, specify the leaderNavTypeCode of a NAV to follow. Additional NAVs can follow the primary NAV or they can follow another additional NAV, for example:

Note that chaining and circular dependencies are not allowed.