Leveraged Buyout (LBO) Model Generator
1. Assumptions
Acquisition Details
Debt Tranche 1 (Senior Debt)
Operating Projections
Exit Assumptions
2. Debt Schedule
Calculate the model to see the debt schedule.
3. Summary & Valuation
Total Sources:
Total Uses:
Equity Contribution:
Entry EBITDA:
Exit EBITDA:
Exit Enterprise Value:
Net Debt at Exit:
Equity Value at Exit:
Multiple on Invested Capital (MOIC):
Internal Rate of Return (IRR):
Calculate the model to see the debt schedule.
'; totalSourcesOutput.textContent = ''; totalUsesOutput.textContent = ''; equityContributionOutput.textContent = ''; entryEBITDAOutput.textContent = ''; exitEBITDAOutput.textContent = ''; exitEVOutput.textContent = ''; netDebtAtExitOutput.textContent = ''; equityValueAtExitOutput.textContent = ''; moicOutput.textContent = ''; irrOutput.textContent = ''; // Reset to the first tab openTab('inputs'); hideMessage(); } /** * Downloads the LBO model results as a PDF. */ function downloadPDF() { if (!window.lboResults) { showMessage('Please calculate the LBO model first.', 'info'); return; } const { jsPDF } = window.jspdf; const pdf = new jsPDF('p', 'mm', 'a4'); // 'p' for portrait, 'mm' for millimeters, 'a4' size const BLACK_COLOR = [31, 41, 55]; // Tailwind gray-900 equivalent const BLUE_HEADER_COLOR = [29, 78, 216]; // Tailwind blue-700 equivalent const RED_COLOR = [220, 38, 38]; // Tailwind red-600 equivalent const BLUE_TEXT_COLOR = [37, 99, 235]; // Tailwind blue-600 equivalent const GREEN_TEXT_COLOR = [22, 163, 74]; // Tailwind green-600 equivalent const GRAY_TEXT_COLOR = [75, 85, 99]; // Tailwind gray-700 equivalent let y = 15; // Y-coordinate for placing content // Title pdf.setFontSize(22); pdf.setFont('helvetica', 'bold'); pdf.setTextColor(BLACK_COLOR[0], BLACK_COLOR[1], BLACK_COLOR[2]); pdf.text('Leveraged Buyout (LBO) Model Results', 105, y, { align: 'center' }); y += 15; // --- Input Parameters Section --- pdf.setFontSize(16); pdf.setFont('helvetica', 'bold'); pdf.text('1. Input Parameters', 15, y); y += 8; const inputData = [ ['Purchase Price', formatCurrency(window.lboResults.inputs.purchasePrice)], ['Debt Financing', `${window.lboResults.inputs.debtPercentage * 100}%`], ['Transaction Fees', formatCurrency(window.lboResults.inputs.transactionFees)], ['Debt 1 Interest Rate', `${window.lboResults.inputs.debt1InterestRate * 100}%`], ['Debt 1 Term', `${window.lboResults.inputs.debt1Term} Years`], ['Debt 1 Annual Amortization', `${window.lboResults.inputs.debt1Amortization * 100}%`], ['Projection Years', `${window.lboResults.inputs.projectionYears} Years`], ['Annual Revenue Growth', `${window.lboResults.inputs.revenueGrowth * 100}%`], ['EBITDA Margin', `${window.lboResults.inputs.ebitdaMargin * 100}%`], ['Exit EBITDA Multiple', `${window.lboResults.inputs.exitMultiple}x`] ]; pdf.autoTable({ startY: y, head: [['Parameter', 'Value']], body: inputData, theme: 'grid', styles: { fontSize: 9, cellPadding: 2, overflow: 'linebreak', lineColor: 200, lineWidth: 0.1 }, headStyles: { fillColor: BLUE_HEADER_COLOR, textColor: 255, fontStyle: 'bold' }, margin: { left: 15, right: 15 }, columnStyles: { 0: { cellWidth: 70 }, // Parameter column width 1: { cellWidth: 'auto' } // Value column width } }); y = pdf.autoTable.previous.finalY + 15; // --- Debt Schedule Section --- pdf.setFontSize(16); pdf.setFont('helvetica', 'bold'); pdf.text('2. Debt Schedule (Senior Debt)', 15, y); y += 8; const debtTableBody = window.lboResults.debtSchedule.map(row => [ row.year, formatCurrency(row.beginningBalance), formatCurrency(row.interestPayment), formatCurrency(row.principalPayment), formatCurrency(row.endingBalance) ]); pdf.autoTable({ startY: y, head: [['Year', 'Beginning Balance', 'Interest Payment', 'Principal Payment', 'Ending Balance']], body: debtTableBody, theme: 'grid', styles: { fontSize: 9, cellPadding: 2, overflow: 'linebreak', lineColor: 200, lineWidth: 0.1 }, headStyles: { fillColor: BLUE_HEADER_COLOR, textColor: 255, fontStyle: 'bold' }, margin: { left: 15, right: 15 }, didParseCell: function (data) { // Align currency columns right if (data.column.index >= 1) { // Apply to Beginning, Interest, Principal, Ending Balance data.cell.styles.halign = 'right'; } } }); y = pdf.autoTable.previous.finalY + 15; // --- Summary & Valuation Section --- pdf.setFontSize(16); pdf.setFont('helvetica', 'bold'); pdf.text('3. Summary & Valuation', 15, y); y += 8; // Check if content fits on one page, otherwise add a new page if (y + 100 > pdf.internal.pageSize.height - 15) { // Estimate space needed for summary pdf.addPage(); y = 15; // Reset y for new page } const summaryItems = [ { label: 'Total Sources:', value: formatCurrency(window.lboResults.financialSummary.totalSources), color: BLUE_TEXT_COLOR }, { label: 'Total Uses:', value: formatCurrency(window.lboResults.financialSummary.totalUses), color: RED_COLOR }, { label: 'Equity Contribution:', value: formatCurrency(window.lboResults.financialSummary.equityContribution), color: BLUE_TEXT_COLOR }, { label: 'Entry EBITDA:', value: formatCurrency(window.lboResults.financialSummary.entryEBITDA), color: GRAY_TEXT_COLOR }, { label: 'Exit EBITDA:', value: formatCurrency(window.lboResults.financialSummary.exitYearEBITDA), color: GRAY_TEXT_COLOR }, { label: 'Exit Enterprise Value:', value: formatCurrency(window.lboResults.financialSummary.exitEnterpriseValue), color: BLUE_TEXT_COLOR }, { label: 'Net Debt at Exit:', value: formatCurrency(window.lboResults.financialSummary.netDebtAtExit), color: RED_COLOR }, { label: 'Equity Value at Exit:', value: formatCurrency(window.lboResults.financialSummary.equityValueAtExit), color: BLUE_TEXT_COLOR }, { label: 'Multiple on Invested Capital (MOIC):', value: window.lboResults.financialSummary.moic.toFixed(2), color: GREEN_TEXT_COLOR }, { label: 'Internal Rate of Return (IRR):', value: formatPercentage(window.lboResults.financialSummary.irr), color: GREEN_TEXT_COLOR } ]; pdf.setFontSize(10); pdf.setFont('helvetica', 'normal'); // Reset font to normal for values summaryItems.forEach(item => { if (y + 7 > pdf.internal.pageSize.height - 15) { // Check space before adding line pdf.addPage(); y = 15; } pdf.setTextColor(BLACK_COLOR[0], BLACK_COLOR[1], BLACK_COLOR[2]); pdf.text(item.label, 15, y); pdf.setTextColor(item.color[0], item.color[1], item.color[2]); pdf.text(item.value, 150, y, { align: 'right' }); // Align value to the right y += 7; }); pdf.save('LBO_Model_Results.pdf'); } /** * Initializes DOM element references once the document is fully loaded. */ document.addEventListener('DOMContentLoaded', () => { // Input Elements purchasePriceInput = document.getElementById('purchasePrice'); debtPercentageInput = document.getElementById('debtPercentage'); transactionFeesInput = document.getElementById('transactionFees'); debt1InterestRateInput = document.getElementById('debt1InterestRate'); debt1TermInput = document.getElementById('debt1Term'); debt1AmortizationInput = document.getElementById('debt1Amortization'); projectionYearsInput = document.getElementById('projectionYears'); revenueGrowthInput = document.getElementById('revenueGrowth'); ebitdaMarginInput = document.getElementById('ebitdaMargin'); exitMultipleInput = document.getElementById('exitMultiple'); // Output Elements (Summary Tab) totalSourcesOutput = document.getElementById('totalSourcesOutput'); totalUsesOutput = document.getElementById('totalUsesOutput'); equityContributionOutput = document.getElementById('equityContributionOutput'); entryEBITDAOutput = document.getElementById('entryEBITDAOutput'); exitEBITDAOutput = document.getElementById('exitEBITDAOutput'); exitEVOutput = document.getElementById('exitEVOutput'); netDebtAtExitOutput = document.getElementById('netDebtAtExitOutput'); equityValueAtExitOutput = document.getElementById('equityValueAtExitOutput'); moicOutput = document.getElementById('moicOutput'); irrOutput = document.getElementById('irrOutput'); // Other Elements debtScheduleOutputDiv = document.getElementById('debtScheduleOutput'); messageBox = document.getElementById('messageBox'); // Initialize navigation button states updateNavigationButtons(); });