朝日ネット 技術者ブログ

朝日ネットのエンジニアによるリレーブログ。今、自分が一番気になるテーマで書きます。

月遅れ課金の実現

こんにちは。株式会社朝日ネットサービス基盤部のxfuzzyです。前回の記事では、私がシステム開発に携わった「AsahiNet 光電話」について概要を説明しました。サービス開始の準備として、システムの設計等を行う中で、いくつかの課題が発生していました。今回の記事では、課題のひとつであった「月遅れ課金」について説明したいと思います。なお、この記事で紹介するのは、あくまでも、AsahiNet 光電話のサービス開始にあたって検討していた内容で、実際のサービスと一致しているとは限りません。

課金計算の課題

課金計算の概要

AsahiNet 光電話の利用料金は、毎月発生する「月額費用」や、通話した分だけ発生する「通話料」等で構成されています。 AsahiNet 光電話の課金計算とは、お客様毎の利用料金を計算する処理で、月次で実行されています。 「月遅れ課金」は、このような、課金計算の処理で採用されている仕様です。

課金計算の入力は「利用データ」です。「利用データ」には、お客様毎の、AsahiNet 光電話の利用開始日や、電話をかけた場合の通話時間等が含まれています。 課金計算の出力は、「課金情報」です。この情報は後続処理に送られます。この記事では、請求書を印字したり、クレジットカード会社にデータを送信したり等の処理をまとめて「後続処理」と呼ぶことにします。

AsahiNet 光電話の課金計算は、月単位で実行されます。例えば、「2020年4月についての課金計算」を行います。「2020年4月についての課金計算」は、2020年5月以降に実行され、お客様が、2020年4月にAsahiNet 光電話(や付加サービス)を使っているかどうかを判定して、使っていれば、その月額を請求情報に出力します。

課題

この「利用データ~課金計算~後続処理」という流れには、次の制約があります。

  • 利用データの更新にタイムラグがある
  • 後続処理の締め日が決まっている
  • 後続処理の締め日に間に合うようにしようとすると、利用データが完全に更新されてない状態で課金計算を行うことになる

上記制約により、月末に特定の手続きを行ったような場合、利用データが更新されていないため、課金計算が間違ってしまう可能性があります。

「利用データ~課金計算~後続処理」の流れについて、図にしてみると以下のようになります。 f:id:xfuzzy:20200501190859p:plain

利用データが不完全な状態で課金計算を実行する必要がある、というのが課題でした。

課題の解決方法

「月遅れ課金」の仕組みを導入することで、上記の課題に対処することができます。 「月遅れ課金」は、課金計算を翌月に調整する仕組みです。例えば、2020年4月の利用実績が、「2020年4月についての課金計算」の実施時点で反映されてないとすると、「2020年5月についての課金計算」の中で調整します。「2020年5月についての課金計算」の実施時点では、2020年4月についての利用データは、完全に更新されているため、このような調整が可能です。

処理の流れを書いてみます。 以下では、Mは「ある年のある月」を表し、Mの前月をM-1で表します。 課金計算の内部では、「利用データの締め時刻」というパラメータがある計算処理を用意します。Mの課金計算の締め時刻をt_Mと表し、その前の月についてはt_{M-1}と表すことにします。

上記の記号を使って、Mについての課金計算は次のような処理になります。

  1. Mの課金をt_M時点で計算・・・Aとする
  2. M-1の課金をt_{M-1}時点で計算・・・Bとする
  3. M-1の課金をt_{M}時点で計算・・・Cとする
  4. Aは当月分として課金、BとCに差分がある場合は月遅れ分として課金

この処理によって、「月遅れ課金」ができるようになります。

「月遅れ課金」の未来

「月遅れ課金」により、後続処理の締め日にも間に合わせつつ、正確な課金計算を自動ですることができるようになりました。しかし、計算ロジックが複雑になってしまいました。 今回は、他の処理への影響を最小限にするというような方針で仕様を決定したため、「月遅れ課金」ができてしまったといえます。 アイデアとしては、次のようなことをすれば、月遅れ課金をなくすことができるかもしれません。

  • 月末には特定の手続きはできないというルールを設ける。
  • 利用の締め日を変える。現在毎月の1日~31日を利用の締めとしている。これを21日~20日等とすることで、後続処理までの余裕を作ることができる。この方法だとカレンダー上の月を使わなくなってしまうので、わかりにくくなるというデメリットがある。
  • 後続処理を遅らせる。後続処理と調整を行うことで、利用の締め日を1~31日としながら、月遅れ請求がなくせるかもしれない。

また、月遅れ課金が実際にどれくらい発生しているか等の観点でモニタリングしていくことにも意味があると考えています。

まとめ

月遅れ課金について紹介しました。 AsahiNet 光電話のような、新しいサービスの実装には、様々なロジックが必要となりました。単に開発者がプログラムを書けばよいということではなく、社内の部署間、時には社外と協力しながら、仕様を検討し、プログラムに落とし込んだりする必要がありました。

サービス開始後も、ユーザーの皆様と、社内の各部署が関わりながら継続的にサービスが育っていくとしたら嬉しいです。

採用情報

朝日ネットでは新卒採用・キャリア採用を行っております。

新卒採用 キャリア採用|株式会社朝日ネット