Типы смены тарифа
При смене тарифного плана система автоматически определяет тип операции на основе дневных ставок текущего и нового планов.
| Тип | Описание | Оплата |
|---|---|---|
| Продление | Продление текущего тарифа на новый период | Да (полная цена периода) |
| Повышение с доплатой | Переход на более дорогой план — клиент доплачивает за оставшиеся дни, количество дней не меняется | Да (доплата) |
| Повышение с уменьшением дней | Переход на более дорогой план без доплаты — вместо оплаты уменьшается количество оставшихся дней | Нет |
| Понижение тарифа | Переход на более дешёвый план — оставшиеся дни конвертируются в большее количество дней | Нет |
| Смена на равноценный | Цена за день совпадает — просто переключение без пересчёта | Нет |
| Подписка → трафик | Оставшиеся дни подписки конвертируются в гигабайты трафика | Нет |
| Трафик → подписка | Оставшийся трафик конвертируется в дни подписки | Нет |
Расчёт дневной ставки
Для каждого тарифа вычисляется дневная ставка — это основа всех расчётов. Берётся первая ненулевая цена из доступных периодов (1, 3, 6 или 12 месяцев) и делится на количество дней:
дневная_ставка = первая_ненулевая_цена / (количество_месяцев × 30)Пример: Тариф стоит 300 ₽ за 1 месяц → 300 / (1 × 30) = 10 ₽/день.
Повышение тарифа с доплатой
При повышении тарифа клиент доплачивает разницу в стоимости за оставшиеся дни. Количество дней не меняется.
разница_в_цене = новая_ставка − текущая_ставка
доплата = оставшиеся_дни × разница_в_ценеПример расчёта
Текущий тариф: 300 ₽/мес (10 ₽/день), новый: 450 ₽/мес (15 ₽/день), осталось 20 дней.
- разница = 15 − 10 = 5 ₽/день
- доплата = 20 × 5 = 100 ₽
Клиент платит 100 ₽, дни остаются 20, план меняется.
Повышение тарифа с уменьшением дней
Клиент может перейти на более дорогой план без доплаты — вместо этого уменьшается количество оставшихся дней.
оставшаяся_стоимость = оставшиеся_дни × текущая_ставка
новые_дни = 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.
Конвертация между подпиской и трафиком
Система поддерживает переход между подпиской (дни) и трафиком (ГБ), а также между трафиковыми планами. Все такие конвертации всегда бесплатны.
Расчёт ставки за ГБ
Для трафиковых планов вычисляется ставка за ГБ:
- Если у тарифа задана цена за ГБ — используется она.
- Иначе — берутся все пакеты дополнительного трафика, суммируются их цены и объёмы, и вычисляется средняя цена:
ставка_за_ГБ = общая_цена_пакетов / общий_объём_ГБ.
Подписка → трафик
Оставшиеся дни подписки конвертируются в ГБ трафика на новом плане.
оставшаяся_стоимость = оставшиеся_дни × дневная_ставка
новый_трафик_ГБ = 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 ГБ.
Примечание
Для повышения точности система выполняет промежуточные расчёты в минутах (для подписок) и мегабайтах (для трафика), округляя только финальный результат.
Настройки доступности смены тарифа
У каждого тарифа есть три настройки, которые управляют доступностью смены:
| Настройка | Что означает |
|---|---|
| Запретить уход с тарифа | Клиент не может сменить этот тариф на другой |
| Запретить переход на тариф | Тариф не отображается как вариант для смены |
| Только платный апгрейд | Разрешено только повышение с доплатой — понижение и бесплатная конвертация недоступны |
Общие настройки смены тарифа
| Настройка | Что означает |
|---|---|
| Штрафной процент | При бесплатной конвертации от рассчитанных новых дней или ГБ вычитается этот процент. Минимум — 1 день/ГБ. Формула: итого = max(1, новые_дни − новые_дни × процент / 100) |
| Лимит смен в день | Максимальное количество смен тарифа в день на одного клиента. Если лимит исчерпан, смена заблокирована до следующего дня |
Промокоды при повышении тарифа
WARNING
Промокоды не применяются к сумме доплаты при повышении тарифа. Расчёт доплаты выполняется напрямую, минуя блок применения скидки — итоговая сумма идёт на оплату как есть.
Скидка по промокоду работает только при обычной покупке и продлении тарифа, а также при докупке трафика и устройств.
Доп. устройства при повышении тарифа
При повышении тарифа дополнительные устройства пересчитываются пропорционально оставшимся дням:
стоимость_за_устройство = месячная_цена_устройства × оставшиеся_дни / 30
доплата_за_устройства = стоимость_за_устройство × количество_доп_устройств
итого = доплата_за_план + доплата_за_устройстваПолный порядок смены тарифа
Шаг 1: Выбор нового тарифа
Клиент выбирает новый тариф через Telegram-бота или Mini App. Система рассчитывает варианты смены и показывает доступные опции.
Шаг 2: Расчёт
Система определяет тип операции (повышение, понижение, конвертация) и рассчитывает сумму доплаты или количество новых дней.
Шаг 3: Оплата или конвертация
Если повышение с доплатой:
- клиент выбирает способ оплаты;
- создаётся счёт на доплату;
- клиент оплачивает;
- результат оплаты обрабатывается автоматически;
- план меняется, количество дней остаётся прежним.
Если понижение или бесплатная конвертация:
- клиент подтверждает;
- выполняется конвертация;
- план и количество дней/ГБ обновляются.
Шаг 4: Обновление данных
- обновляется подписка;
- при понижении тарифа сбрасываются дополнительные устройства;
- обновляется текущий план клиента и план автоплатежа.
Шаг 5: Фиксация результата
- запись в историю смен тарифов;
- уведомление клиенту;
- обработка промокода (если был);
- выдача чека (если включён «МойНалог»).