Skip to content

Биллинг

Секция биллинга охватывает управление тарифами, подписками, счетами, платежами, возвратами, купонами и аудит-логом событий биллинга.

Навигация

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

typescript
interface ISubscription extends ISubscriptionBase {
	tariff: ITariff;
	nextTariff?: ITariff;
	billingPeriod?: string;
	company?: ICompanyBase;
}

IRefund

typescript
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

typescript
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

typescript
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_PAID
  • PAYMENT_SUCCEEDED, PAYMENT_FAILED
  • SUBSCRIPTION_ACTIVATED, SUBSCRIPTION_CANCELLED, SUBSCRIPTION_PAUSED, SUBSCRIPTION_RESUMED
  • REFUND_INITIATED, REFUND_SUCCEEDED
  • COUPON_APPLIED
  • TARIFF_UPGRADED

URL: /admin/billing-events/:id

Детальная страница события.

Тарифы (Tariffs)

URL: /admin/tariffs/:id

Детальная страница тарифа с расширенной информацией.

BillingService

Сервис BillingService объединяет все API-методы биллинга:

typescript
@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

Создание возврата платежа. Открывается из страницы деталей платежа.

typescript
interface ICreateRefundDialogData {
	paymentId: string;
	maxAmount: number;
}

interface ICreateRefundDialogResult {
	paymentId: string;
	amount?: number;
	reason?: string;
}

CouponDialogComponent

Создание купона. Открывается из списка купонов.

typescript
interface ICouponDialogData {
	coupon?: ICoupon; // edit mode если передан
}

Форма: code, type, percentageOff?, amountOff?, trialExtensionDays?, maxUses?, expiresAt?, active.

Status Variants

Утилита status-variant.util.ts маппит статусы в цвета для StatusBadgeComponent:

ФункцияСтатусВариант
getSubscriptionStatusVariantactivesuccess
pendinginfo
cancellederror
inactive, pausedwarning
getPaymentStatusVariantsucceededsuccess
pendingwarning
rejectederror
refundedinfo
getRefundStatusVariantsucceededsuccess
pendingwarning
failederror

Следующие шаги

SaaS Admin Documentation