Legal Department Budget Forecasting Tool

Legal Department Budget Forecasting Tool

Personnel Costs (Annual)

$
$
$
$

Operational Expenses (Annual)

$
$
$
$

External Counsel & Litigation Costs (Annual Forecast)

Your budget forecast will be displayed here.

Disclaimer: This tool provides a forecast for planning purposes only and does not constitute financial advice. Actual costs may vary.

${formatCurrency(personnelCosts)}

Total Operational

${formatCurrency(operationalCosts)}

Total External

${formatCurrency(externalCosts)}

Total Forecasted Budget

${formatCurrency(totalBudget)}

Budget Breakdown

`; data.forEach(item => { const percentage = totalBudget > 0 ? ((item.value / totalBudget) * 100).toFixed(1) : 0; forecastHTML += `
${percentage}%

${item.label}

${formatCurrency(item.value)}

`; }); forecastHTML += `

External Spend Details

    `; if (externalMatters.length > 0) { externalMatters.forEach(matter => { forecastHTML += `
  • ${matter.desc}${formatCurrency(matter.cost)}
  • `; }); } else { forecastHTML += `
  • No external matters added.
  • `; } forecastHTML += `
`; forecastWrapper.innerHTML = forecastHTML; downloadSection.classList.remove('hidden'); } function downloadPDF() { const { jsPDF } = window.jspdf; const contentToCapture = document.getElementById('pdf-content'); if (!contentToCapture) return; html2canvas(contentToCapture, { scale: 2 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const margin = 40; const contentWidth = pdfWidth - (margin * 2); const contentHeight = (canvas.height * contentWidth) / canvas.width; pdf.addImage(imgData, 'PNG', margin, margin, contentWidth, contentHeight); pdf.save('Legal-Budget-Forecast.pdf'); }); } // --- Event Listeners --- tabs.forEach((tab, index) => tab.addEventListener('click', () => switchTab(index))); nextBtn.addEventListener('click', () => { if (currentTab < tabs.length - 1) switchTab(currentTab + 1); }); prevBtn.addEventListener('click', () => { if (currentTab > 0) switchTab(currentTab - 1); }); addMatterBtn.addEventListener('click', addMatterRow); document.getElementById('download-pdf-btn').addEventListener('click', downloadPDF); // --- Initial Setup --- updateNavButtons(); addMatterRow(); // Start with one empty matter row });
Scroll to Top