Skip to content

Fund Detail: NAV Management ​

See Core Concepts for the NAV timing model this page assumes: NAV is set per transaction at Fulfill in Vault, not carried over from the fund's most recently recorded value.

Planned — wallet authorization required to Record, Edit, or Delete NAV

None of the three NAV Records actions below currently require wallet authorization. Planned: each one should require the manager to authorize with their wallet (a 2FA code, per Core Concepts) before it takes effect. The point isn't just authentication — it's making the action feel deliberate enough that the manager double-checks the value before it goes through. Not yet built.

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. The identity of the recorder is marked automatically for audit purposes, this is not an input. Saving requires wallet authorization (see the Planned note above).
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. A note is made of the user that edited the NAV record. Finalized or referenced legacy records cannot be edited. Saving requires wallet authorization (see the Planned note above).
Delete NAV recordDELETE /auth/funds/{slug}/nav/{nav_id}Attempts to delete the selected row immediately. Finalized or referenced legacy records cannot be deleted. Tahoe currently provides no confirmation dialog, dependency preview, or undo operation — but it should. Deleting requires wallet authorization (see the Planned note above).

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.
Number of records shown25Nearly an entire month of NAV updates should be visible in the table.

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. The last recorded NAV is shown as small reference text next to this field — read-only, never a default or pre-filled value.
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 byYesPrefilled with the signed-in manager.

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. Saving requires wallet authorization — see the Planned note at the top of this page.

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
DateStored recordedAt timestamp. Same-day records use record identity as a sorting tiebreaker.
NAVManager-visible USD value per share.
Change %Percentage change from the preceding chronological NAV record.
Recorded ByStored recorder name or System when none is available.
Sourcewebdevelop-api for live records or mock for simulated development data. This should be removed once live.

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 and fund metrics. Shown as read-only reference text in the Fulfill in Vault pricing popup — never a default or suggested value.
Fulfillment priceFund manager in Investment ManagementPrices one subscription and determines its exact share quantity, set only during Fulfill in Vault — see Core Concepts → How NAV Pricing Works.
Finalized dealing NAVInvestment finalization service outside TahoeHistorical immutable valuation retained for legacy-priced requests.

This page records reporting NAV. Manager dealing prices are accepted separately during fulfillment. Finalized or referenced legacy NAV records are immutable: edit and delete commands return a conflict. Unreferenced reporting records retain their ordinary edit and delete behavior. Legacy priced requests keep their original NAV metadata; new redemptions use an explicit manager price.

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.
Price only at Fulfill in Vault, not at AcceptPlannedInvestment ManagementThe approved target — see Core Concepts. This is a planned contract change.
Show last recorded NAV as reference during entry and fulfillmentPlannedThis page and Investment ManagementRead-only reference text only — never a default or pre-filled value.
Require wallet authorization to Record, Edit, or Delete NAVPlannedThis pageNew requirement, not yet built. Intended to add deliberate friction so the manager double-checks the value, not just to authenticate the action.

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 ​

  • 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 ​

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 ​

Revision History ​

VersionDateChange
1.02026-08-21Initial source-backed project-owner description of NAV Management.
1.12026-09-14Removed "current product prices from the latest NAV" framing (moved to Product Bugs Found for tracking, not stated in the page itself). Added Core Concepts linkage, NAV-reference-display note on the Record NAV sheet, and split the Capability Status Planned row into pricing-timing and reference-display items. Corrected "proposed default" language for display NAV in the Fulfill in Vault popup — it is read-only reference, never a default. Underlying operations unchanged.
1.22026-09-14Jay's edits: recorder identity is automatic (not an input), edit action logs the editing user, delete should get a confirmation dialog, added record-count display control, Recorded By reordered to a required prefilled field, NAV history table column order changed, Source noted for removal once live. Added new Planned requirement: Record, Edit, and Delete NAV all require wallet authorization before taking effect, intended to add deliberate friction rather than just authenticate.

Tahoe project-owner operations documentation