Compare commits
5 Commits
34da2f8764
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93e055ea6a | ||
|
|
0e875e6555 | ||
|
|
d8d2fc34dd | ||
|
|
ff4b3fd884 | ||
|
|
7e4c685e31 |
@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": null,
|
||||
"period": null,
|
||||
"response": null
|
||||
"generated_at": "2026-06-01T06:05:00.000Z",
|
||||
"period": "Май 2026",
|
||||
"response": "## Сводный анализ KPI InDigiCo (январь–май 2026)\n\nОбщая картина неоднозначная: два KPI выполняются уверенно (традиционные обращения, цифровые продажи), один — близко к цели (MAU), но два ключевых показателя серьёзно отстают — регистрации и Full Digital установки.\n\n---\n\n### ✅ KPI в норме\n\n**KPI 3 — Снижение традиционных обращений: 19.9% (цель 10%)**\n\nПоказатель вдвое выше плана. Снижение стабильно держится на уровне ~20% все 5 месяцев. Риск снижения к декабрю минимальный — даже при некотором замедлении тренда цель будет выполнена.\n\n**KPI 4 — Цифровые продажи: 53.1% (цель 45%)**\n\nДоля цифровой выручки выше цели на 8 п.п. Однако тренд нисходящий: с 84.3% в январе до 53.1% в мае. Это объясняется сезонностью — в начале года доля цифровых каналов традиционно выше. Текущего запаса достаточно для выполнения годовой цели, но требуется мониторинг.\n\n---\n\n### ⚠️ Рисковые и отстающие KPI\n\n**KPI 2 — MAU: 22.1% (цель 30%)**\n\nПоказатель близок — 73.7% от цели. Наблюдается рост внутри каждого месяца (с ~2-4% в начале до 22-26% к концу). Тренд позитивный, но недостаточно быстрый для уверенного выполнения к декабрю. При текущей динамике к декабрю прогноз ~28-30% — на грани.\n\n**KPI 1 — Регистрации: 50.8% (цель 60%)**\n\nСерьёзное отставание на 9.2 п.п. Рост есть (+4 п.п. за 5 месяцев), но слишком медленный. При линейном тренде к декабрю прогноз ~57% — цель под угрозой срыва. Требуется ускорение регистраций.\n\n**KPI 5 — Full Digital установки: 26.9% годового плана**\n\nКритическое отставание. Накоплено 1 343 заказа из 12 000 годового плана (26.9%). Среднемесячно: 269 шт. при цели 1 000. Тренд падающий: 374 (янв) → 164 (май). При текущем темпе годовой прогноз ~3 200–3 500 шт. Цель 12 000 недостижима без радикальных мер.\n\n---\n\n### Рекомендации\n\n1. **Регистрации** — запустить кампанию по стимулированию регистрации (push-уведомления, бонусы за завершение профиля)\n2. **MAU** — усилить контент-маркетинг и ретеншн-механики (email-рассылки, персональные рекомендации) для удержания активных пользователей\n3. **FD установки** — пересмотреть целевую модель: текущий тренд предполагает ~3 500 шт./год, а не 12 000. Рассмотреть поэтапный план с реалистичными целями\n4. **Цифровые продажи** — зафиксировать план удержания доли выше 50% на второе полугодие, чтобы компенсировать сезонное падение\n5. **Общее** — внедрить еженедельный мониторинг с алертами при отклонении от тренда более чем на 15%\n\n---\n\n### Пересмотр цели KPI 5\n\nТекущая годовая цель 12 000 FD-установок (1 000/мес) требует ~3.7-кратного роста относительно среднего за 5 месяцев (269/мес). Рекомендуется установить реалистичную цель: **3 500–4 000 шт./год** с ежеквартальным пересмотром. При успешном ускорении во 2-м полугодии — скорректировать вверх."
|
||||
}
|
||||
|
||||
@ -45,6 +45,7 @@ body { font-family: var(--font-base); background: var(--color-bg); color: var(--
|
||||
.loading-box p { font-size: 16px; font-weight: 500; opacity: 0.9; }
|
||||
|
||||
#upload-screen { min-height: 100vh; display: none; align-items: center; justify-content: center; background: linear-gradient(135deg, #0052CC 0%, #0070F3 100%); }
|
||||
#login-screen { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #0052CC 0%, #0070F3 100%); }
|
||||
.upload-box { background: #fff; border-radius: 20px; padding: 48px 56px; text-align: center; max-width: 480px; width: 90%; box-shadow: 0 20px 60px rgba(0,0,0,0.15); }
|
||||
.upload-logo { display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; background: var(--color-brand); color: #fff; font-size: 24px; font-weight: 700; border-radius: 16px; margin-bottom: 20px; }
|
||||
.upload-box h1 { font-size: 22px; font-weight: 700; margin-bottom: 8px; }
|
||||
@ -213,7 +214,19 @@ body { font-family: var(--font-base); background: var(--color-bg); color: var(--
|
||||
<body>
|
||||
|
||||
<!-- LOADING -->
|
||||
<div id="loading-screen">
|
||||
<!-- LOGIN -->
|
||||
<div id="login-screen">
|
||||
<div class="upload-box">
|
||||
<div class="upload-logo">KT</div>
|
||||
<h1>KPI InDigiCo</h1>
|
||||
<p>Казахтелеком · 2026</p>
|
||||
<input type="password" id="login-password" class="api-key-input" placeholder="Введите пароль" style="text-align:center;font-size:16px;margin-bottom:12px;">
|
||||
<button class="btn-primary" id="btn-login" style="width:auto;padding:12px 40px;">Войти</button>
|
||||
<p id="login-error" style="color:var(--color-red);font-size:13px;margin-top:10px;min-height:18px;"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="loading-screen" style="display:none">
|
||||
<div class="loading-box">
|
||||
<div class="spinner-lg"></div>
|
||||
<p>Загрузка данных KPI...</p>
|
||||
@ -503,11 +516,11 @@ const EMBEDDED_CSV = `"report_period_id";"entry_date";"abons";"registered_total"
|
||||
|
||||
const MONTH_NAMES = ['','Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'];
|
||||
const CSV_FILENAME = 'drb_iliyas_kpi_2026.csv';
|
||||
const GITEA_API = 'https://git.telecom.quest/api/v1';
|
||||
const GITEA_OWNER = 'Kyrykbaev-I';
|
||||
const GITEA_API = 'https://git.vibe42.kz/api/v1';
|
||||
const GITEA_OWNER = 'kyrykbaev';
|
||||
const GITEA_REPO = 'kpi-dashboard';
|
||||
const AI_CACHE_FILE = 'ai-cache.json';
|
||||
const AI_CACHE_RAW = `https://git.telecom.quest/${GITEA_OWNER}/${GITEA_REPO}/raw/branch/main/${AI_CACHE_FILE}`;
|
||||
const AI_CACHE_RAW = AI_CACHE_FILE;
|
||||
|
||||
const AppState = {
|
||||
rawRows: [], snapshots: [], dailySeries: {},
|
||||
@ -1334,8 +1347,36 @@ document.getElementById('btn-ai-copy').addEventListener('click',()=>{
|
||||
});
|
||||
});
|
||||
|
||||
// ═══════════════════ LOGIN ═══════════════════
|
||||
const LOGIN_PASSWORD = 'KTdash1';
|
||||
|
||||
function handleLogin() {
|
||||
const input = document.getElementById('login-password');
|
||||
const err = document.getElementById('login-error');
|
||||
if (input.value === LOGIN_PASSWORD) {
|
||||
document.getElementById('login-screen').style.display = 'none';
|
||||
document.getElementById('loading-screen').style.display = 'flex';
|
||||
if (sessionStorage) sessionStorage.setItem('kpi_auth', '1');
|
||||
tryAutoLoad();
|
||||
} else {
|
||||
err.textContent = 'Неверный пароль';
|
||||
input.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('btn-login').addEventListener('click', handleLogin);
|
||||
document.getElementById('login-password').addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Enter') handleLogin();
|
||||
});
|
||||
|
||||
// ═══════════════════ BOOT ═══════════════════
|
||||
document.addEventListener('DOMContentLoaded', tryAutoLoad);
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (sessionStorage && sessionStorage.getItem('kpi_auth') === '1') {
|
||||
document.getElementById('login-screen').style.display = 'none';
|
||||
document.getElementById('loading-screen').style.display = 'flex';
|
||||
tryAutoLoad();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user