何年でしたっけ?

最近よく耳にするのが、CSVへ変換された銀行明細の年が間違えているという苦情です。最初この苦情を耳にした時、「何のことを言っているのか?取引データを探して、CSVファイルへ書き込むだけの事だ。なぜ年に間違えが発生するのか?」と思いました。まず私のHSBC銀行明細の一つを見ながらステップを辿っていきましょう。

変換後はこの様になります

ダウンロードし、開くとテキストエディターに下記の様なサブライムテキストが出てきます。

Date,Transaction Details,Deposit,Withdrawal,Balance
20 Feb,B/F BALANCE,,,"XXX"
27 Feb,CREDIT INTEREST,3.84,,"XXX"

これをエクセルで開くとこの様になります。

画像の上部の日付に注目ください。年の設定は2022年になっていますが、CSVには年が含まれていません。エクセルは意地悪なので、今年の年が入力されてしまうのです。

私達の問題では無いのか?

私のお客様たちに言えるのは「エクセルが自動的に年を入力してしまいます。こちらが作成したCSVの情報は合っているのですが、問題はエクセルにある」という事です。銀行明細の適切な年を掲載する方法が必ずあるはずなのです。私のHSBC銀行の明細の上部を見てみましょう。

ミステリアスなラベル無しの日付「20 March 2021」が出ています。良く分かりませんが、この日は「明細書の日付」または「明細書作成日」の日付だとしましょう。今持っているデータを元に適切な年を追加する方法があるか試してみましょう。

例 #1 – 3月

Input

Statement Date: 20 March 2021

Dates: 20 Feb, 27 Feb, 2 Mar, 4 Mar, 9 Mar, 12 Mar, 16 Mar

Output

20 Feb 2021

27 Feb 2021

2 Mar 2021

4 Mar 2021

9 Mar 2021

12 Mar 2021

16 Mar 2021

これは簡単にできると思います。明細の日付を引っ張ってきて追加してみましょう。

Example #2 – 1月

Input

Statement Date: 20 January 2021

Dates: 22 Dec, 24 Dec, 25 Dec, 31 Dec, 2 Jan, 14 Jan

Output

22 Dec 2020

24 Dec 2020

25 Dec 2020

31 Dec 2020

2 Jan 2021

14 Jan 2021

先ほど行った例の戦略では上手くいきません。まず、クロスオーバーポイントを探知する事が頭に浮かびます。クロスオーバー前に明細の全ての年をマイナス1に設定して下さい。クロスオーバーポイントを探知するのは少し面倒です。全ての日付にダミーイヤーを入力し、前年「以下」の最初の年を探知します。

例を辿ってみましょう。まず全ての年にダミーイヤーを入力してください:

22 Dec 1999

24 Dec 1999

25 Dec 1999

31 Dec 1999

2 Jan 1999

14 Jan 1999

その後、前年「以下」の最初の年を見つけます。この場合、“2 Jan 1999"になります。クロスオーバーポイントを含む年とその年以降の全ての明細日付の設定を行います:

22 Dec 1999

24 Dec 1999

25 Dec 1999

31 Dec 1999

2 Jan 2021

14 Jan 2021

その後、クロスオーバーポイント前の全ての明細年の設定を行います。

22 Dec 2020

24 Dec 2020

25 Dec 2020

31 Dec 2020

2 Jan 2021

14 Jan 2021

若干複雑ですが、うまくいきます!ただ、負け犬感はありますね。コードが負け犬っぽさがある時は大体それが真実です。

例 #3 – 1月取引情報無しの1月の明細

Input

Statement Date: 20 January 2021

Dates: 22 Dec, 24 Dec, 25 Dec, 31 Dec

Output

22 Dec 2020
24 Dec 2020
25 Dec 2020
31 Dec 2020

このデータにはクロスオーバーポイントはありません。架空コードを使用するとおそらく全ての年情報が2021に設定されてしまうと思います。そうなって欲しくありません。このデータセットに関しては結構苦戦しました。その後、私の良き友達ジェイソン・トライッシュへ連絡をしました。彼は直ぐに下記の様なアルゴリズムを思いついたのです。

“明細は3カ月前までしか戻れない。過去3カ月分のマッピングを作成する。1月の場合2021年、12月から11月を2020年とする。そうすると、マッピングからの適切な年情報が展開される。」

これは結構うまくいきます。この方法は日付順序、遅い順、早い順、ランダムな日付順を気にしない。

PDF結合はどうか?

いくつかのPDFを統合し、銀行明細コンバーターへアップロードしたい人もいると思います。この場合通常はうまくいきます。ただ、1年繰り上げするテクニックだと問題が発生してしまいます。ユーザーが3年間分の明細を一つのPDFへ統合したい場合はどうなるか?いくつかの明細の日付を確認し、書類の日付けに一番近い日付を使う必要があります。

複数年に渡る明細の場合どうなるか?

えーっと、この場合はパスです。存在するとは思うのですが、通常ではないと思います。この件は必要時にまた対応していきます。

一般的解決策は存在するのか?

可能だとは思いますが、現状無いと思います。私が記載した策略を使いながら明細PDFの日付を一般的に見つける事は出来るかもしれません。その場合、取引日付も一般的な方法で追加する必要があります。ジェイソン・トライッシュが一般的な解決策を考えてくれるかもしれませんが、それまではもぐら叩きの様にお客様の苦情を解決策の対応を継続していくしかありません。

Join The Mailing List