Files
CRM-LeadRadar/docs/BILLING.md
T
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

61 lines
5.0 KiB
Markdown

# Биллинг
Как считаются счета и подписка. Код: `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/<имя провайдера>`.
## Что не решено
- Провайдер эквайринга и валюта списания.
- Минимальный платёж на модели «%».
- Откуда брать курс: сейчас его вручную задаёт суперадмин.