diff --git a/server/invoiceExtractor.ts b/server/invoiceExtractor.ts index c94df3a..3517dd6 100644 --- a/server/invoiceExtractor.ts +++ b/server/invoiceExtractor.ts @@ -136,6 +136,12 @@ export async function extractInvoicesWithMistral( } } + // Build subscription detection instruction + let subscriptionInstruction = "- isSubscription: false (par défaut)"; + if (customKeywords?.subscription && customKeywords.subscription.trim()) { + subscriptionInstruction = `- isSubscription: true UNIQUEMENT si la facture contient l'un de ces mots-clés exacts: ${customKeywords.subscription}, false sinon`; + } + // Prepare prompt for LLM const prompt = `Tu es un expert en extraction de données de factures. Analyse ce document PDF et extrais toutes les factures qu'il contient. @@ -149,7 +155,7 @@ Pour chaque facture trouvée, extrais les informations suivantes: - pageRange: Plage de pages de cette facture (ex: "1-2" ou "5") - qualityScore: Score de qualité de l'extraction de 0 à 100 (100 = toutes les informations trouvées et claires) - extractedText: Texte complet extrait de la facture (tout le texte visible sur les pages de cette facture) -- isSubscription: true si la facture contient des mots-clés liés à un abonnement (abonnement, subscription, mensuel, annuel, recurring, etc.), false sinon${keywordsHint} +${subscriptionInstruction}${keywordsHint} Réponds UNIQUEMENT avec un objet JSON valide au format suivant: { diff --git a/todo.md b/todo.md index 6c5d23d..673dce4 100644 --- a/todo.md +++ b/todo.md @@ -259,3 +259,10 @@ - [x] Permettre l'édition directe du champ Abonnement dans la liste (select OUI/NON) - [x] Ajouter isSubscription dans le schéma de validation update - [ ] Tester la détection automatique avec une nouvelle facture importée + +## Bug : Détection incorrecte du champ Abonnement +- [x] Analyser le prompt Mistral pour comprendre pourquoi isSubscription est à OUI +- [x] Identifier le problème: mots-clés génériques codés en dur au lieu d'utiliser subscriptionKeywords +- [x] Corriger le prompt pour utiliser UNIQUEMENT les mots-clés configurés dans subscriptionKeywords +- [x] Ajouter logique: si subscriptionKeywords est vide, isSubscription = false par défaut +- [ ] Tester avec une nouvelle facture importée et le mot-clé "BLOB" (ne devrait pas détecter)