HSBCのもぐら叩きの発展
Posted on by Angus Cheng
先週、お客様から数百枚の書類処理を手伝って欲しいと聞かれました。2018年から始まるいくつかの銀行口座のPDFを持っていました。価格順に整え、彼の書類の処理を始めました。
私のアイディアとしては銀行明細コンバーター(BSC)のPDFをCSVプロセッサーへ変換して処理をしようと思ったのです。ただ、いくつか問題に直面しました。BSCは一般的なアルゴリズムを使い、PDFの取引記録から探知していきます。これは通常うまくいき、ほとんどの銀行はうまく使えます。ただ、大量の明細の場合一般的なアルゴリズムは通用しません。この解決策として、書類の種類を探知し、その後カスタムコードを通す必要があります。
ほとんどのお客様から届く報告は何らかの解析エラーとなってしまうとの事でした。なので、私は彼らにどの書類が原因で解析エラーとなってしまうのかを聞きました。この工程を私は「もぐら叩き」の発展と呼んでいます。このブログ投稿では、私のHSBCの銀行明細の為の素晴らしいカスタムプロセッサーの作成工程を皆さんと一緒に楽しみながら確認していこうと思います。
今はどの様になっているのか?
現状は結構ひどい状態です!内容も不均等な状態です。理由は分かりませんが日付の数字が無い状態です。日付の年の部分がありません。結果も2つのテーブルに分かれてしまいます。為替値もありません。これらの各問題に関して解決策を確認していきましょう。
内容が不均等
この件に関してはまだ対応が簡単です。内容を統合する場合、いくつかのラインを跨ぎ、新しいラインのキャラクターを作成します。ただ、そうではなく、スペースキャラクターを追加する法が良いと思うのです。そうすればCSVのラインが不均等になる事はありません。これをHSBCだけではなく、全ての書類に適応させます
なぜか日付の数値が無い
これはHSBCの銀行明細の特色です。同日に一回以上の取引がある場合、最初に取引した日付しかプリントされません。ちょっと不便ですね。これでは明細も簡単に見る事が出来ません。この私PDFキングとしての生活までも難しくさせます。ただ、解決するのはそんなに難しい事ではなく、日付情報がなければ加工の記録から日付情報をコピーする事ができます。
結果が2つのテーブルに分割されてしまう
HKD普通預金口座と私の米ドル、オーストラリアドルの外貨口座が分割されてしまいます。外貨口座には「CCY」のコラムが追加であります。この場合は頭の良い一般のアルゴリズムは同じヘッダーを同じテーブルに統合してしまうのです。もしも、ヘッダーが違う場合、テーブルも別々で出てきます。この問題はHKD普通預金口座に「CCY」のコラムを追加する事で解決する事が出来た。
###為替値が無い
日付の数値が無かった時と同じ解決法で対応する事が出来る
年の数値が無い
以前ブログへ投稿したアドバンステクニックで明細日を確かめる事ができる。コードを作ってみましょう。
内容が不均等
RowMerger.ktを変更する事により、セパレーターストリングが許可をします。その後、スペースキャラクターを入れます。結構シンプルですね。
日付と為替値が無い
以前の書類でもこの問題に対応してきました。この二つの解決法は下記から閲覧できます。
結果が2つのテーブルに分割してしまう
この問題の解決法には私はあまり満足していません。基本的に私が行った事は「CCY」コラムが無いテーブルヘッダーにテーブルヘッダーを追加しただけだからです。これを行うと書類全てのテーブルヘッダーが同じになります。これは確実にハックです。gridTransform方法を使った方が良いかもしれません。
日付に年が含まれていない
2つのステップにより解決する事が出来ました。最初に明細日を捕獲する為にコードを書きました。
その後、enrichDatesを使用し、全ての日付数値の日付コラムを変換しました。以前のブログ投稿で日付濃縮コードの話しを少ししました。 previous blog post.
結論
見た目も大分向上しました。ただ、まだ完璧とは言えません。いくつかのCCYコラムの数値がまだ白欄になっています。これらをHKDに設定した方が良いかもしれません。それと、残高のコラムもギャップが出来ています。この理由はHSBCの明細は日々の残高は一回しか記載されないからです。この数値を計算する事は可能です。ただ、これを行うのは色々面倒そうです。