ИИ-аналитика: расчёты по отпускам, бюджетам, KPI, сравнения
This commit is contained in:
parent
d3cf40e741
commit
40ac0ded51
282
index.html
282
index.html
@ -1005,9 +1005,287 @@ function askAI() {
|
|||||||
if (!q) return;
|
if (!q) return;
|
||||||
addMsg(q, 'user');
|
addMsg(q, 'user');
|
||||||
input.value = '';
|
input.value = '';
|
||||||
|
|
||||||
|
// Full HR data for analytics
|
||||||
|
const d = {
|
||||||
|
total: 247, onVacation: 42, sick: 18, remote: 68, overtime: 320,
|
||||||
|
managers: 30, specialists: 217, women: 99, men: 140,
|
||||||
|
hired: 25, fired: 23, vacancies: 12,
|
||||||
|
turnover: 14.2, engagement: 76, enps: 24,
|
||||||
|
fot: 389, bonuses: 62, social: 22, training: 25, hiring: 16, totalBudget: 514,
|
||||||
|
monthlyFOT: 32.4, monthlyBudget: 42.8,
|
||||||
|
avgSalary: 173, avgAge: 33, avgTenure: 3.2,
|
||||||
|
training186: 186, reserveCount: 34, youth: 72, interns: 18,
|
||||||
|
highPerf: 32, lowPerf: 8,
|
||||||
|
hhRating: 4.2, edo: 68, adaptationRate: 89,
|
||||||
|
contractsExpiringJune: 3, contractsExpiringJuly: 5,
|
||||||
|
vacancyDays: 34, costPerHire: 245,
|
||||||
|
deptIT: 48, deptSales: 52, deptMkt: 32, deptFin: 28, deptHR: 12, deptProd: 45
|
||||||
|
};
|
||||||
|
|
||||||
|
const departments = {
|
||||||
|
'it': { name: 'IT', count: 48, turnover: 18, kpi: 94, budget: 89 },
|
||||||
|
'продаж': { name: 'Продажи', count: 52, turnover: 22, kpi: 112, budget: 115 },
|
||||||
|
'маркетинг': { name: 'Маркетинг', count: 32, turnover: 12, kpi: 78, budget: 62 },
|
||||||
|
'финанс': { name: 'Финансы', count: 28, turnover: 6, kpi: 103, budget: 98 },
|
||||||
|
'hr': { name: 'HR', count: 12, turnover: 8, kpi: 91, budget: 85 },
|
||||||
|
'производств': { name: 'Производство', count: 45, turnover: 16, kpi: 96, budget: 100 }
|
||||||
|
};
|
||||||
|
|
||||||
let answer = '';
|
let answer = '';
|
||||||
const data = {
|
|
||||||
|
// Detect keywords and build analytical answers
|
||||||
|
function has(...words) { return words.some(w => q.includes(w)); }
|
||||||
|
|
||||||
|
if (has('отпуск')) {
|
||||||
|
answer = '📊 Аналитика по отпускам:
|
||||||
|
|
||||||
|
• В отпуске сейчас: ' + d.onVacation + ' чел (' + (d.onVacation/d.total*100).toFixed(1) + '%)
|
||||||
|
• Средний остаток дней: 8.4 дня
|
||||||
|
• По графику отпусков: 85 чел без назначенной даты
|
||||||
|
• Запланировано на июль-сентябрь: 64 чел
|
||||||
|
• Риск: 85 сотрудников не распределены по графику — нужно утвердить до июля.';
|
||||||
|
if (has('июн', 'июл', 'август')) {
|
||||||
|
answer += '
|
||||||
|
|
||||||
|
📅 На летние месяцы:
|
||||||
|
• Июнь: запланировано 42 чел, из них 31 уже отгуляли
|
||||||
|
• Июль: 64 чел по плану
|
||||||
|
• Август: продолжается сезон отпусков';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('бюджет') && (has('отдел') || has('департамент'))) {
|
||||||
|
answer = '📊 Бюджет по отделам (месяц):
|
||||||
|
|
||||||
|
';
|
||||||
|
Object.entries(departments).forEach(([k, v]) => {
|
||||||
|
const bar = '█'.repeat(Math.round(v.budget / 10));
|
||||||
|
answer += v.name + ': ' + v.budget + '% ' + bar + '
|
||||||
|
';
|
||||||
|
});
|
||||||
|
answer += '
|
||||||
|
Перерасход: Продажи (+15%), Подбор (+15%)
|
||||||
|
Экономия: Обучение (85%), Маркетинг (62%)';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('бюджет')) {
|
||||||
|
answer = '💰 HR-бюджет 2026: ' + d.totalBudget + 'M ₸
|
||||||
|
|
||||||
|
📊 Структура:
|
||||||
|
• ФОТ (оклады): ' + d.fot + 'M — 75.7%
|
||||||
|
• Бонусы и премии: ' + d.bonuses + 'M — 12.1%
|
||||||
|
• Обучение: ' + d.training + 'M — 4.9%
|
||||||
|
• Соцпакет: ' + d.social + 'M — 4.3%
|
||||||
|
• Подбор: ' + d.hiring + 'M — 3.1%
|
||||||
|
|
||||||
|
📈 В месяц: ' + d.monthlyBudget + 'M ₸
|
||||||
|
📉 ФОТ на 1 сотрудника: ' + (d.monthlyFOT / d.total * 1000).toFixed(0) + 'K ₸
|
||||||
|
💡 Экономия за счёт вакансий: 14.4M ₸
|
||||||
|
💡 Потенциальная экономия при снижении текучести на 2%: 6.5M ₸';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('сколько') && (has('человек') || has('сотрудник') || has('люд'))) {
|
||||||
|
if (has('отдел') || has('департамент')) {
|
||||||
|
answer = '👥 Численность по отделам:
|
||||||
|
|
||||||
|
';
|
||||||
|
Object.entries(departments).forEach(([k, v]) => {
|
||||||
|
const bar = '█'.repeat(Math.round(v.count / 4));
|
||||||
|
answer += v.name + ': ' + v.count + ' чел ' + bar + '
|
||||||
|
';
|
||||||
|
});
|
||||||
|
answer += '
|
||||||
|
Всего: ' + d.total + ' чел';
|
||||||
|
} else if (has('больничн')) {
|
||||||
|
answer = '🏥 На больничном: ' + d.sick + ' чел (' + (d.sick/d.total*100).toFixed(1) + '%)
|
||||||
|
Средняя длительность: 3.2 дня
|
||||||
|
Всего дней больничных в июне: ' + (d.sick * 3.2).toFixed(0) + ' дней';
|
||||||
|
} else if (has('удалён')) {
|
||||||
|
answer = '🏠 На удалёнке: ' + d.remote + ' чел (' + (d.remote/d.total*100).toFixed(1) + '%)
|
||||||
|
Из них: IT — 32 чел, Маркетинг — 14 чел, Продажи — 8 чел, HR — 4 чел, Финансы — 6 чел, Производство — 4 чел';
|
||||||
|
} else {
|
||||||
|
answer = '👥 Всего сотрудников: ' + d.total + '
|
||||||
|
• Руководителей: ' + d.managers + ' (12%)
|
||||||
|
• Специалистов: ' + d.specialists + ' (88%)
|
||||||
|
• Мужчин: ' + d.men + ' (57%)
|
||||||
|
• Женщин: ' + d.women + ' (43%)
|
||||||
|
• До 30 лет: ' + d.youth + ' (29%)
|
||||||
|
• Вакантных ставок: ' + d.vacancies;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('kpi') || has('эффективн') || has('результативн')) {
|
||||||
|
answer = '📊 KPI по отделам (июнь 2026):
|
||||||
|
|
||||||
|
';
|
||||||
|
Object.entries(departments).forEach(([k, v]) => {
|
||||||
|
const icon = v.kpi >= 100 ? '✅' : v.kpi >= 90 ? '⚠️' : '❌';
|
||||||
|
const bar = v.kpi >= 100 ? '█'.repeat(Math.round(v.kpi/20)) : '▓'.repeat(Math.round(v.kpi/20));
|
||||||
|
answer += icon + ' ' + v.name + ': ' + v.kpi + '% ' + bar + '
|
||||||
|
';
|
||||||
|
});
|
||||||
|
answer += '
|
||||||
|
🏆 Лидеры: Ахметов А. (94%), Серикова М. (91%), Ким В. (88%)
|
||||||
|
⚠️ Аутсайдеры: Маркетинг (78%) — нужен план улучшения';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('текуч') || has('увол')) {
|
||||||
|
answer = '📉 Текучесть персонала:
|
||||||
|
|
||||||
|
По отделам:
|
||||||
|
';
|
||||||
|
Object.entries(departments).forEach(([k, v]) => {
|
||||||
|
answer += '• ' + v.name + ': ' + v.turnover + '%
|
||||||
|
';
|
||||||
|
});
|
||||||
|
answer += '
|
||||||
|
Средняя по компании: ' + d.turnover + '%
|
||||||
|
📈 Тренд: 2024 — 16.1% → 2025 — 15.8% → 2026 — 14.2%
|
||||||
|
📊 Уволено за год: ' + d.fired + ' | Нанято: ' + d.hired + ' | Баланс: +' + (d.hired - d.fired);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('стоимост') || has('затрат') || has('себестоим')) {
|
||||||
|
answer = '💵 Стоимость персонала:
|
||||||
|
|
||||||
|
• Средняя зарплата: ' + d.avgSalary + 'K ₸
|
||||||
|
• Полные затраты на 1 сотр.: от 160K (стажёр) до 1.8M (директор) в мес
|
||||||
|
• Коэффициент: оклад ×1.37-1.51 (налоги + ДМС + рабочее место)
|
||||||
|
• Стоимость найма 1 сотр.: ' + d.costPerHire + 'K ₸
|
||||||
|
• Окупаемость: Продажи 210%, IT 145%, Маркетинг 85%
|
||||||
|
• ROI обучения: +12% рост KPI';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('прогноз') || has('тренд') || has('динамик')) {
|
||||||
|
answer = '📈 Тренды и прогнозы:
|
||||||
|
|
||||||
|
• Численность: 2023=215 → 2026=247 → 2027=280 (прогноз)
|
||||||
|
• Текучесть: 16.1% → 14.2% → 12.0% (снижается)
|
||||||
|
• eNPS: +12 → +24 (растёт)
|
||||||
|
• ФОТ: 358M → 514M → 538M (растёт)
|
||||||
|
• Вовлечённость: 68% → 76% (растёт)
|
||||||
|
• Срок найма: 42 → 34 дня (улучшается)
|
||||||
|
|
||||||
|
⚠️ Риски 2027:
|
||||||
|
• Уход ключевых сотрудников (средний риск)
|
||||||
|
• Рост зарплат выше рынка (средний)
|
||||||
|
• Дефицит IT-специалистов (средний)';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('гендер') || has('мужчин') || has('женщин')) {
|
||||||
|
answer = '👫 Гендерный состав:
|
||||||
|
|
||||||
|
По категориям:
|
||||||
|
• Топ-менеджмент: 6M / 2Ж (25% женщин)
|
||||||
|
• Руководители отделов: 14M / 8Ж (36%)
|
||||||
|
• Ведущие специалисты: 28M / 19Ж (40%)
|
||||||
|
• Специалисты: 48M / 36Ж (43%)
|
||||||
|
• Младший персонал: 32M / 26Ж (45%)
|
||||||
|
|
||||||
|
Всего: 140 мужчин (57%) / 99 женщин (43%)
|
||||||
|
📊 Женщин среди руководителей: 33%
|
||||||
|
📊 Разрыв в зарплате: 8% (в пределах нормы)';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('обучен') || has('тренинг') || has('курс')) {
|
||||||
|
answer = '📚 Обучение и развитие:
|
||||||
|
|
||||||
|
• Прошли обучение: ' + d.training186 + ' чел (75%)
|
||||||
|
• Бюджет: ' + d.training + 'M ₸ (4.9% HR-бюджета)
|
||||||
|
• Средняя оценка: 4.3/5
|
||||||
|
• Применяют знания: 78%
|
||||||
|
• Рост KPI после обучения: +12%
|
||||||
|
• Сертифицировано: 34 чел
|
||||||
|
|
||||||
|
📊 По программам:
|
||||||
|
• Охрана труда: 100%
|
||||||
|
• Проф. курсы: 94%
|
||||||
|
• Soft skills: 75%
|
||||||
|
• Управленческие: 60%
|
||||||
|
• Английский: 40%';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('стресс') || has('выгоран') || has('здоров') || has('well')) {
|
||||||
|
answer = '🧘 Well-being:
|
||||||
|
|
||||||
|
Уровень стресса:
|
||||||
|
• Низкий (0-3): 124 чел (50%)
|
||||||
|
• Средний (4-6): 78 чел (32%)
|
||||||
|
• Высокий (7-8): 32 чел (13%) ⚠️
|
||||||
|
• Критический (9-10): 13 чел (5%) 🚨
|
||||||
|
|
||||||
|
Причины стресса:
|
||||||
|
1. Дедлайны — 35%
|
||||||
|
2. Объём задач — 28%
|
||||||
|
3. Переработки — 10%
|
||||||
|
|
||||||
|
Программы помощи:
|
||||||
|
• EAP (психолог): 18 чел, NPS 85
|
||||||
|
• Спортзал: 168 чел (68%)
|
||||||
|
• Йога/медитация: 42 чел';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('сравн') || has('сопостав') || has('vs')) {
|
||||||
|
answer = '📊 Сравнительная аналитика:
|
||||||
|
|
||||||
|
Руководители vs Специалисты:
|
||||||
|
• Численность: 30 vs 217
|
||||||
|
• Ср. возраст: 41 vs 31 год
|
||||||
|
• Ср. стаж: 6.4 vs 2.8 года
|
||||||
|
• Текучка: 4% vs 15%
|
||||||
|
• Муж/Жен: 67/33% vs 55/45%
|
||||||
|
|
||||||
|
Год к году:
|
||||||
|
• 2024 vs 2026: текучесть −1.9%, eNPS +12, ФОТ +156M';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('договор') || has('истек') || has('продлен')) {
|
||||||
|
answer = '📋 Трудовые договоры:
|
||||||
|
|
||||||
|
• Действующие: 247 (100%)
|
||||||
|
• Бессрочные: 229 (92.7%)
|
||||||
|
• Срочные: 18 (7.3%)
|
||||||
|
|
||||||
|
⏰ Истекают:
|
||||||
|
• Июнь: 3 чел 🚨 СРОЧНО!
|
||||||
|
• Июль: 5 чел ⚠️
|
||||||
|
• Август: 2 чел
|
||||||
|
• Сентябрь: 4 чел
|
||||||
|
• Октябрь-Декабрь: 4 чел
|
||||||
|
|
||||||
|
📊 График нагрузки на HR:
|
||||||
|
Июнь ███ (3) | Июль █████ (5) | Сентябрь ████ (4)';
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (has('помощ') || has('что ты умеешь') || has('список')) {
|
||||||
|
answer = '🤖 Я могу построить аналитику по запросу:
|
||||||
|
|
||||||
|
📊 Спросите:
|
||||||
|
• «Сколько людей в отпуске?»
|
||||||
|
• «Бюджет по отделам»
|
||||||
|
• «KPI продаж и маркетинга»
|
||||||
|
• «Сравни руководителей и специалистов»
|
||||||
|
• «Текучка по отделам»
|
||||||
|
• «Стоимость сотрудника»
|
||||||
|
• «Прогноз на 2027»
|
||||||
|
• «Гендерный состав»
|
||||||
|
• «Причины стресса»
|
||||||
|
• «Какие договоры истекают?»
|
||||||
|
• «Сколько на больничном?»
|
||||||
|
• «Обучение — статистика»';
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
answer = 'Я могу проанализировать: отпуска, бюджет, KPI, текучесть, стоимость персонала, прогнозы, гендерный состав, well-being, договоры, обучение.
|
||||||
|
|
||||||
|
Попробуйте спросить конкретнее. Например: «Сколько людей в отпуске?» или «KPI по отделам».';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format answer with line breaks for display
|
||||||
|
answer.split('\n').forEach((line, i) => {
|
||||||
|
setTimeout(() => addMsg(line, 'ai'), 200 + i * 150);
|
||||||
|
});
|
||||||
|
}
|
||||||
total: 247, turnover: '14.2%', fot: '514M ₸', budget: '42.8M ₸/мес',
|
total: 247, turnover: '14.2%', fot: '514M ₸', budget: '42.8M ₸/мес',
|
||||||
hired: 25, fired: 23, vacancies: 12, engagement: '76%', enps: '+24',
|
hired: 25, fired: 23, vacancies: 12, engagement: '76%', enps: '+24',
|
||||||
avgSalary: '173K ₸', training: '25M ₸', reserve: 34, youth: 72,
|
avgSalary: '173K ₸', training: '25M ₸', reserve: 34, youth: 72,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user