Загрузка аналитики...

{{ error }}

Summary: {{ selectedSummary.applicantName || 'Кандидат' }} {{ selectedSummary.applicantName || 'Кандидат' }}

📱 Телефон: {{ selectedSummary.phone }}
{{ selectedSummary.summary }}

📄 Эссе

Загрузка эссе...
{{ selectedSummaryEssayError }}
{{ selectedSummaryEssayData.essay }}
Эссе не найдено

Рейтинг кандидатов по вакансии {{ analytics.vacancy.title }} (ID: {{ ratings.vacancy.id }})

Кликните по заголовку колонки для сортировки.

Загрузка рейтингов...

{{ ratingsError }}

Всего сессий: {{ ratings.sessionsTotal }} · С оценками: {{ ratings.sessionsWithScores }} · Показано: {{ filteredRatingsRows.length }}

Выбрано: {{ selectedRatingsRows.length }}

Данных пока нет. Убедитесь, что по этой вакансии есть сессии интервью.

Нет данных, соответствующих выбранным фильтрам. Попробуйте изменить фильтры или поисковый запрос.

Кандидат {{ sortOrder === 'asc' ? '▲' : '▼' }} Телефон Статус Общий {{ sortOrder === 'asc' ? '▲' : '▼' }} 🔥 Харды {{ sortOrder === 'asc' ? '▲' : '▼' }} Софты {{ sortOrder === 'asc' ? '▲' : '▼' }} Кейсы {{ sortOrder === 'asc' ? '▲' : '▼' }} Ответств. {{ sortOrder === 'asc' ? '▲' : '▼' }} Доп. вопр. {{ sortOrder === 'asc' ? '▲' : '▼' }} AI ⚠️ Теги 📄 Эссе Действия
{{ (currentPage - 1) * pageSize + index + 1 }} {{ row.phone || '—' }} {{ getCandidateStatusLabel(row) }}
{{ row.general !== null ? row.general : '—' }}
{{ row.hards !== null ? row.hards : '—' }} {{ row.softs !== null ? row.softs : '—' }} {{ row.cases !== null ? row.cases : '—' }} {{ row.responsibility !== null ? row.responsibility : '—' }}
{{ row.addedQuestions !== null ? row.addedQuestions : '—' }} 🤖
⚠️
{{ tag.name }}

Текст вакансии

Загрузка данных вакансии...

{{ vacancyError }}

{{ vacancyData.vacancy.title }}
{{ vacancyData.vacancy.description || 'Описание не указано' }}
{{ getStatusLabel(vacancyData.vacancy.status) }}

{{ essayData.vacancyTitle || 'Вакансия' }} — {{ essayData.applicantName || 'Кандидат' }} {{ essayData.applicantName || '—' }}

📱 Телефон: {{ essayData.phone }}

Загрузка эссе...

{{ essayError }}

📝 Дополнительные вопросы (Общий рейтинг: {{ essayData.addedQuestionsRating }}%)

Вопрос {{ index + 1 }}:

{{ question.questionText }}

Эталонный ответ:

{{ question.expectedAnswer }}

Ответ кандидата:

{{ question.candidateAnswer }}

Оценка: {{ question.aiScore }}/{{ question.maxScore }} 🤖 AI
(вес: {{ question.weight }})
🤖 Комментарий нейросети:

{{ question.aiComment }}

📄 Эссе

{{ essayData.essay }}

Эссе не найдено.

Эссе не найдено.

{{ analytics.vacancy.title }}

{{ getStatusLabel(analytics.vacancy.status) }}

Создана: {{ formatDate(analytics.vacancy.createdAt) }}

📖 Инструкция
{{ analytics.statistics.total }}
Всего интервью
{{ analytics.statistics.inProgress }}
В процессе
{{ analytics.statistics.completed }}
Завершено
{{ analytics.statistics.completionRate }}%
Процент завершения
{{ analytics.statistics.quizFailed || 0 }}
Квиз провален
{{ analytics.statistics.cancelled || 0 }}
Отменено

📄 Текст вакансии

Название: {{ analytics.vacancy.title }}

Описание: {{ (analytics.vacancy.description || '').substring(0, 200) }}{{ analytics.vacancy.description && analytics.vacancy.description.length > 200 ? '...' : '' }}

📝 Вопросы квиза

Загрузка данных квиза...

📝 Вопросы квиза

Минимальный проходной балл: {{ quiz.minPassingScore }}

Количество вопросов: {{ quiz.questions.length }}

  • {{ index + 1 }}. {{ question.questionText ? question.questionText.substring(0, 100) + (question.questionText.length > 100 ? '...' : '') : 'Вопрос ' + (index + 1) }}
  • ...и еще {{ quiz.questions.length - 3 }} {{ quiz.questions.length - 3 === 1 ? 'вопрос' : 'вопросов' }}

Вопросы не добавлены

📝 Вопросы квиза

Квиз не создан

💬 Дополнительные вопросы

Загрузка дополнительных вопросов...

💬 Дополнительные вопросы

Количество вопросов: {{ additionalQuestions.length }}

  • {{ index + 1 }}. {{ question.question_text ? question.question_text.substring(0, 100) + (question.question_text.length > 100 ? '...' : '') : (question.questionText ? question.questionText.substring(0, 100) + (question.questionText.length > 100 ? '...' : '') : 'Вопрос ' + (index + 1)) }}
  • ...и еще {{ additionalQuestions.length - 3 }} {{ additionalQuestions.length - 3 === 1 ? 'вопрос' : 'вопросов' }}

💬 Дополнительные вопросы

Дополнительные вопросы не добавлены

Интервью по дням

Рейтинг кандидатов

Загрузка рейтингов...

Рейтинг кандидатов

{{ ratingsError }}

Рейтинг кандидатов по вакансии {{ analytics.vacancy.title }} (ID: {{ ratings.vacancy.id }})

Кликните по заголовку колонки для сортировки.

Всего сессий: {{ ratings.sessionsTotal }} · С оценками: {{ ratings.sessionsWithScores }} · Показано: {{ filteredRatingsRows.length }}

Выбрано: {{ selectedRatingsRows.length }}

Данных пока нет. Убедитесь, что по этой вакансии есть сессии интервью.

Нет данных, соответствующих выбранным фильтрам. Попробуйте изменить фильтры или поисковый запрос.

Кандидат {{ sortOrder === 'asc' ? '▲' : '▼' }} Телефон Статус Общий 🔥 {{ sortOrder === 'asc' ? '▲' : '▼' }} Харды {{ sortOrder === 'asc' ? '▲' : '▼' }} Софты {{ sortOrder === 'asc' ? '▲' : '▼' }} Кейсы {{ sortOrder === 'asc' ? '▲' : '▼' }} Ответств. {{ sortOrder === 'asc' ? '▲' : '▼' }} Доп. вопр. {{ sortOrder === 'asc' ? '▲' : '▼' }} AI ⚠️ Теги 📄 Эссе Действия
{{ (currentPage - 1) * pageSize + index + 1 }} {{ row.phone || '—' }} {{ getCandidateStatusLabel(row) }}
{{ row.general !== null && row.general !== undefined ? row.general.toFixed(1) : '—' }}
{{ row.hards !== null && row.hards !== undefined ? row.hards.toFixed(1) : '—' }} {{ row.softs !== null && row.softs !== undefined ? row.softs.toFixed(1) : '—' }} {{ row.cases !== null && row.cases !== undefined ? row.cases.toFixed(1) : '—' }} {{ row.responsibility !== null && row.responsibility !== undefined ? row.responsibility.toFixed(1) : '—' }}
{{ row.addedQuestions !== null && row.addedQuestions !== undefined ? row.addedQuestions.toFixed(1) : '—' }}
⚠️
{{ tag.name }}

Список всех интервью

Пока нет интервью по этой вакансии

Кандидат Телефон Статус Прогресс Квиз Сообщений Средний балл Теги Отказ AI Действия
{{ interview.applicantName || 'Кандидат' }} {{ interview.applicantName || 'Кандидат' }} {{ interview.phone || '—' }} {{ getStatusLabel(interview.status) }} {{ interview.progress || '-' }} {{ getQuizStatusLabel(interview.quizStatus) }} ({{ interview.quizScore }}%) {{ interview.messageCount }} {{ interview.avgScore.toFixed(1) }}
{{ tag.name }}
✉️ {{ formatDateShort(interview.rejectionSentAt) }} ⚠️ AI
Детали ✅ Приглашен ❌ Отклонен

📊 Разбор откликов

Кандидаты в ожидании решения: {{ pendingCandidatesCount }}

🔥 Тепловая карта баллов:
Низкий ({{ Math.round(pendingCandidatesHeatmapRange.min) }})
Высокий ({{ Math.round(pendingCandidatesHeatmapRange.max) }})
⚠️ Красная рамка + анимация = AI обнаружен
Выбрано: {{ selectedCandidatesForReview.length }} кандидатов

Нет кандидатов в ожидании решения

{{ candidate.applicantName || 'Кандидат' }} {{ candidate.applicantName || 'Кандидат' }} ⚠️ AI обнаружен

📱 {{ candidate.phone }} 📅 {{ formatDate(candidate.createdAt) }} 💬 {{ candidate.messageCount || 0 }} сообщений Оценка:
{{ candidate.avgScore ? candidate.avgScore.toFixed(1) : '—' }}
{{ tag.name }}
📋 Собеседование
?