ИИ-ассистент для HR-дашборда

This commit is contained in:
Dauren777 2026-06-02 12:15:44 +00:00
parent b9dbc8a6bd
commit d3cf40e741

View File

@ -62,6 +62,21 @@ th{color:var(--gray);font-size:10px;text-transform:uppercase;font-weight:600;let
.funnel .step:nth-child(6){background:var(--green);color:#fff;width:14%} .funnel .step:nth-child(6){background:var(--green);color:#fff;width:14%}
@media(max-width:768px){.grid2,.grid3{grid-template-columns:1fr}.kpi-row{grid-template-columns:repeat(2,1fr)}} @media(max-width:768px){.grid2,.grid3{grid-template-columns:1fr}.kpi-row{grid-template-columns:repeat(2,1fr)}}
.ai-btn{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#e74c3c);color:#fff;border:none;font-size:24px;cursor:pointer;box-shadow:0 4px 16px rgba(9,132,227,.3);z-index:999;transition:all .3s;display:flex;align-items:center;justify-content:center}
.ai-btn:hover{transform:scale(1.1)}
.ai-chat{position:fixed;bottom:90px;right:24px;width:340px;max-height:450px;background:var(--card);border-radius:14px;box-shadow:0 8px 32px rgba(0,0,0,.15);z-index:998;display:none;flex-direction:column;overflow:hidden;border:1px solid var(--border)}
.ai-chat.open{display:flex}
.ai-chat .hd{background:linear-gradient(135deg,#2d3436,#636e72);color:#fff;padding:12px 16px;font-size:14px;font-weight:700;display:flex;justify-content:space-between;align-items:center}
.ai-chat .hd button{background:none;border:none;color:#fff;font-size:18px;cursor:pointer}
.ai-chat .msgs{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px;max-height:300px}
.ai-chat .msg{padding:10px 14px;border-radius:12px;font-size:12px;line-height:1.45;max-width:90%}
.ai-chat .msg.ai{background:#f0f4ff;color:var(--text);align-self:flex-start;border-bottom-left-radius:4px}
.ai-chat .msg.user{background:var(--accent);color:#fff;align-self:flex-end;border-bottom-right-radius:4px}
.ai-chat .input-row{display:flex;gap:4px;padding:8px 12px;border-top:1px solid var(--border)}
.ai-chat .input-row input{flex:1;padding:8px 12px;border-radius:8px;border:1px solid var(--border);font-size:13px;margin:0}
.ai-chat .input-row button{padding:8px 14px;border-radius:8px;background:var(--accent);color:#fff;border:none;font-weight:600;cursor:pointer;font-size:13px}
@media print{body{background:#fff}.card{box-shadow:none;border:1px solid #ddd}nav.tabs{display:none}} @media print{body{background:#fff}.card{box-shadow:none;border:1px solid #ddd}nav.tabs{display:none}}
</style> </style>
</head> </head>
@ -954,5 +969,75 @@ document.querySelectorAll('#tabs .tab').forEach(tab => {
}); });
</script> </script>
<!-- AI ASSISTANT -->
<button class="ai-btn" id="aiBtn" onclick="toggleAI()" title="HR-ассистент">&#x1F916;</button>
<div class="ai-chat" id="aiChat">
<div class="hd">
&#x1F916; HR-ассистент
<button onclick="toggleAI()">&#x2715;</button>
</div>
<div class="msgs" id="aiMsgs">
<div class="msg ai">&#x1F44B; Здравствуйте! Я HR-ассистент. Спросите меня о любом показателе из дашборда: текучесть, бюджет, KPI, найм, обучение...</div>
</div>
<div class="input-row">
<input type="text" id="aiInput" placeholder="Спроси про HR-метрики..." onkeydown="if(event.key==='Enter')askAI()">
<button onclick="askAI()">&#x27A4;</button>
</div>
</div>
<script>
function toggleAI() {
document.getElementById('aiChat').classList.toggle('open');
}
function addMsg(text, cls) {
const msgs = document.getElementById('aiMsgs');
const div = document.createElement('div');
div.className = 'msg ' + cls;
div.textContent = text;
msgs.appendChild(div);
msgs.scrollTop = msgs.scrollHeight;
}
function askAI() {
const input = document.getElementById('aiInput');
const q = input.value.trim().toLowerCase();
if (!q) return;
addMsg(q, 'user');
input.value = '';
let answer = '';
const data = {
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,
stress: '18% в зоне риска', adaptation: '89%', women: '43%',
managers: 30, specialists: 217, contractExpiring: 3,
hhRating: '4.2', edo: '68%'
};
if (q.includes('текуч') || q.includes('увольн')) answer = 'Текучесть персонала: 14.2% за год (23 чел уволено, 25 нанято). Основная причина — собственное желание (60.9%). Тренд снижается: 2024 — 16.1%, 2025 — 15.8%, 2026 — 14.2%.';
else if (q.includes('бюджет') || q.includes('фот') || q.includes('деньг')) answer = 'HR-бюджет 2026: 514M ₸. Из них ФОТ — 389M (75.7%), бонусы — 62M (12.1%), соцпакет — 22M (4.3%), обучение — 25M (4.9%), подбор — 16M (3.1%). В месяц: 42.8M ₸.';
else if (q.includes('найм') || q.includes('подбор') || q.includes('ваканс')) answer = 'Воронка подбора: 142 отклика → 68 интервью → 31 собеседование → 12 финал → 5 офферов → 4 вышли. Конверсия 2.8%. Средний срок закрытия вакансии — 34 дня. Открыто 12 вакантных ставок.';
else if (q.includes('обучен') || q.includes('развит')) answer = 'Обучение: 186 сотрудников (75%) прошли обучение в 2026 году. Бюджет — 25M ₸. Средняя оценка тренингов — 4.3/5. 78% применяют знания в работе. Рост KPI после обучения +12%.';
else if (q.includes('kpi') || q.includes('оценк') || q.includes('рейтинг')) answer = 'Оценка персонала: 218 чел (88%) прошли оценку. High performers — 32 чел (13%), low performers — 8 чел (3%). OKR выполняются по отделам: Продажи 75%, IT 78%, Маркетинг 50%.';
else if (q.includes('кадров') || q.includes('резерв')) answer = 'Кадровый резерв: 34 человека. 5 назначено из резерва за год. 42% позиций закрываются из резерва. Критический риск: нет преемника у Директора продаж.';
else if (q.includes('женщин') || q.includes('гендер') || q.includes('мужчин')) answer = 'Гендерный состав: 140 мужчин (57%) и 99 женщин (43%). Среди руководителей: 20 мужчин (67%) и 10 женщин (33%). Среди специалистов: 120 мужчин (55%) и 97 женщин (45%).';
else if (q.includes('стресс') || q.includes('выгоран') || q.includes('well')) answer = 'Well-being: 18% сотрудников в зоне риска выгорания. Основные причины стресса: дедлайны (35%), объём задач (28%), переработки (10%). 18 чел обратились к психологу по программе EAP.';
else if (q.includes('бренд') || q.includes('hh') || q.includes('headhunt')) answer = 'HR-бренд: рейтинг на HeadHunter — 4.2. 86 отзывов сотрудников. Принятие оффера — 80%. LinkedIn: 4 200 подписчиков, Instagram: 8 600. Компания в Топ-50 работодателей РК 2025-2026.';
else if (q.includes('эдо') || q.includes('автомат') || q.includes('цифр')) answer = 'Автоматизация HR: 68% процессов в ЭДО. HR-портал — 79% активных пользователей. План: КЭДО 100% к Q3 2026, чат-бот HR к Q4 2026, мобильное приложение к Q2 2027.';
else if (q.includes('молод') || q.includes('стажёр') || q.includes('вуз')) answer = 'Работа с молодёжью: 72 сотрудника до 30 лет (29%). 18 стажёров за год, трудоустроено 14 (78%). Программа «Молодой лидер»: 12 участников, 4 получили повышение.';
else if (q.includes('мотивац') || q.includes('зарплат') || q.includes('бонус')) answer = 'Оплата труда: средняя зарплата — 173K ₸. Грейды от G1 (120K) до G6 (1.8M). Топ-бонус июня — 320K ₸ (Ахметов А., Продажи). Соцпакет: ДМС, спортзал, питание, гибкий график.';
else if (q.includes('договор') || q.includes('срок') || q.includes('истек')) answer = 'Трудовые договоры: 247 активных, 18 срочных (7.3%). Истекают: июнь — 3 (срочно!), июль — 5, август — 2, сентябрь — 4. Бессрочных — 229.';
else if (q.includes('тренд') || q.includes('прогноз') || q.includes('2027')) answer = 'Прогноз на 2027: численность 264→280 чел, текучесть снизится до 12%, ФОТ вырастет до 538M. План найма — 16 чел. Основной риск — уход ключевых сотрудников.';
else answer = 'Я могу ответить на вопросы про: текучесть, бюджет, найм, обучение, KPI, кадровый резерв, гендерный состав, well-being, HR-бренд, автоматизацию, молодёжь, мотивацию, договоры, тренды. Что вас интересует?';
setTimeout(() => addMsg(answer, 'ai'), 400);
}
// Open AI on first visit
setTimeout(() => document.getElementById('aiChat').classList.add('open'), 2000);
</script>
</body> </body>
</html> </html>