For checking accounts, I have a list of rules that each transaction passes through. If a rule matches it generates the double-entry transaction going from the checking account to the account listed in the rule (or vice versa if the amount is positive). Earlier rules take precedence over later rules. If no rule matches it errors and prints out the transaction so I can add a new rule.
The main account I use for day to day spending is Monzo, they correctly categorise 99% of my transactions for me (and this is included in the csv export) which makes this way easier.