Post

EC売上と入金はなぜ一致しないのか:BigQueryで突合システムを構築した実体験

EC事業では売上データと入金データが必ずしも一致しない。カート、決済代行、銀行振込、返金など複数のデータをBigQueryで突合し、売上・入金管理システムを構築した実体験をもとに、ECデータ管理の難しさ、システム開発の現実、費用対効果、内部統制の課題を解説する。

EC売上と入金はなぜ一致しないのか:BigQueryで突合システムを構築した実体験

EC売上と入金はなぜ一致しないのか

BigQueryで突合システムを構築した実体験

EC事業を運営していると、必ず直面する問題があります。

それは 「売上と入金が一致しない問題」 です。

一見すると、
「売上が発生したら入金されるだけでは?」
と思うかもしれません。

しかし実際のEC事業では、売上と入金は複数のシステム・複数の決済手段をまたいで管理されるため、必ずしも簡単には一致しません。

私が以前勤務していた会社でも、この問題を解決するために 売上・入金突合システムの開発プロジェクト を行いました。

結果としてシステムは完成しましたが、その過程では

  • ロジックの複雑化
  • 組織間の調整
  • 開発の長期化
  • システムの正確性を証明できない問題

など、多くの課題に直面しました。

この記事では、実際に BigQueryを使って売上・入金突合システムを構築した経験 をもとに、ECデータ管理の難しさとシステム開発の現実について解説します。


なぜECでは売上と入金が一致しないのか

ECビジネスでは、売上データと入金データが複数のシステムに分散しています。

例えば次のような構造です。

売上データ

  • カートシステム
  • ECモール
  • 注文管理システム

入金データ

  • クレジットカード決済
  • 代引き
  • 銀行振込
  • 決済代行会社
  • 返金データ

つまり

売上データ + 入金データ + 返金データ + 顧客対応データ

横断的に突合する必要 があります。

さらにECでは次のような例外処理が頻繁に発生します。

  • 注文キャンセル
  • 決済方法の変更
  • 返金処理
  • 入金遅延
  • 誤配送による返金
  • システムエラー

このため

売上 = 入金

という単純な関係にはなりません。


カートシステムだけでは入金管理できない理由

多くのECカートでは、カード決済などのオンライン決済については 入金ステータスが自動反映 されます。

つまり

注文 ↓ カード決済 ↓ 入金済み

という管理が可能です。

しかし現実の運用では、次のようなケースが必ず発生します。

① 会社口座への直接振込

顧客が

  • 指定口座に直接振込
  • 別の名義で振込

などを行う場合。

② 顧客対応による返金

テレオペ対応で

  • 誤配送
  • クレーム対応
  • 個別返金

が発生する場合。

③ 注文金額と入金額の不一致

例えば

  • 二重入金
  • 入金不足
  • 誤送金

などです。

こうしたケースは カートシステムだけでは正確に把握できません。

そのため

売上データ vs 入金データ

外部システムで突合する必要 がありました。


売上・入金突合システムの概要

そこで構築したのが、BigQueryを使った売上・入金突合システムです。

システムの概念は次の通りです。

売上データ (カート)

入金データ (決済会社・銀行)

返金データ

BigQuery

売上・入金突合

未入金 / 不一致抽出

テレオペ確認

このシステムによって

  • 未入金顧客
  • 過入金
  • 金額不一致

を検出できるようにしました。


最大の問題:ロジックが爆発的に複雑になる

このシステム開発で最も大変だったのは ロジックの複雑化 でした。

ECのデータ構造は想像以上に複雑です。

例えば次のようなケースがあります。

ケース① 注文キャンセル

注文 ↓ キャンセル

ケース② 再注文

注文 ↓ キャンセル ↓ 再注文

ケース③ 決済方法変更

注文:カード ↓ 入金:銀行振込

ケース④ 返金

入金 ↓ 返金

これらをすべて考慮してロジックを作る必要があります。


最終的にテーブルとビューが100近くになった

開発が進むにつれて、データ構造は次のように膨らんでいきました。

rawデータ

↓ 整形テーブル

↓ 決済別ビュー

↓ 売上突合ビュー

↓ 不一致ビュー

↓ 最終集計

例えば

  • 売上テーブル
  • 入金テーブル
  • 返金テーブル
  • テレオペ修正データ

などを取り込みます。

その上で

  • 決済方法別ビュー
  • 売上一致ビュー
  • 売上不一致ビュー
  • 未入金ビュー

などを作成します。

最終的には テーブルとビューが100近く になりました。


BigQueryでも計算に10分以上かかった

このような構造になると、集計処理も重くなります。

開発中は

  • 小さな処理:5分
  • 全体集計:10分以上

という計算時間がかかりました。

そのため

SQL修正 ↓ 実行 ↓ 10分待つ ↓ 結果確認

という作業を何度も繰り返す必要がありました。

さらに私は 経理担当として日常業務を行いながらプロジェクトリーダーを兼務 していたため、開発期間は長期化しました。


そもそも本当にシステムは必要だったのか

このシステムについて、私は開発中ずっと疑問を感じていました。

それは

費用対効果です。

例えば

開発費:1000万円
保守費:月50万円

一方、システムがない場合の誤差は

約0.5%

程度でした。

つまり

0.5%の精度 vs 大きなIT投資

という問題になります。

これは 経営者のガバナンス意識によって判断が分かれる領域 です。


小規模企業ではExcelの方が合理的な場合もある

売上規模が小さい企業では

Excel + RDB

で集計する方が現実的な場合もあります。

実際、過去に情報システム部が一般的なデータベースで集計を試みた際は

1年分の集計 ↓ 1か月以上

かかったこともありました。

その意味では、大量データ処理にはBigQueryのような仕組みが必要でした。


それでもシステム化には意義がある

一方で、システム化には別の意味で大きな意義もあります。

それは 人の仕事を減らすこと です。

毎月

売上データ ↓ 入金データ ↓ Excel突合

という作業を事務員が行う場合、それは

単純作業に近い業務

になります。

しかも

  • ミスのリスク
  • 担当者依存

もあります。

その意味では

データ量 + 経営者の意向

によっては、システム化は合理的な選択になります。


システムの正確性を証明できない問題

このプロジェクトで最後まで悩んだのが システムの正確性の証明 です。

完成したシステムのロジックは非常に複雑でした。

しかし

ロジックを理解できる人 ↓ プロジェクトリーダーのみ

という状態でした。

つまり

ロジックが正しい ↓ だから結果も正しい

という判断を 客観的に検証できる人がいない のです。

結局

  • 単純ロジックの集計
  • システムの集計

近い数字であること を確認する程度しかできませんでした。


本来あるべき開発体制

この経験から感じたのは、システムの信頼性を担保するには

開発 ↓ 検証

分離することが重要 だということです。

理想的には

外部開発会社 ↓ 社内レビュー

という体制が望ましいでしょう。

そうすることで

  • ロジックの妥当性
  • 出力結果の正確性

客観的に検証 できます。


EC事業者の多くが同じ問題を抱えている

当時、社長と話していて印象的だったのは

他のEC事業者も同じ問題で困っている

という話でした。

実際

  • 売上
  • 入金
  • 返金

を完全に突合できている企業は それほど多くありません。

ECの売上管理は、見た目以上に難しい領域なのです。


まとめ

ECの売上・入金管理は想像以上に複雑です。

この記事で紹介したように

  • 複数システムのデータ統合
  • 複雑な例外処理
  • ロジックのブラックボックス化
  • システムの費用対効果

など、多くの課題があります。

そのため企業の状況によって

Excel運用 or システム化

の判断は大きく変わります。

重要なのは

技術ではなく、経営判断としてIT投資を考えること

だと感じています。

This post is licensed under CC BY 4.0 by the author.