diff --git a/index.html b/index.html index 04cdba6..58dd75a 100644 --- a/index.html +++ b/index.html @@ -1005,9 +1005,287 @@ function askAI() { if (!q) return; addMsg(q, 'user'); 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 = ''; - 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 ₸/мес', hired: 25, fired: 23, vacancies: 12, engagement: '76%', enps: '+24', avgSalary: '173K ₸', training: '25M ₸', reserve: 34, youth: 72,