Private Market Liquidity Assessment Tool

Private Market Liquidity Assessment Tool

Input Investment Details

Assess Liquidity Factors

Liquidity Assessment Results

Please input details on previous tabs to see results.

Please complete "Investment Details" and "Liquidity Factors" tabs first.

'; return; } const inv = liquidityAssessmentData.investment; const fac = liquidityAssessmentData.factors; let estimatedTimeToLiquidity = inv.holdingPeriod; // Base time in years let potentialLiquidityDiscount = 0; // Base discount % let liquidityRiskScore = 'Medium'; // Default // Adjust Time to Liquidity based on factors if (fac.marketConditions === 'Bear') estimatedTimeToLiquidity += 2; if (fac.marketConditions === 'Bull') estimatedTimeToLiquidity = Math.max(1, estimatedTimeToLiquidity - 1); if (fac.secondaryMarketActivity === 'Low' || fac.secondaryMarketActivity === 'Non-existent') estimatedTimeToLiquidity += 3; if (fac.secondaryMarketActivity === 'High') estimatedTimeToLiquidity = Math.max(1, estimatedTimeToLiquidity - 0.5); if (fac.exitStrategy === 'Liquidation') estimatedTimeToLiquidity -= 1; // Faster but at a cost if (fac.exitStrategy === 'IPO') estimatedTimeToLiquidity += 2; // Longer process // Adjust Liquidity Discount based on factors switch (inv.assetClass) { case 'Private Equity': potentialLiquidityDiscount += 15; break; case 'Private Credit': potentialLiquidityDiscount += 10; break; case 'Real Estate': potentialLiquidityDiscount += 12; break; case 'Infrastructure': potentialLiquidityDiscount += 8; break; case 'Venture Capital': potentialLiquidityDiscount += 25; break; case 'Other': potentialLiquidityDiscount += 18; break; } if (fac.marketConditions === 'Bear') potentialLiquidityDiscount += 10; if (fac.marketConditions === 'Volatile') potentialLiquidityDiscount += 5; if (fac.marketConditions === 'Bull') potentialLiquidityDiscount = Math.max(0, potentialLiquidityDiscount - 5); if (fac.secondaryMarketActivity === 'Low' || fac.secondaryMarketActivity === 'Non-existent') potentialLiquidityDiscount += 15; if (fac.investorDemand === 'Low') potentialLiquidityDiscount += 7; if (fac.dealComplexity === 'High') potentialLiquidityDiscount += 5; if (fac.regulatoryEnvironment === 'Restrictive') potentialLiquidityDiscount += 3; // Determine Liquidity Risk Score if (estimatedTimeToLiquidity > 7 || potentialLiquidityDiscount > 20) { liquidityRiskScore = 'High'; } else if (estimatedTimeToLiquidity > 4 || potentialLiquidityDiscount > 10) { liquidityRiskScore = 'Medium'; } else { liquidityRiskScore = 'Low'; } // Store calculated results liquidityAssessmentData.results = { estimatedTimeToLiquidity: estimatedTimeToLiquidity.toFixed(1), // Years potentialLiquidityDiscount: potentialLiquidityDiscount.toFixed(2), // Percentage liquidityRiskScore: liquidityRiskScore }; let html = `

Based on your inputs, here is the preliminary liquidity assessment:

Investment Name: ${inv.name}
Asset Class: ${inv.assetClass}
Investment Amount: ${formatCurrency(inv.amount)}
Estimated Time to Liquidity: ${liquidityAssessmentData.results.estimatedTimeToLiquidity} Years
Potential Liquidity Discount: ${formatPercentage(liquidityAssessmentData.results.potentialLiquidityDiscount)}
Liquidity Risk Score: ${liquidityAssessmentData.results.liquidityRiskScore}
${inv.notes ? `
Notes: ${inv.notes}
` : ''} `; liquidityResultsDisplay.innerHTML = html; } // --- PDF Generation Logic --- /** * Generates a PDF report of the liquidity assessment. */ window.generatePDF = async function() { if (!liquidityAssessmentData.investment || !liquidityAssessmentData.factors || !liquidityAssessmentData.results) { showCustomMessageBox('Please complete all sections of the tool before generating the PDF report.'); return; } pdfContentContainer.innerHTML = ''; // Clear previous content const inv = liquidityAssessmentData.investment; const fac = liquidityAssessmentData.factors; const res = liquidityAssessmentData.results; let pdfHtml = `

Private Market Liquidity Report

Investment Details

Investment Name:${inv.name}
Asset Class:${inv.assetClass}
Investment Amount:${formatCurrency(inv.amount)}
Investment Date:${formatDate(inv.date)}
Expected Holding Period:${inv.holdingPeriod} Years
Target IRR:${formatPercentage(inv.targetIRR)}
${inv.notes ? `
Notes:${inv.notes}
` : ''}

Liquidity Factors

Current Market Conditions:${fac.marketConditions}
Secondary Market Activity:${fac.secondaryMarketActivity}
General Investor Demand:${fac.investorDemand}
Primary Exit Strategy:${fac.exitStrategy}
Deal Complexity / Covenants:${fac.dealComplexity}
Regulatory Environment:${fac.regulatoryEnvironment}

Liquidity Assessment Results

Estimated Time to Liquidity:${res.estimatedTimeToLiquidity} Years
Potential Liquidity Discount:${formatPercentage(res.potentialLiquidityDiscount)}
Liquidity Risk Score:${res.liquidityRiskScore}
`; pdfContentContainer.innerHTML = pdfHtml; // Temporarily make the container visible (but off-screen) for html2canvas pdfContentContainer.style.display = 'block'; const canvas = await html2canvas(pdfContentContainer, { scale: 2, logging: false, useCORS: true, // Fix: Ensure background is rendered correctly backgroundColor: '#ffffff' }); // Hide the container again immediately pdfContentContainer.style.display = 'none'; const imgData = canvas.toDataURL('image/png'); const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'mm', 'a4'); const imgWidth = 210; const pageHeight = 297; const imgHeight = canvas.height * imgWidth / canvas.width; let heightLeft = imgHeight; let position = 0; doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); heightLeft -= pageHeight; while (heightLeft > 0) { position = -heightLeft; // Adjust position for new page doc.addPage(); doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); heightLeft -= pageHeight; } doc.save('Private_Market_Liquidity_Report.pdf'); pdfContentContainer.innerHTML = ''; // Clean up after download } // --- Initial Setup --- showTab(0); // Show the first tab on load });
Scroll to Top