Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
61 lines
5.0 KiB
Markdown
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/<имя провайдера>`.
|
|
|
|
## Что не решено
|
|
|
|
- Провайдер эквайринга и валюта списания.
|
|
- Минимальный платёж на модели «%».
|
|
- Откуда брать курс: сейчас его вручную задаёт суперадмин.
|