family-tu

FamilyTU

Collection family_tus — canonical-документ TU для всіх Family. Поточна schema і indexes оголошені в @it-monkeys/backend-common.

Поля

  • directorId — scope директора, у якому TU була імпортована або створена.
  • family — Family, до якої належить TU.
  • stackId — legacy-зв’язок зі Stack TU Card; поступово замінюється canonical-зв’язками.
  • adminId — ID canonical FamilyAdmin або null для видаленої/неприв’язаної TU.
  • partnerIds — partner ID у типізованому форматі Family; idApi є основним числовим ID у поточній schema.
  • credentials.login / credentials.passwordEncrypted — credentials TU там, де вони існують. У звичайні read projections поле credentials не входить.
  • profile — спільні поля профілю: ім’я, вік, avatar та інші поля, потрібні нашому frontend.
  • familyData — додаткові поля конкретної Family, валідовані її schema.
  • status.active / status.deleted — нормалізований стан TU.
  • capabilities.canReceiveGifts — спільна capability або null, якщо Family її не надає.
  • assignments — KM та призначення supervisor/operator за робочими змінами.
  • sync.lastListedAt / sync.profileSyncedAt — час останнього успішного оновлення списку і профілю.

Assignments

assignments: {
  clientManagerFamilyId: string | null;
  shifts: Array<{
    shift: 1 | 2 | 3;
    supervisorFamilyId: string | null;
    operatorFamilyId: string | null;
  }>;
}

clientManagerFamilyId, supervisorFamilyId та operatorFamilyId — Family assignment IDs.

  • Кожна TU має три зміни у всіх Family.
  • Зміни створюються разом із TU і не видаляються та не зміщуються.
  • shift унікальний усередині TU. Код знаходить призначення за shift, а не за позицією масиву.
  • operatorFamilyId може бути заповнений лише разом із supervisorFamilyId цієї зміни.
  • Один supervisorFamilyId не може займати дві зміни однієї TU.
  • Призначення виконується атомарно за TU id + shift + поточне значення. Якщо поточне значення вже змінилось, операція не перезаписує нові дані.
  • Системне зняття робочих призначень очищає supervisor/operator, але не KM. clientManagerFamilyId змінюється лише разом зі зв’язком TU Card.

Assignments зберігаються всередині FamilyTU, без окремої collection.

Відмінності Family

FamilypartnerIdsCredentials TUЗміни
Golden{ idApi }numeric login + password3
Prime{ idApi }email + password + referral code3
Chathouse{ idApi, externalId?, ulid?, supplyId? }email + password; auth code для operator session3
UdateidApi; ulid у partnerIdsНемає; запити йдуть через suboperator3

Індекси

  • unique { directorId: 1, family: 1, "partnerIds.idApi": 1 } — одна TU у scope директора;
  • partial unique { family: 1, "partnerIds.idApi": 1 } для status.deleted: false — одна поточна canonical TU на партнері;
  • { directorId: 1, family: 1, "status.deleted": 1 } — списки TU директора;
  • { adminId: 1, "status.deleted": 1 } — списки та sync у межах адмінки;
  • { "assignments.clientManagerFamilyId": 1, "status.deleted": 1 } — TU конкретного KM;
  • { "assignments.shifts.supervisorFamilyId": 1, "status.deleted": 1 } — TU конкретного supervisor;
  • { "assignments.shifts.operatorFamilyId": 1, "status.deleted": 1 } — TU конкретного operator.