- BTC prices: btc_prices table, CSV upload on Import page (auto-detected
date/close columns, upsert by date), entities.close_date as the BTC entry
mark; statements carry btc_price_cents (as-of) + btc_close_price_cents.
LP capital blocks show paid-in vs current value in bitcoin terms.
- First login: accounts on the shared default password are flagged
(must_change_password) and blocked behind a full-screen password change;
external accounts then get a one-time welcome tour with a 2FA offer
(users.onboarded_at).
- LP portal: Unfunded (callable commitment) metric; Tax documents center
aggregating K-1/tax docs across funds, grouped by year.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The admin read-only Investor View built capital-account responses
without exited_on, so an exited position showed the active card with
$0s (the LP's own portal was correct). Extracted exit_dates() into
capital_account_router and stamp it in investor_view too; regression
test added. A fund card where every position is exited now renders
greyed (bg + title) so it reads as closed at a glance.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Snapshot commit bringing the uncommitted phase-2 work into version control
together with four new features and the 0.2.22 version bump.
New features:
- Investor capital-over-time chart (value, paid-in, distributions per
quarter), rendered from existing capital-account history.
- Admin Investor View: read-only reconstruction of an investor's portal
(GET /api/users/{id}/investor-view), reusing the investor portal UI.
- Document upload scoped to the selected fund's own investors, with an
explicit upload-target confirmation to prevent mis-attaching.
- GP/mgmt entities gain an Assets tab listing their stakes in the funds
they manage (new entity_stakes table + /api/entities/{id}/stakes).
- Edit-entity form (change type/status/etc.), so GP entities can be
categorized correctly.
Verified: 11/11 backend tests pass; alembic upgrades to head b8c9d0e1f2a3;
frontend tsc + vite build clean; s9pk packs at 0.2.22:0 (x86_64).
Also: ignore .DS_Store and *.s9pk artifacts.