Real-Time Refund Abuse Detector

Real-Time Refund Abuse Detector

Analyze customer order history to identify patterns of refund abuse.

Paste Customer Order History

One order per line. Format:
ID,Date(YYYY-MM-DD),Value,Status

Analysis Awaits

Input a customer's order history and click "Analyze" to generate a risk report.

Value: ${f.value} (Threshold: ${f.threshold})

`).join('') : '

No abuse thresholds were triggered.

'; analysisResults.innerHTML = `

Risk Analysis Report

Overall Risk Level

${results.riskLevel}

${flagsHtml}

Recommendation

${results.recommendation}

`; document.getElementById('download-pdf-btn').addEventListener('click', handlePdfDownload); lucide.createIcons(); } async function handlePdfDownload() { if (!lastResults) return; const { jsPDF } = window.jspdf; const riskColorClassesPDF = { 'Low': 'bg-green-100 border-green-500 text-green-900', 'Medium': 'bg-amber-100 border-amber-500 text-amber-900', 'High': 'bg-red-100 border-red-500 text-red-900' }; // Populate PDF container document.getElementById('pdf-report-date').textContent = new Date().toLocaleDateString(); const riskSummaryEl = document.getElementById('pdf-risk-summary'); riskSummaryEl.className = `flex items-center space-x-4 p-4 rounded-md border-l-8 ${riskColorClassesPDF[lastResults.riskLevel]}`; riskSummaryEl.innerHTML = `

${lastResults.riskLevel} Risk

Abuse Score: ${lastResults.riskScore}

`; let tableHtml = ` ${lastResults.flags.map(f => ` `).join('') || ``}
Metric Calculated Value Threshold Flagged
${f.metric} ${f.value} ${f.threshold} Yes
No flags raised.
`; document.getElementById('pdf-metrics-table').innerHTML = tableHtml; document.getElementById('pdf-recommendation').textContent = lastResults.recommendation; // Must create icons for PDF content before rendering lucide.createIcons({ nodes: [document.querySelector('#pdf-risk-summary')] }); try { // Timeout to allow icons to render await new Promise(resolve => setTimeout(resolve, 100)); const canvas = await html2canvas(document.getElementById('pdf-content'), { scale: 2 }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const imgProps = pdf.getImageProperties(imgData); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save('Refund_Abuse_Report.pdf'); } catch (e) { console.error("PDF generation failed:", e); alert("An error occurred generating the PDF."); } } // --- Event Listeners --- tabs.forEach((tab, index) => tab.btn.addEventListener('click', () => switchTab(index))); prevBtn.addEventListener('click', () => switchTab(currentTab - 1)); nextBtn.addEventListener('click', () => switchTab(currentTab + 1)); analyzeBtn.addEventListener('click', handleAnalysis); // --- Initialization --- orderHistoryInput.value = sampleData; switchTab(0); updateNavButtons(); lucide.createIcons(); });
Scroll to Top