OLTA TECH BLOG

テクノロジーと好奇心で事業を成長させる

TECH BLOG

金融機関データサジェスト機能と全銀フォーマット出力システム

こんにちは、OLTA(オルタ)でINVOY(インボイ)という請求書発行ツールの開発を担当している宗里(むねさと)です。

最近、INVOYに「INVOYカード払い」というBtoB向け後払いサービスが搭載されました。

この新サービスの実装に併せて金融機関データのサジェスト機能を開発した際のあれこれについて記載していこうと思います。 同じく金融機関データの利用を考えている方、その他のデータについてもサジェストについて考えている方の参考になれば幸いです。

金融機関のサジェスト機能実装

「INVOYカード払い」は簡単に言うと、INVOY上で作成いただいた振込データをクレジットカード決済し、振込依頼ができると言うサービスです。 クレジットカードにて決済した振込データを代替して振込むため、振込先の金融機関情報は正確でなければならず、打ち込みではなくユーザに選択してもらうことが好ましいです。 そのため、ユーザの入力に対して金融機関名・支店名をサジェストして選択してもらうサジェスト機能を実装しました。

作ったもの

サジェストに関しては以下のように部分一致を利用しています。

Bank.objects.filter(name__contains='xxxx')

金融機関データの取得

zengin_dataからデータを取得しました。 実際に運用してみて気付いたのですが、金融機関データは月に1~2回ほどデータ更新があるので、 更新用のスクリプトを組んでおくと良いと思います。 OLTAでも更新用のDjangoのカスタムコマンドでデータ更新できるようにしています。 (全銀データ更新のカスタムコマンドについては省略)

セレクトボックスでの検索

vue-selectを使いました。 支店名の検索では支店コードを用いて検索されることも想定して、optionに支店コードも表示するようにしました。 また、金融機関名でローマ字が使われている場合、全銀データ上のローマ字も大文字になってしまっているので、弊社では半角ローマ字でも検索できるようにしています。

例: OLTA銀行 を検索したい場合

全銀データ上では OLTA のように全角ローマ字で保存されている場合があります。 しかもデータ上のローマ字データは oruta になっていたりするのでローマ字データを代わりに利用することも困難です。

このようなケースに対応できるように、入力されたローマ字はAPIで全て全角に変換して検索するようにして、半角ローマ字でも検索できるようにしました。

また、全銀データにはひらがな、カタカナデータも含まれるのでそれらで検索することもできるようにしています。

入力「おるた」 -> OLTA銀行のデータがサジェストされる

この時の注意点としては、vue-selectのデフォルトでは各オプションをループして this.filterByの結果を返すようになっているので、読み仮名のようなオプションに表示されない値で検索させたい場合は

<v-select :filterable="false">

のようにprops指定すると良いと思います。

全銀フォーマット出力

「INVOYカード払い」には、振込データを全銀フォーマットのテキストファイルで出力することによって振込実行していただくケースを考慮して全銀フォーマットでの出力機能を実装しています。

全銀フォーマットとは

引用: 全銀フォーマットとは?言葉の意味から作成方法まで徹底解説

「全銀フォーマット」とは「全銀協規定フォーマット」の略称です。全国銀行協会連合会が定めたデータ様式(ファイルフォーマット)で、「銀行に送るためのデーターはこの形式で作る」という、全国で統一されたルールです。

口座振替サービスを利用するためには、このフォーマットに則して請求データ(次の振替日に引き落としたい金額情報)を作成する必要があります。

とのことです。 振込データを全銀フォーマットで出力するうえで、OLTAでは半角120byteの固定長のテキストファイルで出力するようにしました。 また、固定長のテキストファイルでは各項目ごとに文字列長が決まっていて、余白は半角スペースもしくは0でパディングする必要があります。 半角に変換する前にパディングを実行してしまうと、固定長に齟齬が生じてしまうのでお気をつけください。

>>> len('インボイ')
4
>>> len('インボイ')
5

このように半角にすると濁点・半濁点も1文字としてカウントされてしまいます。

所感

「INVOYカード払い」サービスを実装するうえでの金融機関サジェスト機能・全銀フォーマットでの出力機能を実装しましたが、 実装までの期間だけでも

  • 金融機関データのデータ更新は月1~2回あるので仕組み化しておく必要がある
  • 金融機関データは全角で保存されているのでローマ字での検索は気を付ける必要がある
  • 固定長全銀フォーマットで出力する際は、半角変換時に文字列長が変わる場合があるので気を付ける必要がある

というようにいくつも注意点がありました。 これから運用していくなかで他にもさまざまな注意点が発見されるかもしれません。それらも今後共有していければと思っています。

最後に

OLTAではTech Visionの元、一緒にユーザーに価値を提供し、その結果事業を成長させるサービス作り続けるための仲間を募集しています。 もしこの投稿にご興味を持っていただけたら、ぜひカジュアルにお話しさせてください!