I am making a budget tracking app that takes in your transaction history. In order to classify transactions, you can create Filters (eg Filter "fast food" = ContainsText("Mcdonalds") || ...)
Creating filters to cover absolutely every transaction would be cumbersome though, so I'm also adding a tagging system that allows you to say 'this transaction should be considered to be in this filter', but also, in case of false-positives, I'd like you to be able to tag a transaction as not being in a filter.
As such you have 3 states for a transaction and a filter: untagged, tagged as IN, tagged as NOT IN.
I want tagging to be a quick and easy process (one click, and as many filters showing as possible, aka, limited space per filter). So I was thinking a checked list box side panel next to the transaction grid, however with an added "cross" state, so that: unchecked = untagged, checked = tagged in, crossed = tagged not in,
Everything is untagged by default, and tagging IN will be far more common than tagging NOT IN or untagging, so I was thinking having the checkbox cycle in the order above would be perfect.
Note that I will likely need the indeterminate state as well, for when they have multiple transactions selected.
I'm not asking how to achieve the above. I'm asking: Is this a good idea? Is it a bad idea? Is there a better idea?