Skip to main content
Полный перечень полей — в глоссарии.

Что описывает этот раздел

Раздел отвечает за то, сколько ресурсов разрешено компании (сотрудники, точки, техника) и сколько это стоит. Здесь три части, которые работают вместе:
  1. Лимит компании — сколько разрешено и сколько уже используется по каждому виду ресурса.
  2. Цена лимита за период — прайс за единицу лимита на 1, 3, 6 или 12 месяцев, с возможностью глобальной и персональной цены.
  3. Фоновый пересчёт — задача, которая сверяет фактическое использование с реальными данными компании и обновляет счётчик.

Типы нормируемых ресурсов

Лимиты и цены применяются к фиксированному перечню ресурсов:
Подписание документов в этот перечень не входит и лимитом плана не нормируется. Оно тарифицируется отдельно — режимом биллинга подписания, который платформа назначает компании; сама компания режим не выбирает:
  • «За SMS» (режим по умолчанию) — компания платит только за сообщения подписания со своего SMS-баланса; пакеты подписей в этом режиме не расходуются и подписание ничем не ограничивают.
  • «За документ» — компания платит за каждый подписываемый документ одним слотом из купленного пакета подписей (один слот на документ, сколько бы у него ни было подписантов); при нулевом остатке слотов отправка ссылки на подписание и кода подтверждения блокируется.
Пакеты подписей и их остаток описаны в «Пакетах, балансе и квотах подписи»; лимитов подписки типа «подписание документов» в системе нет.

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

Лимит компании

Одна запись описывает лимит по одному виду ресурса для одной компании. Пара «компания + тип ресурса» уникальна — то есть на каждый ресурс у компании ровно одна строка лимита.
Если поле «Лимит» пустое (не задано), ограничение по этому ресурсу не заполнено — это отдельное состояние, отличное от нуля.
Срок действия обязателен, и он один. У лимита есть только дата окончания: если её не указали при создании, подставляется «сегодня + 1 месяц» по календарю. Даты начала у лимита нет — она ничего не решала, а расчёту нужна именно опорная дата окончания, от которой считается пропорция за остаток срока. Какой период был куплен и когда, фиксирует позиция счёта. Единственный владелец срока — оплата. Срок лимита ставится при провижининге по позициям подтверждённого счёта и больше ниоткуда не перезаписывается: автоматического выравнивания сроков всех лимитов по дате окончания подписки «аренда» в системе нет. Правило при сохранении. Если лимит задан, он автоматически подтягивается вверх — минимум до значения бесплатного лимита и минимум до фактически используемого количества. То есть платный лимит не может оказаться ниже бесплатного и ниже того, что уже используется: при попытке сохранить меньшее значение он будет поднят. Если лимит не задан (пустой), это правило не применяется. Сброс кэша. Лимиты компании кэшируются под ключом, привязанным к компании. При любом сохранении записи лимита кэш лимитов этой компании автоматически сбрасывается, чтобы следующее чтение взяло свежие значения.

Цена лимита за период

Одна запись задаёт стоимость единицы лимита для конкретного ресурса и длительности периода. Уникальна тройка «компания + тип ресурса + длительность периода».
Цена бывает двух уровней. Глобальная (компания не указана) действует для всех. Персональная (указана конкретная компания) переопределяет глобальную для этой компании. Персональная всегда в приоритете.

Как подбирается цена

Точный расчёт по периоду

Основной способ получить цену — запросить её для конкретной компании, ресурса и длительности периода. Логика:
  1. Если запрошен период вне списка 1 / 3 / 6 / 12 месяцев — операция завершается ошибкой (недопустимый период).
  2. Ищутся строки цены по нужному ресурсу и периоду, где компания либо не указана (глобальная), либо совпадает с запрошенной (персональная).
  3. Из найденного выбирается персональная цена, если она есть, иначе глобальная.
  4. Если ни персональной, ни глобальной цены нет — операция завершается ошибкой «цена не настроена».

Как цена применяется при покупке

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

Цена «на лету» в списках лимитов

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

Пересчёт фактического количества

Фоновая задача сверяет «Текущее количество» в лимите с реальным положением дел в компании и при расхождении обновляет счётчик.

Как запускается

Задача работает только внутри контекста конкретной компании — если контекст компании не установлен, она молча завершается, ничего не делая. У задачи ограничение частоты: не чаще 10 запусков в минуту.

Что и как пересчитывается

Задача принимает вид ресурса для пересчёта и флаг «слать уведомление». По виду ресурса считается фактическое количество: Далее:
  1. Берётся текущая строка лимита по этому ресурсу; если её нет — создаётся новая с нулевыми значениями.
  2. Если новое фактическое количество отличается от сохранённого — сбрасывается кэш компании, счётчик обновляется и запись сохраняется.
  3. При включённом флаге уведомления в конце отправляется веб-уведомление с новым значением счётчика в канал лимитов этой компании.
Пересчёт рассчитан на вызов с указанием одного конкретного вида ресурса. Если вид ресурса не указан, задача работает некорректно: строка лимита ищется и создаётся с незаполненным типом ресурса (а не по каждому ресурсу отдельно), при подсчёте по очереди пробегаются все виды и итоговый счётчик перезаписывается последним из них, а попытка создать запись с незаполненным типом может завершиться ошибкой. Полноценного режима «пересчитать все виды сразу» здесь нет.

Уведомление администратора о росте (фактически не срабатывает)

В задаче заложен код, который при увеличении количества должен отправлять администратору компании отдельное уведомление с заголовком вида «увеличение количества …» и текущим значением. Заголовки заготовлены для всех пяти видов ресурсов. На практике это уведомление не отправляется никогда: рост определяется сравнением нового количества с сохранённым счётчиком уже после того, как счётчику присвоено это же новое значение, поэтому условие всегда ложно.
В коде отдельно перечислен сокращённый набор из трёх ресурсов (сотрудники, точки аренды, автомобили) — судя по всему, как предполагаемый список «уведомляемых». Но сама проверка на него не опирается: она срабатывает по общему перечню заголовков, заведённому для всех пяти видов ресурсов. Так что деление на «уведомляемые» и «не уведомляемые» ресурсы в поведении не реализовано, а само уведомление в любом случае не отправляется.

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

  • Лимит компании — источник правды о том, сколько ресурсов разрешено компании; заполняется при провижининге плана и корректируется при оплате инвойса.
  • Цена лимита за период — прайс, по которому считается стоимость расширения лимита; отсюда берутся суммы при выставлении счёта.
  • Пересчёт — держит поле «Текущее количество» в актуальном состоянии, чтобы можно было сравнивать фактическое использование с разрешённым лимитом.

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

Глоссарий: Лимиты и тарификация

Полный перечень полей лимита и цены лимита за период.

Компании и биллинг (подписки, платежи)

Обзорная страница модуля со всеми его разделами.

Создание компании и её адрес

Модель компании и её домены, генерация новой компании с дефолтными данными и регистрация владельца.

Инвойсы и платежи

Счета и их позиции, расчёт суммы, инициация оплаты и обработка вебхуков.

Карты и автосписания

Сохранённые платёжные карты компании и их привязка к автоматическим списаниям.

Платёжные шлюзы

Интеграция с платёжным шлюзом (подпись, инициация платежа и карты, возвраты) и устаревший клиент.

Онбординг, новости и статистика

Шаги онбординга компании, лента новостей и снапшоты системной статистики.