Skip to main content

Epic 2: Returns Method Configuration

Status: ✅ Complete (January 2026)

Overview

Administrators can now toggle the return calculation method for each entity between:

  • Modified Dietz: daily_pnl / prior_day_nav (matches BTIG)
  • Simple Flat Capital: daily_pnl / month_start_capital (original AIC method)

Database Schema

Entity Table Addition

-- Migration: 20260114212305_add_return_method_to_entity.sql

ALTER TABLE sable.entity
ADD COLUMN IF NOT EXISTS return_method TEXT
DEFAULT 'modified_dietz'
CHECK (return_method IN ('modified_dietz', 'simple_flat'));

Column Details:

  • Default: modified_dietz (for BTIG reconciliation accuracy)
  • Constraint: Only allows the two valid method values
  • All existing entities default to Modified Dietz

View Update

The gold.v_dietz_daily view respects the entity's return_method setting:

-- Migration: 20260114212344_update_v_dietz_daily_for_method_toggle.sql

-- Return calculation switches based on method
CASE return_method
WHEN 'modified_dietz' THEN daily_pnl / begin_nav
WHEN 'simple_flat' THEN
CASE WHEN capital_amount > 0
THEN daily_pnl / capital_amount
ELSE NULL
END
ELSE daily_pnl / begin_nav -- Default fallback
END AS daily_return

The view exposes return_method column for transparency.

Admin UI

Location

Settings page: /protected/settings

Component

EntityReturnMethodsCard (components/settings/entity-return-methods-card.tsx)

Features

  • Lists all entities for the organization
  • Dropdown to select calculation method
  • Real-time save with visual feedback
  • Explanatory descriptions for each method

Screenshot

┌─────────────────────────────────────────────────────────┐
│ 📊 Return Calculation Methods │
│ Configure how daily returns are calculated per entity │
├─────────────────────────────────────────────────────────┤
│ │
│ Anthracite Holdings LP │
│ Daily PnL / Prior Day NAV (matches BTIG) │
│ [Modified Dietz ▼] │
│ │
│ Anthracite Realty Partners, LLC │
│ Daily PnL / Prior Day NAV (matches BTIG) │
│ [Modified Dietz ▼] │
│ │
│ Bird Family Foundation │
│ Daily PnL / Prior Day NAV (matches BTIG) │
│ [Modified Dietz ▼] │
│ │
├─────────────────────────────────────────────────────────┤
│ Method Descriptions: │
│ • Modified Dietz: Daily PnL / prior day NAV. Matches │
│ BTIG calculation for reconciliation accuracy. │
│ • Simple Flat Capital: Daily PnL / month-start capital │
│ This is the original AIC calculation method. │
└─────────────────────────────────────────────────────────┘

Method Comparison

AspectModified DietzSimple Flat Capital
Formuladaily_pnl / begin_navdaily_pnl / capital_amount
DenominatorPrior day's NAVMonth-start capital
Cash flow handlingTime-weightedDeferred
BTIG match✅ Yes❌ No
Use caseReconciliationLegacy reporting

When to Use Each Method

  • Default for all entities
  • Use for BTIG reconciliation
  • More accurate for entities with frequent cash flows
  • Industry standard for time-weighted returns

Simple Flat Capital

  • Legacy AIC calculation method
  • Use only if explicitly required for specific reporting
  • Not recommended for entities with cash flows

Implementation Files

FilePurpose
supabase/migrations/20260114212305_*.sqlAdd return_method column
supabase/migrations/20260114212344_*.sqlUpdate v_dietz_daily view
components/settings/entity-return-methods-card.tsxAdmin UI component
app/protected/settings/page.tsxSettings page integration