Биллинг
Секция биллинга охватывает управление тарифами, подписками, счетами, платежами, возвратами, купонами и аудит-логом событий биллинга.
Навигация
Sidebar-группа Billing содержит:
| Страница | URL | Описание |
|---|---|---|
| Tariffs | /admin/tariffs | Тарифные планы |
| Subscriptions | /admin/subscriptions | Подписки компаний |
| Invoices | /admin/invoices | Счета |
| Payments | /admin/payments | Платежи |
| Billing Events | /admin/billing-events | Аудит-лог событий |
| Refunds | /admin/refunds | Возвраты платежей |
| Coupons | /admin/coupons | Купоны и промокоды |
Интерфейсы
ISubscription
interface ISubscription extends ISubscriptionBase {
tariff: ITariff;
nextTariff?: ITariff;
billingPeriod?: string;
company?: ICompanyBase;
}IRefund
interface IRefund {
id: string;
amount: number;
status: string; // pending | succeeded | failed
reason?: string;
failureMessage?: string;
monoRefundRef?: string;
payment?: IPayment;
paymentId: string;
initiatedBy?: string;
createdAt: string;
updatedAt: string;
}ICoupon
interface ICoupon {
id: string;
code: string;
type: string; // percentage | fixed_amount | trial_extension
percentageOff?: number;
amountOff?: number;
trialExtensionDays?: number;
maxUses: number;
currentUses: number;
expiresAt?: string;
active: boolean;
createdAt: string;
updatedAt: string;
}IBillingEvent
interface IBillingEvent {
id: string;
type: string;
subscriptionId?: string;
companyId?: string;
invoiceId?: string;
paymentId?: string;
refundId?: string;
metadata?: Record<string, unknown>;
actorId?: string;
createdAt: string;
updatedAt: string;
}Страницы
Подписки (Subscriptions)
URL: /admin/subscriptions/:id
Детальная страница подписки содержит вкладки:
- Overview — основная информация, связанные счета, кнопка управления подпиской (cancel)
- Workflows — Temporal workflows, связанные с подпиской
Overview-вкладка отображает:
- Идентификаторы (subscription ID, company ID, tariff ID)
- Кнопку "Go to Company" для навигации к компании
- Таблицу связанных счетов (дата, сумма, токены, статус оплаты)
- Кнопку "Manage Subscription" для управления (отмена подписки через диалог)
Платежи (Payments)
URL: /admin/payments/:id
Детальная страница платежа содержит кнопку Create Refund, которая открывает диалог создания возврата.
Возвраты (Refunds)
URL: /admin/refunds
Список всех возвратов с фильтрацией по статусу (pending, succeeded, failed).
URL: /admin/refunds/:id
Детальная страница возврата с информацией о сумме, статусе, причине и связанном платеже.
Купоны (Coupons)
URL: /admin/coupons
Список купонов с фильтрацией по типу (percentage, fixed_amount, trial_extension) и текстовым поиском по коду.
Поддерживаемые операции:
- Создание — через диалог
CouponDialogComponent - Удаление — с подтверждением
URL: /admin/coupons/:id
Детальная страница купона.
События биллинга (Billing Events)
URL: /admin/billing-events
Аудит-лог всех событий биллинга с фильтрацией по типу:
INVOICE_CREATED,INVOICE_PAIDPAYMENT_SUCCEEDED,PAYMENT_FAILEDSUBSCRIPTION_ACTIVATED,SUBSCRIPTION_CANCELLED,SUBSCRIPTION_PAUSED,SUBSCRIPTION_RESUMEDREFUND_INITIATED,REFUND_SUCCEEDEDCOUPON_APPLIEDTARIFF_UPGRADED
URL: /admin/billing-events/:id
Детальная страница события.
Тарифы (Tariffs)
URL: /admin/tariffs/:id
Детальная страница тарифа с расширенной информацией.
BillingService
Сервис BillingService объединяет все API-методы биллинга:
@Injectable({ providedIn: "root" })
export class BillingService {
private readonly api = inject(ApiService);
// Тарифы
getTariffs(params?);
getTariffById(id);
deleteTariff(id);
// Подписки
getSubscriptions(params?);
getSubscriptionById(id, params?); // params.include = "company,tariff,nextTariff"
deleteSubscription(id);
cancelSubscription(id);
// Счета
getInvoices(params?);
getInvoiceById(id);
deleteInvoice(id);
// Платежи
getPayments(params?);
getPaymentById(id);
deletePayment(id);
// Возвраты
getRefunds(params?); // фильтры: paymentId, status
getRefundById(id);
createRefund(data); // { paymentId, amount?, reason? }
// Купоны (через getRaw — без admin prefix)
getCoupons(params?); // фильтры: type, active
getCouponById(id);
createCoupon(data);
updateCoupon(id, data);
deleteCoupon(id);
// События биллинга
getBillingEvents(params?); // фильтры: companyId, subscriptionId, type
getBillingEventById(id);
}Диалоги
CreateRefundDialogComponent
Создание возврата платежа. Открывается из страницы деталей платежа.
interface ICreateRefundDialogData {
paymentId: string;
maxAmount: number;
}
interface ICreateRefundDialogResult {
paymentId: string;
amount?: number;
reason?: string;
}CouponDialogComponent
Создание купона. Открывается из списка купонов.
interface ICouponDialogData {
coupon?: ICoupon; // edit mode если передан
}Форма: code, type, percentageOff?, amountOff?, trialExtensionDays?, maxUses?, expiresAt?, active.
Status Variants
Утилита status-variant.util.ts маппит статусы в цвета для StatusBadgeComponent:
| Функция | Статус | Вариант |
|---|---|---|
getSubscriptionStatusVariant | active | success |
| pending | info | |
| cancelled | error | |
| inactive, paused | warning | |
getPaymentStatusVariant | succeeded | success |
| pending | warning | |
| rejected | error | |
| refunded | info | |
getRefundStatusVariant | succeeded | success |
| pending | warning | |
| failed | error |
Следующие шаги
- Broadcasts — email broadcast кампании
- Workflows — мониторинг Temporal workflows
- Интеграции — управление интеграциями