09-project-statistics-relations

ProjectStatisticsRelation

backend-common/src/statistics/project-statistics-relation.schema.ts · колекція project_statistics_relations — денна статистика TU з прив’язкою до команди, одна форма для всіх проєктів. З неї читають статистика, дашборди і звіти (legacy *_statistics_relations). Проєкція журналу 05-project-statistics і зв’язків TU з юзерами.

Поля

  • project, day — day у форматі YYYY-MM-DD у часовій зоні проєкту.
  • tuId — canonical TU; null — оператор, який цього дня був у команді без TU.
  • operatorProjectId / teamLeadProjectId / clientManagerProjectId — кому належить сума.
  • isActive / isDeleted — стан TU цього дня; у записі без TU — стан оператора.
  • isFinal — запис зі станом на кінець доби. Якщо прив’язка TU змінилась протягом доби, у TU кілька записів за день, фінальний — один; з нього починається наступний день.
  • amount — сума operations.
  • operations — операції партнера: type як є, amount, ruId, isFree за правилами проєкту. Порожньо, коли партнер віддає лише денну суму (Prime, Udate).

Запис

Дні лише дописуються після денної вигрузки; незавершені дні в колекцію не пишуться, а накладаються на читанні. Алгоритм дня і звірка з legacy — Relations дня.

Індекси

project + day (період проєкту, останній записаний день, стан попереднього дня), project + operatorProjectId + day, project + teamLeadProjectId + day, project + clientManagerProjectId + day — фільтри legacy-читачів: оператор, тімлід, КМ за місяць.

Нюанси

  • Міграція legacy Golden: POST /migrations/statistics-relations/apply переносить golden_statistics_relations як є зі збереженням _id (ідемпотентно, повтор добирає нові дні legacy). ladyId legacy — уже _id canonical TU, supervisorId стає teamLeadProjectId, cmId — clientManagerProjectId, bonuses — operations (manId → ruId).
  • Обсяг Golden: 1.18M записів з 2024-06-30, ~1 900 на день, 2.48M операцій; сума дня збігається з golden_statistics.
  • Формат legacy однаковий у 4 проєктах; bonuses є лише в Golden і Chathouse, final немає в Udate.