Improve reconciliation process by skipping already processed deliveries

Optimize the reconciliation page by pre-populating results for already reconciled deliveries and skipping them in the auto-verification loop. Also, add an API endpoint for administrators to diagnose cache status for reconciled deliveries.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: daf3525c-b971-454a-b0c0-7a9845e786cc
Replit-Commit-Checkpoint-Type: full_checkpoint
This commit is contained in:
michaelschal committed 2025-08-31 07:54:35 +00:00
1 parent 9ed380a279
commit aef303b709
3 files changed
+89 -1

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

+33 -1
View File
@@ -242,14 +242,46 @@ export default function BLReconciliation() {
console.log('🔄 Déclenchement vérifications automatiques...');
}
// Pré-populer les résultats pour les livraisons déjà réconciliées
const newVerificationResults = { ...verificationResults };
let hasNewReconciledResults = false;
deliveriesWithBL.forEach((delivery: any) => {
// Si la livraison est déjà réconciliée, marquer comme vérifiée avec succès
if (delivery.reconciled && !verificationResults[delivery.id]) {
newVerificationResults[delivery.id] = {
exists: true,
matchType: delivery.invoiceReference ? 'invoice_reference' : 'bl_number',
fromCache: true,
permanent: true,
reconciled: true
};
hasNewReconciledResults = true;
if (import.meta.env.DEV) {
console.log(`✅ Livraison ${delivery.id} déjà réconciliée, marquée comme vérifiée`);
}
}
});
// Mettre à jour les résultats si on a de nouvelles livraisons réconciliées
if (hasNewReconciledResults) {
setVerificationResults(newVerificationResults);
}
deliveriesWithBL.forEach((delivery: any) => {
// EXCLUURE les livraisons déjà réconciliées de la vérification automatique
if (delivery.reconciled) {
return; // Livraison déjà validée, pas besoin de vérifier
}
// Vérifier seulement si on a une référence de facture ou un BL et pas déjà de résultat
const hasVerifiableData = delivery.invoiceReference || delivery.blNumber;
const notAlreadyProcessed = !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id);
if (hasVerifiableData && notAlreadyProcessed) {
if (import.meta.env.DEV) {
console.log(`🔍 Vérification auto pour livraison ${delivery.id}:`, {
console.log(`🔍 Vérification auto pour livraison NON réconciliée ${delivery.id}:`, {
invoiceRef: delivery.invoiceReference,
blNumber: delivery.blNumber
});
+56
View File
@@ -1156,6 +1156,62 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
});
// Route pour diagnostiquer le cache des livraisons
app.get('/api/cache/diagnosis', isAuthenticated, async (req: any, res) => {
try {
const user = await storage.getUserWithGroups(req.user.claims ? req.user.claims.sub : req.user.id);
if (!user) {
return res.status(404).json({ message: "User not found" });
}
// Vérifier que c'est un admin
if (user.role !== 'admin') {
return res.status(403).json({ message: "Seuls les admins peuvent exécuter cette opération" });
}
// Récupérer des statistiques sur le cache
const deliveries = await storage.getDeliveries();
const reconciledCount = deliveries.filter(d => d.reconciled).length;
const totalCount = deliveries.length;
// Vérifier quelques caches
const sampleCaches = [];
const reconciledDeliveries = deliveries.filter(d => d.reconciled).slice(0, 5); // Prendre 5 exemples
for (const delivery of reconciledDeliveries) {
if (delivery.invoiceReference) {
const cacheKey = `${delivery.invoiceReference.toLowerCase()}_${delivery.groupId}`;
const cached = await storage.getInvoiceVerificationCache(cacheKey);
sampleCaches.push({
deliveryId: delivery.id,
invoiceRef: delivery.invoiceReference,
groupId: delivery.groupId,
reconciled: delivery.reconciled,
cacheExists: !!cached,
cacheReconciled: cached?.isReconciled || false,
cacheExpires: cached?.expiresAt
});
}
}
res.json({
statistics: {
totalDeliveries: totalCount,
reconciledDeliveries: reconciledCount,
percentageReconciled: Math.round((reconciledCount / totalCount) * 100)
},
sampleCaches,
message: "Diagnostic du cache terminé"
});
} catch (error) {
console.error("Erreur diagnostic cache:", error);
res.status(500).json({
message: "Erreur lors du diagnostic",
error: error instanceof Error ? error.message : 'Unknown error'
});
}
});
// Route pour mettre à jour les caches existants des livraisons validées
app.post('/api/cache/update-reconciled', isAuthenticated, async (req: any, res) => {
try {