feat: add transaction deduplication feature and enhance filtering options in settings and transactions pages

This commit is contained in:
Julien Froidefond
2025-11-30 13:02:03 +01:00
parent e087143675
commit d5aa00a885
9 changed files with 616 additions and 26 deletions

View File

@@ -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);