hr-indicators/index.html

316 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>HR Индикаторы — дашборд</title>
<style>
:root{--bg:#f5f6fa;--card:#fff;--text:#2d3436;--gray:#636e72;--accent:#0984e3;--red:#d63031;--green:#00b894;--orange:#e17055;--purple:#6c5ce7;--border:#dfe6e9;--shadow:0 2px 8px rgba(0,0,0,.06)}
*{box-sizing:border-box;margin:0;padding:0}
body{font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,sans-serif;color:var(--text);background:var(--bg)}
header{background:linear-gradient(135deg,#2d3436,#636e72);color:#fff;padding:20px 24px}
header h1{font-size:22px;font-weight:700}
header .date{font-size:13px;opacity:.7;margin-top:4px}
.tabs{display:flex;gap:4px;padding:12px 24px;background:#fff;border-bottom:1px solid var(--border);overflow-x:auto}
.tab{padding:8px 18px;border-radius:8px;border:none;font-size:13px;font-weight:600;cursor:pointer;background:transparent;color:var(--gray);white-space:nowrap;transition:all .2s}
.tab.active{background:var(--accent);color:#fff}
.tab:hover:not(.active){background:#f0f0f0}
main{max-width:1200px;margin:0 auto;padding:20px}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:20px}
.kpi-card{background:var(--card);border-radius:12px;padding:20px;box-shadow:var(--shadow);border-left:4px solid var(--accent)}
.kpi-card.warn{border-left-color:var(--orange)}
.kpi-card.good{border-left-color:var(--green)}
.kpi-card.bad{border-left-color:var(--red)}
.kpi-card .label{font-size:12px;color:var(--gray);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}
.kpi-card .value{font-size:32px;font-weight:800;color:var(--text)}
.kpi-card .change{font-size:12px;margin-top:4px}
.kpi-card .change.up{color:var(--green)}
.kpi-card .change.down{color:var(--red)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.card{background:var(--card);border-radius:12px;padding:20px;box-shadow:var(--shadow)}
.card h3{font-size:16px;font-weight:700;margin-bottom:16px;display:flex;align-items:center;gap:8px}
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}
th{color:var(--gray);font-size:11px;text-transform:uppercase;font-weight:600;letter-spacing:.3px;background:#fafafa}
td .progress{height:6px;background:#eee;border-radius:3px;overflow:hidden;margin-top:4px}
td .progress .fill{height:100%;border-radius:3px;background:var(--accent)}
td .progress .fill.low{background:var(--red)}
td .progress .fill.mid{background:var(--orange)}
td .progress .fill.high{background:var(--green)}
.badge{display:inline-block;padding:2px 10px;border-radius:10px;font-size:11px;font-weight:700}
.badge.green{background:#e8f8f5;color:var(--green)}
.badge.red{background:#fdecea;color:var(--red)}
.badge.orange{background:#fef5e7;color:var(--orange)}
.badge.blue{background:#e8f0fe;color:var(--accent)}
.chart-bar{display:flex;align-items:center;gap:8px;margin:8px 0}
.chart-bar .bar-label{font-size:12px;width:120px;text-align:right;color:var(--gray)}
.chart-bar .bar-fill{height:24px;border-radius:4px;background:linear-gradient(90deg,var(--accent),#74b9ff);transition:width .5s ease;min-width:2px}
.chart-bar .bar-val{font-size:12px;font-weight:700;width:50px}
.gauge{text-align:center;padding:16px}
.gauge .circle{width:120px;height:120px;border-radius:50%;border:8px solid #eee;display:flex;align-items:center;justify-content:center;margin:0 auto 12px;font-size:28px;font-weight:800;position:relative}
.gauge .circle.good{border-color:var(--green);border-top-color:#eee}
.gauge .label{font-size:12px;color:var(--gray)}
@media(max-width:768px){.grid2{grid-template-columns:1fr}.kpi-row{grid-template-columns:repeat(2,1fr)}}
@media print{body{background:#fff}.card{box-shadow:none;border:1px solid #ddd}.tabs{display:none}}
</style>
</head>
<body>
<header>
<h1>&#x1F4CA; HR Индикаторы</h1>
<div class="date">Данные на июнь 2026 · Обновлено сегодня</div>
</header>
<main>
<!-- KPI ROW -->
<div class="kpi-row">
<div class="kpi-card">
<div class="label">Всего сотрудников</div>
<div class="value">247</div>
<div class="change up">+12 с начала года</div>
</div>
<div class="kpi-card good">
<div class="label">Текучесть (год)</div>
<div class="value">14.2%</div>
<div class="change down">2.1% к прошлому году</div>
</div>
<div class="kpi-card warn">
<div class="label">Средний срок найма</div>
<div class="value">34 дня</div>
<div class="change up">+4 дня к плану</div>
</div>
<div class="kpi-card">
<div class="label">ФОТ в месяц</div>
<div class="value">42.8M ₸</div>
<div class="change up">+8% к бюджету</div>
</div>
<div class="kpi-card good">
<div class="label">Вовлечённость</div>
<div class="value">76%</div>
<div class="change up">+5% к прошлому опросу</div>
</div>
</div>
<!-- CHARTS ROW -->
<div class="grid2">
<!-- Current department -->
<div class="card">
<h3>&#x1F3E2; Текучесть по отделам</h3>
<div class="chart-bar"><span class="bar-label">IT</span><span class="bar-fill" style="width:78%"></span><span class="bar-val">18%</span></div>
<div class="chart-bar"><span class="bar-label">Продажи</span><span class="bar-fill" style="width:95%" onmouseover="this.style.background='#d63031'"></span><span class="bar-val">22%</span></div>
<div class="chart-bar"><span class="bar-label">Маркетинг</span><span class="bar-fill" style="width:52%"></span><span class="bar-val">12%</span></div>
<div class="chart-bar"><span class="bar-label">Финансы</span><span class="bar-fill" style="width:26%"></span><span class="bar-val">6%</span></div>
<div class="chart-bar"><span class="bar-label">HR</span><span class="bar-fill" style="width:35%"></span><span class="bar-val">8%</span></div>
<div class="chart-bar"><span class="bar-label">Производство</span><span class="bar-fill" style="width:69%"></span><span class="bar-val">16%</span></div>
</div>
<!-- Расходы на персонал -->
<div class="card">
<h3>&#x1F4B0; Расходы на персонал</h3>
<table>
<tr><th>Статья</th><th>Месяц</th><th>Год</th><th>% бюджета</th></tr>
<tr><td>ФОТ (оклады)</td><td>32.4M ₸</td><td>389M ₸</td><td><span class="badge green">92%</span></td></tr>
<tr><td>Бонусы и премии</td><td>5.2M ₸</td><td>62M ₸</td><td><span class="badge orange">108%</span></td></tr>
<tr><td>Обучение</td><td>2.1M ₸</td><td>25M ₸</td><td><span class="badge green">85%</span></td></tr>
<tr><td>Соцпакет (ДМС, спорт)</td><td>1.8M ₸</td><td>22M ₸</td><td><span class="badge blue">100%</span></td></tr>
<tr><td>Подбор персонала</td><td>1.3M ₸</td><td>16M ₸</td><td><span class="badge orange">115%</span></td></tr>
<tr style="font-weight:700"><td>ИТОГО</td><td>42.8M ₸</td><td>514M ₸</td><td><span class="badge orange">96%</span></td></tr>
</table>
</div>
</div>
<!-- HIRING FUNNEL + ATTENDANCE -->
<div class="grid2" style="margin-top:16px">
<!-- Воронка подбора -->
<div class="card">
<h3>&#x1F4E5; Воронка подбора (июнь)</h3>
<div style="text-align:center;padding:8px">
<div style="background:#eee;padding:8px;border-radius:8px;margin:4px;width:100%"><strong>142</strong> отклика</div>
<div style="background:#dfe6e9;padding:8px;border-radius:8px;margin:4px;width:85%"><strong>68</strong> телефонных интервью</div>
<div style="background:#b2bec3;padding:8px;border-radius:8px;margin:4px;width:60%"><strong>31</strong> собеседование</div>
<div style="background:#74b9ff;padding:8px;border-radius:8px;margin:4px;width:35%"><strong>12</strong> финальный этап</div>
<div style="background:var(--accent);color:#fff;padding:8px;border-radius:8px;margin:4px;width:18%"><strong>5</strong> офферов</div>
<div style="background:var(--green);color:#fff;padding:8px;border-radius:8px;margin:4px;width:14%"><strong>4</strong> вышли</div>
</div>
<p style="font-size:12px;color:var(--gray);text-align:center;margin-top:8px">Конверсия: отклик → выход = 2.8%</p>
</div>
<!-- Посещаемость -->
<div class="card">
<h3>&#x23F0; Посещаемость (июнь)</h3>
<table>
<tr><th>Показатель</th><th>Значение</th><th>Статус</th></tr>
<tr><td>Опоздания (всего)</td><td>47 случаев</td><td><span class="badge orange">+12%</span></td></tr>
<tr><td>Больничные</td><td>18 чел / 3.2 дня ср.</td><td><span class="badge green">норма</span></td></tr>
<tr><td>Отпуска (остаток)</td><td>42 чел / 8.4 дня ср.</td><td><span class="badge blue">план</span></td></tr>
<tr><td>Переработки</td><td>320 часов</td><td><span class="badge orange">+15%</span></td></tr>
<tr><td>Прогулы</td><td>2 случая</td><td><span class="badge red">внимание</span></td></tr>
<tr><td>Удалёнка</td><td>68 чел (27%)</td><td><span class="badge blue">норма</span></td></tr>
</table>
</div>
</div>
<!-- TOP PERFORMERS -->
<div class="grid2" style="margin-top:16px">
<div class="card">
<h3>&#x1F3C6; Топ-5 сотрудников по KPI</h3>
<table>
<tr><th>#</th><th>Сотрудник</th><th>Отдел</th><th>KPI</th><th>Бонус</th></tr>
<tr><td>1</td><td>Ахметов А.</td><td>Продажи</td><td><div class="progress"><div class="fill high" style="width:94%"></div></div>94%</td><td>320K ₸</td></tr>
<tr><td>2</td><td>Серикова М.</td><td>IT</td><td><div class="progress"><div class="fill high" style="width:91%"></div></div>91%</td><td>280K ₸</td></tr>
<tr><td>3</td><td>Ким В.</td><td>Маркетинг</td><td><div class="progress"><div class="fill high" style="width:88%"></div></div>88%</td><td>240K ₸</td></tr>
<tr><td>4</td><td>Нурланова Д.</td><td>Финансы</td><td><div class="progress"><div class="fill high" style="width:85%"></div></div>85%</td><td>200K ₸</td></tr>
<tr><td>5</td><td>Иванов С.</td><td>IT</td><td><div class="progress"><div class="fill mid" style="width:82%"></div></div>82%</td><td>180K ₸</td></tr>
</table>
</div>
<!-- Текучка детали -->
<div class="card">
<h3>&#x1F4C9; Динамика текучести</h3>
<table>
<tr><th>Месяц</th><th>Уволено</th><th>Нанято</th><th>Баланс</th></tr>
<tr><td>Январь</td><td>4</td><td>6</td><td><span class="badge green">+2</span></td></tr>
<tr><td>Февраль</td><td>3</td><td>3</td><td><span class="badge blue">0</span></td></tr>
<tr><td>Март</td><td>5</td><td>4</td><td><span class="badge orange">1</span></td></tr>
<tr><td>Апрель</td><td>2</td><td>5</td><td><span class="badge green">+3</span></td></tr>
<tr><td>Май</td><td>6</td><td>3</td><td><span class="badge red">3</span></td></tr>
<tr><td>Июнь</td><td>3</td><td>4</td><td><span class="badge green">+1</span></td></tr>
</table>
<p style="font-size:12px;color:var(--gray);margin-top:8px">Всего уволено за год: 23 · Нанято: 25 · Баланс: +2</p>
</div>
</div>
<!-- COST PER EMPLOYEE -->
<div class="grid2" style="margin-top:16px">
<div class="card">
<h3>&#x1F4B5; Стоимость сотрудника (в месяц)</h3>
<table>
<tr><th>Должность</th><th>Оклад</th><th>Полные затраты</th><th>Окупаемость</th></tr>
<tr><td>Senior Developer</td><td>850K ₸</td><td>1.23M ₸</td><td><span class="badge green">145%</span></td></tr>
<tr><td>Менеджер продаж</td><td>450K ₸</td><td>680K ₸</td><td><span class="badge green">210%</span></td></tr>
<tr><td>Маркетолог</td><td>520K ₸</td><td>760K ₸</td><td><span class="badge orange">85%</span></td></tr>
<tr><td>Бухгалтер</td><td>380K ₸</td><td>520K ₸</td><td><span class="badge blue">100%</span></td></tr>
<tr><td>HR-менеджер</td><td>350K ₸</td><td>480K ₸</td><td><span class="badge orange">90%</span></td></tr>
<tr><td>Стажёр</td><td>120K ₸</td><td>160K ₸</td><td><span class="badge orange">40%</span></td></tr>
</table>
<p style="font-size:11px;color:var(--gray);margin-top:4px">Полные затраты = оклад + налоги (21%) + ДМС + обучение + рабочее место</p>
</div>
<div class="card">
<h3>&#x1F4CA; KPI по отделам (июнь)</h3>
<table>
<tr><th>Отдел</th><th>План</th><th>Факт</th><th>Статус</th></tr>
<tr><td>Продажи</td><td>100%</td><td>112%</td><td><span class="badge green">выше</span></td></tr>
<tr><td>IT</td><td>100%</td><td>94%</td><td><span class="badge orange">норма</span></td></tr>
<tr><td>Маркетинг</td><td>100%</td><td>78%</td><td><span class="badge red">ниже</span></td></tr>
<tr><td>Финансы</td><td>100%</td><td>103%</td><td><span class="badge green">выше</span></td></tr>
<tr><td>HR</td><td>100%</td><td>91%</td><td><span class="badge orange">норма</span></td></tr>
<tr><td>Производство</td><td>100%</td><td>96%</td><td><span class="badge blue">норма</span></td></tr>
</table>
</div>
</div>
<!-- КАДРОВОЕ АДМИНИСТРИРОВАНИЕ -->
<div class="grid2" style="margin-top:16px">
<div class="card">
<h3>&#x1F4CB; Штатное расписание</h3>
<table>
<tr><th>Должность</th><th>Ставок</th><th>Занято</th><th>Вакантно</th></tr>
<tr><td>Генеральный директор</td><td>1</td><td>1</td><td><span class="badge green">0</span></td></tr>
<tr><td>Руководитель отдела</td><td>6</td><td>6</td><td><span class="badge green">0</span></td></tr>
<tr><td>Senior Developer</td><td>12</td><td>10</td><td><span class="badge orange">2</span></td></tr>
<tr><td>Менеджер продаж</td><td>15</td><td>13</td><td><span class="badge orange">2</span></td></tr>
<tr><td>Маркетолог</td><td>8</td><td>6</td><td><span class="badge orange">2</span></td></tr>
<tr><td>Бухгалтер</td><td>4</td><td>4</td><td><span class="badge green">0</span></td></tr>
<tr><td>HR-менеджер</td><td>3</td><td>2</td><td><span class="badge orange">1</span></td></tr>
<tr><td>Стажёр</td><td>10</td><td>5</td><td><span class="badge orange">5</span></td></tr>
<tr style="font-weight:700"><td>ИТОГО</td><td>59</td><td>47</td><td><span class="badge orange">12</span></td></tr>
</table>
</div>
<div class="card">
<h3>&#x1F4C5; Кадровые приказы (июнь)</h3>
<table>
<tr><th>Тип приказа</th><th>Кол-во</th><th>Статус</th></tr>
<tr><td>Приём на работу</td><td>4</td><td><span class="badge green">оформлены</span></td></tr>
<tr><td>Увольнение</td><td>3</td><td><span class="badge orange">2 оформлено</span></td></tr>
<tr><td>Перевод (повышение)</td><td>2</td><td><span class="badge green">оформлены</span></td></tr>
<tr><td>Отпуск ежегодный</td><td>12</td><td><span class="badge blue">по графику</span></td></tr>
<tr><td>Отпуск без содержания</td><td>3</td><td><span class="badge blue">оформлены</span></td></tr>
<tr><td>Больничный лист</td><td>5</td><td><span class="badge green">закрыты</span></td></tr>
<tr><td>Командировка</td><td>8</td><td><span class="badge blue">в процессе</span></td></tr>
<tr><td>Дисциплинарное</td><td>1</td><td><span class="badge red">в работе</span></td></tr>
</table>
</div>
</div>
<!-- ТРУДОВЫЕ ДОГОВОРЫ И ДОКУМЕНТЫ -->
<div class="grid2" style="margin-top:16px">
<div class="card">
<h3>&#x1F4DD; Трудовые договоры</h3>
<table>
<tr><th>Показатель</th><th>Значение</th><th>Статус</th></tr>
<tr><td>Действующие договоры</td><td>247</td><td><span class="badge green">все активны</span></td></tr>
<tr><td>Срочные договоры</td><td>18 (7.3%)</td><td><span class="badge blue">контроль</span></td></tr>
<tr><td>Истекают в этом месяце</td><td>3</td><td><span class="badge orange">продлить!</span></td></tr>
<tr><td>Истекают в след. месяце</td><td>5</td><td><span class="badge blue">подготовить</span></td></tr>
<tr><td>Договоры ГПХ</td><td>12</td><td><span class="badge blue">активны</span></td></tr>
<tr><td>Без договора (нарушение)</td><td>0</td><td><span class="badge green">норма</span></td></tr>
</table>
</div>
<div class="card">
<h3>&#x1F4C1; Личные дела и документы</h3>
<table>
<tr><th>Документ</th><th>Наличие</th><th>Просрочено</th></tr>
<tr><td>Удостоверение личности</td><td>247/247</td><td><span class="badge green">0</span></td></tr>
<tr><td>Трудовая книжка (эл.)</td><td>247/247</td><td><span class="badge green">0</span></td></tr>
<tr><td>Диплом / образование</td><td>241/247</td><td><span class="badge orange">6 не хватает</span></td></tr>
<tr><td>Медосмотр</td><td>218/247</td><td><span class="badge red">29 просрочено!</span></td></tr>
<tr><td>Воинский учёт</td><td>89/89 (муж)</td><td><span class="badge blue">норма</span></td></tr>
<tr><td>Справка о несудимости</td><td>156/247</td><td><span class="badge orange">91 требуется</span></td></tr>
<tr><td>ИНН / СНИЛС</td><td>247/247</td><td><span class="badge green">0</span></td></tr>
</table>
</div>
</div>
<!-- ГРАФИК ОТПУСКОВ -->
<div class="grid2" style="margin-top:16px">
<div class="card">
<h3>&#x1F3D6; График отпусков на 2026</h3>
<table>
<tr><th>Период</th><th>Запланировано</th><th>Факт</th><th>Остаток дней</th></tr>
<tr><td>Январь-Март</td><td>18 чел</td><td>18 чел</td><td><span class="badge green"></span></td></tr>
<tr><td>Апрель-Июнь</td><td>42 чел</td><td>31 чел</td><td><span class="badge orange">11 ждут</span></td></tr>
<tr><td>Июль-Сентябрь</td><td>64 чел</td><td></td><td><span class="badge blue">по плану</span></td></tr>
<tr><td>Октябрь-Декабрь</td><td>38 чел</td><td></td><td><span class="badge blue">по плану</span></td></tr>
<tr><td>Нераспределённые</td><td>85 чел</td><td></td><td><span class="badge orange">назначить!</span></td></tr>
</table>
<p style="font-size:11px;color:var(--gray);margin-top:4px">Средний остаток дней отпуска: 8.4 дня на сотрудника</p>
</div>
<div class="card">
<h3>&#x26A0; Кадровые риски</h3>
<table>
<tr><th>Риск</th><th>Уровень</th><th>Действие</th></tr>
<tr><td>Медосмотр просрочен (29 чел)</td><td><span class="badge red">высокий</span></td><td>Направить 29 чел до конца месяца</td></tr>
<tr><td>3 срочных договора истекают</td><td><span class="badge orange">средний</span></td><td>Продлить или уволить</td></tr>
<tr><td>85 чел без даты отпуска</td><td><span class="badge orange">средний</span></td><td>Утвердить график до июля</td></tr>
<tr><td>12 вакантных ставок</td><td><span class="badge blue">низкий</span></td><td>Закрыть до сентября</td></tr>
<tr><td>6 дипломов не предоставлено</td><td><span class="badge orange">средний</span></td><td>Запросить у сотрудников</td></tr>
</table>
</div>
</div>
</body>
</html>