{
 "meta": {
  "updated_at": "2026-07-27",
  "owners": null,
  "timezone": "IST (Asia/Kolkata, UTC+5:30)",
  "source": "ClickHouse-репліка hermes",
  "rule": "Метрика рахується тільки так, як тут описано; якщо звіт рахує інакше — виправляється звіт.",
  "saved_from": "https://reports.halleg.renderhorizon.org/metrics-legend"
 },
 "metrics": [
  {
   "canon_id": "payin-volume",
   "group": "Обсяги",
   "name_en": "PayIn Volume",
   "name_uk": "Обсяг PayIn",
   "synonyms": [
    "Налив",
    "vol",
    "pi",
    "amt",
    "Amount IN",
    "Demand"
   ],
   "rows": {
    "Означення": "Сума успішних вхідних платежів за період.",
    "Формула": "SUM(transactions.amount) WHERE operation = 'payin', період за IST",
    "Одиниці": "INR (₹), ціле число",
    "Де присутня": "Всі звіти дашборда; фінанси (lab): «налив», payin_inr\n    Джерело — transactions, НЕ payments. У звіті Trader KPI діє додатковий фільтр «провайдер з total payin > 5 000 ₹ за період» — це особливість KPI-звіту, не частина канону."
   },
   "notes": [
    "Джерело — transactions, НЕ payments. У звіті Trader KPI діє додатковий фільтр «провайдер з total payin > 5 000 ₹ за період» — це особливість KPI-звіту, не частина канону."
   ]
  },
  {
   "canon_id": "payout-volume",
   "group": "Обсяги",
   "name_en": "PayOut Volume",
   "name_uk": "Обсяг PayOut",
   "synonyms": [
    "Виплати",
    "po",
    "Amount OUT",
    "paid_today"
   ],
   "rows": {
    "Означення": "Сума виплат клієнтам за період.",
    "Формула": "ABS(SUM(transactions.amount)) WHERE operation = 'payout' AND currency = 'INR',\nскоуп P2P (провайдер без [SLU]/[Intent]), банківський рахунок ≠ TRANSIT",
    "Одиниці": "INR (₹)",
    "Де присутня": "Operational, Weekly, Detailed, Merchant-SLU, Churn, Affiliate-звіти; фінанси (lab): «Выплачено сегодня», «Avg ауты/день»\n    Суми payout у базі відʼємні — завжди брати ABS. Звірено з фінансами 1:1."
   },
   "notes": [
    "Суми payout у базі відʼємні — завжди брати ABS. Звірено з фінансами 1:1."
   ]
  },
  {
   "canon_id": "settlement",
   "group": "Обсяги",
   "name_en": "Settlement ₹",
   "name_uk": "Сетлмент",
   "synonyms": [
    "Сетл",
    "settle",
    "Settle INR"
   ],
   "rows": {
    "Означення": "Кошти, виведені трейдером за відпрацьований обсяг (окрема категорія витрат).",
    "Формула": "SUM(expenses) WHERE expense_category.code = 'settlement'\n  AND currency = 'INR' AND банківський рахунок ≠ TRANSIT, скоуп P2P",
    "Одиниці": "INR (₹)",
    "Де присутня": "11 звітів дашборда; фінанси (lab): Settle Rate MTD, блоки М1/М2, Л0–Л2\n    Settlement ≠ PayIn − PayOut. НЕ рахувати через payments.amount − fee — так робить лише Merchant-SLU для gateway-скоупу (свідоме локальне відхилення, задокументоване там)."
   },
   "notes": [
    "Settlement ≠ PayIn − PayOut. НЕ рахувати через payments.amount − fee — так робить лише Merchant-SLU для gateway-скоупу (свідоме локальне відхилення, задокументоване там)."
   ]
  },
  {
   "canon_id": "settle-payin-pct",
   "group": "Обсяги",
   "name_en": "Settle/PayIn, %",
   "name_uk": "Settle Rate",
   "synonyms": [
    "Сетл/PayIn %",
    "Stl/PI%",
    "S/PI %",
    "Settle KPI"
   ],
   "rows": {
    "Означення": "Частка засеттленого від наливу за період; головний KPI розвантаження балансу.",
    "Формула": "Settlement_INR / PayIn_INR × 100%   (обидва — скоуп P2P, INR-сторони, FX скорочується)",
    "Пороги (фінансовий канон)": "🟢 ≥ 20% on-track · 🟡 18–20% soft lag · 🔴 < 18% severe lag (алерт CFO). Target ≥ 20%.",
    "Одиниці": "%",
    "Де присутня": "KPI, Operational, Weekly, Scoreboard (вага 15% у Score); фінанси (lab): Settle Rate MTD/today"
   },
   "notes": []
  },
  {
   "canon_id": "cr",
   "group": "Конверсія і автоматизація",
   "name_en": "CR, %",
   "name_uk": "Conversion Rate (PayIn)",
   "synonyms": [
    "Конверсія",
    "Total CR",
    "cr_fin",
    "cr_payin"
   ],
   "rows": {
    "Означення": "Частка успішних payin-заявок серед заявок із фінальним статусом.",
    "Формула (канон)": "success / (success + reject + cancel + expire + fail) × 100\nsuccess = status IN ('completed', 'successed_by_partner')",
    "Одиниці": "%",
    "Де присутня": "9 звітів дашборда; фінанси (lab): cr_payin_7d; eye-of-god: CR (success+reject у знаменнику)\n    Канон = знаменник лише з фінальними статусами (так рахують фінанси і eye-of-god). Історичні відхилення дашборда, які приводяться до канону: знаменник COUNT(*) включно з pending (занижує CR протягом дня); чисельник тільки 'successed_by_partner' (Operational) або тільки 'completed' (Merchant-SLU) — канонічний чисельник включає ОБИДВА статуси."
   },
   "notes": [
    "Канон = знаменник лише з фінальними статусами (так рахують фінанси і eye-of-god). Історичні відхилення дашборда, які приводяться до канону: знаменник COUNT(*) включно з pending (занижує CR протягом дня); чисельник тільки 'successed_by_partner' (Operational) або тільки 'completed' (Merchant-SLU) — канонічний чисельник включає ОБИДВА статуси."
   ]
  },
  {
   "canon_id": "auto-pct",
   "group": "Конверсія і автоматизація",
   "name_en": "% Auto",
   "name_uk": "Auto-approval rate (In / Out)",
   "synonyms": [
    "% Авто",
    "Auto%",
    "% Auto In",
    "% Auto Out",
    "AutoPayin"
   ],
   "rows": {
    "Означення": "Частка платежів, оброблених без ручного втручання. Це ДВІ різні метрики.",
    "% Auto In": "COUNT(успішний payin WHERE edited_by_support = false) / COUNT(успішний payin) × 100",
    "% Auto Out": "COUNT(успішний payout WHERE checking_by = '1f122b62-3961-66aa-9d47-b390dada47a9')\n/ COUNT(успішний payout) × 100\nUUID = системний акаунт SYSTEM_APPROVE_SMS_PUSH_MESSAGES (авто-апрув без антискам-перевірки)",
    "Одиниці": "%",
    "Де присутня": "Operational, Weekly, Detailed, Merchant-SLU, Scoreboard; у фінансів відсутня — канон задає дашборд\n    Для PayOut НЕ використовувати edited_by_support — воно там ≈100% і нічого не вимірює; маркер авто-payout — саме UUID у checking_by."
   },
   "notes": [
    "Для PayOut НЕ використовувати edited_by_support — воно там ≈100% і нічого не вимірює; маркер авто-payout — саме UUID у checking_by."
   ]
  },
  {
   "canon_id": "statement-pct",
   "group": "Конверсія і автоматизація",
   "name_en": "Statement, %",
   "name_uk": "Покриття виписками",
   "synonyms": [
    "Виписка %",
    "Stmt%",
    "Statement coverage"
   ],
   "rows": {
    "Означення": "Частка активних рахунків, повністю покритих банківською випискою за вікно.",
    "Формула": "COUNT(DISTINCT BA з BankAccountFile, що повністю покриває вікно)\n/ COUNT(DISTINCT BA з ≥1 payin у вікні) × 100\nпокриття: file.beginDateTime ≥ period_start AND file.endDateTime ≤ NOW()\nвікно: rolling 30 днів",
    "Одиниці": "%",
    "Де присутня": "Operational, Weekly, Scoreboard (вага 10% у Score); у фінансів відсутня — канон задає дашборд"
   },
   "notes": []
  },
  {
   "canon_id": "active-traders",
   "group": "Трейдери й рахунки",
   "name_en": "Active Traders",
   "name_uk": "Активні трейдери",
   "synonyms": [
    "Трейдери",
    "tr/tru",
    "active_traders",
    "Активных трейдеров (lab)"
   ],
   "rows": {
    "Означення": "Два РІЗНІ поняття — не змішувати:",
    "Active Traders (period) — канон дашборда": "COUNT(DISTINCT provider) з ≥1 payin-транзакцією за період\n(provider через bank_accounts.provider_pid)",
    "Traders Online (now) — канон фінансів": "status='active' AND імʼя містить [P2P] без [SLU]/[Intent]\nAND Transaction за останню годину AND payout_ratio_7d > 0 AND balance > 0",
    "Одиниці": "кількість (int)",
    "Де присутня": "(period): всі звіти дашборда. (now): lab «Активных трейдеров», Detailed «1П/2П/3П»\n    Порівнювати «активних за місяць» дашборда з «онлайн зараз» фінансів — некоректно: це різні метрики з різними назвами."
   },
   "notes": [
    "Порівнювати «активних за місяць» дашборда з «онлайн зараз» фінансів — некоректно: це різні метрики з різними назвами."
   ]
  },
  {
   "canon_id": "active-accounts",
   "group": "Трейдери й рахунки",
   "name_en": "Active Accounts",
   "name_uk": "Активні рахунки (BA)",
   "synonyms": [
    "Рахунки",
    "Accts",
    "BA",
    "ba_count"
   ],
   "rows": {
    "Означення": "Аналогічно — два поняття:",
    "Active Accounts (period) — канон дашборда": "COUNT(DISTINCT bank_account) з ≥1 успішним payin за період",
    "Accounts in naliv (now) — канон фінансів": "рахунки з forClientPayin = TRUE прямо зараз",
    "Одиниці": "кількість (int)",
    "Де присутня": "(period): Operational, Weekly, Detailed. (now): lab active_traders-вкладка, Detailed «Налив»\n    Active Accounts ≠ Active Traders: один трейдер має 10+ рахунків."
   },
   "notes": [
    "Active Accounts ≠ Active Traders: один трейдер має 10+ рахунків."
   ]
  },
  {
   "canon_id": "new-traders",
   "group": "Трейдери й рахунки",
   "name_en": "New Traders / Launched",
   "name_uk": "Нові трейдери",
   "synonyms": [
    "nt",
    "Запущено трейдерів",
    "new_traders",
    "launched"
   ],
   "rows": {
    "Означення": "Провайдери, чий найперший payin за всю історію потрапив у період.",
    "Формула": "MIN(перша payin-транзакція) OVER (PARTITION BY provider) ∈ [period_start, period_end)",
    "Одиниці": "кількість (int)",
    "Де присутня": "KPI, Weekly, Churn, Affiliate-звіти; у фінансів близьке — is_developing (перша активність < 3 тижнів) — це ІНШЕ операційне поняття"
   },
   "notes": []
  },
  {
   "canon_id": "avg-payin-trader",
   "group": "Трейдери й рахунки",
   "name_en": "Avg PayIn/Trader",
   "name_uk": "Сер. PayIn на трейдера",
   "synonyms": [
    "Сер/тр",
    "Avg/Tr",
    "avg_payin_trader"
   ],
   "rows": {
    "Означення": "Середній налив на активного трейдера за період.",
    "Формула": "PayIn_Volume / Active_Traders(period)   — чисельник і знаменник з канонів вище",
    "Одиниці": "INR (₹)",
    "Де присутня": "9 звітів дашборда; у фінансів відсутня — канон задає дашборд\n    У Trader KPI знаменник — середньоденна кількість активних (avg daily), а не за весь період. Це окрема метрика «Avg PayIn/Trader (daily-avg)» — при порівнянні звітів звертати увагу, яка з двох використана."
   },
   "notes": [
    "У Trader KPI знаменник — середньоденна кількість активних (avg daily), а не за весь період. Це окрема метрика «Avg PayIn/Trader (daily-avg)» — при порівнянні звітів звертати увагу, яка з двох використана."
   ]
  },
  {
   "canon_id": "deposit",
   "group": "Трейдери й рахунки",
   "name_en": "Deposit",
   "name_uk": "Депозит",
   "synonyms": [
    "dep",
    "депо",
    "depo_usdt/depo_inr"
   ],
   "rows": {
    "Означення": "Забезпечення трейдера. Два поняття:",
    "Deposit (snapshot) — канон фінансів": "deposit_USDT × FX_mid   — миттєва оцінка в INR; входить у формулу Threshold/Capacity",
    "Deposit (cumulative) — канон дашборда (Trader KPI)": "кумулятивний залишок депозитних рахунків (title LIKE '%deposit%') на кінець дня,\nнаростаючим підсумком; виключено провайдерів 'archive' і назви '%Payable%'",
    "Одиниці": "USDT ($) базово, INR (₹) у відображенні",
    "Де присутня": "KPI, Weekly, Detailed, Churn, THC; lab: depo_usdt/depo_inr\n    Це знімок/кумулятив, НЕ потік за період — не можна сумувати по днях."
   },
   "notes": [
    "Це знімок/кумулятив, НЕ потік за період — не можна сумувати по днях."
   ]
  },
  {
   "canon_id": "payin-speed",
   "group": "Швидкість і ємність",
   "name_en": "PayIn Speed",
   "name_uk": "Швидкість зарахування",
   "synonyms": [
    "PI Speed",
    "SLA IN",
    "PayIn P90",
    "AVG speed"
   ],
   "rows": {
    "Означення": "Час від створення payin-заявки до зарахування транзакції.",
    "Канонічний інтервал": "ClientPayin.created_at → Transaction.created_at, тільки успішні, без Appeal",
    "Агрегати (назва метрики ЗОБОВʼЯЗАНА містити агрегат)": "P90    — Scoreboard (вага 18% у Score)\nmedian — Weekly\navg    — Merchant-SLU (там інтервал source_created_at → source_updated_at — gateway-варіант)",
    "Одиниці": "хвилини",
    "Де присутня": "Weekly, Merchant-SLU, Scoreboard; у фінансів відсутня"
   },
   "notes": []
  },
  {
   "canon_id": "payout-speed",
   "group": "Швидкість і ємність",
   "name_en": "PayOut Speed",
   "name_uk": "Швидкість виплат",
   "synonyms": [
    "PO Speed",
    "SLA OUT",
    "AVG Trader Time",
    "Avg speed",
    "l5_speed (lab)"
   ],
   "rows": {
    "Означення": "Час від призначення виплати трейдеру до її завершення.",
    "Канонічний інтервал": "assigned_at → completed_at, тільки успішні payout",
    "Агрегати": "P90    — Scoreboard (вага 20% у Score)\nmedian — Weekly, Detailed (з payment_status_history: processing → completed)\navg    — фінанси (lab): AVG(assignedAt → completedAtByProvider) за 7д",
    "Одиниці": "хвилини",
    "Де присутня": "Weekly, Detailed, Merchant-SLU, Scoreboard; lab: «Скорость (мин)» у М3/Л5\n    CH-поле time_to_complete_payout зламане (константа 60) — не використовувати. Порівнювати P90 дашборда з AVG фінансів — некоректно."
   },
   "notes": [
    "CH-поле time_to_complete_payout зламане (константа 60) — не використовувати. Порівнювати P90 дашборда з AVG фінансів — некоректно."
   ]
  },
  {
   "canon_id": "capacity",
   "group": "Швидкість і ємність",
   "name_en": "Capacity / Threshold",
   "name_uk": "Ємність / Поріг",
   "synonyms": [
    "Ёмкость",
    "Порог",
    "capacity_inr",
    "Cap."
   ],
   "rows": {
    "Означення": "Скільки трейдер ще може прийняти payin прямо зараз. Формули звірені 1:1 між дашбордом і фінансами.",
    "Формули": "Threshold  = deposit_USDT × FX_mid × (max_fill_pct / 100) × (1 + payin_fee_pct / 100)\n             max_fill_pct = zeroPriorityWhenBalanceToDepositThreshold (≈80%)\nHeadroom   = MAX(Threshold − Balance, 0)        Balance = canonical earnings balance (CH)\neff_limit  = MAX_daily_payin_30d (якщо ×1.10 ≥ заявлений ліміт BA — береться заявлений)\nBA_remain  = Σ MAX(eff_limit − payin_today_BA, 0) по рахунках forClientPayin = TRUE\nCapacity   = MIN(BA_remain, Headroom)\n% залитості = Σ Balance / Σ Threshold × 100%    «залитий»: Capacity ≤ 50 000 ₹",
    "Одиниці": "INR (₹)",
    "Де присутня": "Detailed (картка «Capacity P2P»), Capacity-звіт; lab: Capacity INR, % залитости, cap_history"
   },
   "notes": []
  }
 ]
}