Add POST /api/import/capital-accounts/batch: upload several of a fund's eNAV workbooks at once; each file's ALLOC SI roster is auto-matched to existing members (by fund-admin investor ID, else name/username) and their capital statement is saved at that file's own as-of date, building trend-lines without replacing the latest figures. Members not already in the portal are skipped and reported per file (never created). Capital statements only -- holdings/NAV are untouched. One bad file (wrong password, no ALLOC SI, unreadable date) is reported per-file and does not abort the rest. Import page gains a "Backfill historical capital" batch section (fund picker, multi-file .xlsx input, shared password, per-file results table). Investor portal "Capital over time" chart is now collapsed by default and expands per fund (first login opens clean); applies to InvestorHome and the admin Investor View via the shared component. Tests: backend/tests/test_capital_batch.py (2). Full suite 17 passed; frontend tsc clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
export { v_0_2_25 as current } from './v_0_2_25'
|
|
import { v_0_1_0 } from './v_0_1_0'
|
|
import { v_0_2_0 } from './v_0_2_0'
|
|
import { v_0_2_1 } from './v_0_2_1'
|
|
import { v_0_2_3 } from './v_0_2_3'
|
|
import { v_0_2_4 } from './v_0_2_4'
|
|
import { v_0_2_5 } from './v_0_2_5'
|
|
import { v_0_2_6 } from './v_0_2_6'
|
|
import { v_0_2_7 } from './v_0_2_7'
|
|
import { v_0_2_8 } from './v_0_2_8'
|
|
import { v_0_2_9 } from './v_0_2_9'
|
|
import { v_0_2_10 } from './v_0_2_10'
|
|
import { v_0_2_11 } from './v_0_2_11'
|
|
import { v_0_2_12 } from './v_0_2_12'
|
|
import { v_0_2_13 } from './v_0_2_13'
|
|
import { v_0_2_14 } from './v_0_2_14'
|
|
import { v_0_2_15 } from './v_0_2_15'
|
|
import { v_0_2_16 } from './v_0_2_16'
|
|
import { v_0_2_17 } from './v_0_2_17'
|
|
import { v_0_2_18 } from './v_0_2_18'
|
|
import { v_0_2_19 } from './v_0_2_19'
|
|
import { v_0_2_20 } from './v_0_2_20'
|
|
import { v_0_2_21 } from './v_0_2_21'
|
|
import { v_0_2_22 } from './v_0_2_22'
|
|
import { v_0_2_23 } from './v_0_2_23'
|
|
import { v_0_2_24 } from './v_0_2_24'
|
|
export const other = [v_0_1_0, v_0_2_0, v_0_2_1, v_0_2_3, v_0_2_4, v_0_2_5, v_0_2_6, v_0_2_7, v_0_2_8, v_0_2_9, v_0_2_10, v_0_2_11, v_0_2_12, v_0_2_13, v_0_2_14, v_0_2_15, v_0_2_16, v_0_2_17, v_0_2_18, v_0_2_19, v_0_2_20, v_0_2_21, v_0_2_22, v_0_2_23, v_0_2_24]
|