Health Law Compliance Assessment Tool

Health Law Compliance Assessment Tool

Compliance Summary Report

For: N/A

Overall Compliance Score

0%

Compliance by Category

Corrective Action Plan (Items marked "Partially" or "Not Compliant")

No high-risk items identified.

Assessment Setup

${item.q}

${[ { label: 'Fully Compliant', value: 2 }, { label: 'Partially Compliant', value: 1 }, { label: 'Not Compliant', value: 0 }, { label: 'N/A', value: -1 } ].map(opt => ` `).join('')}
`; }); return html; }; const initializeAssessment = () => { document.getElementById('hipaaTab').innerHTML = generateAssessmentHTML('HIPAA Assessment', assessmentData['HIPAA Assessment']); document.getElementById('starkAksTab').innerHTML = generateAssessmentHTML('Stark & Anti-Kickback', assessmentData['Stark & Anti-Kickback']); document.getElementById('emtalaTab').innerHTML = generateAssessmentHTML('EMTALA Assessment', assessmentData['EMTALA Assessment']); caseInfo.facility = document.getElementById('setupFacilityName').value; caseInfo.assessor = document.getElementById('setupAssessorName').value; document.getElementById('dashFacilityName').textContent = caseInfo.facility; document.getElementById('setupTab').classList.remove('active'); tabBar.style.display = 'flex'; navBar.style.display = 'flex'; showTab(1); // Start on first assessment tab }; const calculateScores = () => { const scores = {}; const riskItems = []; let totalPossible = 0; let totalScored = 0; Object.keys(assessmentData).forEach(category => { let categoryPossible = 0; let categoryScored = 0; assessmentData[category].forEach(item => { const checked = document.querySelector(`input[name="${item.id}"]:checked`); if (checked) { const value = parseInt(checked.value); if (value !== -1) { // Not N/A categoryPossible += 2; categoryScored += value; if(value < 2) { riskItems.push({ category, question: item.q, status: value === 1 ? "Partially Compliant" : "Not Compliant" }); } } } }); scores[category] = (categoryPossible > 0) ? Math.round((categoryScored / categoryPossible) * 100) : 100; totalPossible += categoryPossible; totalScored += categoryScored; }); scores.overall = (totalPossible > 0) ? Math.round((totalScored / totalPossible) * 100) : 100; return { scores, riskItems }; }; const createProgressBar = (title, score) => { let barColor = 'var(--progress-bar-high)'; if (score < 50) barColor = 'var(--progress-bar-low)'; else if (score < 85) barColor = 'var(--progress-bar-medium)'; return `
${title} ${score}%
${score}%
`; }; const updateDashboard = () => { const { scores, riskItems } = calculateScores(); // Overall Score Circle const scoreCircle = document.getElementById('scoreCircle'); const circumference = 2 * Math.PI * 54; const offset = circumference - (scores.overall / 100) * circumference; scoreCircle.style.strokeDashoffset = offset; document.getElementById('overallScoreDisplay').textContent = `${scores.overall}%`; let riskLevel = 'High Compliance'; let riskColor = 'var(--progress-bar-high)'; if (scores.overall < 50) { riskLevel = 'High Risk'; riskColor = 'var(--progress-bar-low)'; } else if (scores.overall < 85) { riskLevel = 'Medium Risk'; riskColor = 'var(--progress-bar-medium)'; } document.getElementById('overallRiskLevel').textContent = riskLevel; document.getElementById('overallRiskLevel').style.color = riskColor; scoreCircle.style.stroke = riskColor; // Category Scores document.getElementById('hipaaScoreContainer').innerHTML = createProgressBar('HIPAA Compliance', scores['HIPAA Assessment']); document.getElementById('starkAksScoreContainer').innerHTML = createProgressBar('Stark & Anti-Kickback', scores['Stark & Anti-Kickback']); document.getElementById('emtalaScoreContainer').innerHTML = createProgressBar('EMTALA Compliance', scores['EMTALA Assessment']); // Risk Items const riskContainer = document.getElementById('riskItemsContainer'); if (riskItems.length > 0) { riskContainer.innerHTML = '
    ' + riskItems.map(item => `
  • [${item.status}] ${item.category}: ${item.question}
  • ` ).join('') + '
'; } else { riskContainer.innerHTML = '

Congratulations! No compliance gaps were identified.

'; } showTab(0); }; const generatePdf = () => { const { jsPDF } = window.jspdf; const dashboardContent = document.getElementById('dashboardContent'); html2canvas(dashboardContent, { scale: 2, useCORS: true }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const margin = 40; const usableWidth = pdfWidth - margin * 2; const imgProps = pdf.getImageProperties(imgData); const pdfHeight = (imgProps.height * usableWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', margin, margin, usableWidth, pdfHeight); pdf.save(`${(caseInfo.facility || 'Compliance_Report').replace(/\s/g, '_')}.pdf`); }).catch(err => { console.error("PDF Generation Error:", err); }); }; // --- Event Listeners --- document.querySelectorAll('[data-tab]').forEach((tab, index) => { tab.addEventListener('click', () => showTab(index)); }); nextButton.addEventListener('click', () => { if (currentTab < tabKeys.length - 1) showTab(currentTab + 1); }); prevButton.addEventListener('click', () => { if (currentTab > 1) showTab(currentTab - 1); }); startAssessmentButton.addEventListener('click', initializeAssessment); updateDashboardButton.addEventListener('click', updateDashboard); downloadPdfButton.addEventListener('click', generatePdf); });
Scroll to Top