Skip to content

API Tài Chính (Finance)

Module Finance cung cấp các phương thức để quản lý và theo dõi các giao dịch tài chính, chi phí và báo cáo trong hệ thống Pancake POS.

Khởi Tạo

typescript
import { PancakeClient } from 'pancake-client-sdk';

const client = new PancakeClient('your-api-key', 'your-shop-id');
const financeApi = client.finance;

Quản Lý Giao Dịch

Lấy Danh Sách Giao Dịch

typescript
const { data: transactions } = await client.finance.listTransactions({
  page_size: 20,
  page_number: 1,
  type: 'expense',
  from_date: '2024-04-01',
  to_date: '2024-04-30'
});

Tham Số Lọc

TênKiểuBắt buộcMô tả
page_sizenumberkhôngSố giao dịch trên trang
page_numbernumberkhôngSố trang
typestringkhôngLoại giao dịch: 'receipt' hoặc 'expense'
category_idnumberkhôngLọc theo danh mục
from_datestringkhôngTừ ngày (YYYY-MM-DD)
to_datestringkhôngĐến ngày (YYYY-MM-DD)
payment_methodstringkhôngPhương thức thanh toán
searchstringkhôngTìm kiếm theo ghi chú
warehouse_idstringkhôngLọc theo kho hàng
min_amountnumberkhôngSố tiền tối thiểu
max_amountnumberkhôngSố tiền tối đa

Tạo Giao Dịch Mới

typescript
const newTransaction = await client.finance.createTransaction({
  type: 'expense',
  amount: 1000000,
  note: 'Chi phí vận chuyển tháng 4',
  payment_method: 'bank_transfer',
  category_id: 1,
  reference_number: 'INV-001'
});

Cập Nhật Giao Dịch

typescript
const updatedTransaction = await client.finance.updateTransaction('transaction-id', {
  amount: 1500000,
  note: 'Cập nhật chi phí vận chuyển'
});

Xóa Giao Dịch

typescript
await client.finance.deleteTransaction('transaction-id');

Quản Lý Danh Mục

Lấy Danh Sách Danh Mục

typescript
const { data: categories } = await client.finance.listCategories('expense');

Tạo Danh Mục Mới

typescript
const newCategory = await client.finance.createCategory({
  name: 'Chi phí marketing',
  type: 'expense',
  parent_id: 1
});

Cập Nhật Danh Mục

typescript
const updatedCategory = await client.finance.updateCategory(1, {
  name: 'Chi phí quảng cáo & marketing'
});

Xóa Danh Mục

typescript
await client.finance.deleteCategory(1);

Chi Phí Quảng Cáo

Lấy Danh Sách Chi Phí Quảng Cáo

typescript
const { data: expenses } = await client.finance.listAdvertisingExpenses({
  platform: 'facebook',
  from_date: '2024-04-01',
  to_date: '2024-04-30'
});

Tạo Chi Phí Quảng Cáo

typescript
const newExpense = await client.finance.createAdvertisingExpense({
  platform: 'facebook',
  account_name: 'Shop ABC',
  campaign_name: 'Summer Sale 2024',
  amount: 5000000,
  start_date: '2024-04-01',
  end_date: '2024-04-30'
});

Báo Cáo Tài Chính

Lấy Báo Cáo Tổng Quan

typescript
const report = await client.finance.getFinancialReport({
  from_date: '2024-04-01',
  to_date: '2024-04-30',
  warehouse_id: 'warehouse-1'
});

Lấy Báo Cáo Theo Ngày

typescript
const dailySummary = await client.finance.getDailySummary({
  from_date: '2024-04-01',
  to_date: '2024-04-30'
});

Lấy Báo Cáo Theo Danh Mục

typescript
const categoryBreakdown = await client.finance.getCategoryBreakdown({
  from_date: '2024-04-01',
  to_date: '2024-04-30'
});

Models

FinancialTransaction

typescript
interface FinancialTransaction {
  id: string;
  type: 'receipt' | 'expense';
  amount: number;
  note?: string;
  reference_number?: string;
  category_id?: number;
  payment_method: string;
  created_by: {
    id: string;
    name: string;
  };
  created_at: string;
  updated_at: string;
  attachments?: string[];
  tags?: string[];
  related_order_id?: string;
  warehouse_id?: string;
}

TransactionCategory

typescript
interface TransactionCategory {
  id: number;
  name: string;
  type: 'receipt' | 'expense';
  parent_id?: number;
  children?: TransactionCategory[];
}

AdvertisingExpense

typescript
interface AdvertisingExpense {
  id: string;
  platform: string;
  account_name: string;
  campaign_name?: string;
  amount: number;
  start_date: string;
  end_date: string;
  note?: string;
  created_at: string;
  updated_at: string;
}

FinancialReport

typescript
interface FinancialReport {
  total_receipts: number;
  total_expenses: number;
  net_amount: number;
  breakdown_by_category: {
    category_id: number;
    category_name: string;
    total_amount: number;
  }[];
  breakdown_by_payment_method: {
    payment_method: string;
    total_amount: number;
  }[];
  daily_summary: {
    date: string;
    receipts: number;
    expenses: number;
    net: number;
  }[];
}

Ví Dụ Sử Dụng

Theo Dõi Chi Phí Theo Danh Mục

typescript
async function trackExpensesByCategory() {
  try {
    // Lấy danh sách danh mục chi phí
    const { data: categories } = await client.finance.listCategories('expense');
    
    // Lấy báo cáo chi tiết theo danh mục
    const categoryBreakdown = await client.finance.getCategoryBreakdown({
      from_date: '2024-04-01',
      to_date: '2024-04-30'
    });

    // Phân tích chi phí
    categoryBreakdown.forEach(item => {
      const category = categories.data.find(c => c.id === item.category_id);
      console.log(`${category?.name}: ${item.total_amount.toLocaleString()} VND`);
    });
  } catch (error) {
    console.error('Lỗi khi theo dõi chi phí:', error);
  }
}

Quản Lý Chi Phí Quảng Cáo

typescript
async function manageAdExpenses(platform: string, campaignName: string) {
  try {
    // Tạo chi phí quảng cáo mới
    const expense = await client.finance.createAdvertisingExpense({
      platform,
      account_name: 'Shop ABC',
      campaign_name: campaignName,
      amount: 10000000,
      start_date: '2024-04-01',
      end_date: '2024-04-30',
      note: 'Chiến dịch quảng cáo mùa hè'
    });

    // Tạo giao dịch tài chính tương ứng
    await client.finance.createTransaction({
      type: 'expense',
      amount: expense.amount,
      note: `Chi phí quảng cáo ${platform} - ${campaignName}`,
      payment_method: 'bank_transfer',
      category_id: 5, // ID danh mục Marketing
      reference_number: expense.id
    });

    console.log('Đã tạo chi phí quảng cáo và ghi nhận giao dịch thành công');
  } catch (error) {
    console.error('Lỗi khi quản lý chi phí quảng cáo:', error);
  }
}