analytics-service

AnalyticsService

Спільний модуль family-application-api для графіків одного оператора у статистиці. Читає нормалізовані дані напряму з collections і однаково працює для всіх Family.

Задача

  1. Побудувати графіки тасків, online та ручних дій оператора.
  2. Віддавати однакові request/response незалежно від Family.
  3. Підтримувати календарний день і межі зміни supervisor.

Графіки

ГрафікПеріодЩо показує
1Завершення тасківмісяць, по дняхчастка closedOnTime, closedOutTime і closedBySystem
2Кількість тасківдень, по годинахcreated, closedOnTime, closedOutTime і closedBySystem
3Середня швидкість обробкимісяць, по дняхсередній час від створення таска до відповіді та кількість відповідей
4Online операторадень, по годинахсекунди online у кожній годині та загальний час
5Ручні діїдень, по 5 хвкількість chat, mail і всіх ручних дій; середній час online на одну дію
6TU activityдень, timelineінтервали роботи кожної TU, дії та події workspace

Для перших трьох графіків можна вибрати один Task.type або всі типи.

Поточні відмінності

ГрафікGoldenPrimeChathouseUdate
Завершення тасків3 категорії1 загальний %1 загальний %1 загальний %
Кількість тасків3 категорії закриттяcreated / answered / canceledcreated / answered / canceledcreated / answered / canceled
Середня швидкість
Online оператора
Ручні діїchat / mail / allall; немає в operator selfallall
TU activityonline, actions, stream, kickonline, actions, kick

У новому AnalyticsService перші п’ять графіків мають один формат для всіх Family. TU activity також стає спільним; stream повертається лише для Family, де така подія існує.

Доступ

  • operator — лише власна аналітика;
  • supervisor — оператори своєї команди;
  • top manager і director — оператор у доступному їм scope;
  • HR — без аналітики.

API

ОпераціяEndpoint
1Завершення тасків за місяцьPOST /analytics/task-completion
2Кількість тасків за деньPOST /analytics/task-counts
3Швидкість обробки за місяцьPOST /analytics/processing-speed
4Online оператора за деньPOST /analytics/operator-online
5Ручні дії за деньPOST /analytics/manual-actions
6Активність TU за деньPOST /analytics/tu-activity

Спільні параметри: family, operatorFamilyId, дата та periodType: day | shift. Для тасків додатково передається необов’язковий taskType.

Розрахунки

Завершення тасків

  • closedOnTime — відповідь до expiresAt або таск без дедлайну.
  • closedOutTime — відповідь після expiresAt.
  • closedBySystem — таск скасований системою без відповіді.
  • таск, замінений іншим таском, не входить у розрахунок.
  • знаменник відсотків — сума трьох категорій закриття.

Кількість тасків

created групується за createdAt; відповідь або системне закриття — за result.at.

Швидкість обробки

Для кожного дня: sum(result.at - createdAt) / answeredCount. Результат — секунди на один відповіджений таск.

Online і ручні дії

  • online кожної години — сума перетинів OperatorOnlineSession з цією годиною;
  • ручні дії групуються по 5 хв із OperatorAction;
  • speed — загальна кількість секунд online / кількість ручних дій.

TU activity

  • online TU — TUWorkspaceOnlineSession;
  • chat/mail sender actions і manual actions групуються по TU та 5 хв;
  • kick — час примусового закриття Electron;
  • stream — інтервали стріму Golden.

Дані

ГрафікДжерело
ТаскиTask
Online оператораOperatorOnlineSession
Ручні діїOperatorAction
Online TUTUWorkspaceOnlineSession
Sender actions, stream і kickрезультати Electron DataSync

TODO перед реалізацією TU activity

  1. Додати tuId до синхронізованої ручної дії, інакше її не можна прив’язати до конкретної TU.
  2. Описати спільне зберігання результатів chat/mail sender, stream та kick із Electron DataSync.