Legal Case Outcome Predictor

Legal Case Outcome Predictor

Analyze key factors to predict the potential outcome of a legal case.

Enter Basic Case Information

$

The strongest factor is ${sortedFactors[0][0].replace(/([A-Z])/g, ' $1').trim()} with a rating of ${sortedFactors[0][1]}.

`; if (sortedFactors[3][1] < 5) { analysisHtml += `

The weakest link appears to be ${sortedFactors[3][0].replace(/([A-Z])/g, ' $1').trim()} at a rating of ${sortedFactors[3][1]}, which may pose a risk.

`; } if(elements.keyFactorsAnalysis) elements.keyFactorsAnalysis.innerHTML = analysisHtml; // Render Chart const chartData = { labels: ['Evidence', 'Precedent', 'Witnesses', 'Legal Team'], datasets: [{ label: 'Factor Strength', data: [factors.evidence, factors.precedent, factors.witness, factors.team], backgroundColor: 'rgba(59, 130, 246, 0.2)', borderColor: 'rgba(59, 130, 246, 1)', borderWidth: 2, pointBackgroundColor: 'rgba(59, 130, 246, 1)', pointBorderColor: '#fff', pointHoverBackgroundColor: '#fff', pointHoverBorderColor: 'rgba(59, 130, 246, 1)' }] }; if (predictionChart) { predictionChart.destroy(); } if(elements.predictionChart) { predictionChart = new Chart(elements.predictionChart.getContext('2d'), { type: 'radar', data: chartData, options: { responsive: true, maintainAspectRatio: false, scales: { r: { angleLines: { color: 'rgba(0, 0, 0, 0.1)' }, grid: { color: 'rgba(0, 0, 0, 0.1)' }, pointLabels: { font: { size: 14 } }, suggestedMin: 0, suggestedMax: 10 } }, plugins: { legend: { display: false } } }, }); } }; const switchTab = (tabNumber) => { currentTab = tabNumber; const allTabs = [elements.tab1Btn, elements.tab2Btn, elements.tab3Btn]; const allContent = [elements.tab1Content, elements.tab2Content, elements.tab3Content]; allTabs.forEach((btn, index) => { if (btn) btn.classList.toggle('active', index + 1 === tabNumber); }); allContent.forEach((content, index) => { if(content) content.classList.toggle('hidden', index + 1 !== tabNumber); }); if (elements.prevBtn) elements.prevBtn.disabled = (tabNumber === 1); if (elements.nextBtn) elements.nextBtn.disabled = (tabNumber === 3); if (tabNumber === 3) { calculateAndRenderReport(); } }; const downloadPdf = () => { try { const doc = new jsPDF(); const caseName = elements.caseName.value || 'N/A'; doc.setFontSize(22); doc.text("Legal Case Outcome Prediction", 105, 20, null, null, "center"); doc.setFontSize(12); doc.text(`For Case: ${caseName}`, 105, 30, null, null, "center"); const outcome = elements.predictionOutcome.textContent; const confidence = elements.predictionConfidence.textContent; doc.autoTable({ startY: 40, head: [['Predicted Outcome', 'Confidence Level']], body: [[outcome, confidence]], theme: 'grid', headStyles: { fillColor: [41, 128, 185], halign: 'center' }, bodyStyles: { fontStyle: 'bold', fontSize: 16, halign: 'center' }, }); const caseDetails = [ ['Case Type', elements.caseType.value], ['Jurisdiction', elements.jurisdiction.value], ['Claim Amount ($)', Number(elements.claimAmount.value).toLocaleString('en-US')] ]; doc.setFontSize(16); doc.text("Case Details & Factors", 14, doc.autoTable.previous.finalY + 15); doc.autoTable({ startY: doc.autoTable.previous.finalY + 20, head: [['Case Details', '']], body: caseDetails, }); doc.autoTable({ startY: doc.autoTable.previous.finalY + 2, head: [['Influencing Factors', 'Rating (1-10)']], body: [ ['Strength of Evidence', elements.evidenceStrength.value], ['Strength of Legal Precedent', elements.precedentStrength.value], ['Witness Credibility', elements.witnessCredibility.value], ['Legal Team Expertise', elements.teamExpertise.value] ], }); if (predictionChart) { const chartImage = predictionChart.toBase64Image(); doc.addPage(); doc.setFontSize(16); doc.text("Factor Strength Visualization", 105, 20, null, null, "center"); doc.addImage(chartImage, 'PNG', 25, 30, 160, 160); } doc.save(`Legal_Prediction_${caseName.replace(/\s+/g, '_')}.pdf`); } catch(error) { console.error("Failed to generate PDF:", error); alert("An error occurred while generating the PDF."); } }; // --- Event Listeners --- elements.tab1Btn?.addEventListener('click', () => switchTab(1)); elements.tab2Btn?.addEventListener('click', () => switchTab(2)); elements.tab3Btn?.addEventListener('click', () => switchTab(3)); elements.nextBtn?.addEventListener('click', () => { if (currentTab < 3) switchTab(currentTab + 1); }); elements.prevBtn?.addEventListener('click', () => { if (currentTab > 1) switchTab(currentTab - 1); }); elements.downloadPdfBtn?.addEventListener('click', downloadPdf); elements.evidenceStrength?.addEventListener('input', () => updateSliderValue(elements.evidenceStrength, elements.evidenceStrengthValue)); elements.precedentStrength?.addEventListener('input', () => updateSliderValue(elements.precedentStrength, elements.precedentStrengthValue)); elements.witnessCredibility?.addEventListener('input', () => updateSliderValue(elements.witnessCredibility, elements.witnessCredibilityValue)); elements.teamExpertise?.addEventListener('input', () => updateSliderValue(elements.teamExpertise, elements.teamExpertiseValue)); // --- Initialization --- switchTab(1); });
Scroll to Top