`;
});
html += `
`;
});
container.innerHTML = html;
}
function showTab(tabNumber) {
document.querySelectorAll('.tab-pane').forEach(p => p.classList.add('hidden'));
getEl(`tab-${tabNumber}`).classList.remove('hidden');
document.querySelectorAll('.tab-btn').forEach(b => {
b.classList.toggle('active', b.dataset.tab === `tab-${tabNumber}`);
b.classList.toggle('inactive', b.dataset.tab !== `tab-${tabNumber}`);
});
currentTab = tabNumber;
updateNavigation();
}
function updateNavigation() {
prevBtn.disabled = currentTab === 1;
nextBtn.style.display = currentTab === totalTabs ? 'none' : 'inline-block';
nextBtn.textContent = (currentTab === totalTabs - 1) ? 'Generate Dashboard' : 'Next';
stepIndicator.textContent = `Step ${currentTab} of ${totalTabs}`;
}
function saveTabData() {
if (currentTab === 1) {
appData.companyName = getEl('companyName').value;
appData.industry = getEl('industry').value;
appData.assessmentDate = getEl('assessmentDate').value;
appData.regulations = {
gdpr: getEl('gdpr').checked,
ccpa: getEl('ccpa').checked,
};
} else if (currentTab === 2) {
appData.assessmentResults = [];
const form = getEl('form-assessment');
assessmentData.forEach(section => {
section.questions.forEach(q => {
const value = form.elements[q.id].value;
appData.assessmentResults.push({
id: q.id, text: q.text, category: section.category,
value: parseInt(value),
status: {2: 'Fully Compliant', 1: 'Partially Compliant', 0: 'Non-Compliant'}[value],
recommendation: q.recommendation
});
});
});
}
}
function validateTab(tabNumber) {
const formId = { 1: 'form-profile', 2: 'form-assessment' }[tabNumber];
if (!formId) return true;
const form = getEl(formId);
if (form && !form.checkValidity()) {
form.reportValidity();
return false;
}
return true;
}
function generateDashboard() {
saveTabData();
// Calculate scores
const totalPossibleScore = appData.assessmentResults.length * 2;
const actualScore = appData.assessmentResults.reduce((sum, item) => sum + item.value, 0);
const overallScore = totalPossibleScore > 0 ? Math.round((actualScore / totalPossibleScore) * 100) : 0;
const categoryScores = assessmentData.map(section => {
const sectionQuestions = appData.assessmentResults.filter(r => r.category === section.category);
const sectionTotal = sectionQuestions.length * 2;
const sectionActual = sectionQuestions.reduce((sum, item) => sum + item.value, 0);
return sectionTotal > 0 ? Math.round((sectionActual / sectionTotal) * 100) : 0;
});
// AI Risk assessment
let riskLevel = 'Low';
let riskColor = 'text-green-600';
let baseScore = overallScore;
if (appData.industry === 'Healthcare' || appData.industry === 'Finance') baseScore -= 10;
if (appData.regulations.gdpr) baseScore -= 5;
if (baseScore < 50) { riskLevel = 'Critical'; riskColor = 'text-red-600'; }
else if (baseScore < 70) { riskLevel = 'High'; riskColor = 'text-orange-500'; }
else if (baseScore < 85) { riskLevel = 'Medium'; riskColor = 'text-yellow-500'; }
const recommendations = appData.assessmentResults.filter(r => r.value < 2).sort((a,b) => a.value - b.value);
let html = `
Risk & Compliance Dashboard
Overall Compliance
${overallScore}%
AI-Assessed Risk Level
${riskLevel}
Company Profile
Company: ${appData.companyName}
Industry: ${appData.industry}
Date: ${appData.assessmentDate}
Compliance by Category
Priority Recommendations
${recommendations.length === 0 ? 'No high-priority recommendations. All areas are fully compliant.
' : `-
${recommendations.map(r => `
- [${r.status}] ${r.text}
- ${r.recommendation} `).join('')}
