-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Merge unmatched transactions #669
Comments
The logic for matching an existing transaction with an updated one is here: actual/packages/loot-core/src/server/accounts/sync.js Lines 236 to 331 in cb0ae2d
It currently looks 1 day after the imported transaction date and 4 days before. Then, it merges any matched transactions using this logic. ( actual/packages/loot-core/src/server/accounts/sync.js Lines 344 to 352 in cb0ae2d
While it definitely makes sense to allow running this logic directly somehow, I worry about the way the merge action as currently implemented is non-symmetric and there currently isn’t a concept of “selection order” in Actual as far as I know. Maybe we could interpret the newer one as the freshly imported one? Or only enable the action when you select one “new” (bolded) transaction and one non-“new” transaction? I want to make sure that when we implement this feature it doesn’t end up being confusing. |
A couple thoughts. I don't think I would only show the option based on the condition of "new" and "old". There are too many scenarios where both transactions could end up being seen as "old", and tying functionality to an unstable condition like that seems fragile. The option should show up ANY time amounts match. It's not like enabling the option forces people to use it. It's okay if it's in the menu even when the user doesn't intend to use it for the selection. Restricting it too much will likely just result in someone with an edge case asking you to change it later. It's better to put the power in the users' hands. I do think the current match window is too small, especially when dealing with checks. It's not unreasonable for someone to wait until they "get around to it" to go to the bank. Plus, mail is unpredictable, etc. Expanding that helps a little, but doesn't solve the problem. Existing transactions should be the source of truth for metadata because they are most likely manual entry. Imports should be the source of truth for the date because it is actual from the financial institution. This is how YNAB and others do it. If that doesn't provide the desired effect, then it is very easy to undo and manually edit, but I believe this will handle the vast majority of use cases. |
Agreed, that makes sense! I do think we should limit to when exactly 2 transactions are selected though.
I agree! and this is the question: how do you know which transaction is the one that was imported? One way would be checking if one transaction has an imported payee name and the other doesn’t but how could handle cases where both or neither have an imported payee name?
I wonder if we could continentally expand the match window, since the current matching uses 3 different algorithms, with the final one being just “does the amount and account match?” Maybe we could expand the window for amount+account+payee matches but keep the others as-is? I am worried that if someone has e.g. a weekly subscription, we could accidentally merge separate transactions, though. |
Why not do it by date? Won't the oldest transaction always be the manual entry, and the newest always be the import? I can't think of a reason that I would manually enter a transaction after it had already been imported and then merge them. If I wanted to update a transaction that had already been imported, then I would just edit the existing imported record. No need for a merge. Therefore, logically, the imported transaction should always be the more recent, unless I'm missing a use case.
I think what I've seen elsewhere is that the time window is much larger, and rather than auto-merge, the interface shows a potential match and the user determines whether or not to merge them or leave them separate. |
One case where this would not be true is if you manually add a transaction on eg Feb 10th, but the bank records it on Feb 9th. If you import on Feb 20th, you would want to merge the newer transaction into the older one, I think. That said, we could do a 2-step algorithm: if one transaction was just imported and the other one wasn’t, then update the transaction that was just imported. Otherwise, update the newest transaction. People can always undo the change and manually perform the merge if it doesn’t work correctly. |
At least in my use case, I generally get a file with the 50 most recent transactions, which tends to have considerable overlap with the transactions already in my account, so manually approving merges would not be a good experience (although maybe we could only prompt for lower-confidence matches?). That would still introduce another interstitial modal which I’m not a huge fan of, though. |
Maybe having an option to either auto match or manually match? I do agree the last two things keeping me from using this full time is mobile entry (which is being worked on now) and a way to merge transactions when I import my bank statements so they don't get imported again. |
Very true. Any matches that include a transaction that is already reconciled should be merged without prompt. Does that make sense? |
✨ Thanks for sharing your idea! ✨ This repository is now using lodash style issue management for enhancements. This means enhancement issues will now be closed instead of leaving them open. This doesn’t mean we don’t accept feature requests, though! We will consider implementing ones that receive many upvotes, and we welcome contributions for any feature requests marked as needing votes (just post a comment first so we can help you make a successful contribution). The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=is%3Aissue+label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc Don’t forget to upvote the top comment with 👍! |
@j-f1 Just weighing in on this... YNAB explains what they do for the most part here: YNAB 4 and 5 use a 10 day window before and 10 day window after the imported transaction date to find potential matches. They both use the manually entered transaction as the truth for date, payee and category (same behavior as in YNAB 4). Also, both YNAB 4 and YNAB 5 use the imported transaction as the truth for amount if manually matching. When 2 transactions are matched, YNAB4 (and YNAB5) requires the user to either approve the match, delete both transactions, or unmatch the 2 transactions. So action is always needed on the user's side. It's worth noting that newly importing previous transactions don't require matching since those have already been confirmed (so if the import ID matches, no need to approve or disapprove the match). Screenshot of matched transactions: Here's a screenshot of how the approval of a match looks: On a sidenote, in YNAB 4, all newly imported transactions (OFX, CSV etc) need to be approved. I much prefer this to Actual just importing and categorizing and losing visibility and control of what was imported. Transfers and matches:
Manual matches:
Transaction entered 2nd is always the source of truth for date, payees and categories regardless of transaction date
Hope knowing how YNAB behaves helps. I personally think they have the correct logic figured out and if we can replicate it in Actual, that'd be awesome! |
I was getting excited that someone might have completed this only to come here and see the completely different issue this was closed for. Please reopen this. I use the transfers and it's solves none of the issues listed in this feature request |
Why was my comment deleted? As the OP, I was seeking clarification for why the issue was closed. |
Seems like it was a misunderstanding of the request. To be fair I also misunderstood the request originally too and thought that it was exactly what that PR did. Upon better reading, you are correct that this is a different feature than that PR adds. The feature is open again |
Thanks @youngcw. Yes I misunderstood the PR. I thought by reseting my mistake and re-opening the issue it would be understood that I incorrectly marked the request. @lanmaster53, I hope you now have the clarification you so desire. My apologies for the mistake. |
It is still showing as closed for me. |
Yes, it's been closed for months. If you look at the history you'll see I didn't change the open status. All feature requests are kept as closed in this repo. We use labels to mark them as complete or not. |
Just want to add another voice for this request. I just had multiple imported transactions fail to match existing scheduled transactions. In one case, all fields were identical except the amount was off by $0.01! In the other, it was a couple days and $10 difference. However, even after manually adjusting the scheduled transaction to perfectly match, there was no way to trigger a merge or force Actual to recognize them. The only workaround I could find was to delete the imported transactions, then run bank sync again. While I would love the ability to select the two transactions and force a match, even the ability to just tigger "search for duplicates" across the board would be an improvement. I also think the fuzzy logic for matching could use improvement. It should not fail due to a 1 penny difference in amount! |
+1. Being able to manually merge two transactions into a single transactions is a big part of how I reconciled accounts in YNAB4 and is the only thing I feel is missing in ActualBudget. Especially when recurring transactions amounts can vary. |
I'd also like to have a way to manually merge transactions. |
Verified feature request does not already exist?
💻
Pitch: what problem are you trying to solve?
When Actual fails to recognize a transaction as a match, it doesn't provide a way to gracefully merge the transactions. This is a workflow that I encounter very often and is a show-stopper for me as someone that wants to transition to Actual on a permanent basis.
Describe your ideal solution to this problem
When 2 transactions are selected, there should be an option in the actions menu to merge the transactions so that the manual entry is updated with the date from the imported version. Manually updating one of the entries and deleting the other is an unnecessary and cumbersome process for something so simple. All other budgeting software I've used have had this feature.
Teaching and learning
It was intuitive for me to look for that functionality in the actions menu when I had 2 transactions selected. I was quite surprised that the feature didn't exists because it is such a common workflow. Other than add a blurb in the importing section about merging, I don't think much else would be needed. It's an intuitive feature.
The text was updated successfully, but these errors were encountered: