はじめに
こんにちは。BASEのCSEチームの秋谷です。 CSEチームは社内業務の効率化と財務の信頼性担保することを専門とするチームとして開発や社内の整備を行なっています。そんなCSEの取り組みを紹介できればと思います。
CSEについて詳しくはこちらをご覧ください devblog.thebase.in
BASEショップの売上金の担保とJ-SOX対応
BASEではショップの売上を一時的にプラットフォーム側が預かっており、申請があった段階で売上金を引き出せるようになっています。 そのため、ECプラットフォームはショップに対して、以下のことを担保することが大前提です。
- データが適切であること
- 発注、決済データの適切な記録がされていること
- 上記データから作成される、売上計上のデータの作成が適切であること
- 集計範囲、抽出がただしくおこなわれていること
BASEは2019年12月に上場したこともあり、J-SOXへの対応を求められるようになりました。これにより、より厳格にショップの売上金に対してデータの透明性を担保し、またそれに対して監査を受ける義務が発生しました。
J-SOXとは
財務報告に係る内部統制報告制度の概要
J-SOXにおいては、経営者は財務報告に係る内部統制を構築する責任を有しており、その有効性を自ら評価し、外部に対してその結果を報告することが求められます。また、財務報告に係る内部統制の有効性に関する経営者の評価を外部監査人が監査することによって、その評価の適正性を確保する制度となっています。
監査人による内部統制報告書の監査
J-SOXでは、財務報告に係る内部統制の有効性に関する経営者の評価を監査人が監査することによりその適正性を確保することとされています。また、内部統制監査は、原則として財務諸表監査と同一の監査人が実施することとされ、内部統制監査報告書は財務諸表監査報告書と合わせて作成することが原則とされています。
参照:https://www.pwc.com/jp/ja/knowledge/ipo-guideline/j-sox.html
ショップの売上金の検証と経理業務の負担
BASEではショップの売上金を店舗預かり金と称しています。この店舗預かり金に対して経理チームがデータを検証し、妥当性を担保しています。
当初は売上データを取得するのに時間がかかってしまったり、日々動いているトランザクションに対して常にSQLを実行しているためキャンセルなどが発生した場合に再集計すると過去の結果が変わってしまったり、Excelでデータの確認作業を行なっていたためExcelが重くなり開けなくなるなどの物理的な問題もありました。
また、売上金を担保するためにBASEシステム上のデータと各決済データとの突合しなければなりませんが、これにもかなりの時間がかかっていました。
reportシステムの構築
そこでCSEでは上記の問題を解決するために、BASEのデータ集計やレポーティングのためのシステム(以下reportシステム)を作成しました。
先述の通り、BASEでは各ショップの売り上げを一時的に預かっているため、特に以下の点について詳しくチェックをしています。
- 店舗預り金のBASEシステムのデータが適切に作成されているか
- 例:商品の代金、送料、各種手数料が正しく計算されている
- 店舗預かり金の構成要素に変更はないか
- 例:新規決済手段の追加(AmazonPayなど)
- 決済データの突合
- 例:BASEシステム上のデータとクレジットカードの決済情報が正しいか
この売上データの取得やデータの突合をしやすくしたり、構成要素の変更をわかりやすくするために、日次でBASEシステムの本番DBから必要なデータをAmazon Athenaにインポートしています。 reportシステムの構成について次に詳しく説明します。
構築
reportシステム概要
reportシステムの概要はざっくりこんなかんじです。 1. BASEシステムの本番DB(Amazon Aurora)から、必要なデータをAmazon Athenaに日次で取り込む 2. Amazon Athenaに対してSQLを実行して、レポートとなるCSVを出力
reportシステムの構成
report-dataloader(図中の青枠、青矢印)
- レポートシステムのデータを準備する
- Auroraのクローン作成機能でテンポラリDBを作成
- Embulkを用いて、テンポラリDBからレポートに関わるテーブル、列のデータをAthenaにロード (civitaspo/embulk-output-s3_parquet を使用)
- レポートシステムのデータを準備する
report(図中の赤枠、赤矢印)
- レポートのデータを抽出する
- 店舗預り金に関わるデータを抽出するクエリをAthenaに発行する
- クエリの結果からCSVを作成する
- レポートのデータを抽出する
各決算データの取得機能
各決済データとBASEシステム上のデータを突合するために、各決済システムからデータを取得してAthenaにインポート
report-datacollector
- 各決済の外部のシステムからデータをダウンロードをしてきてS3に保存
- 決済システムによって取得方法が異なる
- 各種APIの利用など
report-dataloader
- S3に保存したデータからAthenaのテーブルを作成
reportシステム構築による効果
reportシステムの構築によりAmazon Athenaへクエリを実行することによって、重たいクエリを実行しなくともBASEシステム上で取得していた店舗預かり金と同等のデータが取得可能になり、日次でのデータの突合もし易くなりました。
BASEにはさまざまな決済方法があるため一概には言えませんが、一番トランザクション数の多い決済で約1人/日分の工数の削減出来ています。クエリの実行時間は決済方法に関わらずほぼ同一なので、トランザクション数が多い決済ほど工数が削減されていることになります。
終わりに
上記に挙げた以外にも、BASEではreportシステムには経理業務を改善するための細かな機能を随時追加しています。
ここに挙げた例はCSEの活動の一部です。CSEは Corporate Solutions Engineering
の略であり、社内業務のより良く改善できればと思っています。
CSEチームでは、エンジニア力で社内業務の効率化やJ-SOX対応をリードできるコーポレートエンジニアを募集しております。 下記のリンクから気軽にご連絡ください。 https://herp.careers/v1/base/mjKQvutOU-Qd