feat: add transaction deduplication feature and enhance filtering options in settings and transactions pages
This commit is contained in:
@@ -239,11 +239,36 @@ async function main() {
|
||||
return dateA.localeCompare(dateB);
|
||||
});
|
||||
|
||||
// Calculate balance
|
||||
const balance = transactions.reduce((sum, t) => sum + parseAmount(t.amount), 0);
|
||||
// Deduplicate transactions: same amount + same date + same libelle (description)
|
||||
const seenTransactions = new Map<string, CSVTransaction>();
|
||||
const uniqueTransactions: CSVTransaction[] = [];
|
||||
let duplicatesCount = 0;
|
||||
|
||||
for (const transaction of transactions) {
|
||||
const amount = parseAmount(transaction.amount);
|
||||
const date = parseDate(transaction.date);
|
||||
const description = transaction.libelle.trim();
|
||||
|
||||
// Create a unique key: date-amount-description
|
||||
const key = `${date}-${amount}-${description}`;
|
||||
|
||||
if (!seenTransactions.has(key)) {
|
||||
seenTransactions.set(key, transaction);
|
||||
uniqueTransactions.push(transaction);
|
||||
} else {
|
||||
duplicatesCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (duplicatesCount > 0) {
|
||||
console.log(` → ${duplicatesCount} doublons détectés et ignorés (même date, montant, libellé)`);
|
||||
}
|
||||
|
||||
// Calculate balance from unique transactions
|
||||
const balance = uniqueTransactions.reduce((sum, t) => sum + parseAmount(t.amount), 0);
|
||||
|
||||
// Prepare transactions for insertion
|
||||
const dbTransactions = transactions.map((transaction, index) => {
|
||||
const dbTransactions = uniqueTransactions.map((transaction, index) => {
|
||||
const amount = parseAmount(transaction.amount);
|
||||
const date = parseDate(transaction.date);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user