> ## 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/access-settings-glossary).

## Что это за слой

Эта страница описывает слой прав и настроек уведомлений: как для каждого сотрудника хранится матрица «канал × тема», кто её видит и редактирует, и как система сама достраивает недостающие строки, чтобы у любого сотрудника всегда был полный набор переключателей.

Идея простая: у каждого сотрудника есть таблица подписок. По строкам — темы событий (например, «Заявка забронирована», «Возврат по операции», «Низкий баланс SMS»), по столбцам — три канала доставки: веб, мобильный push и Telegram. На пересечении стоит флажок «Включено/Выключено». Именно этот флажок решает, придёт ли конкретному сотруднику конкретный тип события по конкретному каналу.

<Info>
  Полная матрица одного сотрудника — это три канала, умноженные на весь каталог тем. На момент написания каталог содержит 27 тем, значит полная матрица — это 3 × 27 = 81 строка на сотрудника.
</Info>

## Модель данных

Каждая запись «Доступ к уведомлениям» — это одна ячейка матрицы: связка сотрудника, канала и темы плюс флаг включения.

| Поле      | Тип          | Назначение                                                                                 |
| --------- | ------------ | ------------------------------------------------------------------------------------------ |
| Компания  | связь        | Компания, которой принадлежит запись. Изолирует настройки одного бизнеса от другого.       |
| Сотрудник | связь        | Владелец настройки — конкретный пользователь.                                              |
| Канал     | перечисление | Куда доставлять: веб, мобильный push или Telegram. Значение по умолчанию — мобильный push. |
| Тема      | перечисление | Тип события. Значение по умолчанию — «По умолчанию».                                       |
| Включено  | флаг         | Активна ли подписка на эту связку. По умолчанию включено.                                  |

<Note>
  Комбинация «компания + сотрудник + канал + тема» уникальна. То есть для одного сотрудника не может быть двух строк с одинаковой парой «канал × тема» — на каждую ячейку матрицы приходится ровно одна запись.
</Note>

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

Каналов ровно три:

| Канал          | Что означает                             |
| -------------- | ---------------------------------------- |
| Веб            | Доставка в веб-интерфейс.                |
| Мобильный push | Пуш-уведомление на мобильное приложение. |
| Telegram       | Сообщение в привязанный Telegram.        |

### Каталог тем

Тема — это классификатор события. Он используется не только для управления доступом, но и для фильтрации и группировки уведомлений в других частях модуля. Ниже — полный каталог тем, сгруппированный по смыслу.

**Служебная**

* По умолчанию — общая тема для событий без отдельной классификации.

**Заявки**

* Заявка забронирована
* Заявка завершена
* Просрочка по заявке
* Смена статуса оплаты заявки

**Финансовые операции**

* Операция создана
* Возврат по операции
* Операция удалена

**Клиенты**

* Превышен лимит долга клиента
* Клиент добавлен в чёрный список

**Документы**

* Документ создан
* Документ подписан

**Инвентаризация**

* Инвентаризация создана
* Чек-лист инвентаризации

**Доставка**

* Доставка назначена
* Смена статуса доставки
* Доставка завершена
* Доставка отменена

**Техобслуживание**

* Подходит срок ТО
* ТО назначено
* ТО завершено

**Инвентарь и SMS**

* Инвентарь сломан
* Низкий баланс SMS
* Ошибка SMS
* Возврат SMS

**Интеграции**

* Штраф создан (сервис автомобильных штрафов)
* Получено сообщение Wazzup

<Tip>
  Каталог тем — «живой» справочник: при добавлении новой темы в код полная матрица автоматически расширяется, и каждый сотрудник со временем получит новые переключатели через механизм ленивого досоздания (см. ниже).
</Tip>

## Как сотрудник видит и меняет свои настройки

Есть один адрес настроек доступа. Он доступен только авторизованному сотруднику и работает всегда в контексте текущей компании и текущего пользователя — то есть сотрудник видит и меняет только свои собственные настройки. Постраничная разбивка отключена: список всегда возвращается целиком.

Адрес совмещает два режима:

* **Чтение (запрос списка)** — отдаёт матрицу доступов сотрудника. При этом служебные поля (компания и владелец) в ответ не включаются: наружу отдаются канал, тема, флаг включения и технический идентификатор строки.
* **Запись (массовое обновление)** — принимает список настроек и применяет их разом.

### Ленивое досоздание полной матрицы

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

* Если строк ровно столько, сколько нужно, — просто возвращает их.
* Если число строк не совпадает с эталоном (обычно строк меньше — сотрудник новый, либо в каталог добавились новые темы/каналы), система на лету создаёт все недостающие ячейки со значением **«Включено»** и затем возвращает уже полную матрицу.

<Note>
  Досоздание всегда включает недостающие ячейки. То есть новые темы, появившиеся в каталоге, для всех сотрудников по умолчанию оказываются включёнными — согласие на новые типы уведомлений выдаётся автоматически, а не запрашивается.
</Note>

<Warning>
  Проверка полноты матрицы опирается только на количество строк, а не на их состав. Если у сотрудника ровно нужное число строк, но набор пар «канал × тема» по какой-то причине не совпадает с эталонным (например, тема была удалена из каталога, а её строка осталась), система сочтёт матрицу полной и не станет ничего досоздавать. На практике при штатном росте каталога это не мешает: число строк оказывается меньше эталона, и досоздание срабатывает.
</Warning>

### Массовое обновление (создать или обновить)

Режим записи принимает не одну ячейку, а список настроек. Каждый элемент списка — это тройка: канал, тема и новое значение флага «Включено».

Обработка идёт единой транзакцией и работает по принципу «создать или обновить»:

1. Система сначала считывает, какие пары «канал × тема» у сотрудника уже есть.
2. Те элементы списка, для которых строки ещё нет, — создаются с переданным значением флага.
3. Те, для которых строка уже существует, — обновляются: у них меняется только флаг «Включено».

<Info>
  Обновление затрагивает исключительно флаг включения. Канал и тему у существующей строки массовое обновление не переписывает — пара «канал × тема» служит ключом, по которому находится нужная ячейка.
</Info>

<Note>
  Обе части — создание недостающих и обновление существующих — выполняются в одной транзакции. Если что-то пойдёт не так, изменения не применятся частично: либо весь пакет настроек сохраняется, либо ничего.
</Note>

## Как это используется дальше

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

Таким образом слой доступа работает как «предохранитель» веерной рассылки: даже если событие сгенерировано, конкретный сотрудник получит его по конкретному каналу только тогда, когда у него включена соответствующая ячейка матрицы.

## Особенности поведения

* Все недостающие ячейки при ленивом досоздании создаются со значением «Включено», поэтому новые темы, добавленные в каталог, для всех сотрудников автоматически оказываются подписанными без явного согласия.
* Создание недостающих строк и обновление существующих при массовом сохранении выполняются в одной транзакции, поэтому частичное применение пакета невозможно: либо сохраняется всё, либо ничего.
* Массовое обновление меняет у существующей строки только флаг включения; канал и тема при обновлении не переписываются — они служат ключом поиска ячейки.
* Адрес всегда работает только с настройками текущего сотрудника в текущей компании и не позволяет читать или менять чужие подписки; постраничная разбивка отключена.
* Размер полной матрицы вычисляется как произведение числа каналов на число тем (на момент написания 3 × 27 = 81 строка на сотрудника) и растёт автоматически при расширении каталога тем.

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Глоссарий: Доступ и настройки" icon="book" href="/ru/logic/notifications/access-settings-glossary">
    Полный перечень полей модели доступа, каналов и тем с точными названиями и назначением.
  </Card>

  <Card title="Уведомления (доставка и доступ)" icon="bell" href="/ru/logic/notifications">
    Обзорная страница модуля уведомлений: доставка, создание, каналы и права доступа.
  </Card>

  <Card title="Модель и веер доставки" icon="sitemap" href="/ru/logic/notifications/model-dispatch">
    Модели уведомления и его получателей, сигнал сохранения и разветвление доставки по каналам с учётом доступов.
  </Card>

  <Card title="Создание и группировка" icon="layer-group" href="/ru/logic/notifications/creation-grouping">
    Фоновые задачи создания уведомлений: одиночные, по объекту и сгруппированные в 30-минутном окне.
  </Card>

  <Card title="Каналы доставки" icon="tower-broadcast" href="/ru/logic/notifications/delivery-channels">
    Транспортные задачи и сервис: веб-доставка, мобильный push с деактивацией мёртвых токенов и Telegram-рассылка.
  </Card>

  <Card title="Чтение, архивация и список" icon="envelope-open" href="/ru/logic/notifications/read-archive">
    Адреса списка, счётчика непрочитанных, отметки прочтения и архивации с фильтрами.
  </Card>

  <Card title="Push-токены устройств" icon="mobile-screen" href="/ru/logic/notifications/push-tokens">
    Регистрация и отписка push-токенов мобильных устройств сотрудника с уникальностью по устройству.
  </Card>

  <Card title="Привязка Telegram" icon="paper-plane" href="/ru/logic/notifications/telegram-link">
    Привязка и отвязка аккаунта сотрудника к Telegram-боту по одноразовому коду верификации.
  </Card>
</CardGroup>
