Checkpoint: Ajout du champ Abonnement (OUI/NON) aux factures avec détection automatique par mots-clés et édition directe dans la liste

This commit is contained in:
Manus
2026-02-11 09:54:17 -05:00
parent 14c50fc8fd
commit 4535cd6bdf
13 changed files with 2277 additions and 2 deletions

View File

@@ -12,6 +12,7 @@ export interface ExtractedInvoiceData {
pageRange: string;
qualityScore: number; // 0-100
extractedText: string | null; // Full text extracted from the invoice PDF
isSubscription: boolean; // True if subscription keywords detected
}
export interface MultiInvoiceResult {
@@ -102,6 +103,7 @@ export async function extractInvoicesWithMistral(
orderNumber?: string | null;
supplier?: string | null;
totalAmount?: string | null;
subscription?: string | null;
}
): Promise<MultiInvoiceResult> {
const startTime = Date.now();
@@ -127,6 +129,7 @@ export async function extractInvoicesWithMistral(
if (customKeywords.orderNumber) hints.push(`Numéro de commande: ${customKeywords.orderNumber}`);
if (customKeywords.supplier) hints.push(`Fournisseur: ${customKeywords.supplier}`);
if (customKeywords.totalAmount) hints.push(`Montant total: ${customKeywords.totalAmount}`);
if (customKeywords.subscription) hints.push(`Abonnement: ${customKeywords.subscription}`);
if (hints.length > 0) {
keywordsHint = `\n\nMots-clés personnalisés à rechercher:\n${hints.join("\n")}`;
@@ -145,7 +148,8 @@ Pour chaque facture trouvée, extrais les informations suivantes:
- totalAmount: Montant total TTC (nombre décimal)
- 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)${keywordsHint}
- 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}
Réponds UNIQUEMENT avec un objet JSON valide au format suivant:
{
@@ -161,7 +165,8 @@ Réponds UNIQUEMENT avec un objet JSON valide au format suivant:
"totalAmount": 123.45,
"pageRange": "1-2",
"qualityScore": 85,
"extractedText": "Texte complet de la facture..."
"extractedText": "Texte complet de la facture...",
"isSubscription": false
}
]
}