OCR de factures → CSV

📋 Dernières factures importées

Chargement...

⚙️ Configuration

📊 Statut des services

Qdrant
Vérification...
MinIO
Vérification...
Serveur web
Démarré et fonctionnel

👥 Gestion des utilisateurs

Créez et gérez les utilisateurs de l'application. Seuls les administrateurs peuvent accéder à la configuration.

Chargement...

🤖 Configuration LLM

🔒 Cette clé est stockée localement dans config.json. En production, utilisez HTTPS pour la transmission.

📝 Prompts personnalisés

Personnalisez les prompts utilisés pour l'extraction de données. Laissez vide pour utiliser les prompts par défaut.

⚠️ Zone de réinitialisation

Attention : Ces actions sont irréversibles. Elles supprimeront toutes les données stockées.

🗄️ Bases de données

💾 Stockage

📊 Statistiques

Chargement...

📅 Agenda des factures

Chargement...

AIOCR

L'intelligence artificielle au service de la gestion de factures

Extrayez automatiquement les données de vos factures, gérez vos échéances et interrogez vos documents en langage naturel. Une solution complète, intelligente et intuitive.

🚀 Fonctionnalités révolutionnaires

🤖

Extraction IA automatique

Analysez vos factures PDF et images avec GPT-4o. Extraction précise de toutes les données : fournisseur, montants, dates, IBAN, banque, et plus encore.

🔍

Recherche sémantique

Trouvez instantanément n'importe quelle facture en posant une question en langage naturel. La recherche vectorielle comprend le contexte et le sens.

📅

Agenda intelligent

Visualisez vos échéances de paiement par jour, mois ou année. Navigation intuitive avec boutons dédiés. Liste complète des factures avec cartes interactives. Conversion automatique en CHF avec taux de change historique.

💬

Chat intelligent

Interrogez vos factures comme un assistant. "Combien ai-je dépensé chez ce fournisseur ?" - Obtenez des réponses précises instantanément.

📊

Statistiques détaillées

Suivez vos coûts API, tokens utilisés, et analysez vos dépenses par période. Tableaux de bord complets et graphiques.

⚙️

100% Personnalisable

Personnalisez les prompts IA, choisissez votre modèle (OpenAI, Infomaniak) directement depuis le header, configurez température et timeout selon vos besoins. Interface de configuration organisée en 5 onglets pour une navigation intuitive.

🗄️

Gestion des données

Réinitialisez séparément les bases de données des factures et des statistiques. Contrôle total sur vos données avec confirmations de sécurité. Statistiques persistantes en base de données.

🔐

Sécurité et accès

Système d'authentification complet avec gestion des utilisateurs. Rôles admin et user. Option "Se souvenir de moi" pour une connexion simplifiée. Protection de toutes les fonctionnalités sensibles.

📋

Suivi en temps réel

Indicateur de progression (x/y) pour le traitement des fichiers. Liste des dernières factures importées avec pagination. Accès rapide aux factures récentes depuis la page d'accueil.

💡 Pourquoi choisir AIOCR ?

Rapidité

Traitement en quelques secondes. Plus besoin de saisie manuelle.

🎯

Précision

IA de pointe (GPT-4o) pour une extraction fiable à 99%.

🔒

Sécurité

Données stockées localement. Conforme RGPD. Vos données vous appartiennent.

💰

Économique

Open source. Pas d'abonnement. Payez uniquement les appels API.

🚀

Facilité

Interface intuitive. Installation en une commande. Prêt à l'emploi.

🌐

Multi-devises

Support de toutes les devises avec conversion automatique en CHF au taux du jour d'importation.

👥

Multi-utilisateurs

Gestion des utilisateurs avec rôles et permissions. Sécurité renforcée pour les données sensibles.

🎯 Cas d'usage

📋 Comptabilité

Automatisez la saisie comptable. Importez des centaines de factures en quelques minutes. Exportez en CSV pour votre logiciel comptable.

  • Extraction automatique de toutes les données
  • Export CSV compatible Excel
  • Gestion des doublons automatique

💼 PME / Freelance

Gérez vos factures fournisseurs efficacement. Suivez vos échéances, analysez vos dépenses, et préparez vos déclarations TVA.

  • Agenda des échéances visuel
  • Recherche rapide par fournisseur
  • Statistiques de dépenses

🏢 Grandes entreprises

Centralisez la gestion de factures de plusieurs départements. Recherche intelligente dans des milliers de documents.

  • Stockage centralisé sécurisé
  • Recherche sémantique avancée
  • API pour intégration

🛠️ Technologies de pointe

🤖

GPT-4o

IA multimodale de pointe

🔍

Qdrant

Recherche vectorielle

💾

SQLite

Base de données fiable

📦

MinIO

Stockage objet

Node.js

Performance optimale

Prêt à transformer votre gestion de factures ?

Découvrez la puissance de l'IA appliquée à la comptabilité. Simple, rapide, efficace.

99%

Précision d'extraction

<5s

Temps de traitement

Factures par jour

100%

Données locales

📚 Documentation complète - AIOCR

🎯 Vue d'ensemble

AIOCR est une application complète d'extraction et de gestion de factures utilisant l'intelligence artificielle. Elle permet d'extraire automatiquement les données structurées des factures PDF et images, de les stocker dans une base de données, de les rechercher sémantiquement, et de gérer un agenda des échéances de paiement.

Fonctionnalités principales :

  • 📄 Extraction automatique de données depuis PDF et images
  • 💾 Stockage dans base de données SQLite
  • 🔍 Recherche sémantique via Qdrant
  • 💬 Chat intelligent avec les factures
  • 📅 Agenda des échéances avec conversion en CHF
  • 👁️ Visionneuse de factures avec édition des métadonnées
  • 📊 Statistiques détaillées des coûts API (persistantes en base)
  • ⚙️ Gestion complète des services (Qdrant, MinIO, serveur web)
  • 🔐 Système d'authentification avec gestion des utilisateurs
  • 📋 Liste des dernières factures importées avec pagination
  • 📈 Indicateur de progression en temps réel (x/y) pour le traitement OCR
  • 🌐 Choix du provider LLM (OpenAI/Infomaniak) dans le header
  • ⚙️ Interface de configuration organisée en 5 onglets

🔄 Processus d'extraction complet

1. Upload des fichiers

L'utilisateur sélectionne un ou plusieurs fichiers (PDF ou images) via le formulaire web.

Formats acceptés: PDF, JPG, PNG, etc.
2. Stockage du fichier original

Le fichier PDF original est stocké dans MinIO (stockage objet). Les images converties sont utilisées uniquement pour l'analyse.

MinIO: Port 9000 (API), 9001 (Console)
Bucket: "factures"
3. Conversion PDF en images

Les fichiers PDF sont convertis en images (une par page) pour être analysés par le LLM multimodal.

Utilisation de pdf-poppler pour la conversion
4. Envoi au LLM (Mode Multimodal)

Le document (PDF converti en images ou image) est envoyé directement au LLM via l'API en mode multimodal avec un prompt personnalisable.

Endpoint: /v1/chat/completions (OpenAI) ou /2/ai/{product_id}/openai/v1/chat/completions (Infomaniak)
Format: data:image/png;base64,...
Prompt: Personnalisable dans la page Config
5. Analyse intelligente par le LLM

Le LLM analyse directement le document et extrait automatiquement toutes les informations, y compris sur toutes les pages pour les PDFs multi-pages :

  • 📋 Fournisseur (vendor)
  • 🔢 Numéro de facture (invoiceNumber)
  • 📅 Date d'émission (invoiceDate)
  • ⏰ Date d'échéance (dueDate)
  • 💰 Montant total (total)
  • 📊 TVA (vat)
  • 💱 Devise (currency)
  • 🏦 IBAN (détecté même dans les QR codes)
  • 🏛️ Banque (bank)
  • 📄 Texte complet (fullText)
Le LLM lit et comprend le document sans extraction de texte préalable. Analyse de toutes les pages pour les PDFs multi-pages, y compris les QR codes sur la dernière page.
6. Conversion en CHF et stockage en base de données

Les données extraites sont converties en CHF au taux du jour et stockées dans SQLite avec le taux de change utilisé.

Base de données: SQLite (database.db)
Table: invoices
Taux de change: Stocké avec exchange_rate_to_chf et exchange_rate_date
API: exchangerate-api.com
7. Génération d'embeddings

Le texte complet de la facture est utilisé pour générer des embeddings vectoriels via l'API OpenAI.

Modèle: text-embedding-3-small
Dimensions: 1536
8. Stockage dans Qdrant

Les embeddings et métadonnées (y compris le texte complet et le chemin du fichier) sont stockés dans la base vectorielle Qdrant pour la recherche sémantique.

Collection: "factures"
Distance: Cosine
Stockage local dans: qdrant/storage/
Dashboard: http://localhost:6333/dashboard
9. Affichage et export

Les données extraites sont affichées dans un tableau et peuvent être exportées en CSV (séparateur ;) ou JSON. Les métadonnées sont pré-remplies dans la visionneuse.

Format CSV: point-virgule (;)
Format JSON: structure complète avec toutes les métadonnées

🏠 Page d'accueil

La page d'accueil permet d'importer des factures et affiche les dernières factures importées :

  • Upload de fichiers : Sélection multiple de PDF ou images pour traitement
  • Indicateur de progression : Affichage en temps réel du traitement (x/y fichiers traités)
  • Liste des dernières factures : Affichage des 10 dernières factures importées en bas de page avec pagination (boutons précédent/suivant)
  • Cartes interactives : Chaque facture est affichée dans une carte cliquable pour ouvrir la visionneuse
  • Nettoyage automatique : Le répertoire temporaire est vidé automatiquement après traitement

📅 Page Agenda

L'agenda permet de visualiser les factures à payer par date d'échéance :

  • Vue annuelle : Affiche le total des montants par mois et par année, convertis en CHF. Cliquez sur un mois pour accéder directement à la vue mensuelle.
  • Vue mensuelle : Affiche un calendrier avec le total des montants par jour, plus une liste complète de toutes les factures du mois en bas avec des cartes interactives
  • Navigation intuitive : Boutons ◀◀/▶▶ pour naviguer entre les années, boutons ◀/▶ pour naviguer entre les mois
  • Liste des factures : En vue mensuelle, toutes les factures du mois sont affichées en bas sous forme de cartes cliquables avec toutes les informations (fournisseur, numéro, montant, dates)
  • Détails du jour : Cliquez sur un jour du calendrier pour faire défiler vers les factures de ce jour (mise en surbrillance automatique)
  • Conversion automatique : Tous les montants sont convertis en CHF au taux de change du jour d'importation (stocké en base)
  • Protection des montants : Les montants ne sont pas détectés comme des liens téléphone par les navigateurs
  • Liens vers les factures : Chaque carte de facture est cliquable pour ouvrir la visionneuse
Navigation: Utilisez les boutons de navigation ou les sélecteurs d'année et de mois
Format: Montants affichés en CHF avec devise originale entre parenthèses
Vue par défaut: L'agenda s'ouvre directement en vue annuelle

👁️ Visionneuse de factures

La visionneuse permet de consulter et modifier les factures :

  • Affichage du document : PDF ou image affiché dans la colonne de gauche
  • Zoom pour images : Boutons zoom in/out, reset, et molette de souris pour les images (largeur par défaut)
  • Édition des métadonnées : Formulaire éditable dans la colonne de droite
  • Sauvegarde : Bouton "Enregistrer" pour mettre à jour la base de données
  • Pré-remplissage automatique : Les métadonnées sont automatiquement chargées depuis la base de données
Accès: Cliquez sur une facture dans le tableau ou dans l'agenda
Format: Deux colonnes (document à gauche, métadonnées à droite)

💬 Fonctionnalité Chat

Le chat permet d'interroger les factures stockées en utilisant la recherche vectorielle :

  1. Question utilisateur → Encodée en embedding
  2. Recherche dans Qdrant → Trouve les 3 factures les plus similaires
  3. Contexte au LLM → Les factures pertinentes sont envoyées au LLM avec un prompt personnalisable
  4. Réponse intelligente → Le LLM répond en se basant sur les factures trouvées
  5. Rendu Markdown → Les réponses sont formatées en Markdown pour une meilleure lisibilité
Page dédiée: /chat.html
Prompt personnalisable: Config → Prompts personnalisés → Prompt Chat

⚙️ Configuration

La page Configuration est organisée en 5 onglets pour une navigation claire :

  1. 📊 Statut des services : Affiche le statut en temps réel de Qdrant, MinIO et du serveur web avec possibilité de redémarrage individuel
  2. 👥 Gestion utilisateurs : Création, modification et suppression des utilisateurs (admin uniquement)
  3. 🤖 Configuration LLM : Paramètres de l'API (provider, clé API, modèle, température, timeout)
  4. 📝 Prompts : Personnalisation des prompts OCR, Texte brut et Chat
  5. ⚠️ Zone de réinitialisation : Réinitialisation sélective des bases de données et du stockage

👥 Gestion des utilisateurs

Le système d'authentification permet de gérer les accès :

  • Rôles : Admin (accès complet) et User (accès standard, pas d'accès à la config)
  • Authentification obligatoire : Toutes les pages sauf la page marketing nécessitent une connexion
  • Se souvenir de moi : Option pour sauvegarder les identifiants dans le navigateur
  • Gestion des utilisateurs : Les admins peuvent créer, modifier et supprimer des utilisateurs
  • Utilisateur par défaut : Un compte admin (admin/admin) est créé automatiquement au premier démarrage

🔑 Paramètres API

  • Provider : OpenAI ou Infomaniak (choix disponible dans le header pour tous les utilisateurs connectés)
  • Clé API : Token d'authentification
  • URL de base : Endpoint de l'API
  • Modèle : gpt-4o, qwen3, mistral3, etc.
  • Temperature : Contrôle la créativité (0-2, recommandé: 0)
  • Timeout : Délai d'attente en millisecondes (défaut: 60000)

Note : Le choix du provider peut être modifié directement depuis le header par tous les utilisateurs connectés, sans accéder à la page de configuration.

📝 Prompts personnalisés

Vous pouvez personnaliser les prompts utilisés par le LLM :

  • Prompt OCR (Images/PDF) : Utilisé pour l'extraction depuis les images et PDFs
  • Prompt Texte brut : Utilisé pour l'extraction depuis les fichiers texte
  • Prompt Chat : Utilisé pour les réponses du chat

Chaque prompt peut être restauré aux valeurs par défaut avec le bouton "Restaurer le prompt par défaut".

📊 Statut des services

Indicateurs en temps réel du statut de chaque service :

  • 🟢 Vert : Service démarré et fonctionnel
  • 🟠 Orange : Service en cours de redémarrage
  • 🔴 Rouge : Service arrêté

Chaque carte de service dispose d'un bouton "Redémarrer" pour redémarrer individuellement Qdrant, MinIO ou le serveur web.

🗑️ Réinitialisation

Boutons pour réinitialiser les données :

🗄️ Bases de données
  • Réinitialiser DB Factures : Supprime toutes les factures de la base de données SQLite (table invoices)
  • Réinitialiser DB Statistiques : Supprime toutes les statistiques API de la base de données SQLite (table api_stats)
💾 Stockage
  • Réinitialiser Qdrant : Supprime tous les points de la collection (avec confirmation)
  • Réinitialiser MinIO : Supprime tous les fichiers du bucket (avec confirmation)
  • Réinitialiser Tout : Supprime toutes les données de stockage (double confirmation requise)

⚠️ Toutes les actions de réinitialisation sont irréversibles et demandent une confirmation.

📊 Statistiques

La page Statistiques affiche des informations détaillées sur l'utilisation de l'API :

📅 Périodes disponibles

  • Aujourd'hui : Statistiques du jour en cours
  • Cette semaine : Statistiques des 7 derniers jours
  • Ce mois : Statistiques du mois en cours
  • Période personnalisée : Sélectionnez une date de début et une date de fin
  • Tout : Toutes les statistiques depuis le début

📈 Données affichées

  • Coût total : Coûts d'utilisation de l'API (USD), stocké en base de données et persistant après redémarrage
  • Appels API : Nombre total de requêtes
  • Tokens entrants : Total des tokens d'entrée
  • Tokens sortants : Total des tokens de sortie
  • Nombre de factures : Total des factures stockées dans la base de données
  • Nombre de pages : Total des pages traitées (pour les PDFs multi-pages)
  • Statistiques par modèle : Détails par modèle utilisé (gpt-4o, qwen3, etc.)
  • Statistiques quotidiennes : Graphique des coûts par jour
  • Points Qdrant : Nombre de factures indexées
  • Recherches : Nombre de recherches effectuées
Stockage: Toutes les statistiques sont stockées dans SQLite (table api_stats)
Persistance: Les statistiques sont chargées depuis la base de données au démarrage et persistent après redémarrage
Mise à jour: Les statistiques sont mises à jour en temps réel après chaque appel API

💾 Stockage des données

🗄️ Base de données SQLite

Fichier : database.db

Table invoices :

  • Stocke toutes les métadonnées des factures
  • Index unique sur invoice_number pour éviter les doublons
  • Champs : vendor, invoiceNumber, invoiceDate, dueDate, total, vat, currency, iban, bank, filename, filePath, exchange_rate_to_chf, exchange_rate_date, etc.
  • Les factures sans numéro reçoivent un préfixe TEMP-

Table api_stats :

  • Stocke les statistiques de chaque appel API
  • Champs : date, model, endpoint, input_tokens, output_tokens, cost
  • Permet l'analyse historique des coûts
  • Les statistiques sont persistantes et chargées depuis la base au démarrage

Table users :

  • Stocke les utilisateurs de l'application
  • Champs : id, username (unique), password_hash, role (admin/user), created_at, updated_at
  • Mots de passe hashés avec bcrypt
  • Un utilisateur admin par défaut (admin/admin) est créé au premier démarrage

📦 MinIO (Stockage objet)

Stocke les fichiers originaux des factures :

  • Port API : 9000
  • Port Console : 9001
  • Bucket : "factures"
  • Identifiants par défaut : minioadmin / minioadmin
  • Stockage local : minio-data/
  • Les PDFs sont stockés en original, pas les images converties

🔍 Qdrant (Base vectorielle)

Stocke les embeddings pour la recherche sémantique :

  • Port HTTP : 6333
  • Port gRPC : 6334
  • Dashboard : http://localhost:6333/dashboard
  • Collection : "factures"
  • Distance : Cosine
  • Dimensions : 1536
  • Stockage local : qdrant/storage/

🔧 Technologies utilisées

  • Backend : Node.js + Express.js
  • Base de données : SQLite (better-sqlite3)
  • LLM : OpenAI GPT-4o ou Infomaniak (support multimodal)
  • Base vectorielle : Qdrant (local, intégré au projet)
  • Stockage objet : MinIO (local, intégré au projet)
  • Embeddings : Générés via OpenAI (text-embedding-3-small, 1536 dimensions)
  • Conversion PDF : pdf-poppler
  • Taux de change : exchangerate-api.com
  • Rendu Markdown : marked (bibliothèque JavaScript)
  • Frontend : HTML/CSS/JavaScript vanilla

📝 Format de sortie

Les données extraites suivent ce schéma JSON :

{
  "filename": "facture.pdf",
  "filePath": "facture-1234567890-abc123.pdf",
  "vendor": "Nom du fournisseur",
  "invoiceNumber": "12345",
  "invoiceDate": "2025-12-01",
  "dueDate": "2026-01-01",
  "total": "6233.56",
  "vat": "467.08",
  "currency": "CHF",
  "iban": "CH12 3456 7890 1234 5678 9",
  "bank": "UBS",
  "fullText": "Texte complet de la facture...",
  "exchange_rate_to_chf": 1.0,
  "exchange_rate_date": "2025-12-01"
}

🚀 Démarrage de l'application

Pour démarrer l'application :

npm start

Le script start.js démarre automatiquement :

  1. Qdrant (si non installé, télécharge et installe automatiquement)
  2. MinIO (si non installé, télécharge et installe automatiquement)
  3. Le serveur web Node.js sur le port 3000

URLs d'accès :

  • Application web : http://localhost:3000
  • Chat : http://localhost:3000/chat.html
  • Qdrant Dashboard : http://localhost:6333/dashboard
  • MinIO Console : http://localhost:9001

⚠️ Notes importantes

  • Le LLM analyse directement les documents sans extraction de texte préalable
  • Qdrant et MinIO sont intégrés localement et démarrent automatiquement
  • Les coûts sont calculés selon les tarifs du provider utilisé et stockés en base de données
  • Les embeddings sont générés via OpenAI (pas de modèle local)
  • Les PDFs multi-pages sont analysés page par page, y compris les QR codes sur la dernière page
  • Les factures sont indexées par numéro de facture pour éviter les doublons
  • Les montants sont convertis en CHF au taux du jour d'importation et stockés en base
  • Les prompts peuvent être personnalisés pour adapter l'extraction à vos besoins
  • Le redémarrage des services tue les processus par port, même s'ils ne sont pas dans la variable globale
  • Les statistiques sont mises à jour en temps réel après chaque appel API et persistent après redémarrage
  • L'authentification est obligatoire pour toutes les fonctionnalités sauf la page marketing
  • Le répertoire temporaire est automatiquement vidé après chaque traitement
  • L'indicateur de progression affiche le nombre de fichiers traités en temps réel (x/y)

🔒 Sécurité

L'application respecte les meilleures pratiques de sécurité :

  • Les clés API sont stockées dans config.json ou .env (non versionnées)
  • Les fichiers sensibles ne sont pas exposés publiquement
  • Les services (Qdrant, MinIO) sont accessibles uniquement en localhost
  • Conformité RGPD : Les données sont stockées localement
  • Système d'authentification : Mots de passe hashés avec bcrypt, sessions sécurisées
  • Gestion des rôles : Séparation admin/user avec restrictions d'accès
  • Protection des routes : Middleware d'authentification et d'autorisation sur toutes les routes sensibles
  • Stockage local sécurisé : Option "Se souvenir de moi" avec stockage local côté client uniquement

Facture

Chargement...