IPO Performance Forecasting Tool

IPO Performance Forecasting Tool

Estimate the potential market performance of an upcoming IPO.

$

${formatter.format(forecastData.priceForecast.low)} - ${formatter.format(forecastData.priceForecast.high)}

`; }; const downloadPDF = () => { if (!forecastData) { alert('Please generate a forecast first on the "Forecast Dashboard" tab.'); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const theme = document.querySelector('input[name="theme"]:checked').value; const page = { width: doc.internal.pageSize.getWidth(), height: doc.internal.pageSize.getHeight() }; const margin = 50; let y = 0; const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }); const colors = theme === 'growth' ? { bg: '#047857', text: '#FFFFFF', primary: '#1f2937', secondary: '#4b5563', accent: '#10b981' } : { bg: '#0056b3', text: '#FFFFFF', primary: '#212529', secondary: '#495057', accent: '#007bff' }; // --- Header --- doc.setFillColor(colors.bg); doc.rect(0, 0, page.width, 90, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(22); doc.setTextColor(colors.text); doc.text('IPO Performance Forecast Report', margin, 55); doc.setFontSize(12); doc.text(`Company: ${forecastData.inputs.companyName}`, margin, 75); y = 130; // --- Summary Section --- doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor(colors.primary); doc.text('Forecast Summary', margin, y); y += 20; doc.autoTable({ startY: y, theme: 'grid', headStyles: { fillColor: colors.accent }, body: [ ['Forecast Score', `${forecastData.finalScore} / 100`], ['Forecast Outlook', forecastData.forecastLabel], ['IPO Price', formatter.format(forecastData.inputs.ipoPrice)], ['30-Day Price Forecast', `${formatter.format(forecastData.priceForecast.low)} - ${formatter.format(forecastData.priceForecast.high)}`], ] }); y = doc.autoTable.previous.finalY + 30; // --- Chart --- if (y > page.height - 220) { doc.addPage(); y = margin; } doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor(colors.primary); doc.text('Forecast Factor Analysis', margin, y); y += 20; const chartImage = forecastChart.toBase64Image(); doc.addImage(chartImage, 'PNG', margin, y, page.width - margin*2, (page.width - margin*2) / 2.5); y += (page.width - margin*2) / 2.5 + 30; // --- Input Factors Table --- if (y > page.height - 150) { doc.addPage(); y = margin; } doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor(colors.primary); doc.text('Input Factors', margin, y); y += 20; doc.autoTable({ startY: y, theme: 'striped', headStyles: { fillColor: colors.accent }, head: [['Factor', 'Input']], body: [ ['Industry', forecastData.inputs.factors.industry.label], ['YoY Revenue Growth', forecastData.inputs.factors.revenueGrowth.label], ['Net Profit Margin', forecastData.inputs.factors.profitMargin.label], ['Market Sentiment', forecastData.inputs.factors.marketSentiment.label], ['Underwriter Quality', forecastData.inputs.factors.underwriterQuality.label], ['Deal Size', forecastData.inputs.factors.dealSize.label], ] }); doc.save(`ipo-forecast-${forecastData.inputs.companyName.replace(/\s+/g, '-')}.pdf`); }; // --- Event Listeners --- tabs.forEach((tab, index) => tab.addEventListener('click', () => showTab(index))); prevBtn.addEventListener('click', () => navigateTab(-1)); nextBtn.addEventListener('click', () => navigateTab(1)); forecastBtn.addEventListener('click', generateForecast); downloadPdfBtn.addEventListener('click', downloadPDF); // --- Initialization --- showTab(0); });
Scroll to Top