> ## 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.

# Пакеты, баланс и квоты подписи

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

Полный перечень полей — в [глоссарии пакетов](/ru/logic/documents/packages-glossary).

## Логика

Подписание документов монетизируется двумя разными способами, и какой из них действует для компании, решает платформа. От режима зависит всё: за что платит компания, расходуются ли купленные пакеты подписей и может ли подписание быть заблокировано.

### Два режима биллинга подписания

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

<Note>
  Режим назначает платформа. Компания видит его в своих настройках, но сменить сама не может; незаполненное или незнакомое значение всегда трактуется как «за SMS».
</Note>

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

<Info>
  В режиме «за документ» сообщения подписания для компании бесплатны: они по-прежнему попадают в историю сообщений, себестоимость у провайдера сохраняется, но с SMS-баланса компании ничего не списывается и нулевой SMS-баланс отправку не останавливает.
</Info>

<Note>
  Режим «за SMS» не расходует пакеты попутно: раньше слот списывался даже тогда, когда компания уже заплатила за SMS. Двойной оплаты одного и того же подписания в системе нет.
</Note>

### Пакет подписей документов

Пакет — разовая порция лимита подписей, выданная компании в привязке к тарифу и/или к позиции счёта. Остаток и признак «Активен» — вычисляемые свойства (не хранятся в базе): остаток — это «Всего» минус «Использовано», но не меньше нуля; активен — когда остаток больше нуля.

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

**Общий остаток компании** — это сумма остатков всех её пакетов с ненулевым остатком; если у компании нет ни одного пакета, общий остаток равен нулю.

**Списание слота** выполняется только в режиме «за документ» и происходит автоматически, когда очередная подпись документа переходит в статус «Подписан»:

1. Если по этому документу слот уже был списан ранее — повторного списания не происходит.
2. Среди пакетов компании выбирается самый старый по дате создания пакет с ненулевым остатком.
3. Если такого пакета нет — слот не списывается, документ подписывается как обычно.
4. Иначе «Использовано» увеличивается на единицу, создаётся запись расхода, отправляется веб-уведомление о новом значении.

<Note>
  Документ стоит ровно **один** слот, сколько бы у него ни было подписантов: учёт ведётся по документу, поэтому смена «самого старого пакета с остатком» между подписями разных подписантов больше не приводит к повторному списанию.
</Note>

<Tip>
  Пакеты расходуются по принципу «сначала старый»: пока у самого раннего пакета остаётся хотя бы одна свободная подпись, списание идёт именно из него.
</Tip>

### Блокировка подписания при нулевом остатке

В режиме «за документ» операция подписания отклоняется с ошибкой «Количество подписей исчерпано», если свободных слотов в пакетах компании не осталось (в том числе когда пакетов нет вовсе). Проверка выполняется в четырёх точках:

* отправка ссылки на подписание сотрудником;
* запрос кода подтверждения клиентом;
* подтверждение кода клиентом;
* загрузка файла с электронной подписью.

Ручное подписание сотрудником и подтверждение через мобильное приложение ЕГОВ эту проверку не проходят: слот они списывают, если остаток есть, но при нулевом остатке документ всё равно будет подписан — бесплатно.

<Warning>
  Каждый шаг проверяет остаток самостоятельно, поэтому возможен редкий пограничный случай: если в двухминутном окне между отправкой кода и его подтверждением последний свободный слот компании занял другой документ, подтверждение кода будет отклонено с просьбой пополнить пакет — клиенту придётся запросить код заново после покупки нового пакета.
</Warning>

В режиме «за SMS» ни одна из этих проверок ничего не ограничивает: подписывать можно сколько угодно документов независимо от наличия пакетов.

### Баланс документов

Отдельная сущность — счётчик суммы для компании на определённый период (даты начала и окончания). Не является частью процесса пакетов подписей выше.

<Warning>
  На данный момент баланс документов нигде не создаётся, не обновляется и не проверяется — ни при оплате счетов, ни при подписании документов. Модель существует в базе данных (у неё даже нет регистрации в административной панели, в отличие от пакетов), но не подключена ни к одному бизнес-процессу.
</Warning>

### Разрешение на подписание по квоте документов

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

<Warning>
  Это разрешение по-прежнему отключено и всегда сразу пропускает запрос: реально ограничивает подписание только проверка остатка внутри сценариев, описанная выше. Дополнительно: у этого разрешения нет даже базовой «технической» защиты за счёт наследования — родительский механизм сам по себе не содержит проверки доступа, а резервный лимит «подписание документов» не входит в перечень типов лимитов подписки, заведённых в системе на сегодня.
</Warning>

### Что видит компания через API пакетов

* **Список пакетов документов** — полный список компании одним ответом, без пагинации, отсортированный от самого старого к новому; для каждого пакета отдаётся краткое описание тарифа, лимит, использовано, вычисленные остаток и активность. Все поля только на чтение.
* **Остаток подписей компании** — отдельный адрес с одним числом: суммарный остаток по всем активным пакетам.

Оба адреса доступны только пользователям с соответствующим правом доступа (staff-права), обычным клиентам компании не открыты.

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

* Режим биллинга подписания отдаётся в настройках компании только для чтения — сменить его может лишь платформа.
* Списание одного слота происходит по факту перехода подписи в статус «Подписан», а не в момент, когда документ становится полностью подписанным; второй и последующие подписанты того же документа слот уже не расходуют.
* Ручное подписание и подтверждение через мобильное приложение ЕГОВ не проверяют остаток пакета, поэтому в режиме «за документ» ими можно подписать документ и при нулевом остатке (слот при этом просто не спишется).
* Пакет создаётся автоматически только для позиций счёта с тарифом типа «количество»; проверка на повторное создание идёт по позиции счёта, поэтому один счёт с несколькими такими позициями создаёт несколько независимых пакетов.
* «Тариф» и «Счёт» у пакета могут быть пустыми — это не мешает вычислению остатка/активности, так как они зависят только от «Всего» и «Использовано».
* Счётчики пакета ведутся и отдаются в API одинаково в обоих режимах, но в режиме «за SMS» они не растут, потому что списаний не происходит.
