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 toStandalone
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 exampleGBP
. 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.
Reference one or more share classes mastered as instruments. Note you can add or remove share class instruments independently using the SetShareClassInstruments API. There is no significance to the order in which these are added.
A
shareClassInstrumentScopes
(singular) if these share classes are mastered in an instrument scope other than thedefault
scope.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 NAV type, containing all the settings required to strike a NAV and generate other financial reports for a particular audience. For example, you might create:
An offical NAV type to process subscriptions and redemptions to be run each weekday at EOD. This might be the primary NAV type.
A tax NAV type that uses a different tax lot methodology and market data to be run at end of year.
A regulatory reporting NAV type that uses a different chart of accounts to be run monthly or quarterly.
When used in combination with a valuation point, LUSID closes an accounting period for a NAV type and persists the underlying data so reports are always reproducible.
The following settings can be configured independently for each NAV type:
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 this 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 this 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:
|
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 |
Amortisation method | You must specify an amortisation strategy for all instruments of type 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 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 |
Sub-holding keys | For now, at a minimum, you should specify the 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. |