From 828901fba8af48c57fd41d449ddb25b953f390ba Mon Sep 17 00:00:00 2001 From: amoussa1229 <166072409+amoussa1229@users.noreply.github.com> Date: Wed, 22 Jul 2026 02:04:40 +0000 Subject: [PATCH] fix(boaRecon): add method=Check filter to matchElectronicReturn Electronic returns only apply to checks, but the matcher was not filtering by method, so an electronic return could incorrectly match against a same-amount, bank-confirmed ACH record. --- src/boaRecon.js | 1 + tests/boaRecon.test.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/boaRecon.js b/src/boaRecon.js index 72a7f54..4a84788 100644 --- a/src/boaRecon.js +++ b/src/boaRecon.js @@ -236,6 +236,7 @@ export function matchCheckTransaction(classified, payments, refDateISO) { export function matchElectronicReturn(classified, payments, refDateISO) { const candidates = payments.filter( (p) => + p.method === "Check" && (p.clear_status === "Cleared" || p.clear_status === "Returned") && amountsEqual(p.amount_usd, classified.amount) && issuedWithinDays(p, refDateISO, 120) diff --git a/tests/boaRecon.test.js b/tests/boaRecon.test.js index 67b9fba..ff945ad 100644 --- a/tests/boaRecon.test.js +++ b/tests/boaRecon.test.js @@ -271,6 +271,25 @@ test("electronic return: unique amount among bank-confirmed payments matches", ( assert.equal(m.payment.check_number, "1001"); }); +test("electronic return: never matches ACH payments", () => { + const achCleared = payment({ + method: "ACH", + check_number: "21222000264", + amount_usd: 3992.15, + clear_status: "Cleared", + pk: "payment#21222000264", + }); + const checkCleared = payment({ + check_number: "1001", + amount_usd: 3992.15, + clear_status: "Cleared", + }); + // Only the Check should be a candidate — ACH is excluded. + const m = matchElectronicReturn({ amount: 3992.15 }, [achCleared, checkCleared], "2026-07-20"); + assert.equal(m.payment.check_number, "1001"); + assert.equal(m.matchedBy, "amount+cleared"); +}); + test("electronic return: ambiguity is unmatched", () => { const payments = [ payment({ check_number: "1001", amount_usd: 2500, clear_status: "Cleared" }),