Credit Card Fraud Activity Tracker

Credit Card Fraud Activity Tracker

Monitor, analyze, and report on fraudulent transaction patterns.

Awaiting Fraud Data

Navigate to the configuration tab to input fraudulent transaction data for analysis.

Configure Fraudulent Transaction Data

Transaction ID Cardholder Amount ($) Fraud Type Location (USA) Actions

${currentData.mostCommonType}

Incidents by Fraud Type

Recent Fraud Transactions

${transactionRows}
IDCardholderAmountTypeLocation
`; const ctx = getElem('fraudTypeChart').getContext('2d'); const chartLabels = Object.keys(currentData.typeCounts); const chartData = Object.values(currentData.typeCounts); if (fraudTypeChart) fraudTypeChart.destroy(); fraudTypeChart = new Chart(ctx, { type: 'bar', data: { labels: chartLabels, datasets: [{ label: '# of Incidents', data: chartData, backgroundColor: '#3B82F6', }] }, options: { responsive: true, maintainAspectRatio: false, indexAxis: 'y' } }); downloadSection.classList.remove('hidden'); showTab(1); }; analyzeBtn.addEventListener('click', analyzeFraud); // --- PDF DOWNLOAD --- const downloadPDF = () => { if (!currentData) return; const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); const btnText = getElem('pdf-btn-text'); const btnSpinner = getElem('pdf-btn-spinner'); btnText.classList.add('hidden'); btnSpinner.classList.remove('hidden'); downloadPdfBtn.disabled = true; try { const pageWidth = pdf.internal.pageSize.getWidth(); const margin = 40; let y = margin; pdf.setFont('helvetica', 'bold'); pdf.setFontSize(22); pdf.text("Credit Card Fraud Activity Report", pageWidth / 2, y, { align: 'center' }); y += 15; pdf.setFont('helvetica', 'normal'); pdf.setFontSize(10); pdf.text(`Report Date: ${today.toLocaleDateString('en-US')}`, pageWidth / 2, y, { align: 'center' }); y += 35; pdf.autoTable({ startY: y, theme: 'grid', head: [['Metric', 'Value']], body: [ ['Total Fraudulent Transactions', `${currentData.totalTransactions}`], ['Total Amount Lost', { content: `$${currentData.totalAmount.toLocaleString('en-US')}`, styles: {textColor: '#DC2626', fontStyle: 'bold'} }], ['Most Common Fraud Type', `${currentData.mostCommonType}`], ], didDrawPage: (data) => { y = data.cursor.y; } }); y += 20; pdf.setFont('helvetica', 'bold'); pdf.text("Detailed Fraud Incidents", margin, y); y += 15; const tableData = currentData.transactions.map(t => [t.id, t.name, `$${t.amount.toFixed(2)}`, t.type, t.location]); pdf.autoTable({ startY: y, head: [['Transaction ID', 'Cardholder', 'Amount', 'Fraud Type', 'Location']], body: tableData, theme: 'striped', headStyles: { fillColor: [29, 78, 216] }, // blue-700 }); pdf.save(`Fraud-Activity-Report.pdf`); } catch(e) { console.error("PDF Generation failed:", e); } finally { btnText.classList.remove('hidden'); btnSpinner.classList.remove('hidden'); downloadPdfBtn.disabled = false; } }; downloadPdfBtn.addEventListener('click', downloadPDF); initialize(); });
Scroll to Top