Automatiser les notes de frais avec Python
Utilisation de Python et de l’API mindee pour automatiser les notes de frais
Auparavant, les employés devaient remplir leurs notes de frais à la main, ou du moins les rédiger sur une feuille de calcul. Puis les ordinateurs sont arrivés, avec des feuilles de calcul intégrées qui ont facilité la génération et le suivi des rapports. Mais que diriez-vous si vous pouviez automatiser l’ensemble du processus de saisie de données lui-même pour faciliter la génération de notes de frais à partir d’images de reçus ?
Dans cet article, je vais vous montrer les étapes pour automatiser les notes de frais à l’aide de Python.
Pas
Les étapes pour automatiser les notes de frais seront :
- Créer un compte sur la plateforme mindee
- Configurer une clé API
- Installez le package « mindee »
- Dépendances d’importation
- Fonctions d’aide à l’écriture
- Charger, analyser et extraire les données des reçus de dépenses
- Exporter les résultats vers une table
- Enregistrer le tableau dans un
.csv
fichier
Commençons!
1. Créer un compte sur la plateforme mindee
Pour cette automatisation afin d’éviter d’avoir à écrire du code personnalisé pour détecter le texte dans les images des reçus, nous utiliserons un package Python appelémindee
, qui est livré avec une API qui vous permet de faire tout cela avec seulement quelques lignes de code.
Bien qu’une version professionnelle de ce forfait soit payante, ils proposent gratuitement 250 pages par mois , ce qui pour les particuliers devrait être largement suffisant pour automatiser leurs notes de frais personnelles.
Pour créer le compte, procédez comme suit :
- Rendez-vous sur le
mindee
site de la plateforme - S’inscrire
2. Configurer une clé API
Pour définir votre clé API, procédez comme suit :
- Cliquez sur « Créer une nouvelle API »
- Sélectionnez l’API « Reçu de dépenses »
- Copiez votre clé API et enregistrez-la.
3. Installez le paquet ‘mindee’
Pour installer le mindee
package, exécutez :
pip installer mindee
4. Dépendances d’importation
Pour ce projet, nous utiliserons les packages suivants :
mindee
pandas
random
glob
matplotlib
seaborn
Si vous ne les avez pas dans votre environnement local, installez-les avec pip install <package>
.
Nous pouvons maintenant importer nos dépendances :
à partir du client d'importation de mindee, les documents
importent des pandas d'importation aléatoires
en tant que pd
import glob
# Vérification de l'intégrité à l'aide de pandas et matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
5. Fonctions d’aide à l’écriture
Pour cette automatisation, nous aurons besoin de 3 fonctions d’assistance : une pour extraire les données de dépenses après avoir obtenu la réponse de l’ mindee
API, une autre pour convertir l’heure en type de repas (dans cet exemple, mon rapport de dépenses implique d’indiquer explicitement le type de repas comme le déjeuner ou le dîner. pour les dépenses alimentaires). Enfin, une troisième fonction pour créer le tableau final avec toutes nos données.
Le code sera :
# Sortie des tests écrits ci-dessus['13:51', '11:49', '22:13', '19:57', '10:32', '20:47', '20:40', '14:27', ' 14:41', '15:06'] 13:51 Déjeuner 11:49 Déjeuner 22:13 Dîner 19:57 Dîner 10:32 Déjeuner 20:47 Dîner 20:40 Dîner 14:27 Déjeuner 14:41 Déjeuner 15:06 Déjeuner

6. Charger, analyser et extraire les données des reçus de dépenses
Maintenant, il ne nous reste plus qu’à :
- Instancier notre client mindee en utilisant la clé API que nous avons obtenue
# Instancier un nouveau client
mindee_client = Client(api_key="Votre clé API")
2. Initialiser des listes vides qui contiendront les données extraites
liste_date = []
liste_montant = [ ] liste_catégorie = [] liste_heure = [
]
liste_type_de_repas = []
liste_noms_de_fichier =
[]
3. Chargez l’image d’un reçu de dépenses et alimentez-la dans l’API mindee
image = "./expense_images/1669895159779.jpg" input_doc = mindee_client.doc_from_path(image) api_response = input_doc.parse(documents.TypeReceiptV4) dépense_data = api_response.document dépense_données<mindee.documents.receipt.receipt_v4.ReceiptV4 à 0x7f9685b278b0>
La sortie sera un objet mindee adapté aux reçus de dépenses (il y a probablement quelques options, alors n’hésitez pas à les étudier dans la documentation officielle de la plateforme mindee).
4. Extrayez les informations sur les dépenses de la réponse de l’API
date, montant, nom de fichier, catégorie, heure = extract_expenses_data(expense_data)
5. Convertir les informations sur l’heure de la journée en informations pertinentes sur le type de repas
Cet exemple est très spécifique à mon cas particulier, vous pouvez donc modifier cette fonction en fonction des types de dépenses que vous avez. Mais ici, ce que je fais, c’est transformer une chaîne comme 13:30
déjeuner et une chaîne comme 20:30
dîner.
sinon heure :
type_de_repas = "Inconnu"
sinon :
type_de_repas = convertir_heure_en_type_de_repas(heure)
6. Ajouter les informations extraites à leurs listes correspondantes
Dans ce cas, je ne fais cela que pour un seul reçu, mais lorsque vous le faites pour plusieurs reçus, l’approche par liste aura plus de sens.
date_list.append(date)
# Je remplace le . pour , ici parce que le rapport final va sur
# une feuille google qui prend `,` au lieu de `.` pour les nombres flottants.
amount_list.append(str(amount).replace(".", ","))
category_list.append(category)
time_list.append(time)
meal_type_list.append(meal_type)
filenames_list.append(filename)
7. Exporter les résultats vers une table
Maintenant que nous avons les données organisées, nous pouvons créer un tableau avec les données structurées.
# Le format du tableau sera | données | montant | nom de fichier | catégorie |
df = create_table(date_list,amount_list,meal_type_list, time_list,category_list,
filenames_list)
# affiche le tableau pour vérifier
df

8. Enregistrer le tableau dans un .csv
fichier
Maintenant, pour finir, nous sauvegardons ce tableau avec toutes les informations que nous voulions des reçus de dépenses.
df.to_csv("expense_table.csv", header=False)
Rassembler tout
Maintenant que nous connaissons chaque étape en détail, le code source complet pour l’exécuter sur plusieurs reçus de dépenses :

Voilà! Vous avez automatisé la tâche ennuyeuse de déclarer vos dépenses à partir d’images de reçus ! Comme vérification finale, il est toujours bon de jeter un coup d’œil aux résultats finaux pour s’assurer que les informations que vous obtenez sont cohérentes avec les données réelles des reçus de dépenses.
Pour cela, nous pouvons visualiser les reçus, côte à côte avec les données textuelles obtenues à partir de l’extraction pour chaque reçu de dépenses en utilisant matplotlib
.
...
...
...
Je ne montre que quelques images avec des
informations restreintes pour des raisons de confidentialité, mais l'idée générale est ici.
Ok, les résultats semblent cohérents ! Et voilà, une automatisation soignée pour vous faire gagner du temps chaque mois !
Réflexions finales sur l’automatisation de tout
Si vous êtes un gestionnaire, un développeur, un comptable ou à peu près quiconque travaille avec la saisie de données, cette approche peut être très utile. En substance, cela montre clairement que l’automatisation sur le lieu de travail est possible avec seulement quelques lignes de code Python.
Pourquoi ne pas utiliser un programme simple pour automatiser le traitement de vos notes de frais ? L’automatisation de tâches répétitives comme celles-ci peut vous faire gagner beaucoup de temps et ouvre la porte à la rationalisation de votre flux de travail.
Si vous préférez la vidéo, consultez ma vidéo Youtube sur ce sujet ici :