2018.10.10
団体用集金システムを作りたい!#1【システム概要】
ということで、
この前ちょろっと話した、不労所得を目的としたパッケージ開発の一環として、オケ団体に於ける会計システムを作ろうという企画です。
どうせそのうち僕自身が集計するので、そこで試用してみて反応を見るつもりです。
んで、まずは雑な要件定義ですね。
<ログインまわり>
・基本的にメールアドレスのみの認証。(IDとパスワードは設定必須ではない→基本的にユーザーは登録作業不要。)
・メールアドレスを用いてログインしようとすると、トークンがメールに送られるのでそれをクリックすることでログインすることができる。
・毎回それを行うのが面倒なので、ログイン状態を保持させるチェックボックスを置く。
・メールアドレスに紐付いたデータをDBから取ってくることで、自らが関連している団体のデータをまとめて取ってくることができる。
<設定まわり>
・「集金者(管理者)」がグループを作り、「集金計画」を作成する。
・「集金計画」に、集金額、集金題目、期間とオプション、メールテンプレート等を設定する。
・「集金計画」に、「メンバー(被集金者)」の「メールアドレス」、「名前」、「権限」を登録する。(※集金額を個別設定するかグループ設定にするかは未定)
・お金が振り込まれたら「集金者」が「集金計画」内の「チェックリスト」を更新し、これで「集金」が完了する。
※このままだとユーザーに選択権が全くないため、誤って追加された場合のために集金メールに登録解除のためのトークンを添付するのが良さそう。
<フローまわり>
・集金期間が開始されたら、登録メールアドレス宛にメールを一斉送信する。(デーモンの判定が必要だな・・・・・・)
・オプションに基づき、期限が迫ってきたら集金完了していないメンバーにのみリマインダーを送信する。
・オプションに基づき、期限直前には毎日メールを送信させる。
<確認まわり>
・メールアドレスを用いてログインすると、ステータスとして振り込んでいない「集金計画」が表示される。
・「管理者」の権限を持っている場合、誰が振り込んでいて誰が振り込んでいないかのチェック、また振り込み承認のフラグを立てることができる。
※理想としてはAPIを用いて振り込み確認も自動化したいが、銀行ごとに処理が必要になりロジックが複雑になるし、手渡しの場合も考えないといけないので、現状は全部手動にする。
こんな感じのシステムを想定しています。LINEをベースにやってもよかったんですけど、ID検索ができないと詰むのでメールベースにしました。
まずここで重要なのが
ユーザー側は会員登録が不要というところです。面倒な作業は管理者に全てやらせます。
集金チェックはAPIさすがに手作業で行わないといけませんが、振り込みを確認できるAPIとかも存在するっぽいので、もしかしたらそのチェック作業も自動化できる可能性はあります。ただ、その場合本名の登録がおそらく必須になっちゃいますね。
あと、銀行の名義毎にAPIが必要になりそうで、対応する銀行がある程度限定されそうな気がします。ただ、やっぱある程度自動化できた方がシステム的にかしこいので、その点は多少考えなければなりませんね。ただ、当面は手動でチェックですね。
あと、ユーザーに対するトークン発行のあたりも、いまいちですね。
ユーザーがこっちの思惑通り、メール送信してトークンをクリックして認証してくれれば、メール送信時のデーモンチェックが多少雑でもなんとかなるんですけど、こういうシステムを開発する時は
ユーザーは基本的に文字の読めないバカであると想定して作る必要があるので、やはりメールアドレスの確認はユーザーにやらせるべきではありませんね・・・・・・。
つまり、集金開始のメールを一斉送信した段階でメールアドレスをチェックし、デーモンが返ってきたら管理者に通知する、という作業が必要になります。
他に考えられる大きな問題が2つありまして、
「変更」と
「マージ」です。
例えば、以前使っていたメールアドレスが使えなくなった・・・・・・といった場合、メールアドレスを変更する必要があります。
ここでIDとパスワードを設定しているか、GoogleやFacebookを用いたシングルサインオンができていればいいのですが、そうでない場合メールアドレスが基本的な認証手段なので、そのメールアドレスが使用不能になると一気に面倒なことになります。
まず、ユーザー側で変更することができなくなるので、管理者の方で手動で更新してもらわなければなりません。めんどくさいことこの上ないですけど、こればっかりは仕方ないんですかね・・・・・・。
これ、どうするんですかね・・・・・・。セキュリティの観点からどーにも許容できない感じするんですけど、どうするのがベストなんだ???
それぞれの管理者に新しく登録してもらって下さい、ってするのが一番良さそうなんですよね・・・・・・。、その新規登録時にデータを
マージさせることができれば、安全なのかなぁ・・・・・・。
とはいえなりすましができるっちゃできるのが非常に問題なんですよね・・・・・・。
ただ、この問題は
元のメールアドレスにリジェクト用のトークンを発行すれば良いということになりますかね。つまり、何らかの方法でデータベースをロールバックできるようにしておけば、一応なりすまし問題は防げはしませんけど、解消はできるようになりますね。
そのマージまわりのビジネスロジックは、もうちょっと厳密に計画しないと破綻しそうですね。
ただ、そんな感じのシステムの制作を考えていたりします。
まぁこれが上手いこと作れたら、ちょっと拡張して投票システムや出欠管理も一元管理できるようになりますので、期待に胸が膨らみますね。トークンで全部アクセスさせるので、ログイン要らずで名前を絶対に間違わなくなるわけですしね。
・・・・・・っていうシステムの構築を考えてるんですけど、なんか意見あったら教えて下さい。まぁこの文章じゃ伝わりにくいかも知れないけど(笑)