CFO Center Module

Fund accounting — compute P&L, run European waterfall splits, manage GL journal entries, close periods, and track daily NAV accruals.

Data Models

ModelDescriptionKey Fields
FundAccountA fund vehicle (hedge fund, PE fund, VC fund, credit fund)id, name, account_type, organization_id, parent_fund_account_id, allocation_pct
JournalEntryDouble-entry GL journal entryid, fund_account_id, date, debit_account, credit_account, amount, description
PeriodCloseA locked period close with LP waterfall allocationsid, fund_account_id, period_start, period_end, nav, lp_allocations_json
GLFeeSchedulePer-LP fee terms (hurdle, carry, preferred return)id, fund_account_id, management_fee_pct, carried_interest_pct, preferred_return
NavAccrualEntryDaily management-fee accrual rowid, fund_account_id, accrual_date, daily_fee, ytd_fee, is_crystallized

Account Types

TypeFeatures enabled
hedge_fundDaily NAV accruals, master-feeder, DV01 risk metrics, Sharpe ratio
pe_fundEuropean waterfall, capital calls, period close
vc_fundPortfolio NAV-based P&L, MOIC tracking
credit_fundBond DV01 table, yield metrics

Cross-Module Links

DirectionHow to navigate
FundAccount → CRMDeal.fund_account_id → FundAccount.id → GET /api/v1/fundos/crm/deals?fund_account_id={id}
FundAccount → OMSPosition.fund_account_id → FundAccount.id → GET /api/v1/fundos/oms/positions?fund_account_id={id}
FundAccount → InvestorsCapital call payments trigger JournalEntry rows against this account

Quickstart (3 steps)

Step 1 — Authenticate and list fund accounts

export FUNDOS_API_KEY=vdr_your_key_here

curl https://kela.com/api/v1/fundos/cfo/accounts \
  -H "Authorization: Bearer $FUNDOS_API_KEY"
# → note a fund_account_id (e.g. 1)

Step 2 — Compute P&L for a date range

curl -X POST https://kela.com/api/v1/fundos/cfo/pnl \
  -H "Authorization: Bearer $FUNDOS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fund_account_id": 1,
    "from_date": "2026-01-01",
    "to_date": "2026-06-30"
  }'

# → {"success": true, "data": {"net_pnl": 1250000, "gross_pnl": 1480000, ...}}

Step 3 — Run European waterfall simulation

curl -X POST https://kela.com/api/v1/fundos/cfo/waterfall \
  -H "Authorization: Bearer $FUNDOS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fund_account_id": 1,
    "exit_proceeds": 10000000
  }'

# → {"success": true, "data": {"lp_total": 8500000, "gp_total": 1500000, "tiers": [...]}}
Note: pnl and waterfall endpoints are always read-only — they compute and return results without writing to the DB. No ephemeral flag needed.

Webhook Events

CFO Center does not emit outbound webhook events directly. The capital_call.paid event from the Investors module triggers the downstream GL journal entry.

Endpoints

MethodPathDescriptionRequired Params
GET/api/v1/fundos/cfo/accountsList fund accounts
GET/api/v1/fundos/cfo/accounts/{id}Get fund account detailfund_account_id
POST/api/v1/fundos/cfo/pnlCompute P&L (read-only, no DB write)fund_account_id, from_date, to_date
POST/api/v1/fundos/cfo/waterfallEuropean waterfall simulation (read-only)fund_account_id, exit_proceeds
GET/fundos/cfo/accounts/{id}/performancePeriod P&L dashboard (MTD/QTD/YTD)fund_account_id
GET/fundos/cfo/accounts/{id}/riskRisk metrics (Sharpe, leverage, DV01)fund_account_id
GET/fundos/cfo/accounts/{id}/accrualsNAV accrual dashboardfund_account_id

Error Codes

CodeHTTPHint
fund_account_not_found404Verify fund_account_id against GET /api/v1/fundos/cfo/accounts
invalid_date_range400from_date must be before to_date; use ISO 8601 format (YYYY-MM-DD)
waterfall_lp_required400At least one LP with committed_capital must exist for this fund account

→ Build your first FundOS app in 15 minutes  |  Module contract JSON  |  Changelog