Small Business Loan Risk Assessment Tool
Business Stability
%
Enter as a percentage (e.g., 10 for 10%, -5 for -5%).
Financial Health Indicators
$
$
Includes existing loans, leases, etc.
Owner Profile & Loan Context
Risk Assessment Indication
Please complete all previous tabs to view your risk assessment indication.
Note: This is a simplified estimation based on the information you provided. Actual loan decisions involve a much more detailed review by lenders.
`; sblra_domElements.pdfDownloadBtn.classList.remove('sblra-hidden'); } function sblra_hexToRgb(hex) { if (!hex || typeof hex !== 'string') return null; const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; hex = hex.replace(shorthandRegex, function(m, r, g, b) { return r + r + g + g + b + b; }); const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; } function sblra_generatePdf() { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { console.error("jsPDF library not loaded."); alert("PDF generation unavailable: jsPDF library not loaded."); return; } if (typeof window.jspdf.jsPDF.API === 'undefined' || typeof window.jspdf.jsPDF.API.autoTable === 'undefined') { console.error("jsPDF-AutoTable plugin not loaded."); alert("PDF generation unavailable: AutoTable plugin not loaded."); return; } if (!sblra_validateTab1() || !sblra_validateTab2() || !sblra_validateTab3()) { alert("Please ensure all inputs are correctly filled before generating PDF."); // Attempt to navigate to the first invalid tab if (!sblra_validateTab1()) { const tab1Button = document.querySelector('.sblra-tab-link[data-tab="sblra-tab1"]'); if (tab1Button) tab1Button.click(); } else if (!sblra_validateTab2()) { const tab2Button = document.querySelector('.sblra-tab-link[data-tab="sblra-tab2"]'); if (tab2Button) tab2Button.click(); } else if (!sblra_validateTab3()) { const tab3Button = document.querySelector('.sblra-tab-link[data-tab="sblra-tab3"]'); if (tab3Button) tab3Button.click(); } return; } // Ensure assessment is run with latest data for PDF sblra_calculateRiskAssessment(); if (sblra_domElements.assessmentResultContainer.innerHTML.includes("sblra-error-message")) { alert("Cannot generate PDF due to errors in input. Please correct them."); return; } const ActualJsPDF = window.jspdf.jsPDF; const doc = new ActualJsPDF(); const { yearsInBusiness, netProfitMargin, monthlyRevenue, monthlyDebtPayments, calculatedDTI, cashReserves, creditScore, collateral, riskCategory, riskExplanation } = sblra_userInputData; doc.setFontSize(18); const primaryColorRGB = sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-primary-color').trim()); const secondaryColorRGB = sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-secondary-color').trim()); if (primaryColorRGB) doc.setTextColor(primaryColorRGB.r, primaryColorRGB.g, primaryColorRGB.b); else doc.setTextColor(0,90,156); doc.text("Small Business Loan Risk Assessment", 105, 20, null, null, "center"); doc.setFontSize(12); doc.setTextColor(51, 51, 51); let startY = 35; const tableHeadFillColor = secondaryColorRGB ? [secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b] : [0,51,102]; doc.setFontSize(14); if (secondaryColorRGB) doc.setTextColor(secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b); else doc.setTextColor(0,51,102); doc.text("Summary of Your Inputs:", 14, startY); startY += 10; const inputDataBody = [ ["Years in Business:", yearsInBusiness], ["Net Profit Margin (Last 12 Mo.):", `${netProfitMargin}%`], ["Avg. Monthly Business Revenue:", sblra_formatCurrency(monthlyRevenue)], ["Total Monthly Debt Payments:", sblra_formatCurrency(monthlyDebtPayments)], ["Calculated Business DTI:", `${isFinite(calculatedDTI) ? calculatedDTI.toFixed(1) + '%' : 'N/A'}`], ["Cash Reserves (OpEx months):", cashReserves], ["Owner's Personal Credit Score:", creditScore], ["Collateral for Loan:", collateral] ]; doc.autoTable({ startY: startY, theme: 'grid', headStyles: { fillColor: tableHeadFillColor, textColor: 255 }, columnStyles: {0: {fontStyle: 'bold'}}, body: inputDataBody, margin: { left: 14, right: 14 } }); startY = doc.autoTable.previous.finalY + 15; doc.setFontSize(16); if (riskCategory === "Lower Risk Profile Indication") doc.setTextColor(sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-accent-color').trim())?.r || 0, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-accent-color').trim())?.g || 128, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-accent-color').trim())?.b || 0); else if (riskCategory === "Moderate Risk Profile Indication") doc.setTextColor(sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-warning-color').trim())?.r || 255, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-warning-color').trim())?.g || 165, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-warning-color').trim())?.b || 0); else doc.setTextColor(sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-danger-color').trim())?.r || 255, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-danger-color').trim())?.g || 0, sblra_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--sblra-danger-color').trim())?.b || 0); doc.text("Assessment Result: " + riskCategory, 14, startY); startY += 10; doc.setFontSize(11); doc.setTextColor(51,51,51); const splitExplanation = doc.splitTextToSize(riskExplanation, doc.internal.pageSize.width - 28); doc.text(splitExplanation, 14, startY); startY += (splitExplanation.length * (doc.getLineHeight() / doc.internal.scaleFactor)) + 10; doc.setFontSize(9); doc.setTextColor(100); const disclaimer = "Note: This is a simplified estimation based on the information you provided. Actual loan decisions involve a much more detailed review by lenders and are subject to their specific criteria."; const splitDisclaimer = doc.splitTextToSize(disclaimer, doc.internal.pageSize.width - 28); doc.text(splitDisclaimer, 14, startY); doc.setFontSize(10); doc.setTextColor(150); doc.text(`Report generated on: ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, 14, doc.internal.pageSize.height - 10); doc.save("Small_Business_Loan_Risk_Assessment.pdf"); } window.sblra_switchTab = sblra_switchTab; window.sblra_navigateToTab = sblra_navigateToTab; window.sblra_generatePdf = sblra_generatePdf;