From f5258e6ebe4efb9af240cb00c1bff10cc07b32c4 Mon Sep 17 00:00:00 2001
From: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Date: Fri, 2 Feb 2024 18:03:57 -0800
Subject: [PATCH] Consider child transactions when fuzzy matching imported
 transactions (#2309)

* Consider child transaction when fuzzy matching

* Release notes
---
 packages/loot-core/src/server/accounts/sync.ts | 14 +++++++-------
 upcoming-release-notes/2309.md                 |  6 ++++++
 2 files changed, 13 insertions(+), 7 deletions(-)
 create mode 100644 upcoming-release-notes/2309.md

diff --git a/packages/loot-core/src/server/accounts/sync.ts b/packages/loot-core/src/server/accounts/sync.ts
index efd4b9cf3..c394f7f8c 100644
--- a/packages/loot-core/src/server/accounts/sync.ts
+++ b/packages/loot-core/src/server/accounts/sync.ts
@@ -320,7 +320,7 @@ async function normalizeTransactions(
   return { normalized, payeesToCreate };
 }
 
-async function normalizeGoCardlessTransactions(transactions, acctId) {
+async function normalizeExternalTransactions(transactions, acctId) {
   const payeesToCreate = new Map();
 
   const normalized = [];
@@ -429,12 +429,12 @@ async function createNewPayees(payeesToCreate, addsAndUpdates) {
   });
 }
 
-export async function reconcileGoCardlessTransactions(acctId, transactions) {
+export async function reconcileExternalTransactions(acctId, transactions) {
   const hasMatched = new Set();
   const updated = [];
   const added = [];
 
-  const { normalized, payeesToCreate } = await normalizeGoCardlessTransactions(
+  const { normalized, payeesToCreate } = await normalizeExternalTransactions(
     transactions,
     acctId,
   );
@@ -474,7 +474,7 @@ export async function reconcileGoCardlessTransactions(acctId, transactions) {
       // fields.
       fuzzyDataset = await db.all(
         `SELECT id, is_parent, date, imported_id, payee, category, notes, reconciled FROM v_transactions
-           WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,
+           WHERE date >= ? AND date <= ? AND amount = ? AND account = ?`,
         [
           db.toDateRepr(monthUtils.subDays(trans.date, 4)),
           db.toDateRepr(monthUtils.addDays(trans.date, 1)),
@@ -637,7 +637,7 @@ export async function reconcileTransactions(acctId, transactions) {
       // fields.
       fuzzyDataset = await db.all(
         `SELECT id, is_parent, date, imported_id, payee, category, notes, reconciled FROM v_transactions
-           WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,
+           WHERE date >= ? AND date <= ? AND amount = ? AND account = ?`,
         [
           db.toDateRepr(monthUtils.subDays(trans.date, 4)),
           db.toDateRepr(monthUtils.addDays(trans.date, 1)),
@@ -866,7 +866,7 @@ export async function syncExternalAccount(userId, userKey, id, acctId, bankId) {
     }));
 
     return runMutator(async () => {
-      const result = await reconcileGoCardlessTransactions(id, transactions);
+      const result = await reconcileExternalTransactions(id, transactions);
       await updateAccountBalance(id, accountBalance);
       return result;
     });
@@ -922,7 +922,7 @@ export async function syncExternalAccount(userId, userKey, id, acctId, bankId) {
         starting_balance_flag: true,
       });
 
-      const result = await reconcileGoCardlessTransactions(id, transactions);
+      const result = await reconcileExternalTransactions(id, transactions);
       return {
         ...result,
         added: [initialId, ...result.added],
diff --git a/upcoming-release-notes/2309.md b/upcoming-release-notes/2309.md
new file mode 100644
index 000000000..39798162b
--- /dev/null
+++ b/upcoming-release-notes/2309.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [joel-jeremy]
+---
+
+Consider child transactions when fuzzy matching imported transactions.
-- 
GitLab