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);
  }
}