Compare commits

...

5 Commits

Author SHA1 Message Date
kyrykbaev
93e055ea6a center login form vertically and horizontally
Some checks failed
Deploy to Gitea Pages / deploy (push) Has been cancelled
2026-06-01 06:35:03 +00:00
kyrykbaev
0e875e6555 add password protection (KTdash1)
Some checks are pending
Deploy to Gitea Pages / deploy (push) Waiting to run
2026-06-01 06:33:35 +00:00
kyrykbaev
d8d2fc34dd fix: load ai-cache.json from same origin (relative path)
Some checks are pending
Deploy to Gitea Pages / deploy (push) Waiting to run
2026-06-01 06:12:38 +00:00
kyrykbaev
ff4b3fd884 fix: update URLs to git.vibe42.kz, fill ai-cache with analysis
Some checks are pending
Deploy to Gitea Pages / deploy (push) Waiting to run
2026-06-01 06:09:53 +00:00
kyrykbaev
7e4c685e31 rename to index.html for root access 2026-06-01 06:04:27 +00:00
2 changed files with 49 additions and 8 deletions

View File

@ -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 2003 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 5004 000 шт./год** с ежеквартальным пересмотром. При успешном ускорении во 2-м полугодии — скорректировать вверх."
}

View File

@ -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>