The "Black Box" Calculation
For most funds, the distribution waterfall lives in a massive, fragile spreadsheet controlled by one person. When cash hits the account, manually calculating the split between Senior Interest, Junior Principal, and GP Carry is slow, prone to formula errors, and terrifyingly opaque to investors.
From Cash Receipt to Wire Transfer
Event-Driven Calculation
Don't wait for the end of the quarter. Trigger distribution logic instantly when a repayment lands in the Master SPV account.
LPA as Code
Hard-code your specific distribution rules (e.g., "100% to Senior until 8% Hurdle") into the engine. The system applies these rules consistently to every single dollar that enters the fund.
Multi-Entity Passthroughs
Handle complex SPV chains automatically. When the Master SPV distributes, the engine automatically calculates the downstream effect on Feeder Funds and Blockers, creating a unified payment chain.
Precision Payment Logic
Priority Enforcement
Ensure Senior Lenders are paid their exact interest accrual before a single cent flows to Junior or Equity tranches.
Catch-Up & Carry
Programmatically switch logic triggers. Once the Preferred Return is met, the engine automatically activates the GP Catch-Up logic.
Withholding Management
Apply tax withholding rules to specific beneficiary calculations before the net payment is finalized.
Payment Batches
Group thousands of individual LP wires into a single approval batch for the Ops team.
Logic, not cells
This runbook demonstrates the power of a defined waterfall. You don't write the math every time; you simply pass the cash to the Waterfall object, and it applies your pre-defined LPA rules (Senior Priority, Hurdles, Catch-ups) instantly.
waterfall-distribution.ts
import { Runbook, Waterfall, Distribution } from '@ntropii/sdk'; Runbook.on('cash_received', async (event) => { // 1. Load the Waterfall Definition (The logic of the LPA) const waterfall = await Waterfall.get('deal_101_structure'); // 2. Run the "Cascade" logic against the incoming cash // The SDK automatically handles Senior Priority, Hurdles, and Carry math const calculatedSplit = await waterfall.runCascade({ amount: event.amount, currency: 'USD' }); // 3. Generate the Distribution Batch for approval const batch = await Distribution.createBatch({ context: 'deal_101_spv', allocations: calculatedSplit }); console.log(`Distribution Calculated: ${batch.summary}`);});Common Distribution Models
Standard Debt Waterfall
Senior Interest → Senior Principal → Junior Interest → Junior Principal.
European Waterfall (Whole Fund)
100% Return of Capital to Investors before GP sees any Carry.
American Waterfall (Deal-by-Deal)
Distribute profits on a specific asset basis with clawback reserves.
Pari-Passu Split
Pro-rata distribution across multiple lenders of equal seniority.
Tax-Blocker Route
Logic to route specific investor payments through an offshore blocker entity.
Perfect your payouts
Stop relying on Excel to move millions. Build your distribution logic in code.