Skip to main content

Equalizations App

The equalizations app handles recalculating investor allocations when new investors join the fund or allocation rules change.

What is an Equalization?

When funds process transactions, they’re often posted at a high level and allocated to individual commitments. Over time, these allocations may need to change due to:
  1. New closings - New investors joining the fund
  2. Allocation rule changes - Business logic updates
  3. Transfers/Cancel-corrects - Investor class changes
An equalization catches all investors up to their current allocation. The net effect on the fund is always $0 since some investors go up and others go down.
Fees, calls for fees, and adjustments are generally not equalized - they’re handled differently.

Why Allocations Change

When new investors join through a closing:
  • New edges are added to the allocation graph
  • Edge weights change
  • Existing investors’ allocations decrease
The fund’s allocation calculation may change:
  • Different basis for early vs. late fund life
  • Example: Committed capital for first 3 years, then actual fees
When an investor transfers ownership:
  • May change the commitment’s investor class
  • May change allocation percentages

Cash vs. Deemed Equalizations

  • Calculated immediately when allocation rules change
  • No cash changes hands
  • Transactions marked with is_equalization_accrual=True
  • Used for fee basis calculations

Calculation Steps

1

Calculate Existing Allocation

Query all transactions for the use to find the total amount already allocated to each commitment.
2

Calculate New Allocation

Re-run the allocation logic with the new rules to determine what the allocation should be.
3

Calculate Difference

For each commitment: new_allocation - existing_allocation = equalization_amount
4

Calculate Interest

Interest is charged/paid on the difference amount from the original date to the equalization date.

Interest Netting

Interest must net to $0 across all investors. Any remainder is allocated to the largest investors using the rounding scheme.

System Implementation

Deemed Equalizations

Created automatically when allocation rules change:
# For each previous capital call/distribution
create_equalization_calculate_from_scratch.py
    ├── Spin off Celery task per event
    ├── Calculate existing allocations
    ├── Calculate new allocations
    ├── Create difference transactions
    └── Calculate and net interest

Cash Equalizations

Triggered when users choose to process:
  1. User navigates to capital event
  2. System shows outstanding deemed equalizations
  3. User opts to create cash equalization
  4. Cash transactions are generated

Example Scenario

Initial State (after first closing):
  • LP1: 100,000commitment,100,000 commitment, 50,000 called
  • LP2: 100,000commitment,100,000 commitment, 50,000 called
After Second Closing (LP3 joins with $100,000):
  • LP1 new allocation: $33,333
  • LP2 new allocation: $33,333
  • LP3 new allocation: $33,333
Equalization:
  • LP1 receives: $16,667 (refund)
  • LP2 receives: $16,667 (refund)
  • LP3 pays: $33,333 (catch-up)
Net effect on fund: $0

Configuration Options

OptionDescription
Interest opt-outDisable interest calculations
Different datesSeparate effective dates for call vs. distribution
Closing-by-closingEqualize per closing vs. lump sum