今日までで、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 を見ていく。