hr-indicators/index.html

226 lines
14 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>
</main>
</body>
</html>