今日までで、Buyer と Seller の取引の実装をひととおり確認できた。今日はレポートについて調べていく。経理会計部門では消込 / 消し込み / Reconciliation と呼ばれる処理が必要だ。

決済が完了してもその資金はいきなり現金にはならない。available になるまでに時間がかかるし、available になった資金を銀行口座に移動するのにも時間がかかる。

経理担当はたぶん気にする。債権としていくらあるのか。そのうち銀行口座に入っているのはいくらか。どの取引ぶんが入金されているのか。残りはいつ入金されるのか。手数料として引かれたのはいくらか。それが発生したのはいつなのか。

Payment Intent、Charge、Refund、Dispute などのオブジェクトを追いかければいいんだけど、データ構造が違うし、エンドポイントも違う。そこで 2 種類のレポートを使う。

  • Balance Reports : 指定した期間で発生した個々の取引や集計
  • Payout Reports : ある Payout の金額に関与した取引や集計

Balance Transactions

レポートは、これまでに見てきた Balance Transaction を元に作られる。Account の残高、つまり、Seller にとって資金が動く取引を、イベントとして記録している。イベントソーシング的な意味で。

簡単な例を示す。fee の値は、API のレスポンスではなく、Account 残高から減る場合はマイナスで表記している。

id created reporting_category amount fee net available_on comment
txn_1 12/01 charge 1,000 -36 946 12/05 支払い
txn_2 12/10 charge 2,000 -72 1,928 12/14 支払い
txn_3 12/13 dispute -2,000 -1,500 -3,500 12/14 txn_2 のチャージバック
txn_4 12/20 charge 3,000 108 2,892 12/24 支払い
txn_5 12/29 charge 5,000 -180 4,820 01/04 支払い
txn_6 12/30 refund -5,000 0 -5,000 01/04 txn_5 を返金
txn_7 12/31 payout -2,266 0 -2,266 01/04 12 月末の payout

Balance Reports

12 月に発生したビジネス上の取引のレポートが欲しい場合は、Balance Reports を使う。

  • craeted が 12 月の取引が対象
  • payout は対象外
id created reporting_category amount fee net
txn_1 12/01 charge 1,000 -36 946
txn_2 12/10 charge 2,000 -72 1,928
txn_3 12/13 dispute -2,000 -1,500 -3,500
txn_4 12/20 charge 3,000 108 2,892
txn_5 12/29 charge 5,000 -180 4,820
txn_6 12/30 refund -5,000 0 -5,000
収支 4,000 -1,716 2,284
  • Buyer が Seller に支払った金額(売上)は amount の合計値 4,000 円 になる。
  • Seller が Stripe に支払う手数料は、fee の合計値 1,716 円になる。
  • Seller の銀行口座に移動した・移動する金額は、net の合計値 2,284 円になる。ただし、この資金がいつ入るかは分からない。指定した期間、この場合は 12 月の取引のうち、いつか銀行口座に移動する金額が分かる。

Payout Reonciliation Reports

ある payout があったとき、その金額を決定した取引、または集計を得るのが Payout Reconciliation Reports だ。ただし payout を毎月または毎週の自動入金に設定している場合のみ取得できる。

id reporting_category net available_on
txn_1 charge 946 12/05
txn_2 charge 1,928 12/14
txn_3 dispute -3,500 12/14
txn_4 charge 2,892 12/24
収支 2,266

txn_5 と txn_6 は 12 月に発生した取引で、1 月 4 日に available となる。そのため、12 月末日時点では available ではない = 利用可能ではない = payout の対象にならない。次の payout 対象になる。

その他の集計

上の例では単純化のために、最低限必要な列だけを記載した。実際には、Balance Transaction に含まれる列をレポートに含められる。

上記 2 つの例以外に要件がある場合は、Balance Reports または/および、Payout Reconciliation Reports を使って計算する。件数が少なければ表計算ソフトでできるだろうし、多ければそれなりのツールを使うことになる。

まとめ

リリース間近になって、突然、経理部門から要件が提示されがちなレポートを確認した。明日からは、Stripe Connect を見ていく。