Zoho CRMで会員積立の残高管理を自動化した話

会費を毎月口座振替で積み立て、その残高から支払いを差し引いていく。冠婚葬祭や互助会でよくある会員積立の仕組みを、Zoho CRMだけで構築しました。銀行から届く口座振替の結果CSVを取り込むだけで、会員ごとの残高が自動更新される仕組みです。この記事では、どんな課題をどう解決したのか、全体像を紹介します。
抱えていた課題
会員は毎月、決まった金額を口座振替で積み立てます。振替の結果は、月ごとにまとめてCSV(全銀フォーマット)で届きます。このCSVには、会員ごとの引き落とし金額や、引き落としが成功したか失敗したか(残高不足など)が記録されています。
従来はこのCSVを担当者が手作業で集計し、会員台帳の残高を書き換えていました。会員数が増えるほど手間がかかり、転記ミスも起きやすくなります。さらに、積み立てた残高からは支払い(出金)も発生するため、入金と出金の両方を追いながら累計残高を管理する必要がありました。
この一連の流れを、CSVを取り込むだけで完結させるのがゴールです。
3つの部品で考える
仕組みはシンプルな3つの部品でできています。会員を管理する場所、入出金の履歴を1件ずつ記録する場所、そして履歴から残高を計算する処理です。
会員は、Zoho標準の連絡先モジュールをそのまま使いました。会員台帳として住所や連絡先も一緒に管理できるうえ、新しくモジュールを作らずに済みます。入出金の履歴は、専用のカスタムモジュールを作り、1回の入金や出金を1レコードとして記録します。残高は、この履歴を会員ごとに合計して、連絡先の残高欄に書き戻す方式にしました。入金は足す、出金は引く、という単純な集計です。
履歴は連絡先の中に持たせなかった
入出金履歴を持たせる方法として、連絡先の中に子行(サブフォーム)を埋め込む案もありました。ですが今回は、履歴を別モジュールにして連絡先と紐づける形を選びました。
理由は、積立という性質にあります。毎月積み立てる会員の履歴は、何年も経つと膨大な件数になります。連絡先の中に埋め込む方式では件数に上限があり、長く続く積立には向きません。別モジュールにすれば履歴は事実上無制限に持て、毎月のCSVも素直に追記できます。会員のレコードを開けば、その人の入出金履歴が一覧で並んで見えるので、使い勝手も損なわれません。
失敗した引き落としをどう扱うか
会員積立ならではの難所が、引き落としの失敗です。口座振替は必ず成功するわけではなく、残高不足などで失敗することがあります。CSVには失敗した行も金額付きで記録されますが、実際にはお金は引き落とせていません。
そのためCSVをそのまま全部足してしまうと、失敗分まで残高に乗ってしまいます。今回はこれを避けるため、残高を計算する側で「引き落としが成功した行だけを合計する」ようにしました。届いたCSVには一切手を加えず、集計する処理の方で失敗を見分ける、という考え方です。
結果
最終的に、担当者の作業はCSVを取り込むだけになりました。取り込んだ瞬間に、各会員の残高・入金累計・出金累計が自動で更新されます。支払いが発生したときだけ履歴を1件手入力すれば、残高から自動で差し引かれます。手作業の集計と転記がなくなり、ミスの入り込む余地も大きく減りました。
具体的な作り方は、技術編の記事で解説します。