打地鼠型开发——汇丰银行

上周,有一位客户请我帮他处理几百份文件。他有几个银行账户的PDF文件,最早可追溯到2018年。我看了一个文件,给出了一个报价,然后开始处理他的文件。我的想法是把文件塞给银行对账单转换器(BSC)的PDF转CSV处理器。然而,有一些错误出现了。BSC有一个通用算法来检测PDF文件中的交易记录。这通常能完成任务,对许多银行来说,它工作得很完美。不过,仍有很多对账单无法适用通用算法。为了解决这个问题,我会检测文档类型,然后为该文档运行自定义代码。

客户通常会报告某种解析错误。我向他们寻要导致解析问题的文档。然后我将为该文档类型创建一个自定义解析器。我认为这种过程被称为“打地鼠”开发方式。在这篇博客文章,我为汇丰银行对账单创建了一个漂亮的自定义处理器,我觉得带您走一遍我的开发流程可能会很有趣。

目前是什么样子?

看起来很烂!备注的高度参差不齐。由于某种原因,一个日期值不见了。日期上还没有年份。结果被拆分为两个表。缺少货币值。让我们仔细研究一下每一个问题,然后想出一些解决办法。

备注的高度参差不齐

这个挺好对付的。当我合并跨多行的备注时,我会添加一个新的行字符。然而,我认为添加空格字符会更好。没有人想在他们的CSV中出现高低不平的行高度。我正在考虑对所有文件都这么做,而不仅仅是汇丰的这份。

由于某种原因,一个日期值不见了

这是汇丰银行对账单的一个特点。如果一天发生了多次转账,他们只打印第一次的日期。这确实有点烦人。也并没有使结账单更便于阅读。这也让我——PDF小王子的生活变得更加艰难。这也不是太难解决,如果日期是空白的,我可以从以前的记录复制过来。

结果被拆分为两个表

这是因为结单中包括我的港元储蓄户口,以及我的美元及澳元外币户口。外币帐户有一个额外的“CCY”栏。通用算法足够聪明,它可以将具有相同表头的表合并在一起。如果表头不同,则并排输出表。

我们可以通过在我的港元储蓄记录中添加“CCY”一栏来解决这个问题。

缺少货币值

解决方案同缺少的日期值问题。

日期值没有年份

我们可以使用我在之前的博客文章中开发的新技术来确定报表日期的年份。我们开始编写代码吧。

备注的高度参差不齐

我更改了rowmerger.kt,让它接受被分隔的字符串。我再传入了一个空格字符。挺简单的。

缺少日期和货币值

我在之前的文档中已经处理过这个问题。通过调用这两个函数,我们解决了这个问题

结果被拆分为两个表。

我对我的解决方案不是很满意。我基本上转换任何没有“CCY”列的TableHeaders。这使得的TableHeaders在整个文档中是相同的,这意味着它们可以很好地拼接在一起。这肯定是一个奇淫技巧。如果使用gridTransform方法,效果可能会更好

日期值没有年份

解决这个问题需要两个步骤。首先,我编写了一些代码来捕获语句日期。

然后,我通过调用EnrickDates来转换所有在日期列中的日期值。我在之前的博客文章中有讨论过一点日期代码.

总结

看起来好多了。然而,你仍可以说它不完美。CCY列中有一些空白值。如果能将这些设置为港币那会更好。还有,在余额列中也有会出现空当。这是因为汇丰的报表每天只显示一次余额。我们可以通过计算得出这个值。不过,我认为这是自找麻烦。

Join The Mailing List