Financial Statement Fraud Detection Model

Financial Statement Fraud Detection Model

Enter Financial Statement Data ($)

Provide values for the current and previous fiscal years where requested. Enter '0' if a line item is not applicable.

Current Fiscal Year Data

Income Statement (Current Year)

Balance Sheet (Current Year)

Cash Flow Statement (Current Year)

Previous Fiscal Year Data

Income Statement (Previous Year)

Balance Sheet (Previous Year)

Note: This is an automated assessment based on predefined thresholds. Professional judgment and further investigation are always recommended.

`; resultsOutput.innerHTML = html; } // --- Event Listeners --- messageBoxCloseButton.addEventListener('click', hideMessageBox); // Tab navigation tabInputButton.addEventListener('click', () => switchTab('input')); tabResultsButton.addEventListener('click', () => switchTab('results')); tabAboutButton.addEventListener('click', () => switchTab('about')); // Next/Previous buttons nextTabButton.addEventListener('click', function() { if (activeTab === 'input') { switchTab('results'); } else if (activeTab === 'results') { switchTab('about'); } }); prevTabButton.addEventListener('click', function() { if (activeTab === 'results') { switchTab('input'); } else if (activeTab === 'about') { switchTab('results'); } }); // Collapsible sections currentYearHeader.addEventListener('click', () => toggleCollapsible(currentYearHeader, currentYearContent)); previousYearHeader.addEventListener('click', () => toggleCollapsible(previousYearHeader, previousYearContent)); // PDF Download functionality downloadPdfButton.addEventListener('click', async function() { const pdfContentDiv = document.createElement('div'); pdfContentDiv.style.position = 'absolute'; pdfContentDiv.style.left = '-9999px'; pdfContentDiv.style.width = '800px'; pdfContentDiv.style.backgroundColor = '#ffffff'; pdfContentDiv.style.padding = '20px'; // Add padding for better look in PDF const pdfTitle = document.createElement('h2'); pdfTitle.textContent = 'Financial Statement Fraud Detection Report'; pdfTitle.className = 'text-2xl font-bold text-gray-800 mb-6 text-center py-4'; pdfContentDiv.appendChild(pdfTitle); // Add content from resultsOutput, ensuring tables are cloned correctly const resultsContent = resultsOutput.cloneNode(true); resultsContent.removeAttribute('id'); // Remove ID to avoid duplicates resultsContent.style.overflowX = 'visible'; // Ensure content is not cut off in PDF // Remove the "No results message" if it's there const msg = resultsContent.querySelector('#noResultsMessage'); if (msg) msg.remove(); // Remove the download button from the cloned content const btn = resultsContent.querySelector('#downloadPdfButton'); if (btn) btn.remove(); pdfContentDiv.appendChild(resultsContent); // Apply consistent styling to cloned tables for PDF pdfContentDiv.querySelectorAll('table').forEach(table => { table.style.width = '100%'; table.style.borderCollapse = 'collapse'; table.style.marginBottom = '20px'; /* Add some space between tables */ table.style.fontFamily = 'sans-serif'; /* Ensure font for PDF */ }); pdfContentDiv.querySelectorAll('th, td').forEach(cell => { cell.style.border = '1px solid #e5e7eb'; cell.style.padding = '12px'; cell.style.textAlign = 'left'; cell.style.fontSize = '12px'; /* Smaller font for PDF */ }); pdfContentDiv.querySelectorAll('th').forEach(th => { th.style.backgroundColor = '#f9fafb'; th.style.fontWeight = '600'; th.style.color = '#374151'; }); pdfContentDiv.querySelectorAll('tbody tr:nth-child(odd)').forEach(tr => { tr.style.backgroundColor = '#f9fafb'; }); pdfContentDiv.querySelectorAll('tbody tr:hover').forEach(tr => { tr.style.backgroundColor = '#ffffff'; /* Remove hover effect for PDF */ }); pdfContentDiv.querySelectorAll('h4').forEach(h4 => { h4.style.fontSize = '1.125rem'; /* Tailwind text-lg */ h4.style.fontWeight = 'bold'; h4.style.color = '#374151'; /* Gray-700 */ h4.style.marginBottom = '0.5rem'; }); pdfContentDiv.querySelectorAll('.red-flag').forEach(span => { span.style.color = '#dc2626'; /* Ensure red color in PDF */ span.style.fontWeight = 'bold'; }); pdfContentDiv.querySelectorAll('.yellow-flag').forEach(span => { span.style.color = '#d97706'; /* Ensure yellow color in PDF */ span.style.fontWeight = 'bold'; }); pdfContentDiv.querySelectorAll('.green-flag').forEach(span => { span.style.color = '#16a34a'; /* Ensure green color in PDF */ span.style.fontWeight = 'bold'; }); document.body.appendChild(pdfContentDiv); try { const canvas = await html2canvas(pdfContentDiv, { scale: 2, // Increase scale for better resolution in PDF useCORS: true, // Enable cross-origin resource sharing for images (if any) logging: false // Disable logging for cleaner console }); const imgData = canvas.toDataURL('image/png'); // Initialize jsPDF const { jsPDF } = window.jspdf; const pdf = new jsPDF('p', 'mm', 'a4'); // Portrait, millimeters, A4 size const imgWidth = 190; // A4 width in mm (210mm) minus margins (10mm on each side) const pageHeight = pdf.internal.pageSize.height; const imgHeight = canvas.height * imgWidth / canvas.width; let heightLeft = imgHeight; let position = 10; // Initial Y position for content pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight); heightLeft -= pageHeight; // Add more pages if content overflows while (heightLeft >= -50) { // Adjusted condition to ensure all content is captured position = heightLeft - imgHeight + 10; // Adjust position for new page pdf.addPage(); pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight); heightLeft -= pageHeight; } pdf.save('Financial_Fraud_Detection_Report.pdf'); } catch (error) { console.error('Error generating PDF:', error); showMessageBox('PDF Error', 'Failed to generate PDF. Please try again. Details: ' + error.message); } finally { // Clean up the temporary div document.body.removeChild(pdfContentDiv); } }); }); } catch (e) { // Catch any errors that occur even before DOMContentLoaded fires fully // or unhandled errors within the DOMContentLoaded function // Use a fallback to alert if messageBox isn't ready if (document.getElementById('messageBoxTitle') && document.getElementById('messageBoxText')) { document.getElementById('messageBoxTitle').textContent = 'Initialization Error'; document.getElementById('messageBoxText').textContent = 'An unexpected error occurred during tool initialization: ' + e.message + '. Please refresh the page.'; document.getElementById('messageBox').style.display = 'flex'; } else { console.error("Critical Error during tool initialization:", e); alert("An critical error occurred during tool initialization: " + e.message + ". Please refresh the page. Check console for details."); } }
Scroll to Top