メインコンテンツへスキップ

残高とセトルメントレポート

残高レポートは、アカウントの残高、決済レコード、および支払い情報について詳細に提供します。

概要

残高レポートは以下を提供します:

  • アカウント残高: 利用可能な、保留中の、および予約済みの資金
  • 決済記録: 銀行口座への転送
  • 手数料内訳: すべての取引手数料の詳細
  • 準備金追跡: 予約済み資金の管理
  • 複数通貨: マルチ通貨残高表示

残高の詳細を理解

残高の種類

残高には複数の種類があります:

  • 利用可能: すぐに転送できる資金
  • 保留中: 決済を待つ資金
  • 予約済み: チャージバックなどに備える資金
const balance = await omise.balance.retrieve();

console.log('Available:', balance.available / 100, 'THB');
console.log('Pending:', balance.pending / 100, 'THB');
console.log('Reserved:', balance.reserved / 100, 'THB');
console.log('Total:', (balance.available + balance.pending) / 100, 'THB');

セトルメント情報を取得

セトルメントレコードを一覧表示

import omise

omise.api_secret = 'skey_test_123456789'

def get_settlements(from_date=None, to_date=None):
"""セトルメントレコードを取得"""
settlements = omise.Settlement.list(
limit=100,
from_date=from_date,
to_date=to_date
)

for settlement in settlements.data:
print(f"ID: {settlement.id}")
print(f"Amount: {settlement.amount / 100} THB")
print(f"Fee: {settlement.fee / 100} THB")
print(f"Net: {settlement.net / 100} THB")
print(f"Date: {settlement.created}")

return settlements

API経由でアクセス

残高レポートデータ

async function getBalanceReport(currency = 'THB') {
const balance = await omise.balance.retrieve();

return {
available: balance.available / 100,
pending: balance.pending / 100,
reserved: balance.reserved / 100,
currency: currency,
retrieved_at: new Date().toISOString()
};
}

// 使用例
const report = await getBalanceReport();
console.log(JSON.stringify(report, null, 2));

セトルメント詳細

require 'omise'

Omise.api_key = 'skey_test_123456789'

def get_settlement_details(settlement_id)
settlement = Omise::Settlement.retrieve(settlement_id)

{
id: settlement.id,
amount: settlement.amount / 100.0,
fee: settlement.fee / 100.0,
net: settlement.net / 100.0,
currency: settlement.currency,
status: settlement.status,
created: settlement.created
}
end

レポートのエクスポート

CSVでダウンロード

ダッシュボードから:

  1. レポート > 残高に移動
  2. 日付範囲を選択
  3. エクスポート > CSVをクリック
  4. ファイルがダウンロードされます

プログラムでエクスポート

<?php
$omise = new Omise(['secretKey' => 'skey_test_123456789']);

function export_balance_data($from_date, $to_date) {
$balance = $omise['balance']->retrieve();

$data = [
['Available', $balance['available'] / 100],
['Pending', $balance['pending'] / 100],
['Reserved', $balance['reserved'] / 100],
['Total Available', ($balance['available'] + $balance['pending']) / 100]
];

$fp = fopen('balance_report.csv', 'w');
foreach ($data as $row) {
fputcsv($fp, $row);
}
fclose($fp);

echo "Report exported to balance_report.csv";
}

一般的なレポートシナリオ

月次会計レポート

from datetime import datetime, timedelta
import omise

def generate_monthly_accounting_report(year, month):
"""月次会計レポートを生成"""

# 月の日付範囲を計算
from_date = datetime(year, month, 1)
if month == 12:
to_date = datetime(year + 1, 1, 1) - timedelta(seconds=1)
else:
to_date = datetime(year, month + 1, 1) - timedelta(seconds=1)

# セトルメントを取得
settlements = omise.Settlement.list(
from_date=from_date.isoformat(),
to_date=to_date.isoformat(),
limit=100
)

# 統計を計算
report = {
'month': f'{year}-{month:02d}',
'total_settled': 0,
'total_fees': 0,
'settlement_count': len(settlements.data)
}

for settlement in settlements.data:
report['total_settled'] += settlement.amount
report['total_fees'] += settlement.fee

report['total_settled'] = report['total_settled'] / 100
report['total_fees'] = report['total_fees'] / 100
report['net_received'] = report['total_settled'] - report['total_fees']

return report

# 使用例
report = generate_monthly_accounting_report(2024, 1)
print(f"Month: {report['month']}")
print(f"Total Settled: {report['total_settled']:.2f} THB")
print(f"Total Fees: {report['total_fees']:.2f} THB")
print(f"Net Received: {report['net_received']:.2f} THB")

自動毎月レポート

package main

import (
"fmt"
"log"
"time"

"github.com/omise/omise-go"
)

func generateMonthlyReport(client *omise.Client) {
now := time.Now()
firstDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC)
lastDay := firstDay.AddDate(0, 1, -1)

balance := &omise.BalanceResponse{}
err := client.Do(balance, nil)
if err != nil {
log.Fatalf("Failed to retrieve balance: %v", err)
}

fmt.Printf("Balance Report for %s\n", now.Format("2006-01"))
fmt.Printf("Available: %.2f THB\n", float64(balance.Available)/100)
fmt.Printf("Pending: %.2f THB\n", float64(balance.Pending)/100)
fmt.Printf("Reserved: %.2f THB\n", float64(balance.Reserved)/100)
}

ベストプラクティス

1. 定期的に監視

async function monitorBalance() {
const balance = await omise.balance.retrieve();

// 低い残高をアラート
if (balance.available < 10000000) { // 100,000 THB未満
console.warn('Low balance alert!');
// アラート通知を送信
}

// 高い予約残高をアラート
if (balance.reserved > 50000000) { // 500,000 THB以上
console.warn('High reserved balance');
// 調査が必要
}
}

// 毎日実行
setInterval(monitorBalance, 24 * 60 * 60 * 1000);

2. 和調

def reconcile_with_bank_statement(bank_statement, omise_settlements):
"""銀行ステートメントとOmiseセトルメントを照合"""

discrepancies = {
'omise_only': [],
'bank_only': [],
'amount_mismatches': []
}

bank_map = {tx['reference']: tx for tx in bank_statement}

for settlement in omise_settlements.data:
if settlement.id in bank_map:
bank_tx = bank_map[settlement.id]
if bank_tx['amount'] != settlement.amount / 100:
discrepancies['amount_mismatches'].append({
'reference': settlement.id,
'omise_amount': settlement.amount / 100,
'bank_amount': bank_tx['amount']
})
del bank_map[settlement.id]
else:
discrepancies['omise_only'].append(settlement.id)

discrepancies['bank_only'] = list(bank_map.keys())

return discrepancies

よくあるご質問

準備金とは何ですか?

準備金は、チャージバックや払い戻しに対応するために確保される資金です。これは利用できなく、使用することはできません。

セトルメント後どのくらいの時間で資金が到達しますか?

ほとんどのセトルメントは1〜3営業日以内に銀行口座に到達します。ただし、銀行や時刻により異なります。

複数通貨の残高を表示できますか?

はい。複数の通貨でのトランザクションがある場合、各通貨の残高を個別に表示できます。

セトルメントレコードはどのくらい保持されますか?

Omiseは最大7年間のセトルメントレコードを保持します。API経由でいつでもアクセスできます。

関連リソース