From 8dec1c46baa3660cdd46b32682ba7bf2b05837a0 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Sun, 31 Aug 2025 07:56:20 +0000 Subject: [PATCH] Improve reconciliation process by skipping already validated deliveries Update client-side logic in BLReconciliation to exclude deliveries with a 'reconciled' status from automatic verification. Modify server-side InvoiceVerificationService to implement permanent caching for reconciled invoices, preventing redundant checks. Replit-Commit-Author: Agent Replit-Commit-Session-Id: daf3525c-b971-454a-b0c0-7a9845e786cc Replit-Commit-Checkpoint-Type: full_checkpoint --- client/src/pages/BLReconciliation.tsx | 16 +++++++++------- server/invoiceVerification.ts | 10 +++++++--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index 129514a..8820d58 100644 --- a/client/src/pages/BLReconciliation.tsx +++ b/client/src/pages/BLReconciliation.tsx @@ -270,12 +270,13 @@ export default function BLReconciliation() { } deliveriesWithBL.forEach((delivery: any) => { - // EXCLUURE les livraisons déjà réconciliées de la vérification automatique + // ⛔ EXCLURE COMPLÈTEMENT les livraisons déjà réconciliées + // Une fois validées avec coche verte, on ne contrôle plus JAMAIS if (delivery.reconciled) { - return; // Livraison déjà validée, pas besoin de vérifier + return; // Livraison déjà validée = AUCUNE vérification nécessaire } - // Vérifier seulement si on a une référence de facture ou un BL et pas déjà de résultat + // Vérifier seulement les livraisons NON validées const hasVerifiableData = delivery.invoiceReference || delivery.blNumber; const notAlreadyProcessed = !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id); @@ -283,14 +284,15 @@ export default function BLReconciliation() { if (import.meta.env.DEV) { console.log(`🔍 Vérification auto pour livraison NON réconciliée ${delivery.id}:`, { invoiceRef: delivery.invoiceReference, - blNumber: delivery.blNumber + blNumber: delivery.blNumber, + reconciled: delivery.reconciled }); } - // Délai pour éviter de surcharger le serveur - le cache évitera les appels inutiles + // Délai pour éviter de surcharger le serveur setTimeout(() => { - handleVerifyInvoice(delivery, false); // Pas de force refresh, utilise le cache - }, Math.random() * 1000); // Délai aléatoire entre 0 et 1 seconde + handleVerifyInvoice(delivery, false); + }, Math.random() * 1000); } }); }, [deliveriesWithBL, suppliers, verificationResults, verifyingDeliveries]); diff --git a/server/invoiceVerification.ts b/server/invoiceVerification.ts index e091480..566ad1d 100644 --- a/server/invoiceVerification.ts +++ b/server/invoiceVerification.ts @@ -30,9 +30,13 @@ export class InvoiceVerificationService { currentTime: new Date().toISOString() }); - // Cache permanent si facture validée (isReconciled = true) - if (cached && cached.isReconciled) { - console.log('✅ [CACHE] Cache PERMANENT pour facture validée:', { invoiceReference, groupId, exists: cached.exists }); + // ✅ CACHE PERMANENT : Facture validée avec coche verte = JAMAIS re-vérifier + if (cached && cached.isReconciled && cached.exists) { + console.log('🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification:', { + invoiceReference, + groupId, + exists: cached.exists + }); return { exists: cached.exists, matchType: cached.matchType,