Skip to content

Fund Detail: NAV Management

Operations By Screen Group

Button nameUnderlying operationExplanation
Record NAVPOST /auth/funds/{slug}/navOpens the NAV sheet and records a positive USD value per share. The manager may also provide a recorded date and recorder name.
Edit NAV recordPATCH /auth/funds/{slug}/nav/{nav_id}Opens the same sheet with the stored record. The backend updates the existing row instead of creating a correction row. Changing the NAV value clears that record's finalized snapshot.
Delete NAV recordDELETE /auth/funds/{slug}/nav/{nav_id}Attempts to delete the selected row immediately. Referenced pricing or redemption records can block deletion at the database boundary. Tahoe currently provides no confirmation dialog, dependency preview, or undo operation.

Reporting

Button nameUnderlying operationExplanation
Export NAVGET /auth/funds/{slug}/nav/exportDownloads the fund's NAV history as CSV. The export contains the record id, fund id, NAV, change, percentage change, recorded time, and recorder.

Display Controls

ControlUnderlying operationExplanation
30D, 90D, or ALLLocal chart-period selectionFilters the already loaded NAV history for the chart. It does not change a NAV record or call a pricing service.
Search NAV historyLocal table filtering, with the search value also passed on reloadFilters the visible history table. The current NAV list endpoint returns the full fund history and does not apply the search parameter server-side.

Record NAV Sheet

FieldRequiredBehavior
NAVYesPositive USD value per share with at most six decimal places. JSON numbers are rejected because the contract requires an exact decimal string.
Recorded dateNoPrefilled with today. On a new record, leaving that default unchanged omits recordedAt so the backend stores the actual submission time. Selecting another date stores that date at midnight.
Recorded byNoPrefilled with the signed-in manager. If omitted, the backend derives the manager's name or email.

The sheet remains open when saving fails so the manager can correct the values. A successful create or edit reloads NAV history and Fund Detail because the newest record affects displayed fund metrics.

Information Shown

The chart displays manager-visible NAV records in chronological order. A single record is duplicated as a flat segment so it remains visible. The 30-day and 90-day controls use the browser's current date and compare calendar days.

ColumnMeaning
Recorded ByStored recorder name or System when none is available.
NAVManager-visible USD value per share.
Change %Percentage change from the preceding chronological NAV record.
Sourcewebdevelop-api for live records or mock for simulated development data.
DateStored recordedAt timestamp. Same-day records use record identity as a sorting tiebreaker.

The backend recalculates absolute and percentage changes across the full chronological history whenever it returns the list. Editing or deleting an older row can therefore change the displayed comparison for later rows.

Recorded NAV And Finalized Dealing NAV

These values must not be treated as interchangeable.

ValueWriterUse
Recorded or display NAVFund manager on this pageHistorical presentation, fund metrics, and a proposed default for the planned Fulfill in Vault pricing popup.
Fulfillment priceFund manager in Investment ManagementPrices one subscription and determines its exact share quantity. This is a planned contract change and must occur only during Fulfill in Vault.
Finalized dealing NAVInvestment finalization service outside TahoeCanonical valuation snapshot used by protocol pricing and redemption assignment.

This page has no action that finalizes a dealing NAV. Creating a manual NAV row does not set finalized_at. Editing only the recorder or date preserves any existing finalized snapshot, but changing the NAV value clears finalization because the prior valuation arithmetic no longer matches.

When deletion succeeds, it removes both the display history and any finalized snapshot stored on that row. Deposit and redemption references use restrictive foreign keys and can block deletion. Operators must confirm downstream valuation and redemption dependencies before trying it, even though the current UI does not ask for confirmation.

The current NAV sheet says that the newest value prices new subscriptions. That describes the existing implementation, not the approved target flow. In the target flow, the newest display NAV may prefill Fulfill in Vault, but the manager fixes price_per_share only when submitting that fulfillment.

Actors And Permissions

ActorRead history and exportRecord, edit, or delete NAV
Ownerfunds.readnav.write
Adminfunds.readnav.write
Opsfunds.readnav.write
Auditorfunds.readNot permitted

The backend is the authorization boundary. The current page does not hide Record, Edit, or Delete controls from an auditor, so an unauthorized click reaches the API and receives 403. That missing client-side presentation gate is a product gap.

Controls, Failures, And Recovery

ConditionRequired response
NAV is empty, zero, negative, over-precise, or not a canonical decimal stringCorrect the value before saving.
Save failsKeep the sheet open, review the mutation error, and retry only after correcting the input or authorization problem.
Export failsReview the page error. No NAV state changes.
History is emptyRecord the first NAV only when the manager has an approved valuation source.
Correcting an older recordRecheck all later percentage changes because the backend recomputes them.
Changing a finalized record's NAV valueTreat finalization as cleared and coordinate re-finalization outside Tahoe.
Deleting a recordConfirm downstream valuation and redemption dependencies first. Referenced records can fail at the database constraint; a successful delete has no in-product undo.
Development mock data is visibleDo not use it as evidence of a recorded or finalized valuation.

Capability Status

CapabilityMaturityExecution owner or locationCurrent boundary
Read NAV history and chartLiveThis pageRequires funds.read; live data comes from fund_nav_records.
Record NAVLiveThis pageRequires nav.write; records a manual display value.
Edit NAV in placeLiveThis pageRequires nav.write; changing the value clears finalization on that row.
Delete unreferenced NAVLiveThis pageRequires nav.write; referenced records can be blocked by database constraints, and no confirmation or undo is provided.
Export NAV CSVLiveThis pageRequires funds.read.
Finalize a dealing NAVUnsupportedExternal investment finalization serviceNo Tahoe page action or fund-manager route performs finalization.
Use display NAV as the proposed fulfillment pricePlannedInvestment ManagementThe approved target moves pricing from Accept to Fulfill in Vault.

Owner Operating Checklist

Before recording NAV

  • Confirm the fund, valuation date, calculation source, and responsible recorder.
  • Confirm the value represents one share in USD and uses no more than six decimals.
  • Determine whether this is a display record or part of an external finalization process.

Before correcting NAV

  • Confirm that an in-place edit is acceptable for the audit trail.
  • Check whether the record is finalized and whether changing it requires external re-finalization.
  • Recheck later change percentages after the correction.

Before deleting NAV

  • Confirm the record is not required by a redemption, subscription, report, or finalized valuation trail.
  • Record the reason outside this page because the delete command captures no manager note.
  • Reload NAV Management and verify which record is now the latest display NAV.

Known Product And Documentation Risks

  • The page copy still says the newest NAV prices subscriptions, while the approved target requires pricing only during Fulfill in Vault.
  • Record, Edit, and Delete controls are not hidden for auditors even though the backend rejects them.
  • Delete has no confirmation, dependency preview, soft-delete state, or undo; dependency conflicts surface only after submission.
  • Editing a NAV value clears finalization without a dedicated warning in the sheet.
  • In-place correction removes the prior value from the business table; the audit log records that an update occurred but not a complete before-and-after valuation history on this page.
  • Repository behavior was verified, but deployed revision and provider configuration were not checked.

Technical Traceability

Frontend

  • View: apps/tahoe/src/views/AdminFundDetailView.vue
  • ViewModel: apps/tahoe/src/features/admin/view-models/useTahoeAdminViewModels.ts
  • Store: apps/tahoe/src/features/admin/stores/adminStore.ts
  • API adapter: apps/tahoe/src/features/fund-manager/data/tahoeApi.ts
  • NAV ordering helpers: apps/tahoe/src/utils/navRecords.ts

Fund-Manager API

ContractPermissionPurpose
GET /auth/funds/{slug}/navfunds.readReturn normalized NAV history.
POST /auth/funds/{slug}/navnav.writeCreate a manager-entered NAV record.
PATCH /auth/funds/{slug}/nav/{nav_id}nav.writeUpdate an existing record and clear finalization when NAV changes.
DELETE /auth/funds/{slug}/nav/{nav_id}nav.writePermanently delete an existing record.
GET /auth/funds/{slug}/nav/exportfunds.readDownload normalized NAV history as CSV.

Backend evidence:

  • ../fund-manager-api/app/routes.py
  • ../fund-manager-api/app/views/fund_manager_admin/funds.py
  • ../fund-manager-api/app/views/fund_manager_admin/common.py
  • ../fund-manager-api/app/schemas/fund_manager.py
  • ../fund-manager-api/utils/consts/group.py

Focused Tests

  • apps/tahoe/src/__tests__/adminFundDetailOverview.test.ts
  • apps/tahoe/src/__tests__/adminStore.test.ts
  • apps/tahoe/src/features/fund-manager/data/__tests__/tahoeApi.characterization.test.ts
  • ../fund-manager-api/tests/e2e/test_fund_manager_funds.py
  • ../fund-manager-api/tests/e2e/test_fund_manager_exports.py

Revision History

VersionDateChange
1.02026-08-21Initial source-backed project-owner description of NAV Management.

Tahoe project-owner operations documentation