mcpField
P
payment-reconciliation-automation

payment-reconciliation-automation

github.com/finsilabsその他6082 回インストール5 日前に更新
リポジトリ

payment-reconciliation-automation について

決済プロセッサーの入金、会計記録、銀行入金を照合する業務を自動化するスキルです。同期ツールの選択や独自パイプラインの構築に加え、手数料、返金、チャージバック、通貨換算の差異を扱います。

主な機能

  1. 01ECプラットフォーム別の照合ツール選定
  2. 02決済プロセッサーと会計システムの接続
  3. 03手数料・返金・チャージバックの照合
  4. 04Stripe 残高取引を使った独自フロー構築
  5. 05日次の照合差異の監視

活用シーン

  1. 01決済取引の手作業での照合を削減
  2. 02複数プロセッサーの取引を照合
  3. 03月次締めで未照合項目を解消
  4. 04返金やチャージバックを正確に記帳

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill payment-reconciliation-automation

インストール後、Claude Code で/payment-reconciliation-automationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

tile.json
evals/database-schema-and-alerting/
criteria.json
task.md
evals/matching-engine-with-tolerances/
criteria.json
task.md
evals/transaction-ingestion-pipeline/
criteria.json
task.md

詳細

決済照合の自動化

概要

決済照合では、決済処理業者(Stripe、PayPal、Shopify Payments)が報告する回収額と、会計システムに記録された金額、実際に銀行口座へ入金された金額を照合します。決済処理手数料、返金、チャージバック、ローリングリザーブ、通貨換算によって差異が生じますが、こうした項目はほとんどの E コマース環境では自動的に仕訳されません。1 日あたり数百件を超える取引を手作業で照合するのは、現実的ではありません。

多くの加盟店では、独自の照合ロジックを構築するのではなく、専用の同期ツールを使って E コマースプラットフォームと会計システム(QuickBooks、Xero)を連携することで、照合を自動化できます。

このスキルを使用する場面

  • 財務チームが手作業での決済照合に 1 日あたり 2 時間以上を費やしている場合
  • 2 つ以上の決済処理業者(例:Stripe と PayPal)で取引を処理している場合
  • 未解決の決済差異によって月末締めが滞っている場合
  • チャージバックや返金が会計システムに確実に反映されていない場合
  • 決済フローに関する SOC 2 または PCI-DSS の監査文書が必要な場合

基本手順

ステップ 1:プラットフォームを特定し、照合方法を選択する
プラットフォーム推奨する照合ツール備考
Shopify PaymentsA2X または Bench AccountingA2X は Shopify の入金を QuickBooks/Xero の仕訳に自動で対応付け、手数料、返金、調整を処理します
Shopify + StripeA2X for Stripe + A2X for Shopify両方のデータソースを QuickBooks/Xero に接続します。A2X はそれぞれの入金を個別に照合します
WooCommerce + StripeSynder または WooCommerce QuickBooks Online プラグインSynder は手数料を分けて、すべての Stripe 取引を QuickBooks に同期します
WooCommerce + PayPalSynder または PayPal for WooCommerce + QuickBooksSynder は 1 つの接続で Stripe と PayPal の両方を処理します
BigCommerceA2X(BigCommerce コネクターあり)または SynderShopify と同じ方法です
カスタム/ヘッドレスStripe Balance Transactions API を使って照合パイプラインを構築します以下の「カスタム/ヘッドレス」セクションを参照してください

目安:Shopify、WooCommerce、BigCommerce を利用している場合は、独自のものを構築する前に A2X または Synder を使ってください。これらのツールは月額 $25~$100 で、開発作業を数週間分削減できます。

ステップ 2:同期ツールで照合を自動化する

Shopify(A2X — 推奨)
  1. a2xaccounting.com で登録し、Shopify アプリをインストールします
  2. Shopify ストアを接続します:A2X → Connect a store → Shopify に移動し、アクセスを許可します
  3. 会計システムを接続します:A2X → Settings → Accounting に移動し、QuickBooks Online または Xero に接続します
  4. 勘定科目のマッピングを設定します:
    • A2X で Shopify の売上、返金、手数料、調整を勘定科目一覧に対応付けます
    • Shopify Payments の手数料を「Merchant Fees」の費用勘定に対応付けます
    • ギフトカードの販売を収益ではなく負債勘定に対応付けます
  5. A2X は Shopify の入金があるたびに自動で処理し、銀行への入金額と正確に一致する要約仕訳を QuickBooks/Xero に作成します

A2X が自動で処理する項目:

  • 入金額から差し引かれる Shopify の決済処理手数料
  • 元の販売とは異なる期間に行われた返金
  • チャージバックとチャージバックの取り消し
  • ギフトカードの利用と購入
  • 複数通貨の換算
WooCommerce(Synder — 推奨)
  1. synderapp.com で登録し、プラグイン(WordPress.org からインストール)を使って WooCommerce ストアを接続します
  2. 決済処理サービスを接続します。Synder → Settings → Platforms に移動し、API キーを使って Stripe および/または PayPal を接続します
  3. Synder → Settings → Accounting で QuickBooks Online または Xero を接続します
  4. 取引の分類を設定します。商品カテゴリを収益勘定に、手数料を費用勘定に割り当てます
  5. Synder はすべての取引をほぼリアルタイムで同期し、総額と決済処理手数料を別々に記録します

WooCommerce における Synder と A2X の比較:Synder は取引単位で処理します(QuickBooks のエントリーは取引ごとに 1 件)。A2X は入金単位で処理します(入金ごとにサマリー 1 件)。Synder は詳細なレポートに適しており、A2X は取引量の多いストアに適しています。

BigCommerce
  1. BigCommerce App Marketplace から A2X をインストールします
  2. 上記の Shopify と同じ設定手順に従います。A2X の BigCommerce コネクターは Shopify のコネクターと同じように機能します
  3. 決済代行手数料を含めて完全に照合するには、決済ゲートウェイ(Stripe または PayPal)を A2X に別途接続します

カスタム/ヘッドレス

カスタムストアフロントでは、Stripe の残高取引(すべての資金移動に関する正式な記録)を信頼できる唯一の情報源として使用する照合パイプラインを構築します。

// Ingest Stripe balance transactions — the only feed that includes fees, refunds, and payouts
async function ingestStripeTransactions(startDate, endDate) {
  const transactions = [];

  for await (const txn of stripe.balanceTransactions.list({
    created: {
      gte: Math.floor(new Date(startDate).getTime() / 1000),
      lte: Math.floor(new Date(endDate).getTime() / 1000),
    },
    limit: 100,
    expand: ['data.source'],
  })) {
    const orderId = txn.source?.metadata?.order_id;

    transactions.push({
      stripe_id: txn.id,
      type: txn.type,            // 'charge', 'refund', 'payout', 'stripe_fee'
      gross: txn.amount / 100,   // in dollars
      fee: txn.fee / 100,
      net: txn.net / 100,
      currency: txn.currency.toUpperCase(),
      date: new Date(txn.created * 1000),
      order_id: orderId ?? null,
      description: txn.description,
    });
  }

  return transactions;
}

// Match Stripe transactions to internal order records
async function reconcileDay(date) {
  const stripeTxns = await ingestStripeTransactions(date, date);
  const internalOrders = await db.orders.findMany({
    where: { createdAt: { gte: startOfDay(date), lte: endOfDay(date) }, status: 'confirmed' },
  });

  const matched = [];
  const exceptions = [];

  for (const stripeTxn of stripeTxns.filter(t => t.type === 'charge')) {
    const order = internalOrders.find(o => o.id === stripeTxn.order_id || o.stripeChargeId === stripeTxn.stripe_id);

    if (order && Math.abs(order.total - stripeTxn.gross) < 0.01) {
      matched.push({ stripeTxn, order, delta: 0 });
    } else {
      exceptions.push({ stripeTxn, order: order ?? null, delta: order ? order.total - stripeTxn.gross : stripeTxn.gross });
    }
  }

  // Alert on exceptions
  if (exceptions.length > 0) {
    await sendSlackAlert(`Reconciliation: ${exceptions.length} unmatched transactions on ${date}`);
  }

  return { matched: matched.length, exceptions: exceptions.length };
}

PayPal の照合: PayPal Reporting API(/v1/reporting/transactions)を使用して、決済確定済みの取引を取得します。処理中のオーソリを照合しないよう、transaction_status: 'S'(決済確定済みのみ)で絞り込みます。

ステップ 3:最も一般的な照合の例外に対処する

Stripe の入金額が請求額の合計と一致しない場合: これは想定どおりです。入金額は手数料、返金、ローリングリザーブを差し引いた額です。A2X と Synder では、入金額を銀行預金と照合し、個々の請求は手数料を費用として、総額で別途記録します。

返金が異なる月に行われた場合: A2X と Synder はこれを自動的に処理します。返金は元の売上期間ではなく、返金が行われた期間に記録されます。返金によって該当する収益期間の収益が減少するよう、会計システムを発生主義会計に設定します。

チャージバック: Stripe と Shopify Payments はどちらも、チャージバック金額とチャージバック手数料の残高取引を自動的に作成します。A2X と Synder はこれらをマイナスの取引として記録します。手数料用の「チャージバック」費用勘定が勘定科目表にあることを確認します。

複数通貨の取引: EUR で決済を処理し、帳簿を USD で記録する場合、記録には入金時ではなく取引時点の為替レートを使うよう、A2X または Synder を設定します。これにより発生主義会計の原則に沿った処理になります。

ステップ 4:日次の照合モニタリングを設定する

QuickBooks または Xero で、次の項目を表示する日次レポートを設定します。

  1. 銀行への入金額 と 会計システムで受領済みとして記録された支払額:0.01 ドル以内で一致する必要があります
  2. 未照合の取引:会計システムにある取引のうち、銀行の記録と照合されていないもの
  3. 例外率:1 日あたりの未照合取引を 1% 未満に抑えることを目指します

QuickBooks では、Reports → Banking → Reconciliation Reports を使用します Xero では、Accounting → Bank Accounts → Reconciliation Reports を使用します

ベストプラクティス

  • カスタム構築の前にA2XまたはSynderを使用する — Shopify、WooCommerce、BigCommerceのストアでは、これらのツールを使えば1日で照合作業を解決できます。カスタムコードを追加すると、数か月にわたるメンテナンスが発生します
  • Stripeの残高取引を信頼できる唯一の情報源として使用する — チャージや支払いインテントではありません。残高取引だけが、手数料、返金、入金を単一の一貫した記録に含むフィードです
  • 当日ではなくT-1(前日)の取引を照合する — ほとんどの決済処理業者は、取引から24時間後に決済を確定します。当日照合すると、処理中のオーソリについて誤った例外が発生します
  • 例外を自動解決しない — すべての例外解決に人による承認手順を設け、監査証跡を残す必要があります。例外を自動計上せず、フラグを立てるようA2XとSynderを設定してください
  • 手数料は個別に照合する — 決済処理業者の手数料は、入金時にまとめて請求されることがよくあります。四半期ごとに、手数料率を加盟店契約と照合してください

よくある落とし穴

問題解決策
Shopifyの入金額が銀行預金と一致しないA2Xは入金の純額を銀行預金に自動で対応付けます。A2Xが接続され、入金処理が有効になっていることを確認してください
Stripeの返金によって会計エントリーが重複するSynderとA2Xは、元の売上に対する借方エントリーとして返金を処理します。手動で作成した返金エントリーがあれば無効にしてください
PayPalの取引が照合されないPayPalの決済には2~5営業日かかることがあります。PayPalのデータ取り込みはtransaction_status: S(決済済み)のみに絞り込んでください
通貨の不一致によって誤った例外が発生する同期ツールを、取引を元の通貨で記録するように設定してください。取引日のレートでの通貨換算には、会計システムに組み込まれた機能を使用してください
月末の差額が時間の経過とともに増加する会計システムで毎月の集計を実行し、30日を超えて未照合の項目をすべて特定して、締め処理の前に解決してください

関連スキル

  • @stripe-integration
  • @paypal-integration
  • @tax-compliance-automation
  • @accounts-receivable-automation
  • @payout-split-management

コメント