Files
yuriandClaude Opus 5.5 9749da5ae7 Lead Radar: исходный код
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 23:11:04 +04:00

5.0 KiB
Raw Permalink Blame History

Биллинг

Как считаются счета и подписка. Код: apps/api/src/billing/, тесты: apps/api/src/billing.int.test.ts. Все даты считаются по времени Еревана.

Две модели

Фикс % от комиссии
Когда платят вперёд, за следующий месяц после, за прошлый календарный месяц
Когда выставляется счёт за 7 дней до окончания подписки 1-го числа
Срок оплаты дата окончания подписки 8-е число
Что даёт оплата подписка продлевается на месяц подписка действует до 8-го числа следующего месяца

Месяц без сделок на модели «%»: счёт на 0 закрывается сам, подписка продлевается. Минимального платежа нет — это открытый вопрос ТЗ.

Плата за установку (Team 500 , Agency 750 ) начисляется один раз отдельным счётом. Её оплата дату подписки не двигает; исключение — новая компания на модели «%», у которой первого месячного счёта нет: её подписка стартует с оплаты установки.

Комиссия в разных валютах

Комиссию по сделке агент вводит в любой валюте, счёт выставляется в долларах. Курсы задаёт суперадмин: «Счета» → «Курсы валют». В счёте сохраняется курс на момент выставления и расшифровка по сделкам — клиент видит её в разделе «Подписка».

Смена тарифа

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

Просрочка и напоминания

Напоминания уходят руководителю в бот не раньше 10:00: за 7, 3 и 1 день до окончания; после окончания — каждый день с числом оставшихся дней; при ограничении доступа — один раз. Через 15 дней (срок меняет суперадмин) уведомления о лидах останавливаются, CRM работает только на чтение. Раздел «Подписка» открыт всегда. После отметки оплаты доступ возвращается сразу.

Оплата

Сейчас работает ручной режим: суперадмин в разделе «Счета» нажимает «Отметить оплату».

Онлайн-оплата подключается без переделки биллинга. Нужно написать класс по контракту apps/api/src/billing/provider.ts (создать платёж → ссылка на страницу оплаты; разобрать и проверить уведомление провайдера) и передать его в buildApp({ payments }) в apps/api/src/main.ts. После этого у клиента в счёте появится кнопка «Оплатить», а провайдер будет присылать уведомления на /api/payments/webhook/<имя провайдера>.

Что не решено

  • Провайдер эквайринга и валюта списания.
  • Минимальный платёж на модели «%».
  • Откуда брать курс: сейчас его вручную задаёт суперадмин.