Files
portal/app/resources/js/composables/mockBilling.ts
T

176 lines
5.0 KiB
TypeScript
Raw Normal View History

/**
* Mock-данные для BillingView. Заменятся на API-fetch:
* GET /api/billing/wallet — баланс ₽ + леды + tariff.
* GET /api/billing/transactions?type={all|topup|charge|refund} — `balance_transactions`.
* GET /api/billing/invoices — `invoices` table (счета + УПД).
*
* Mock-структуры соответствуют схеме v8.7:
* - balance_transactions (§4.4): type ∈ {topup, lead_charge, refund, tariff_charge, manager_addon}.
* - invoices (§4.5): type ∈ {invoice, upd}, format ∈ {pdf, xml_1c83}.
*/
type TxType = 'topup' | 'lead_charge' | 'refund' | 'tariff_charge';
export type TxStatus = 'pending' | 'completed' | 'rejected';
export interface BillingTransaction {
id: number;
code: string; // 'TX-89421'
when: string; // '07.05 · 14:21'
type: TxType;
description: string;
status: TxStatus;
amount: number; // signed (+ topup/refund, charge)
}
export const MOCK_TRANSACTIONS: BillingTransaction[] = [
{
id: 89421,
code: 'TX-89421',
when: '07.05 · 14:21',
type: 'topup',
description: 'Пополнение через ЮKassa',
status: 'pending',
amount: 5000,
},
{
id: 89384,
code: 'TX-89384',
when: '07.05 · 11:14',
type: 'lead_charge',
description: 'Списание · 3 лида проект «Окна Москва»',
status: 'completed',
amount: -6600,
},
{
id: 89370,
code: 'TX-89370',
when: '07.05 · 09:48',
type: 'refund',
description: 'Возврат лида #1018 · дубликат',
status: 'completed',
amount: 2200,
},
{
id: 89312,
code: 'TX-89312',
when: '06.05 · 22:06',
type: 'topup',
description: 'Пополнение через ЮKassa',
status: 'completed',
amount: 10000,
},
{
id: 89286,
code: 'TX-89286',
when: '06.05 · 18:32',
type: 'lead_charge',
description: 'Списание · 5 лидов проект «Натяжные потолки»',
status: 'completed',
amount: -9250,
},
{
id: 89108,
code: 'TX-89108',
when: '05.05 · 12:00',
type: 'tariff_charge',
description: 'Списание абонентской платы тарифа «Команда»',
status: 'completed',
amount: -990,
},
{
id: 88937,
code: 'TX-88937',
when: '04.05 · 16:42',
type: 'topup',
description: 'Попытка пополнения через банковский перевод',
status: 'rejected',
amount: 0,
},
{
id: 88714,
code: 'TX-88714',
when: '03.05 · 09:18',
type: 'refund',
description: 'Возврат лида #998 · спам',
status: 'completed',
amount: 1850,
},
];
export interface BillingTab {
id: 'all' | 'topup' | 'lead_charge' | 'refund';
label: string;
types: TxType[] | null;
}
export const BILLING_TABS: BillingTab[] = [
{ id: 'all', label: 'Все', types: null },
{ id: 'topup', label: 'Пополнения', types: ['topup'] },
{ id: 'lead_charge', label: 'Списания', types: ['lead_charge', 'tariff_charge'] },
{ id: 'refund', label: 'Возвраты', types: ['refund'] },
];
export type InvoiceFormat = 'pdf' | 'xml_1c83';
export interface Invoice {
id: number;
when: string; // '07.05.2026'
title: string; // 'Счёт № 2026-0512'
sub: string; // 'Тариф «Команда» · май 2026'
amountRub: number;
format: InvoiceFormat;
}
export const MOCK_INVOICES: Invoice[] = [
{
id: 1,
when: '07.05.2026',
title: 'Счёт № 2026-0512',
sub: 'Тариф «Команда» · май 2026',
amountRub: 990,
format: 'pdf',
},
{
id: 2,
when: '06.05.2026',
title: 'УПД № УПД-2026-0492',
sub: 'Списания за апрель · 18 лидов',
amountRub: 29850,
format: 'xml_1c83',
},
{
id: 3,
when: '05.05.2026',
title: 'УПД № УПД-2026-0488',
sub: 'Списания за март · 24 лида',
amountRub: 38100,
format: 'xml_1c83',
},
{
id: 4,
when: '01.04.2026',
title: 'Счёт № 2026-0498',
sub: 'Тариф «Команда» · апрель 2026',
amountRub: 990,
format: 'pdf',
},
];
export interface PendingPayment {
code: string;
amount: number;
method: string; // 'ЮKassa'
startedAt: string; // '14:21'
autoCancelAt: string; // '14:51'
timeoutMinutes: number;
}
export const MOCK_PENDING: PendingPayment | null = {
code: 'TX-89421',
amount: 5000,
method: 'ЮKassa',
startedAt: '14:21',
autoCancelAt: '14:51',
timeoutMinutes: 30,
};