← Главная
📋 DS-1087 — Чек-лист тестирования
Usage-based модель тарификации · Обновлено 10.06.2026
Источники: Jira эпик DS-1087 (17 задач) + тест-план от 03.06 + PDF DS-1087_final_v3 + новые проверки на списания и AI-лимиты.
✓ 0
✗ 0
0 / 0
Сбросить
Очистить 💬
A. Тарифная страница DS-1150 · DS-1106 · DS-1254
In-app (desktop + tablet + mobile)
3 карточки: Pro → Creator → Premium (правильный порядок)
Нет упоминаний «геймификация» и «ИИ-опции» как отдельных пакетов
Описание в «~N каруселей/сообщений» (НЕ в токенах)
Цена Creator со скидкой — везде (тарифная, апгрейд, даунгрейд)
Табы Creator: Features / AI / Pricing
Месячный план: все 3 тарифа с месячной ценой, CTA корректны
Годовой план: пересчёт корректен, бейдж «-20%», списание = годовая сумма
Тексты «~N каруселей/сообщений» совпадают: лендинг ↔ in-app
Mobile (375/360): табы по одному плану, адаптив
Tablet (744/768): карточки перестраиваются, тексты не обрезаются
Лендинг chatplace.io/ru/pricing
4 тарифа: Free/Pro/Creator/Premium — таблица сравнения
Мультивалютность: RUB (1600/3600/20000), KZT, UZS, BRL — корректны
/prices?group=1 → labels creator / creator_year
B. Триал DS-1150 · DS-1146 · DS-1233
Ограничения
Триал только на Pro; кнопки на Creator/Premium отсутствуют
Серверная валидация: API-запрос триала на Creator/Premium → отказ P0
Флоу из ИИ-агента / Virale
Модалка «Откройте всё, что умеет Creator» → промо «250₽ вместо 4500₽» → 5 преимуществ
Чекбокс промокода → поле ввода → валидация
«Продолжить за 7 дней бесплатно» → подтверждение → оплата (карта)
Экран оплаты: состав подписки (пробный 0₽, скидка, сегодня 0₽)
После: жёлтый блок «ИИ-агент Creator, осталось 13 дней» + автопродление
На триале: все функции Pro + usage ~$5
Virale: тёмная тема, жёлтые акценты, бейдж «Бесплатно»
Выход из триала: Radio «Остаться на Pro» / «Перейти на Creator» (рекомендуем)
C. Переходы между тарифами РЕГРЕСС
Pro → Creator: пропорциональная доплата, доступ сразу
Creator → Pro: в конце периода, до конца — доступ к Creator
Любой → Premium / Premium → любой: по существующей логике
Триал → Pro/Creator: пропорциональная доплата
Отмена: доступ до конца периода, дата списания корректна
Пропорциональный пересчёт корректен
Creator → Pro: обработка «лишнего» аккаунта (2 → 1)
D. Usage Progress Bar + paywall DS-1151
Стейты × Pro
Полный: жёлтая карточка, прогресс-бар 100%
Частичный: жёлтая, прогресс частично
Исчерпан, тариф активен: красная, CTA «Перейти на Creator»
Тариф неактивен: красная, предлагает активировать
Стейты × Creator
Частичный: жёлтая, частично
Исчерпан, тариф активен: красная, CTA «Пополнить» (НЕ апгрейд)
Paywall и обновление
Usage в $ (потрачено / бюджет) + дата сброса
NO_PLAN_ACCESS, NEED_TOPUP работают; NEED_AI_OPTION удалён
Paywall: top-up (Creator/Premium) vs апгрейд (Pro)
Realtime обновление (Pusher/WebSocket) — лаг приемлемый
Плашка токенов в Virale-чате удалена
«Токены / ИИ-запросы» отсутствуют везде, кроме ИИ-ассистента
E. Top-up + автопополнение DS-1152 · DS-1145 · DS-1206
Покупка
Модалка: пресеты сумм + custom ввод
Предупреждение «лимиты не суммируются»
Progress bar обновляется после покупки
Top-up на Creator/Premium — да; на Pro — нет P0
Конвертация $ → валюта корректна
3 точки входа: биллинг, paywall NEED_TOPUP, «лимит исчерпан»
Автопополнение DS-1206
Подключение: модалка → выбор суммы → оплата → «Автопополнение подключено»
Зелёный статус «Автопополнение включено, X₽»
Рекуррент: top-up=0 + autoRenewal=true → cron → charge → webhook → новый UsageTopUp P0
Failure: backoff 3 попытки → autoRenewal=false + email
ShouldBeUnique — нет двойного списания P0
Изменение: меню → «Изменить» → новая сумма
Отключение: «Удалить автопополнение?» → toast «Отключено»
История и рефанды
USAGE_TOPUP в истории платежей + фильтр
Частичный возврат top-up с учётом потраченного
Возврат подписки и top-up — раздельно
F. Промокоды DS-1233
Валидация и применение
Типы: NewPlan (новый тариф + trial) / ExistsPlan (продление на duration дней)
Статусы Single/Multi/InActive — Single нельзя активировать повторно
Валидация: карта, повторная активация, лимит used_count, срок expired_at, статус, план
Состояния поля: пусто / проверка / успех / ошибка
Скидка/бонус отображается в итоговой стоимости до оплаты
Промокод + A/B-скидка одновременно — проверить пересечение
G. 🆕 Автопродление подписок (ежемесячные списания)
⚠️ Две ветки: Stripe (вебхуки) и Prodamus/CloudPayments (cron). Логика фейла РАЗНАЯ.
Цены и планы
Планы: free (200), pro $20/мес, pro_year $192/год, unlimited $250/мес, unlimited_year $2400/год
Годовой = месячный × 12 × 0.8 (скидка 20%) — на каждом плане
Цены по валютам (USD/RUB/BRL/UZS/KZT/TRY) из PlanPrice, Stripe Price ID корректный
Автопродление — Stripe
webhook invoice.payment_succeeded (billing_reason=subscription_cycle) → nextPaymentAt сдвигается (addMonth/Year NoOverflow)
Сброс лимита AI-действий + recordBillingPeriodUsed после продления
Создаётся Payment, уходит счёт на почту
Фейл: статус past_due; письма FirstFailed + SecondFailed приходят
31-е число / конец месяца (no-overflow дат), переход через год
Автопродление — Prodamus / CloudPayments
В выборку попадают только юзеры с nextPaymentAt ≤ NOW()
Успех: продление даты, сброс лимитов, защита от двойного списания (success-payment-*, TTL 60 мин)
Грейс-период 24ч: 1-й фейл → next-payment-* на 24ч + письмо FirstFailedPayment
2-й фейл → отмена: planExpiredAt=now, nextPaymentAt=null, лог SUBSCRIPTION_AUTO_CANCELLED
Счётчик попыток attempt-* (TTL 3 дня) — 1-я / 2-я попытка корректны
У Stripe другая логика фейла (нет грейса / 2 попыток) — проверить разницу
Переход тарифа при автопродлении
scheduledPlan / downgrade применяется при следующем автопродлении
Апгрейд сразу: пропорциональная доплата за остаток, пересчёт nextPaymentAt
Даунгрейд вступает в конце оплаченного периода
Отмена запланированной смены до автосписания работает
Лог SUBSCRIPTION_SWAP_PLAN пишется
Триал → платный
Триал 7 дней, trialEndsAt / nextPaymentAt выставлены
По окончании автосписание: Stripe (cancelTrialNowAndPay) и CloudPayments — оба сценария
После успешного списания trialEndsAt=now, лог TRIAL_SUBSCRIPTION_ACTIVATED / AUTO_PROLONGED
Фейл при первом списании после триала (нет карты / отказ) — корректное поведение
SubscriptionLog
TRIAL_SUBSCRIPTION_AUTO_PROLONGED vs PAID_SUBSCRIPTION_AUTO_PROLONGED — различение по userHasMoreThanOnePayment
SUBSCRIPTION_AUTO_CANCELLED пишется при 2-м фейле
Manual-события (renew/cancel/refund/card) — там, где применимо
H. Скидки Creator (A/B на AI Package)
⚠️ A/B-скидка ≠ тариф Creator. Скидка НЕ логируется в SubscriptionLog — только в experiment_participations.
Условия и ограничения
Применяется только: валюта RUB/USD + variant DISCOUNT + неиспользованные периоды
Цена со скидкой: RUB 500 / USD $5
Только месячный план и только БЕЗ триала
Лимит 2 биллинг-периода: discount_billing_periods_used инкрементится, после 2 — скидка пропадает
CONTROL-группа (флаг off) скидку не видит
Stripe-купон навешивается (withCoupon), сумма в счёте совпадает
Скидка НЕ логируется в SubscriptionLog — только в experiment_participations
Промо «2 месяца» — тест-кейсы
TC-2.1: Creator: переход на полную цену на 3-м периоде → 4 500 ₽ (не 2 500 ₽)
TC-2.2: Скидочный UI исчезает после промо — строки «Скидка» нет, цена = 4 500 ₽
TC-2.3: Граница: 2-й период 2 500₽, 3-й 4 500₽ — нет сдвига
TC-2.4: Годовой Creator — скидка НЕ применяется
I. 🆕 Списание AI-лимитов (мультипликаторы, карманы)
Целевая модель DS-1087: Карманы по приоритету: 1) Подарок ($5) → 2) Тарифный бюджет → 3) Top-up баланс.
Формула: effective_cost = base × mult × 1.1 (+10% overhead всегда).
Формула расчёта стоимости
effective_cost = base × mult × 1.1 (overhead 10% даже при mult < 1)
Промо-мультипликатор ×0.5 (скидка на AI-действия)
+10% overhead всегда, даже при mult < 1
Порядок карманов (приоритет списания)
Порядок: gift → plan → topup
Переход gift → plan при исчерпании подарка
Переход plan → topup при исчерпании тарифа
Списание по типам действий (тест-кейсы D.1)
TC-D01: AI-ассистент (1 сообщение) = базовая стоимость × 1
TC-D02: Virale (генерация) = базовая стоимость × 1
TC-D03: Слайд (1 шт) = 30 единиц
TC-D04: Карусель (1 шт) = 30 × N слайдов
TC-D05: Reels (1 шт) = базовая стоимость
TC-D06: Подключение аккаунта = 50 единиц
Граница лимита / REDUCED (тест-кейсы D.3)
TC-D12: Действие = ровно остаток → проходит, бюджет = 0
TC-D13: Действие < остаток, но после overhead → REDUCED (меньше слайдов)
TC-D14: Бюджет = 0 → блокировка + оффер top-up (не падает)
TC-D15: Бюджет = 0, Virale → корректно информирует, не замолкает
TC-D16: Progress bar не уходит в минус
Месячный сброс (тест-кейсы D.5)
TC-D23: При автопродлении: сброс тарифного пула до полного
TC-D24: Top-up остаток НЕ сбрасывается (переносится)
TC-D25: Подарок $5 НЕ повторяется при автопродлении
TC-D26: Формула прогресса: progress bar = сумма всех карманов после сброса
TC-D27: Нет двойного сброса (гонка cron)
TC-D28: recordBillingPeriodUsed корректно инкрементится
J. Подарок $5 на Pro
Подарок $5 начисляется всем новым на активном Pro
Подарок не дублируется при повторной активации
Подарок НЕ начисляется на Creator/Premium
Progress bar = сумма всех карманов (gift + plan + topup)
cancelTopUpAutoRenewal(userId, topUpId) реализован в AdminSubscriptionProvider
Метод выдачи подарка реализован в AdminSubscriptionProvider
K. Backpack DS-1148
Можно изменить usage-бюджет пользователю вручную
Список top-up'ов отображается с корректным статусом автопродления
L. Фронт DS-1149
Работает (тестируемо)
UsageTopupModal: 2 режима — разовое и авто-пополнение
API: PUT .../usage-topup/auto-renewal · DELETE · GET .../estimated-actions · POST .../purchase
Тариф Creator: карточки Plan cards 2.0, подметрики (~60 каруселей / ~50 reels / ~2500 сообщений), +2 аккаунта, бейдж new
Скидка Creator: override только на месячном Creator первые 2 месяца; работает если бэк отдаёт experimentDiscount
Заглушки / НЕ тестировать
🚫 Промокоды — мок (setTimeout 800ms → «applied»), кнопка скрыта под v-if=false
🚫 Автопродление тарифа — только ручной RenewPlanModal; авто-renewal живёт на бэке
M. Риски регресса + расхождения код/продукт
Регресс
ExperimentDiscount: поля aiPackage/proWithAi УДАЛЕНЫ, заменены на creator — стыковка с api-2281
UNLIMITED/UNLIMITED_YEAR — deprecated для исторических записей, не ломают флоу
Удалены: ModalAddAiActions, AIActionsCounter, useCreditPolling → заменены на Usage*-компоненты
Расхождения код vs продукт (R-01 – R-05)
R-01: При бюджете = 0 бот не замолкает (REDUCED) — ожидаемо?
R-02: Gate не проверяет остаток — пропускает даже при 0?
R-03: Нет писем при достижении 0 — подтвердить/завести баг
R-04: Обучение/тест = обычный agent-message (нет разделения стоимости)
R-05: Новой usage-модели DS-1087 в коде нет — уточнить у разработки
DS-1087 Чек-лист v2 · 10.06.2026
Источники: Jira эпик DS-1087 (17 задач) + тест-план от 03.06 + PDF DS-1087_final_v3
🆕 Новые разделы: G (автопродление), I (AI-лимиты), M (расхождения)