feat: détection doublons par numéro+montant dans les 3 points d'import

This commit is contained in:
Manus
2026-06-15 12:02:24 -04:00
parent 295965fa57
commit a9387eaaea
4 changed files with 24 additions and 22 deletions

View File

@@ -414,23 +414,25 @@ export async function getInvoiceStats(userId: number) {
}
export async function findDuplicateInvoice(
supplierName: string | null,
invoiceNumber: string | null,
invoiceDate: Date | null
totalAmount: string | null,
userId?: number
): Promise<Invoice | undefined> {
if (!supplierName || !invoiceNumber || !invoiceDate) return undefined;
if (!invoiceNumber || !totalAmount) return undefined;
const db = await getDb();
if (!db) return undefined;
const conditions = [
eq(invoices.invoiceNumber, invoiceNumber),
eq(invoices.totalAmount, totalAmount),
];
if (userId !== undefined) {
conditions.push(eq(invoices.userId, userId));
}
const result = await db.select().from(invoices)
.where(
and(
eq(invoices.supplierName, supplierName),
eq(invoices.invoiceNumber, invoiceNumber),
eq(invoices.invoiceDate, invoiceDate)
)
)
.where(and(...conditions))
.limit(1);
return result[0];

View File

@@ -129,11 +129,11 @@ async function processEmailAttachment(
processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`,
});
// Check for duplicates
// Check for duplicates (numéro de facture + montant)
const duplicate = await findDuplicateInvoice(
invoiceData.supplierName,
invoiceData.invoiceNumber,
invoiceData.invoiceDate
invoiceData.totalAmount?.toString() ?? null,
userId
);
if (duplicate) {
@@ -141,7 +141,7 @@ async function processEmailAttachment(
duplicateDetails.push({
supplierName: invoiceData.supplierName,
invoiceNumber: invoiceData.invoiceNumber,
invoiceDate: invoiceData.invoiceDate,
totalAmount: invoiceData.totalAmount,
});
continue;
}

View File

@@ -115,11 +115,11 @@ async function processFolderFile(
processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`,
});
// Check for duplicates
// Check for duplicates (numéro de facture + montant)
const duplicate = await findDuplicateInvoice(
invoiceData.supplierName,
invoiceData.invoiceNumber,
invoiceData.invoiceDate
invoiceData.totalAmount?.toString() ?? null,
userId
);
if (duplicate) {
@@ -127,7 +127,7 @@ async function processFolderFile(
duplicateDetails.push({
supplierName: invoiceData.supplierName,
invoiceNumber: invoiceData.invoiceNumber,
invoiceDate: invoiceData.invoiceDate,
totalAmount: invoiceData.totalAmount,
});
continue;
}

View File

@@ -252,11 +252,11 @@ export const appRouter = router({
processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`,
});
// Check for duplicates
// Check for duplicates (numéro de facture + montant)
const duplicate = await findDuplicateInvoice(
invoiceData.supplierName,
invoiceData.invoiceNumber,
invoiceData.invoiceDate
invoiceData.totalAmount?.toString() ?? null,
userId
);
if (duplicate) {
@@ -264,7 +264,7 @@ export const appRouter = router({
duplicateDetails.push({
supplierName: invoiceData.supplierName,
invoiceNumber: invoiceData.invoiceNumber,
invoiceDate: invoiceData.invoiceDate,
totalAmount: invoiceData.totalAmount,
});
continue;
}