Биллинг и счета
Из чего складывается счёт цикла подписки
При автоматическом или ручном закрытии периода формируется счёт. Базовая логика суммы без налога:
- Основной план:
amount × quantity(суммы в API — в минорных единицах валюты, обычно центах). - Рекуррентные аддоны: сумма каждого аддона × его количество.
- Metered charge: по каждой привязанной метрике — стоимость накопленного
usedза период (стандартная или ступенчатая цена). - Recurring charge по метрике: начисления по отдельным правилам (включаются в тот же расчёт цикла).
Затем применяются скидка (код скидки на подписке), промо-кредиты (если включено) и НДС:
taxPercentageхранится во внутреннем формате: 1000 соответствует 10% (см. Справочник: единицы).
Метрики и граница периода
Перед формированием счёта подписка передаётся в расчёт накопленных метрик: функция уровня API собирает статистику по metered и recurring charge и передаёт её в вычислитель счёта. После успешной оплаты счёта события метрик, вошедшие в этот расчёт, помечаются учтёнными в биллинге — чтобы не тарифицировать их повторно в следующем цикле.
Предоплата и постоплата в терминах продукта
- Предоплата (классическая подписка): фиксированная часть (план + рекуррентные аддоны) списывается при наступлении нового периода, если включено автосписание и план это допускает.
- Постоплата по usage: суммы по metered/recurring charge отражают уже накопленное потребление до границы периода и попадают в тот же счёт цикла, который оплачивается при переходе на следующий период (типичная модель «оплатил за прошлый период usage + за следующий базовый тариф» — уточняйте по настройкам конкретного мерчанта).
- Ручной биллинг: при
disableAutoChargeавтоматическое списание не выполняется; счета и оплаты инициируются вручную.
Прорации
При смене плана, количества или интервала в середине периода система может рассчитать прорацию — корректировку суммы за неполный период. В коде есть отдельные ветки вычисления (в пакете invoice_compute), в том числе для смены интервала.
Поток «цикл → счёт → оплата»
Связанные сущности в счёте
bizTypeсвязывает счёт с подпиской, разовой оплатой и т.д.invoiceName/ причина биллинга помогают различать создание подписки, цикл, смену плана и др.billingCycleAnchorсохраняет якорь для расчёта периодов.
Детали статусов счёта — Статусы.