Desarrollo de HSBC Mole Whacking

La semana pasada, un cliente me pidió que lo ayudara a procesar algunos cientos de sus documentos. Tenía archivos PDF de varias cuentas bancarias desde 2018. Eché un vistazo a los documentos, negocié un precio y luego me puse a trabajar procesando sus documentos. Mi idea era ejecutarlo a través del procesador de PDF a CSV de Bank Statement Converter (BSC). Sin embargo, se produjeron algunos errores. BSC tiene un algoritmo genérico para detectar registros de transacciones en un archivo PDF. Esto suele funcionar bastante bien, para muchos bancos funciona perfectamente. Sin embargo, el algoritmo genérico no funciona para muchas declaraciones. Para evitar esto, detecto el tipo de documento y luego ejecuto un código personalizado para ese documento.

A menudo, un cliente informará algún tipo de error de análisis. Les pediré el documento que causa el problema de análisis. Luego crearé un analizador personalizado para ese tipo de documento. Creo que este tipo de proceso se llama desarrollo “Whack-A-Mole”. Para esta publicación en el blog, pensé que sería divertido guiarlos a través del proceso de desarrollo para crear un hermoso procesador personalizado para mis extractos bancarios de HSBC.

¿Cómo es ahora?

¡Se ve una porquería! Las alturas de descripción son desiguales. Por alguna razón, falta un valor de fecha. Las fechas no tienen el año en ellas. Los resultados se dividen en dos tablas. Falta un valor de moneda. Analicemos cada uno de los problemas y propongamos algún tipo de solución.

Las alturas de la descripción son desiguales

Este es bastante fácil de tratar. Cuando combino descripciones que ocupan varias líneas, agrego un nuevo carácter de línea. En cambio, creo que sería mejor agregar un carácter de espacio. Nadie alinea alturas de línea desiguales en su CSV. Estoy considerando hacer esto para todos los documentos, no solo para este de HSBC.

Por alguna razón falta un valor de fecha

Esta es una característica de los extractos bancarios de HSBC. Si ocurre más de una transacción en un día, solo imprimen la fecha la primera vez. Es un poco molesto ¿no? No hace que la declaración sea más fácil de leer en absoluto. También hace que mi vida como Rey PDF sea más difícil. Sin embargo, no es demasiado difícil de resolver, puedo copiar la fecha del registro anterior si está en blanco.

Los resultados se dividen en dos tablas

Esto sucede porque el estado de cuenta incluye mis cuentas de ahorro en HKD, así como mis cuentas en moneda extranjera en USD y AUD. Las cuentas en moneda extranjera tienen una columna adicional “CCY”. El algoritmo genérico es lo suficientemente inteligente como para fusionar tablas con los mismos encabezados. Si los encabezados son diferentes, genera las tablas una al lado de la otra.

Podemos resolver este problema agregando una columna “CCY” a mis registros de ahorros en HKD.

Falta un valor de moneda

Podemos usar la misma solución para el valor de la fecha faltante.

Los valores de fecha no tienen un año

Podemos usar la técnica avanzada que desarrollamos en una publicación de blog anterior para determinar el año a partir de la fecha del estado de cuenta. Vamos a programarlo.

Las alturas de la descripción son desiguales

Cambié RowMerger.kt para que acepte una cadena de separación. Luego pasé en un carácter de espacio. Bastante simple.

Faltan valores de fecha y moneda

Ya he tratado este problema en documentos anteriores. Estas dos llamadas a funciones resolvieron el problema.

Los resultados se dividen en dos tablas

No estoy muy contento con la forma en que resolví este problema. Básicamente, transformo cualquier TableHeaders que no tenga una columna “CCY” en ellos. Esto hace que los TableHeaders sean iguales en todo el documento, lo que significa que se pueden unir muy bien. Es un ¨hack¨ de seguro. Sería mejor tener un método gridTransform

Los valores de fecha no tienen un año

Resolví esto en dos pasos. Primero escribí algo de código para capturar la fecha del estado de cuenta.

Luego transformo la columna de fecha llamando a enrichDates en cada valor de fecha. Hablé un poco sobre el código de enriquecimiento de fecha en una publicación de blog anterior.

Conclusión

Se ve mucho mejor. Sin embargo, se podría decir que todavía no es perfecto. La columna CCY tiene algunos valores en blanco. Sería bueno ponerlos en HKD. Además, hay huecos en la columna de saldo. Esto se debe a que los estados de cuenta de HSBC solo muestran el saldo una vez al día. Es posible calcular este valor. Sin embargo, creo que eso sería buscar problemas.

Join The Mailing List