Skip to content

v0.1.15

Choose a tag to compare

@javamantra-dev javamantra-dev released this 04 Jun 05:57
· 7 commits to main since this release

v0.1.15 — 2026-06-03

Fixed

  • Bank of America statements with multi-page sections were
    silently dropping transactions.
    When a section had enough
    rows that it spilled onto a second page, the continuation page's
    header read "Other subtractions — continued" instead of the
    usual "Other subtractions". Pre-fix, the parser only matched
    the exact header, so every row printed under the continuation
    header was silently skipped — manifesting as a reconciliation
    off-by exactly equal to the dropped rows' total. Across one
    user's 21-statement archive, 20 statements parsed cleanly but
    one (eStmt_2023-08-17.pdf) was off by $163.93 — the sum of
    3 rows on its page 4 continuation. v0.1.15 accepts both header
    variants for all five BoA sections (Deposits, ATM, Other
    subtractions, Checks, Service fees), so any future statement
    whose section spans pages parses fully. A new unit test pins
    the regex so this can't regress.

  • Transactions: account filter no longer resets to "All
    accounts" after saving an entity or category.
    Reproduction
    the user reported: filter to one account by clicking its card
    (e.g. BofA ··5981 → 164 rows), open the Entity dialog on a
    row, click "Save rule & tag N rows" or "Apply to this row
    only" — the filter would silently drop back to All accounts,
    the strip would expand from two cards to four, and the row
    count would jump back to the all-accounts total. Root cause
    was a stale-closure race in how the totals strip's card-click
    scheduled the refetch (a setTimeout(run, 0) that captured
    the previous render's view of the filter when the user
    opened the dialog mid-flight). v0.1.15 drops the setTimeout
    pattern entirely; the refetch is now driven by a React effect
    that always closes over the latest selection. Belt-and-
    suspenders: the selection is also persisted to sessionStorage
    so it survives tab navigation within the same app session.
    All explicit-clear paths still work — "Reset filters" button,
    Account dropdown's "All" option, clicking the active card to
    toggle off, or clicking the "All accounts" card. Resets on
    app restart by design.

Notes for existing users

  • Upgrade in place. No database changes, no settings to
    migrate. Re-import any BoA statement that previously
    reconciled off — the parser will now extract the full set of
    rows. (You can spot affected statements quickly: open
    Inbox → any committed BoA statement → look for a non-zero
    "Off by" badge.)