Collateralized Loan Obligations (CLOs) represent a pivotal asset class in institutional credit markets, securitizing diversified portfolios of senior secured leveraged loans into rated debt tranches (AAA through BB) and unrated subordinated equity. Generating consistent 12–18% IRR on CLO equity requires modeling strict covenant boundaries—specifically Overcollateralization (OC) and Interest Coverage (IC) tests that govern cash diversion.
The Mechanics of CLO Coverage Tests & Cash Flow Redirection
How covenant breaches trigger automatic deleveraging of senior notes:
The Overcollateralization (OC) ratio divides the total collateral principal balance (adjusted for CCC haircuts, defaulted assets, and discount obligations) by the aggregate principal amount of the senior tranches. If loan defaults cause the ratio to drop below the contractual trigger (e.g. 107.5%), junior interest and equity distributions are immediately cut off and redirected to amortize the Class A AAA notes until compliance is restored.
CLO Capital Structure & Subordination Tranche Profile
| Tranche Class | Credit Rating | Subordination Buffer | Spread (SOFR + bps) |
|---|---|---|---|
| Class A-1 / A-2 | AAA / Aaa | 36.0% – 38.0% | +130 to +150 bps |
| Class B & C (Mezzanine) | AA to BBB | 18.0% – 25.0% | +200 to +320 bps |
| Class D & E (Junior) | BB to B | 8.0% – 12.0% | +600 to +850 bps |
| Subordinated Notes | Unrated (Equity) | 0.0% (First-Loss) | Residual Cash Flow (14–18% IRR) |
Calculating CLO OC Ratio & Haircut Adjustments in TypeScript
Quantifying CCC excess concentration deductions across loan collateral:
export interface CLOPortfolioState {
totalParBalance: number;
defaultedParBalance: number;
cccExcessHaircut: number;
seniorDebtPrincipal: number;
triggerThresholdPct: number;
}
export function evaluateOCTest(state: CLOPortfolioState): { ocRatio: number; isPassing: boolean; cureDeficit: number } {
const adjustedCollateral = state.totalParBalance - state.defaultedParBalance - state.cccExcessHaircut;
const ocRatio = (adjustedCollateral / state.seniorDebtPrincipal) * 100;
const isPassing = ocRatio >= state.triggerThresholdPct;
const requiredCollateral = (state.triggerThresholdPct / 100) * state.seniorDebtPrincipal;
const cureDeficit = isPassing ? 0 : requiredCollateral - adjustedCollateral;
return { ocRatio, isPassing, cureDeficit };
}
Structure Real Estate & Corporate Debt Facilities
Optimize leveraged credit and liquidity structures with seasoned capital advisory. Read our analysis of Securitized RMBS Tranche Waterfall Modeling, explore commercial truck litigation physics on CarInjuryAttorney ABS Forensics, review multi-tenant affiliate tracking on AffiliatePartners Postback Security, or consult with our structured debt team.