> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yume.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Глоссарий: Создание и группировка

> Справочник моделей, задач и справочников подсистемы уведомлений — от единичного события до сгруппированной рассылки по каналам.

Справочник к странице [«Создание и группировка уведомлений»](/ru/logic/notifications/creation-grouping).

## Понятия

| Понятие                                      | Значение                                                                                                |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| Уведомление                                  | Одно событие-уведомление компании, адресованное объекту системы и разосланное по каналам.               |
| Уведомление пользователя                     | Персональное состояние уведомления для конкретного получателя (прочтение/архив).                        |
| Доступ к уведомлениям                        | Матрица подписки сотрудника на тему по конкретному каналу — определяет, кому и куда доставлять.         |
| Задача «Создать уведомление»                 | задача, безусловно создающая одно новое уведомление.                                                    |
| Задача «Обновить или создать уведомление»    | задача, дедуплицирующая уведомление по объекту-источнику: обновляет существующее либо создаёт новое.    |
| Задача «Создать сгруппированное уведомление» | задача, объединяющая повторяющиеся события по одному объекту в одно уведомление внутри временного окна. |
| Тип уведомления                              | Уровень важности уведомления (влияет на визуальное оформление).                                         |
| Канал доставки                               | Три канала веерной рассылки уведомлений.                                                                |
| Тема уведомления                             | Классификатор события для фильтрации, группировки и управления доступом.                                |

## Модели и поля

### Уведомление

*Одно событие-уведомление компании, адресованное объекту системы и разосланное по каналам. Сигнал после сохранения запускает веер доставки при создании.*

**Идентификация**

| Поле          | Тип   | Описание        |
| ------------- | ----- | --------------- |
| Идентификатор | число | Первичный ключ. |

**Связи**

| Поле           | Тип   | Описание                                                       |
| -------------- | ----- | -------------------------------------------------------------- |
| Компания       | связь | Компания-владелец уведомления (общая/глобальная модель).       |
| Автор/источник | связь | Пользователь, породивший уведомление; при удалении обнуляется. |

**Содержимое**

| Поле        | Тип          | Описание                                                                       |
| ----------- | ------------ | ------------------------------------------------------------------------------ |
| Текст       | текст        | Основное содержимое сообщения.                                                 |
| Тип         | перечисление | Уровень важности (информация/предупреждение/тревога), по умолчанию информация. |
| Доп. данные | JSON         | Произвольные полезные данные (например, задача по лиду).                       |

**Адресация**

| Поле               | Тип            | Описание                                                                    |
| ------------------ | -------------- | --------------------------------------------------------------------------- |
| Тип объекта        | текст          | Строковый код связанной сущности (заявка, задача по лиду, документ и т.д.). |
| ID объекта         | число          | Идентификатор связанной сущности; используется для построения ссылок.       |
| Целевые получатели | список (числа) | Явный список получателей; если задан, доставка сужается только до них.      |

**Маршрутизация**

| Поле            | Тип                   | Описание                                                              |
| --------------- | --------------------- | --------------------------------------------------------------------- |
| Тема            | перечисление          | Тема уведомления для фильтрации доступа, по умолчанию «По умолчанию». |
| Каналы доставки | список (перечисление) | Разрешённые каналы (Telegram/push/веб); по умолчанию все три.         |

**Захват**

| Поле               | Тип        | Описание                                                                  |
| ------------------ | ---------- | ------------------------------------------------------------------------- |
| Одноразовый захват | флаг       | Уведомление, которое «прочитывает» только один пользователь.              |
| Кем захвачено      | связь      | Пользователь, забравший одноразовое уведомление; при удалении обнуляется. |
| Время захвата      | дата/время | Момент, когда уведомление было захвачено.                                 |

**Служебные**

| Поле      | Тип        | Описание                                          |
| --------- | ---------- | ------------------------------------------------- |
| Создано   | дата/время | Из базовой модели.                                |
| Обновлено | дата/время | Из базовой модели; ключевое для окна группировки. |

### Уведомление пользователя

*Персональное состояние уведомления для конкретного получателя (прочтение/архив). Уникальность по сочетанию компании, пользователя и уведомления.*

**Идентификация**

| Поле          | Тип   | Описание        |
| ------------- | ----- | --------------- |
| Идентификатор | число | Первичный ключ. |

**Связи**

| Поле        | Тип   | Описание                                                                |
| ----------- | ----- | ----------------------------------------------------------------------- |
| Компания    | связь | Компания-владелец записи.                                               |
| Уведомление | связь | Родительское уведомление.                                               |
| Получатель  | связь | Пользователь, для которого хранится состояние; при удалении обнуляется. |

**Состояние**

| Поле     | Тип  | Описание                                                  |
| -------- | ---- | --------------------------------------------------------- |
| В архиве | флаг | Признак того, что пользователь заархивировал уведомление. |

**Служебные**

| Поле      | Тип        | Описание                                             |
| --------- | ---------- | ---------------------------------------------------- |
| Создано   | дата/время | Из базовой модели; трактуется как отметка прочтения. |
| Обновлено | дата/время | Из базовой модели.                                   |

### Доступ к уведомлениям

*Матрица подписки сотрудника на тему по конкретному каналу — определяет, кому и куда доставлять. Используется при прямой веб-рассылке для отбора получателей по теме.*

**Связи**

| Поле      | Тип   | Описание                                      |
| --------- | ----- | --------------------------------------------- |
| Компания  | связь | Компания-владелец записи.                     |
| Сотрудник | связь | Пользователь, для которого хранится подписка. |

**Ключ**

| Поле  | Тип          | Описание                                       |
| ----- | ------------ | ---------------------------------------------- |
| Канал | перечисление | Канал доставки; по умолчанию push.             |
| Тема  | перечисление | Тема уведомления; по умолчанию «По умолчанию». |

**Состояние**

| Поле     | Тип  | Описание                                             |
| -------- | ---- | ---------------------------------------------------- |
| Включено | флаг | Подписка активна; фильтруется по включённым записям. |

### Задача «Создать уведомление»

*задача (очередь сообщений), безусловно создающая одно новое уведомление. Простейший из трёх сценариев: без дедупликации и без группировки; при пустом тексте сразу выходит.*

**Идентификация объекта**

| Поле                  | Тип   | Описание                                                     |
| --------------------- | ----- | ------------------------------------------------------------ |
| Тип объекта-источника | текст | Строковый код модели-источника (например, заявка, документ). |
| ID объекта-источника  | число | Идентификатор связанной сущности внутри своей модели.        |

**Содержимое**

| Поле                  | Тип     | Описание                                                            |
| --------------------- | ------- | ------------------------------------------------------------------- |
| Текст уведомления     | текст   | Основное сообщение; если пустое — задача ничего не делает.          |
| Дополнительные данные | словарь | Произвольный контекст (ссылки, идентификаторы связанных сущностей). |

**Адресация**

| Поле             | Тип          | Описание                                                         |
| ---------------- | ------------ | ---------------------------------------------------------------- |
| Явные получатели | список чисел | Список получателей; если задан, ограничивает адресатов рассылки. |
| Тема уведомления | перечисление | Тема; по умолчанию «По умолчанию».                               |
| Каналы доставки  | список       | Набор каналов; по умолчанию Telegram + push + веб.               |

**Компания**

| Поле                     | Тип   | Описание                                                                                  |
| ------------------------ | ----- | ----------------------------------------------------------------------------------------- |
| Явный ID компании        | число | Приоритетнее текущей компании соединения; используется при вызове вне контекста компании. |
| Определённый ID компании | число | Вычисляется: явный ID, иначе компания соединения; при отсутствии задача выходит.          |

### Задача «Обновить или создать уведомление»

*задача, дедуплицирующая уведомление по сочетанию компании, типа и идентификатора объекта: обновляет существующее либо создаёт новое. При обновлении удаляет все персональные состояния прочтения для найденных уведомлений и перезаписывает текст, доп. данные и получателей; группировки нет.*

**Идентификация объекта**

| Поле                  | Тип   | Описание                  |
| --------------------- | ----- | ------------------------- |
| Тип объекта-источника | текст | Часть ключа дедупликации. |
| ID объекта-источника  | число | Часть ключа дедупликации. |

**Содержимое**

| Поле                  | Тип     | Описание                                             |
| --------------------- | ------- | ---------------------------------------------------- |
| Текст уведомления     | текст   | Новое сообщение; при пустом значении задача выходит. |
| Дополнительные данные | словарь | Перезаписывает доп. данные при обновлении.           |

**Адресация**

| Поле             | Тип          | Описание                                             |
| ---------------- | ------------ | ---------------------------------------------------- |
| Явные получатели | список чисел | Перезаписывает список получателей.                   |
| Тема уведомления | перечисление | Используется только при создании нового уведомления. |
| Каналы доставки  | список       | Используются только при создании нового уведомления. |

**Компания**

| Поле                     | Тип   | Описание                                                                   |
| ------------------------ | ----- | -------------------------------------------------------------------------- |
| Явный ID компании        | число | Приоритетнее текущей компании соединения.                                  |
| Определённый ID компании | число | Логика та же: явный ID, иначе компания соединения; при отсутствии — выход. |

### Задача «Создать сгруппированное уведомление»

*задача, объединяющая повторяющиеся события по одному объекту в одно уведомление внутри временного окна. Использует кэш-блокировку (повтор при конфликте, до 10 попыток), окно группировки, инкремент счётчика, накопление последних 10 сообщений, формат «(счётчик): последний текст», сброс одноразового захвата при перегруппировке и удаление персональных состояний; после сохранения — прямая веб-рассылка (защищена ключом кэша на 30 с).*

**Идентификация объекта**

| Поле                  | Тип   | Описание                                      |
| --------------------- | ----- | --------------------------------------------- |
| Тип объекта-источника | текст | Часть ключа поиска группы и ключа блокировки. |
| ID объекта-источника  | число | Часть ключа поиска группы и ключа блокировки. |

**Содержимое**

| Поле                  | Тип     | Описание                                                                                         |
| --------------------- | ------- | ------------------------------------------------------------------------------------------------ |
| Текст уведомления     | текст   | Базовый текст; при пустом значении задача выходит; используется, если шаблон заголовка не задан. |
| Дополнительные данные | словарь | Сливается в доп. данные уведомления вместе со счётчиком и списком сообщений.                     |

**Группировка**

| Поле                    | Тип        | Описание                                                                                             |
| ----------------------- | ---------- | ---------------------------------------------------------------------------------------------------- |
| Шаблон заголовка группы | текст      | Если задан, тело формируется как «заголовок (счётчик): последний текст».                             |
| Порция сообщений        | список     | Список сообщений; накапливаются, хранятся последние 10.                                              |
| Шаг счётчика            | число      | На сколько увеличить счётчик при попадании в окно (по умолчанию 1).                                  |
| Окно группировки (мин)  | число      | Ищет уведомление, обновлённое не позже окна; по умолчанию 30 минут.                                  |
| Начало окна             | дата/время | Текущее время минус окно группировки; нижняя граница поиска существующей группы.                     |
| Счётчик событий         | число      | Хранится в доп. данных; растёт на шаг счётчика при каждом попадании в окно.                          |
| Флаг «клейм-раз»        | флаг       | При перегруппировке сбрасывает данные захвата, чтобы уведомление снова мог «забрать» один сотрудник. |

**Адресация**

| Поле             | Тип          | Описание                                                             |
| ---------------- | ------------ | -------------------------------------------------------------------- |
| Явные получатели | список чисел | При обновлении заменяют прежних получателей только если непустые.    |
| Тема уведомления | перечисление | Входит в ключ поиска группы и в фильтр доступов при веб-рассылке.    |
| Каналы доставки  | список       | Прямая веб-рассылка выполняется, только если среди каналов есть веб. |

**Синхронизация**

| Поле                | Тип   | Описание                                              |
| ------------------- | ----- | ----------------------------------------------------- |
| Ключ кэш-блокировки | текст | Кэш-блокировка на 10 с; при неудаче повтор через 1 с. |

**Компания**

| Поле                     | Тип   | Описание                                                     |
| ------------------------ | ----- | ------------------------------------------------------------ |
| Явный ID компании        | число | Приоритетнее текущей компании соединения.                    |
| Определённый ID компании | число | Явный ID, иначе компания соединения; при отсутствии — выход. |

## Статусы и справочники

### Тип уведомления

Уровень важности уведомления (влияет на визуальное оформление).

* Информация
* Предупреждение
* Тревога

### Канал доставки

Три канала веерной рассылки уведомлений; по умолчанию push.

* Веб (Ably)
* Мобильный push (Expo)
* Telegram

### Тема уведомления

Классификатор события для фильтрации, группировки и управления доступом.

* По умолчанию
* Заявка забронирована
* Заявка завершена
* Просрочка по заявке
* Смена статуса оплаты заявки
* Операция создана
* Возврат по операции
* Операция удалена
* Превышен лимит долга клиента
* Клиент добавлен в чёрный список
* Документ создан
* Документ подписан
* Инвентаризация создана
* Чек-лист инвентаризации
* Доставка назначена
* Смена статуса доставки
* Доставка завершена
* Доставка отменена
* Подходит срок ТО
* ТО назначено
* ТО завершено
* Инвентарь сломан
* Низкий баланс SMS
* Ошибка SMS
* Возврат SMS
* Штраф создан (сервис автомобильных штрафов)
* Получено сообщение Wazzup
