Online Smart Employee Exit Interview Analyzer

Smart Employee Exit Interview Analyzer

Key Exit Interview Insights

0
Total Interviews Analyzed
0.0
Avg. Satisfaction (1-5)
N/A
Top Reason for Leaving

Common Themes from Feedback

Manage Exit Interview Data

Add, edit, or remove exit interview records. The dashboard will update automatically to reflect the new data.

Add/Edit Interview Record

Current Interview Records

Employee ID Department Reason for Leaving Satisfaction Actions

No feedback to analyze.

'; return; } // Calculate average satisfaction const totalSatisfaction = this.state.interviews.reduce((sum, i) => sum + i.satisfaction, 0); const avgSat = totalSatisfaction / total; if (this.elements.avgSatisfaction) this.elements.avgSatisfaction.textContent = avgSat.toFixed(1); // Find top reason for leaving const reasonCounts = this.state.interviews.reduce((acc, i) => { acc[i.reason] = (acc[i.reason] || 0) + 1; return acc; }, {}); const topReason = Object.keys(reasonCounts).reduce((a, b) => reasonCounts[a] > reasonCounts[b] ? a : b, 'N/A'); if (this.elements.topReason) this.elements.topReason.textContent = topReason; // Generate keyword cloud this.renderKeywordCloud(); }, renderKeywordCloud() { const cloud = this.elements.keywordCloud; if (!cloud) return; const allFeedback = this.state.interviews.map(i => i.feedback).join(' '); const commonWords = new Set(['and', 'the', 'was', 'a', 'to', 'for', 'in', 'it', 'is', 'of', 'with', 'my', 'not']); const wordCounts = allFeedback .toLowerCase() .replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"") .split(/\s+/) .filter(word => word.length > 3 && !commonWords.has(word)) .reduce((acc, word) => { acc[word] = (acc[word] || 0) + 1; return acc; }, {}); const sortedKeywords = Object.entries(wordCounts) .sort(([,a],[,b]) => b - a) .slice(0, 15); // Get top 15 keywords if(sortedKeywords.length === 0) { cloud.innerHTML = '

No common keywords found in feedback.

'; return; } cloud.innerHTML = ''; sortedKeywords.forEach(([word, count]) => { const keywordEl = document.createElement('span'); keywordEl.className = 'seia-keyword'; keywordEl.textContent = word; // Optional: Adjust size based on count const fontSize = 1 + (count / Math.max(...sortedKeywords.map(([,c])=>c))) * 0.8; keywordEl.style.fontSize = `${fontSize}em`; cloud.appendChild(keywordEl); }); }, renderInterviewsTable() { const tableBody = this.elements.interviewsTableBody; if (!tableBody) return; tableBody.innerHTML = ''; this.state.interviews.forEach(interview => { const row = ` ${interview.employeeId || 'N/A'} ${interview.department} ${interview.reason} ${interview.satisfaction} `; tableBody.innerHTML += row; }); }, updateDepartmentDatalist() { const datalist = this.elements.departmentList; if (!datalist) return; const uniqueDepts = [...new Set(this.state.interviews.map(i => i.department))]; datalist.innerHTML = uniqueDepts.map(d => `
Scroll to Top