Projet personnel

Application Comptable
d'automatisation financière

Les PME perdent du temps à trier manuellement leurs transactions, j'ai conçu une solution pour automatiser le processus et développé une application comptable d'import et catégorisation automatique des flux bancaires.

Python 3 FastAPI SQLAlchemy ORM Pydantic JavaScript ES6+ Chart.js SQLite REST API Swagger UI
30+
Endpoints API
6
Modèles de données
7
Services métier
5
Pages frontend

La démarche

De l'identification du besoin à la livraison d'une solution fonctionnelle

Problème identifié

Le tri manuel des transactions est chronophage et source d'erreurs

Les PME (commerces, restaurants, e-commerces) gèrent plusieurs sources de revenus : TPE, SumUp, Stripe, PayPal, caisse, espèces. Chaque source exporte dans un format différent (CSV, XLSX). Le comptable doit manuellement importer, normaliser et catégoriser des centaines de lignes chaque mois. Résultat : perte de temps, doublons non détectés, erreurs de saisie.

Formats hétérogènes Doublons inter-sources Catégorisation manuelle Aucune vision consolidée
Réflexion technique

Concevoir un pipeline d'import intelligent avec moteur de règles

L'idée : un pipeline en 4 étapes (parsing, analyse structurelle, transformation, import) capable de traiter n'importe quel format bancaire. Un moteur de règles configurable (contains, regex, exact, starts/ends_with) catégorise automatiquement par priorité. Un système de hash SHA-256 sur date+montant+libellé détecte les doublons. Un module d'apprentissage analyse les transactions catégorisées pour suggérer de nouvelles règles.

Pipeline multi-format Moteur de règles par priorité Hash de déduplication Apprentissage de patterns
Solution développée

Une application web full-stack complète et autonome

API REST en FastAPI (30+ endpoints) avec modèles SQLAlchemy, validation Pydantic et documentation Swagger auto-générée. Frontend vanilla JS avec 5 pages : dashboard avec KPIs temps réel et graphiques Chart.js, gestion des transactions avec pagination et filtres avancés, import drag-and-drop avec prévisualisation, gestion des catégories hiérarchiques, et configuration du moteur de règles.

API REST documentée Dashboard interactif Import avec preview Catégories hiérarchiques Rollback d'imports Sync CMS externe

Architecture technique

Séparation claire Frontend / Backend / Base de données avec API REST

Frontend

Interface utilisateur

  • HTML5 / CSS3 avec variables custom
  • JavaScript ES6+ vanilla (pas de framework)
  • Chart.js pour les graphiques
  • Drag & drop natif pour l'import
  • 5 pages : Dashboard, Transactions, Import, Catégories, Règles
  • Communication REST via fetch API
  • Design dark theme responsive
Backend

API & Services métier

  • FastAPI avec documentation Swagger
  • 7 services : Dashboard, Transaction, Category, Rule, Import, Duplicate, CategoryLearner
  • Pipeline d'import : Parser, StructureAnalyzer, DataTransformer, FormatLearner
  • Validation Pydantic avec schemas typés
  • Middleware CORS
  • Logging structuré
Base de données

Modèles & Persistance

  • SQLAlchemy ORM avec migrations
  • 6 modèles : Company, Transaction, Category, Rule, ImportLog, DataSource
  • Relations : hiérarchie catégories, auto-référence doublons
  • Index sur date, type, hash
  • Timestamps automatiques (created/updated)
  • Soft delete (archivage)

Pipeline d'import intelligent

4 étapes automatisées pour normaliser n'importe quel relevé bancaire ou export PSP

1
FileParser

Détection auto de l'encodage (UTF-8, Latin-1, CP1252) et du délimiteur (; , tab |). Support CSV et Excel.

2
StructureAnalyzer

Identification des colonnes (date, libellé, montant, débit/crédit) par regex + mots-clés. Détection format plat vs pivot.

3
DataTransformer

Unpivot des tableaux croisés, filtrage des lignes totaux, normalisation des libellés et dates.

4
Import & Dédup

Création des transactions avec hash SHA-256 (date+montant+libellé). Détection des doublons inter-sources ±3 jours.

Sources de données supportées

S
SumUp
S
Stripe
P
PayPal
C
Caisse
E
Espèces
B
Banque
M
Manuel

Moteur de règles

5 types de matching avec filtres montant et type, appliqués par ordre de priorité

Règles configurées
contains "LOYER"
regex CARTE\s+\d{4}\s+RESTO.*
starts "VIR SEPA"
exact "ABONNEMENT INTERNET"
contains "SUMUP" • montant < 500€
Catégories assignées
Loyer & charges
Restauration
Virements entrants
Télécommunications
Ventes TPE

Aperçu de l'application

Interface dark theme avec navigation latérale, KPIs temps réel et graphiques interactifs

Application Comptable — Dashboard
Dashboard
Transactions
Import
Catégories
Règles

Dashboard

Vue d'ensemble de vos finances

Revenus
+24 350 €
Dépenses
-18 720 €
Solde net
+5 630 €
Catégorisées
94%
Evolution mensuelle
Jan
Fév
Mar
Avr
Mai
Juin
Répartition des dépenses
Loyer 35%
Fournitures 25%
Télécom 20%
Autres 20%
Dernières transactions
Date Libellé Catégorie Source Montant
15/04/2026 VIR SEPA CLIENT DUPONT Ventes Banque +1 250,00 €
14/04/2026 CARTE 4821 METRO GROS Fournitures Banque -387,50 €
14/04/2026 SUMUP *8294 VENTE Ventes TPE SumUp +89,90 €
13/04/2026 LOYER AVRIL LOCAL COMMERCIAL Loyer Banque -1 800,00 €

Fonctionnalités clés

Chaque fonctionnalité a été conçue pour répondre à un besoin terrain identifié

Import multi-format intelligent

Pipeline en 4 étapes qui analyse et normalise automatiquement n'importe quel fichier bancaire.

  • CSV, XLSX, XLS avec détection auto encodage et délimiteur
  • Reconnaissance des colonnes par regex + mots-clés
  • Support tableaux plats et tableaux croisés dynamiques
  • Apprentissage des formats pour imports récurrents
  • Prévisualisation avant exécution + rollback possible

Catégorisation automatique par règles

Moteur de règles configurable avec 5 types de matching et application par priorité.

  • Contains, exact, starts_with, ends_with, regex
  • Filtrage par montant min/max et type (revenu/dépense)
  • Priorité configurable (plus basse = appliquée en premier)
  • Compteur d'applications par règle (analytics)
  • Mode test pour valider avant application

Dashboard analytique temps réel

Tableau de bord avec KPIs, graphiques et analyses avancées des flux financiers.

  • KPIs : revenus, dépenses, solde net, taux de catégorisation
  • Evolution mensuelle et quotidienne (Chart.js)
  • Répartition par catégorie (doughnut charts)
  • Détection de patterns récurrents (hebdo/mensuel/trimestriel)
  • Prévision de trésorerie sur 3 mois

Détection de doublons inter-sources

Algorithme qui identifie les transactions en double entre différentes sources de paiement.

  • Hash SHA-256 sur date + montant + libellé
  • Fenêtre glissante ±3 jours pour décalages bancaires
  • Score de confiance basé sur proximité et similarité
  • Résolution : ignorer, supprimer ou conserver

Apprentissage de patterns

Le système apprend des transactions déjà catégorisées pour suggérer de nouvelles règles.

  • Analyse fréquentielle des mots par catégorie
  • Filtrage de stop-words pour patterns pertinents
  • Suggestion de catégorie pour nouveaux libellés
  • Création automatique de règles avec score de confiance

Synchronisation CMS externe

Connecteur Atlas CMS pour importer automatiquement les commandes e-commerce.

  • 2 modes : résumé (1 tx/commande) ou détaillé (1 tx/article)
  • Création auto des catégories produit
  • Filtrage par plage de dates
  • Test de connexion et suivi du statut de sync

API REST - 30+ endpoints

Documentation Swagger auto-générée par FastAPI, validée par schemas Pydantic

Transactions 7
GET/transactions
POST/transactions
PATCH/transactions/{id}/categorize
PATCH/transactions/{id}/archive
POST/transactions/bulk-archive
DEL/transactions/{id}
Import 4
GET/imports
POST/imports/upload
POST/imports/execute
DEL/imports/{id}/rollback
Règles 5
GET/rules
POST/rules
POST/rules/test
POST/rules/apply
DEL/rules/{id}
Dashboard 4
GET/dashboard/kpis
GET/dashboard/breakdown
GET/dashboard/evolution
GET/dashboard/stats
Catégories & Learning 6
GET/categories
POST/categories
GET/categories/tree
GET/categories/patterns
POST/categories/learn
GET/categories/suggest
Doublons & Sources 7
GET/duplicates
POST/duplicates/{id}/resolve
GET/sources
POST/sources
PATCH/sources/{id}
DEL/sources/{id}