La Banque Postale et des PDFs

J'ai l'impression qu'une majorité de banques ne rendent pas facilement disponibles l'historique d'un compte. Dans mon cas, en regardant avec La Banque Postale, l'interface web ne permet d'afficher qu'un nombre très limité d'opérations par page, et limite à une poignée d'années la consultation. Tout le reste passe par les relevés de compte par PDF.

De leur côté, les relevés de compte contiennent tout un tas d'informations, de manière parfaitement non-utilisables de manière automatisée. Dans le cas de La Banque Postale, les fichiers sont nommés de manière très pratique "Relevé_de_compte.pdf", ce qui les rend absolument malpratiques à utiliser et archiver, dans la mesure où ils ont tous le même nom !

La moulinette

Pour faire un peu d'ordre dans tous mes documents de compte venant de La Banque Postale, je veux les renommer avec un nom de fichier pratique et informatif. J'ai donc créé une moulinette automatique pour faire ce job.

Présentation

Avant tout, je cherche un nom de document le plus informatif possible. Je me suis décidé pour un nom de fichier de ce type :

ℹ️
Année-Mois-Jour Type de document - Informations complémentaires (balance).pdf

Par exemple, pour un relevé de comptes, "informations complémentaires" va contenir pour chaque compte le nom du compte et le solde de fin de mois. En pratique, ça peut ressembler à ça :

ℹ️
2017-09-21 Relevé de comptes - CCP (+ 2 970,34 EUR) - Livret A (+ 850,55 EUR) - Compte Épargne Logement (+ 199,69 EUR) - Plan Épargne Logement (+ 6 162,48 EUR).pdf

Oui, c'est un nom à rallonge, mais il a plusieurs avantages :

Implémentation

La moulinette a été crée avec le langage de programmation Rust, qui à l'avantage d'inciter fortement à faire du code plutôt correct. J'étais parti avec une approche de type bricolage scandaleux, mais je me suis retrouvé avec quelque chose découpé en différent module pour chaque type de document détecté, avec gestion des erreurs, et une interface en ligne de commande pour donner un poil de flexibilité.

Néanmoins, rien de tout ça n'aurait été possible aussi facilement sans pdftotext qui permet d'extraire tout le texte d'un fichier PDF. Avec le résultat de cette conversion, il est relativement simple d'avancer : dans les premières lignes, on va déterminer le type de document en cherchant un texte spécifique :

Il existe très probablement d'autres documents qui ne rentrent pas exactement dans ces quatre types prédéfinis, mais je ratisse déjà assez large pour traiter la majorité des documents que j'ai. Selon la quantité des documents non reconnus, il peut être intéressant d'étendre cette moulinette, ou alors de renommer à la main.

Certains documents renseignent pas le solde au moment de la création du relevé, mais l'évolution (positive ou négative) du total. Pour cela, il faut chercher si la valeur finale renseignée dans le tableau PDF se trouve dans la colonne de débit ou de crédit. Pour cela, pdftotext propose une option très intéressante, qui permet de lui demander de conserver autant que possible le positionnement du texte du PDF. Ainsi, il est possible de regarder si le texte en face de la ligne "Total" est plutôt sous le texte "Débit" ou "Crédit".

Utilisation

Dans mon cas, les documents émis par La Banque Postale se retrouvent dans leur service Digiposte, qui à l'avantage de permettre le téléchargement de plusieurs documents d'un coup, contrairement au site de La Banque Postale. Pour cela, il faut consulter la page listant les documents de La Banque Postale (certifiés ou non), descendre la page tout en bas pour charger plus que 50 premiers éléments, jusqu'à avoir tout chargé. Ensuite, il est possible de tout sélectionner d'un coup en utilisant la case à cocher tout en haut de la liste.

Une fois ma moulinette passée sur tous les fichiers (environ 140), seulement 2 son non identifiés et laissés tels quels.

Code source et téléchargement

Le code source est disponible au téléchargement sur Github. Pour le compiler et l'exécuter, il faut utiliser une interface en ligne de commande : cargo run CHEMIN, avec CHEMIN le dossier contenant les fichiers à renommer (ou le fichier individuel).

Si vous n'avez pas cargo, il s'installe en une commande.