You can strike a NAV at any time. This means selecting a fund and a particular NAV type, and creating a valuation point (VP) with cut-offs for the data to include. LUSID then:
Calculates GAV as dealing (subscriptions and redemptions) plus P&L since the previous VP (or from fund inception if this is the first VP).
Calculates NAV as GAV minus accrued fund fees.
Closes the period and saves all the data used in the NAV calculation so reports are always reproducible.
See a list of other financial reports.
Creating a valuation point with cut-offs
You must create a valuation point that specifies cut-offs for the data to include in a NAV calculation.
Note: A new VP always has a status of
Estimate. LUSID does not actually close the period until you explicitly approve the calculation by setting the status toFinal. See how to do this.
Because LUSID is bitemporal, every data point has two timestamps: an effectiveAt that specifies when it becomes relevant from a business perspective, and an asAt that records when it entered the system.
A valuation point must specify at least two timestamps:
An
effectiveAtthat determines when the period closes, for example just before midnight on 31 January 2024. TheeffectiveAtof every data point you wish to include in the NAV calculation must be prior to this timestamp.A
queryAsAtthat determines a cut-off for data entering the system. This can be the same aseffectiveAtor before or after it, but it cannot be in the future (that is, later than the current real-world datetime when the VP is created).
You have the option to exert more fine-grained control by additionally specifying the following asAt timestamps:
A
holdingsAsAtOverridethat determines a cut-off for data impacting holdings in underlying portfolios. This includes changes to instrument definitions, all transactions (whether manually input or automatically generated by LUSID in response to events), settlement instructions for those transactions, and FX rates in the LUSID Quote Store used to calculate holding cost (from transaction to settlement and portfolio currencies).A
valuationAsAtOverridethat determines a cut-off for data impacting valuation results for underlying portfolios. This is primarily market data (either prices and FX rates stored in the LUSID Quote Store, or curves and discount factors stored in the LUSID Complex Market Data Store), but can also be custom valuation results stored in the LUSID Structured Result Store.
If you:
Do specify these overrides then
queryAsAtretains control over the cut-off for fund configuration changes, such as to CoAs, posting rules, recipes and so on.Do not specify these overrides then LUSID sets them to the same as
queryAsAt, which means all data and settings share the same cut-off.
For example, you could call the UpsertDiaryEntryTypeValuationPoint API to create a VP for a fund’s OFFICIAL NAV type as follows:
curl -X POST 'https://<your-domain>.lusid.com/api/api/funds/MyFunds/Growth/valuationpoints?navTypeCode=OFFICIAL'
-H 'Content-Type: application/json-patch+json'
-H 'Authorization: Bearer <your-API-access-token>'
-d '{
"diaryEntryCode": "VP-31Jan2024",
"diaryEntryVariant": "Variant1",
"name": "End January 2024",
"effectiveAt": "2024-01-31T23:59:59.999Z",
"holdingsAsAtOverride": "2024-01-31T18:00:00Z",
"valuationsAsAtOverride": "2024-02-01T18:00:00Z",
"queryAsAt": "2024-02-02T18:00:00Z",
}'Note the following:
The
effectiveAtis a millisecond before midnight on 31 January 2024.The
holdingsAsAtOverrideis EOD 31 January (before theeffectiveAt) to reflect the time at which the trades team complete their checks. No trade entered into the system after this time is included, even if it is effective-dated before midnight 31 January.The
valuationAsAtOverrideis EOD 1 February to allow extra time for market data to flow into LUSID.The
queryAsAtis EOD 2 February to allow extra time for the fund accounting team to make changes to posting rules.The
diaryEntryVariantfield is optional but naming each variant is useful if you create multiple (see below).
Call the ListValuationPointsOverview API to preview the NAV calculation with the data included by the selected asAt timestamps. Note the status is set to Estimate (here the API response is transformed to a table for clarity):

Creating multiple variants of the same estimate
You have the option to create variants of an Estimate valuation points with different asAt timestamps.
Note: You can make any
asAttimestamp different, but all variants must share the sameeffectiveAt.
You can then compare the NAV calculation for variants and decide which one to finalise.
To create a variant of an existing VP, call the UpsertDiaryEntryTypeValuationPoint API and specify the same diaryCode but a different diaryEntryVariant.
For example, you could create three variants with different asAt timestamps and call the ListValuationPointsOverview API to compare the NAV calculations:

Breaking down the NAV calculation
The easiest way to see a breakdown of the NAV calculation is to navigate to Fund Accounting > Fund Grid in the LUSID web app.
Note: Alternatively, you can call the GetValuationPointData API, or write a SQL query using the Lusid.Fund.ValuationPointData provider.

Adjusting the NAV calculation by reporting additional activity
You can explicitly include individual items of economic activity in an Estimate NAV if they failed to make the cut off. More information coming soon.
Finalising an estimate and closing a period
To close a period and save all the data used in the NAV calculation, call the AcceptEstimateValuationPoint API and specify the diaryEntryCode of an Estimate VP.
If you have multiple variants, make sure to specify the diaryEntryVariant of the one to finalise; all other variants are destroyed. For example:
curl -X POST 'https://<your-domain>.lusid.com/api/api/funds/MyFunds/Growth/valuationpoints/$acceptestimate'
-H 'Content-Type: application/json-patch+json'
-H 'Authorization: Bearer <your-API-access-token>'
-d '{
"diaryEntryCode": "VP-31Jan2024",
"diaryEntryVariant": "Variant1"
}'Call the ListValuationPointsOverview API to check the status is set to Final:

Re-opening a period
You can call the RevertValuationPointToEstimate API to revert a Final VP to a status of Estimate. You may want to do this to report additional activity.
Call the DeleteValuationPoint API to delete a VP (of any status) and start over.