Nouvelles fonctionnalités : **1. Import automatique depuis dossier (folderImportService.ts)** ✅ Surveillance périodique d'un dossier local configuré ✅ Détection automatique des nouveaux fichiers PDF ✅ Traitement identique à l'upload manuel (extraction Mistral AI, détection doublons, stockage) ✅ Déplacement automatique des fichiers traités vers un sous-dossier "processed" ✅ Scheduler configurable (fréquence en minutes) ✅ Routes tRPC pour démarrer/arrêter/vérifier le statut du service ✅ Boutons de contrôle dans la page Paramètres de réception **2. Système de notifications (notificationService.ts)** ✅ Notifications automatiques après chaque import (email ou dossier) ✅ Résumé détaillé : nombre de factures importées, doublons ignorés, erreurs ✅ Format adapté selon la source (email avec nom de fichier, dossier avec nombre de fichiers) ✅ Intégration avec le système de notifications Manus (notifyOwner) ✅ Notifications envoyées au propriétaire du projet **Fonctionnement de l'import dossier :** 1. L'utilisateur configure le chemin du dossier source dans "Paramètres de réception" 2. Il active l'import automatique et configure la fréquence de vérification 3. Il clique sur "Démarrer le service" pour lancer la surveillance 4. Le service scanne le dossier selon la fréquence configurée 5. Il détecte les nouveaux fichiers PDF (non encore traités) 6. Il traite chaque PDF avec la même logique que l'upload manuel 7. Les fichiers traités sont déplacés vers un sous-dossier "processed" 8. Une notification est envoyée avec le résumé des résultats **Fonctionnement des notifications :** - Après chaque import automatique (email ou dossier), une notification est envoyée - La notification contient : * Source de l'import (📧 email ou 📁 dossier) * Nom du fichier (email) ou nombre de fichiers (dossier) * ✅ Nombre de factures importées * 🔄 Nombre de doublons ignorés * ❌ Nombre d'erreurs * Total de factures détectées - Les notifications apparaissent dans l'interface Manus du propriétaire **Interface utilisateur :** - Chaque carte (Import dossier, Import email) dispose maintenant de : * Indicateur visuel "Service actif" avec point vert animé * Bouton "Démarrer le service" (désactivé si l'import n'est pas activé) * Bouton "Arrêter le service" (rouge) pour stopper la surveillance * Messages toast pour confirmer le démarrage/arrêt **Dépendances ajoutées :** - chokidar : Surveillance de fichiers et dossiers pour Node.js **Architecture :** - folderImportService.ts : Service d'import automatique depuis dossier - notificationService.ts : Service de notifications centralisé - Routes tRPC : folderImportService.{start, stop, status} - Intégration des notifications dans emailImportService et folderImportService Les deux services d'import automatique (email et dossier) sont maintenant opérationnels avec notifications intégrées.
9.2 KiB
9.2 KiB
Invoice Analyzer - TODO
Phase 1: Base de données et schéma
- Créer table users avec support authentification locale + Azure AD
- Créer table sourceFiles pour fichiers PDF uploadés
- Créer table invoices pour factures extraites
- Créer table userSettings pour paramètres utilisateur
- Créer table importLogs pour historique des imports
- Créer table llmLogs pour logs des appels LLM
- Pousser les migrations avec pnpm db:push
Phase 2: Authentification
- Implémenter authentification locale (email/password avec bcrypt)
- Implémenter authentification Azure AD avec MSAL
- Créer helpers de génération de tokens JWT
- Créer middleware de vérification des rôles (user/admin)
Phase 3: Stockage et extraction IA
- Créer helper de stockage local avec préfixe YYYY-MM
- Implémenter extraction PDF avec Mistral OCR
- Implémenter extraction de métadonnées avec Mistral LLM
- Créer système de scoring de qualité (0-100)
- Implémenter détection de doublons
- Créer helper de génération de fichiers JSON de métadonnées
- Implémenter logger LLM pour debug
Phase 4: Export SFTP
- Créer helper de connexion SFTP
- Implémenter export manuel de factures
- Implémenter export automatique de factures
- Créer test de connexion SFTP
Phase 5: Routes tRPC
- Routes auth (me, loginLocal, getAzureLoginUrl, logout)
- Routes invoices (upload, list, getById, update, delete, search, getStats)
- Routes sourceFiles (getByIds pour polling)
- Routes settings (get, upsert)
- Routes admin (createUser, getAllUsers, updatePassword, toggleActive, deleteUser)
- Routes sftp (testConnection, exportInvoices)
- Routes importLogs (getByUser)
- Routes llmLogs (getBySourceFile, getByInvoice)
Phase 6: Pages Frontend
- Page Login avec formulaire local + bouton Azure AD
- Page Dashboard avec statistiques et graphiques
- Page Upload avec drag-and-drop et suivi temps réel
- Page Invoices avec liste, recherche, filtres, pagination
- Page Settings avec configuration LLM, keywords, SFTP
- Page History avec logs et détails
- Page Users (admin) pour gestion des utilisateurs
- Layout avec navigation adaptée (DashboardLayout)
- Configuration des routes dans App.tsx
Phase 7: Tests et finalisation
- Tests unitaires d'authentification (hashPassword, verifyPassword, JWT)
- Tests de logout avec cookies multiples
- Vérification du build et de la compilation TypeScript
- Vérification du serveur de développement
- Créer le checkpoint final
Corrections et améliorations
-
Créer un utilisateur administrateur avec login adminServFacturation
-
Tester la connexion locale avec le nouvel utilisateur
-
Modifier l'email de l'administrateur de adminServFacturation à o.pareige@itinova.org
-
Diagnostiquer le problème de connexion locale avec o.pareige@itinova.org
-
Corriger l'authentification locale (ajout support cookie auth_token)
Amélioration du Dashboard
- Créer route tRPC pour statistiques détaillées (factures par semaine, top fournisseurs)
- Créer cartes de statistiques (Factures traitées, Montant total, Score moyen, Dernière activité)
- Créer graphique en barres des factures par semaine (Recharts)
- Créer graphique circulaire du top 10 fournisseurs (Recharts)
- Créer liste détaillée des fournisseurs avec nombre de factures
- Ajouter bouton "Voir les statistiques détaillées"
Modification page Factures - Export PDF
- Ajouter champ exportStatus dans le schéma invoices (exported/not_exported/export_error)
- Ajouter champ exportedAt dans le schéma invoices (déjà existant)
- Créer route tRPC pour exporter les factures en PDF
- Créer route tRPC pour mettre à jour le statut d'export
- Ajouter cases à cocher pour sélection multiple dans la page Factures
- Ajouter case "Tout sélectionner"
- Modifier l'affichage des statuts (Exporté/Non exporté/Erreur export)
- Ajouter bouton "Exporter" (actif uniquement pour score 100%)
- Implémenter le téléchargement de PDF pour les factures sélectionnées
- Valider que seules les factures avec score 100% peuvent être exportées
Nouvelles fonctionnalités
- Ajouter des boutons de filtre par statut d'export (Tous/Exportés/Non exportés/Erreurs)
- Créer route tRPC pour export Excel
- Créer page InvoiceDetail avec visualisation des métadonnées
- Ajouter formulaire d'édition manuelle des champs
- Implémenter la mise à jour des métadonnées
- Recalculer le score de qualité après édition manuelle
- Ajouter bouton "Export Excel" dans la page Factures
- Générer fichier Excel avec toutes les métadonnées
Correction export PDF
- Diagnostiquer le problème d'export PDF (URLs non accessibles)
- Corriger la route exportToPdf pour retourner les bonnes URLs
- Modifier le code client pour ouvrir les PDFs dans de nouveaux onglets
- Ajouter un délai entre chaque ouverture pour éviter le blocage des popups
Correction erreur 404 PDF
- Vérifier la configuration Express pour servir les fichiers statiques
- Vérifier les URLs générées pour les fichiers PDF
- Identifier que les fichiers n'ont pas été stockés lors de l'import initial
- Ajouter bouton "Supprimer" pour supprimer les factures sélectionnées
- Créer le dossier storage pour le stockage local
Correction bouton Supprimer
- Permettre la sélection de toutes les factures pour suppression (pas seulement celles à 100%)
- Séparer la logique de sélection pour export et suppression
- Supprimer les restrictions disabled sur les checkboxes
- Ajouter validation pour export PDF (seulement score 100%)
Diagnostic problème 404 persistant
- Vérifier si les fichiers sont stockés dans le dossier storage
- Vérifier les URLs générées dans la base de données
- Vérifier la configuration Express pour servir les fichiers statiques
- Corriger le chemin d'accès aux fichiers PDF
Correction formulaire d'édition
- Pré-remplir les valeurs existantes dans le formulaire d'édition de facture
- Utiliser useEffect pour initialiser les valeurs du formulaire
Amélioration visuelle formulaire d'édition
- Ajouter un bord rouge sur les champs vides du formulaire d'édition
- Identifier visuellement les données manquantes non extraites par l'IA
Correction stockage PDF
- Diagnostiquer pourquoi localStoragePut ne sauvegarde pas les fichiers
- Vérifier si les données PDF sont bien reçues dans la route upload
- Identifier le bug: l'URL de localStoragePut était écrasée par une URL locale
- Corriger la route upload pour utiliser l'URL retournée par localStoragePut
- Tester le stockage avec un upload réel
Paramètres de réception
- Créer table importSettings dans le schéma de base de données
- Ajouter routes tRPC pour gérer les paramètres de réception (get, update)
- Créer page Paramètres de réception avec configuration import manuel/automatique/email
- Implémenter activation/désactivation import manuel
- Implémenter activation/désactivation import automatique avec dossier source et fréquence
- Implémenter activation/désactivation import par email avec compte mail et mot de passe
- Tester la sauvegarde et récupération des paramètres
Correction page Paramètres de réception
- Ajouter DashboardLayout à la page ImportSettings pour afficher le menu latéral
Import automatique par email
- Installer les dépendances npm pour IMAP (imap et mailparser)
- Créer le service emailImportService.ts pour se connecter à IMAP
- Implémenter la détection des nouveaux emails non lus avec pièces jointes PDF
- Implémenter le téléchargement et traitement des pièces jointes
- Implémenter le marquage des emails comme lus après traitement
- Créer un scheduler pour exécuter le service selon la fréquence configurée
- Ajouter des routes tRPC pour démarrer/arrêter le service
- Ajouter des boutons de contrôle du service dans la page Paramètres de réception
- Tester l'import automatique par email avec un vrai compte
Import automatique depuis dossier
- Installer la dépendance chokidar pour surveiller les dossiers
- Créer le service folderImportService.ts pour surveiller un dossier
- Implémenter la détection des nouveaux fichiers PDF dans le dossier
- Implémenter le traitement des fichiers détectés
- Implémenter le déplacement des fichiers traités vers un sous-dossier "processed"
- Créer un scheduler pour vérifier le dossier selon la fréquence configurée
- Ajouter des routes tRPC pour démarrer/arrêter le service
- Ajouter des boutons de contrôle dans la page Paramètres de réception
Système de notifications
- Créer le service notificationService.ts pour gérer les notifications
- Implémenter l'envoi de notifications après import automatique email
- Implémenter l'envoi de notifications après import automatique dossier
- Inclure le résumé : nombre de factures importées, doublons ignorés, erreurs
- Tester les fonctionnalités avec des données réelles