Skip to content

Типы смены тарифа

При смене тарифного плана система автоматически определяет тип операции на основе дневных ставок текущего и нового планов.

ТипОписаниеОплата
upgradeПереход на более дорогой план — доплата за оставшиеся дниДа (доплата)
upgrade_convertПереход на более дорогой план — конвертация дней (меньше дней)Нет
downgradeПереход на более дешёвый план — конвертация в большее количество днейНет
alternativeОдинаковая цена за день — просто переключениеНет
subscription_to_trafficКонвертация оставшихся дней подписки в ГБ трафикаНет
traffic_to_subscriptionКонвертация оставшегося трафика в дни подпискиНет

Расчёт дневной ставки

Для каждого тарифа вычисляется дневная ставка — это основа всех расчётов. Берётся первая ненулевая цена из доступных периодов (1, 3, 6 или 12 месяцев) и делится на количество дней:

дневная_ставка = первая_ненулевая_цена / (количество_месяцев × 30)

Пример: Тариф стоит 300 ₽ за 1 месяц → 300 / (1 × 30) = 10 ₽/день.


Формула апгрейда (с оплатой)

При апгрейде пользователь доплачивает разницу в стоимости за оставшиеся дни. Количество дней не меняется.

разница_в_цене = новая_ставка - текущая_ставка
доплата = оставшиеся_дни × разница_в_цене
Пример расчёта

Текущий тариф: 300 ₽/мес (10 ₽/день), новый: 450 ₽/мес (15 ₽/день), осталось 20 дней.

  • разница = 15 - 10 = 5 ₽/день
  • доплата = 20 × 5 = 100 ₽

Пользователь платит 100 ₽, дни остаются 20, план меняется.


Формула конвертации без оплаты (upgrade_convert)

Пользователь может перейти на более дорогой план без доплаты — вместо этого уменьшается количество дней.

оставшаяся_стоимость = оставшиеся_дни × текущая_ставка
новые_дни = round(оставшаяся_стоимость / новая_ставка)
Пример расчёта

Текущий тариф: 10 ₽/день, новый: 15 ₽/день, осталось 30 дней.

  • оставшаяся_стоимость = 30 × 10 = 300 ₽
  • новые_дни = round(300 / 15) = 20 дней

Пользователь не платит, но получает 20 дней вместо 30.


Формула даунгрейда

При даунгрейде пользователь получает больше дней на более дешёвом плане. Формула аналогична конвертации:

оставшаяся_стоимость = оставшиеся_дни × текущая_ставка
новые_дни = round(оставшаяся_стоимость / новая_ставка)
Пример расчёта

Текущий тариф: 15 ₽/день, новый: 10 ₽/день, осталось 20 дней.

  • оставшаяся_стоимость = 20 × 15 = 300 ₽
  • новые_дни = round(300 / 10) = 30 дней

Пользователь не платит и получает 30 дней вместо 20.


Кросс-тип конвертация

Система поддерживает переход между подпиской (дни) и трафиком (ГБ), а также между трафиковыми планами. Все кросс-тип конвертации всегда бесплатны.

Расчёт ставки за ГБ

Для трафиковых планов вычисляется ставка за ГБ:

  1. Если у тарифа задана цена за ГБ — используется она.
  2. Иначе — берутся все пакеты дополнительного трафика, суммируются их цены и объёмы, и вычисляется средняя цена: ставка_за_ГБ = общая_цена_пакетов / общий_объём_ГБ.

Подписка → Трафик

Оставшиеся дни подписки конвертируются в ГБ трафика на новом плане.

оставшаяся_стоимость = оставшиеся_дни × дневная_ставка
новый_трафик_ГБ = round(оставшаяся_стоимость / ставка_за_ГБ)
Пример расчёта

Текущий план: подписка 10 ₽/день, новый: трафик 50 ₽/ГБ, осталось 30 дней.

  • оставшаяся_стоимость = 30 × 10 = 300 ₽
  • новый_трафик = round(300 / 50) = 6 ГБ

Пользователь получает 6 ГБ трафика вместо 30 дней подписки.

Трафик → Подписка

Оставшийся трафик (лимит минус использованный) конвертируется в дни подписки.

оставшаяся_стоимость = оставшийся_трафик_ГБ × ставка_за_ГБ
новые_дни = round(оставшаяся_стоимость / дневная_ставка)
Пример расчёта

Текущий план: трафик 50 ₽/ГБ, осталось 10 ГБ, новый: подписка 10 ₽/день.

  • оставшаяся_стоимость = 10 × 50 = 500 ₽
  • новые_дни = round(500 / 10) = 50 дней

Пользователь получает 50 дней подписки вместо 10 ГБ трафика.

Трафик → Трафик

Оставшийся трафик конвертируется в ГБ на новом трафиковом плане.

оставшаяся_стоимость = оставшийся_трафик_ГБ × текущая_ставка_за_ГБ
новый_трафик_ГБ = round(оставшаяся_стоимость / новая_ставка_за_ГБ)
Пример расчёта

Текущий план: 50 ₽/ГБ, осталось 10 ГБ, новый: 25 ₽/ГБ.

  • оставшаяся_стоимость = 10 × 50 = 500 ₽
  • новый_трафик = round(500 / 25) = 20 ГБ

Пользователь получает 20 ГБ на новом плане вместо 10 ГБ.

Примечание

Для повышения точности система выполняет промежуточные расчёты в минутах (для подписок) и мегабайтах (для трафика), округляя только финальный результат.


Флаги тарифных планов

Каждый тариф имеет флаги, управляющие доступностью смены:

ФлагОписание
ChangeFromDisabledЗапрещает уход с этого тарифа — пользователь не может сменить его на другой
ChangeToDisabledЗапрещает переход на этот тариф — он не отображается как вариант для смены
ConversionDisabledРазрешён только платный апгрейд — даунгрейд и конвертация без оплаты недоступны

Настройки системы

НастройкаОписание
plan_change_penalty_daysШтрафные дни, вычитаемые при конвертации
plan_change_daily_limitМаксимальное количество смен тарифа в день на одного пользователя

Лимит проверяется по таблице истории смен тарифов — если лимит исчерпан, смена заблокирована до следующего дня.


Промокоды при апгрейде

Если у пользователя есть активный промокод, скидка применяется к рассчитанной сумме доплаты:

итого = доплата × (100 - процент_скидки) / 100

После успешной оплаты промокод отмечается как использованный.


Экстра-устройства при апгрейде

При апгрейде дополнительные устройства пересчитываются пропорционально оставшимся дням:

стоимость_за_устройство = месячная_цена_устройства × оставшиеся_дни / 30
доплата_за_устройства = ceil(стоимость_за_устройство) × количество_экстра_устройств
итого = доплата_за_план + доплата_за_устройства

Полный flow смены тарифа

Шаг 1: Выбор нового тарифа

Пользователь выбирает новый тариф через Telegram-бота или Mini App. Система рассчитывает варианты смены и показывает доступные опции.

Шаг 2: Расчёт

Система определяет тип операции (upgrade / downgrade / convert) и рассчитывает сумму доплаты или количество новых дней.

Шаг 3: Оплата или конвертация

Если апгрейд (платный):

  • Пользователь выбирает способ оплаты.
  • Создаётся инвойс на доплату.
  • Пользователь оплачивает.
  • Вебхук обрабатывает результат оплаты.
  • План меняется в Remnawave, дни остаются прежними.

Если даунгрейд / конвертация (бесплатно):

  • Пользователь подтверждает.

  • Выполняется конвертация.

  • План и количество дней меняются в Remnawave.

    Шаг 4: Обновление данных

  • Обновляется подписка в Remnawave.

  • При даунгрейде сбрасываются экстра-устройства.

  • Обновляется текущий план пользователя и план автоплатежа.

    Шаг 5: Фиксация результата

  • Запись в историю смен тарифов.

  • Уведомление пользователю.

  • Обработка промокода (если был).

  • Выдача чека (если включён МойНалог).