AnalyticsService
Спільний модуль family-application-api для графіків одного оператора у статистиці. Читає нормалізовані дані напряму з collections і однаково працює для всіх Family.
Задача
- Побудувати графіки тасків, online та ручних дій оператора.
- Віддавати однакові request/response незалежно від Family.
- Підтримувати календарний день і межі зміни supervisor.
Графіки
| № | Графік | Період | Що показує |
|---|---|---|---|
| 1 | Завершення тасків | місяць, по днях | частка closedOnTime, closedOutTime і closedBySystem |
| 2 | Кількість тасків | день, по годинах | created, closedOnTime, closedOutTime і closedBySystem |
| 3 | Середня швидкість обробки | місяць, по днях | середній час від створення таска до відповіді та кількість відповідей |
| 4 | Online оператора | день, по годинах | секунди online у кожній годині та загальний час |
| 5 | Ручні дії | день, по 5 хв | кількість chat, mail і всіх ручних дій; середній час online на одну дію |
| 6 | TU activity | день, timeline | інтервали роботи кожної TU, дії та події workspace |
Для перших трьох графіків можна вибрати один Task.type або всі типи.
Поточні відмінності
| Графік | Golden | Prime | Chathouse | Udate |
|---|---|---|---|---|
| Завершення тасків | 3 категорії | 1 загальний % | 1 загальний % | 1 загальний % |
| Кількість тасків | 3 категорії закриття | created / answered / canceled | created / answered / canceled | created / answered / canceled |
| Середня швидкість | ✅ | ✅ | ✅ | ✅ |
| Online оператора | ✅ | ✅ | ✅ | ✅ |
| Ручні дії | chat / mail / all | all; немає в operator self | all | all |
| TU activity | online, actions, stream, kick | — | online, 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 |
| 4 | Online оператора за день | 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 TU | TUWorkspaceOnlineSession |
| Sender actions, stream і kick | результати Electron DataSync |
TODO перед реалізацією TU activity
- Додати
tuIdдо синхронізованої ручної дії, інакше її не можна прив’язати до конкретної TU. - Описати спільне зберігання результатів chat/mail sender, stream та kick із Electron DataSync.