{
 "slug": "trader-operational",
 "name": {
  "en": "Trader Operational Dashboard",
  "uk": "Операційний дашборд трейдерів",
  "ru": "Операционный дашборд трейдеров"
 },
 "group": "Trader",
 "department": "analytics",
 "kind": "report",
 "admin_only": false,
 "migration_priority": 1,
 "usage_7d": {
  "visits": 15424,
  "users": 74,
  "is_new": false
 },
 "metrics": [
  "payin_volume",
  "payout_volume",
  "settlement",
  "settle_payin_pct",
  "cr",
  "auto_pct",
  "statement_pct",
  "active_traders",
  "active_accounts",
  "avg_payin_trader",
  "payout_pending_count",
  "payout_pending_amount",
  "payin_unassigned_count",
  "payin_unassigned_amount",
  "traders_on_shift_plan",
  "avg_accounts_per_trader_hour",
  "status_general"
 ],
 "legend_notes": [
  {
   "label": "Вкладка Daily",
   "text": "KPI-карточки — 10 ключевых метрик за сегодня с сравнением со вчерашним днём (% изменения). График — выбранная метрика по дням. Выходные дни выделены оранжевым. Переключение метрики — кнопками над графиком. TOP-5 — пять лидеров по выбранной метрике в разрезе Affiliate / Manager / Trader. Пересчитываются при смене метрики. Матрица — сводная таблица: строки = Affiliate / Manager / Trader (переключатель), столбцы = даты. Сортировка по Total. Переключение разреза — кнопками Affiliate / Manager / Trader. Day-over-Day — таблица с ежедневным сравнением всех метрик. Зелёные/красные стрелки показывают рост/падение относительно предыдущего дня.",
   "pattern": "lg-item"
  },
  {
   "label": "Вкладка Hourly",
   "text": "Почасовая статистика за выбранный день. Выберите дату в выпадающем списке. KPI-карточки — суммарные/средние значения за день. График — выбранная метрика по часам. Показывает только часы с данными (будущие часы скрыты). Таблица — все метрики по каждому часу.",
   "pattern": "lg-item"
  },
  {
   "label": "Вкладка Shifts",
   "text": "Контроль смен: кто вышел на смену, кто нет, кто работает вне своей смены. Смены (Plan) — плановое время работы из workingHoursFrom/To . S1: 06:00–14:00 IST, S2: 13:00–22:00, S3: 20:00–07:00. 24/7 = 00:00–24:00. Активность (Fact) — трейдер активен в час H, если PayIn > 0 или PayOut > 0 за этот час по IST. Цвета ячеек: ■ Active in shift, ■ Planned (впереди), ■ Missed (пропуск), ■ Active outside (вне смены). Coverage % = Active / Plan × 100%. Зелёный ≥80%, жёлтый ≥50%, красный Hours in/out — часы активности в смену / вне смены. PayIn in/out — объём PayIn в смену / вне смены. Клик на имя — детали: смена, менеджер, 24-часовая разбивка, итоги дня.",
   "pattern": "lg-item"
  },
  {
   "label": "Фильтры",
   "text": "Affiliate / Manager / Group / Status / Trader — фильтрация данных. Все графики, KPI, матрица и таблицы пересчитываются при изменении фильтра. Group = P2P — установлен по умолчанию. Hour to Hour (H2H) — для честного сравнения дней. При включении каждый день показывает данные только до текущего часа IST. Пример: сейчас 14:00 — вчерашний день показывает данные за 00:00–14:00, а не за весь день.",
   "pattern": "lg-item"
  },
  {
   "label": "Выбор метрики",
   "text": "Кнопки над графиком (PayIn Volume, CR%, Active Traders и т.д.) переключают: • График по дням / часам • TOP-5 панели • Матрицу (значения в ячейках) Все 10 метрик доступны для анализа в каждом разрезе.",
   "pattern": "lg-item"
  },
  {
   "label": "Out Pending (только Hourly)",
   "text": "Сколько payout-заявок было в статусе 'pending' в момент HH:mm — реконструкция через таблицу History. Снапшот в моменте, как если бы бот делал запрос в это время. Для каждого получаса отдельно. ВНИМАНИЕ: pending payout не имеет accountProvider (ещё не назначен трейдеру), поэтому метрика ГЛОБАЛЬНАЯ и уважает только фильтр Pmt Method. Остальные фильтры (Affiliate/Manager/Status/Group/Trader) на эту колонку не влияют. SQL-query ▾ -- 1) Найти в History моменты выхода из статуса 'pending' WITH payout_pending_end AS ( SELECT \"recordId\" AS payout_id, MIN(\"createdAt\") AS pending_end FROM \"History\" WHERE \"table\" = 'ClientPayout' AND \"logJson\"->'data'->'status'->>'old' = 'pending' GROUP BY \"recordId\" ) -- 2) Для каждого payout: pending_start=createdAt, pending_end -- 3) Для каждого получаса T: -- был pending в момент T ⇔ -- pending_start T)",
   "pattern": "lg-item"
  },
  {
   "label": "Unassigned (только Hourly)",
   "text": "ClientPayin созданные в этом получасе с bankAccount IS NULL — заявки которые не получили счёт. Колонки: # (количество) и ₹ (сумма). Уважает ТОЛЬКО фильтр Pmt Method — остальные фильтры (Affiliate/Manager/Group/Status/Trader) недоступны, потому что без bankAccount нет связи с трейдером. SQL-query ▾ SELECT COUNT(*) AS unassigned_count, COALESCE(SUM(amount), 0) AS unassigned_amount FROM \"ClientPayin\" WHERE \"bankAccount\" IS NULL AND (\"prevPendingClientPayinId\" IS NULL OR \"prevPendingClientPayinId\" = '') -- + фильтр по получасу createdAt -- + фильтр paymentMethodType (если выбран)",
   "pattern": "lg-item"
  },
  {
   "label": "Hour-to-Hour (H2H)",
   "text": "Фильтр для честного сравнения дней. При включении каждый день показывает данные только до текущего часа IST. Если сейчас 14:00 — все дни показывают 00:00–14:00. SQL-query ▾ -- Добавляется ко всем запросам: WHERE hr",
   "pattern": "lg-item"
  },
  {
   "label": "Матрица",
   "text": "Сводная таблица: строки = Affiliate / Manager / Trader, столбцы = даты, значения = выбранная метрика. Сортировка по Total убыванию. Total для процентных метрик (CR, Auto, Settle/PayIn) — средневзвешенное, не простая сумма.",
   "pattern": "lg-item"
  },
  {
   "label": "TOP-5",
   "text": "Пять лидеров по выбранной метрике в разрезе Affiliate / Manager / Trader. Пересчитывается при смене метрики. Для процентных метрик используется взвешенный расчёт.",
   "pattern": "lg-item"
  },
  {
   "label": "Источник данных",
   "text": "ClickHouse hermes. Грейн: date × hour × trader. Период: по умолчанию последние 30 дней, доступно до 90 дней истории. Часовой пояс: IST (UTC+5:30). Данные обновляются каждые 30 минут.",
   "pattern": "lg-item"
  }
 ],
 "data_needs": [
  "/api/operational/affiliates-by-manager",
  "/api/operational/daily",
  "/api/operational/dates",
  "/api/operational/hourly",
  "/api/operational/matrix",
  "/api/operational/payment-methods",
  "/api/operational/period-uniques",
  "/api/operational/statement-breakdown",
  "/api/operational/top5",
  "/api/operational/traders",
  "/api/shifts/grid"
 ]
}