Hi Martin, This is as good an explanation as I've seen. Thanks for chipping in.
To me this is yet another one of those odd things people familiar with accounting might do and don't question the basis for. It's also very strange to me someone would call their checking account balance "real" when it doesn't actually match what the bank would report. I still see this just as a payable account. I do buy your explanation that this does hint at some sort of special handling for checks from something like QB, that would make sense indeed. Here's a third way to handle this in Beancount: create two subaccounts, e.g. Assets:Bank:Checking:Actual Assets:Bank:Checking:Pending Post the check to pending as you would a payable, when it clears, book that in Actual against Pending. In other words, treat the Pending account as a payable account dedicated to the checking account. Actual just tracks the ingested transactions and should reflect the bank statement. Now, if you need the reconciled account (what personally I'd call the "real" one), report on Actual. If OTOH you need your combined balance (including pending checks, what others might - perhaps foolishly - call "real"), report on the Checking parent account, which will include transactions from the two. On Wed, Apr 17, 2019 at 12:01 PM Martin Michlmayr <[email protected]> wrote: > * Stefano Zacchiroli <[email protected]> [2019-04-17 14:56]: > > The traditional way of tracking this in Beancount/Ledger (and, in fact, > > in double-entry accounting with accrual basis) would be: > > > > 2018-12-20 * "author payment" "Mr Foo Bar" > > Note that you mixed up the order of payee and narration in the example. > > > ; cheque: "12345678" > > Expenses:Writing 1000.00 USD > > Liabilities:Payables -1000.00 USD > > BTW, technically this may not even be the whole storyfor the accrual > basis because the liability probably arises earlier. There would in > fact be 3 entries: > > 1) author submits article/invoice -> liability arises > 2) LWN posts checks a week later > 3) Author deposits check a few weeks later > > > 2019-01-04 * "cashing in author cheque" "Mr Foo Bar" > > ; cheque: "12345678" > > Liabilities:Payables 1000.00 USD > > Assets:Checking -1000.00 USD > > > > Unless I'm misunderstanding your needs > > I think what you're missing is that checks are handled in a special > way. Checks are treated as cash and for accounting purposes the > money leaves your bank account the moment you write your check (not > when the check is actually deposited). > > This is why a bank reconciliation is needed: your books will say one > bank balance but your actual bank balance is different. That's why > you add up all outstanding checks during the bank reconciliation. > > And this is also why the "deduplication" is needed: because at some > point you import the bank transactions, and voila, the check has been > deposited and now your bank accounts goes down by $1000 twice - once > for when you recorded the check manually, and once for the bank > transaction. > > See e.g. > https://www.bizfilings.com/toolkit/research-topics/marketing/advertising-pr/accounting-for-cash-transactions > for some background on this. > > I tried to find out if checks are handled in different ways in cash vs > accruals accounting. While I couldn't find as much information as I > had hoped, I think it's the same. (But of course the time of the > expense can be different: in accruals, you accrue the expense when the > author submits the invoice, as mentioned above; on the cash basis, > it's at the time you send the check.) > > So the question is how to best model this in beancount. I see two > options: > > 1) when you send the check, you decrease the bank account. You then > tell your bank importer script to ignore all entries where checks are > cashed (it might be something like "CHECK POSTED"). This solves the > deduplication problem, but imho doesn't give a satisfactory answer for > the reconciliation step since it's difficult to get a list of all > outstanding checks. > > 2) You create an account to track checks. This isn't how you'd report > it to your accountant, but to use internally, so e.g. (assuming > accruals basis): > > 2018-12-10 * "Foo Bar" "submits article" > Expenses:Writing 1000.00 USD > Liabilities:Payables -1000.00 USD > > 2018-12-20 * "Foo Bar" "Wrote check for Foo Bar" > ; cheque: "12345678" > Liabilities:Payables 1000.00 USD > Liabilities:Checks -1000.00 USD > > (If you're on the cash basis, you'd ignore the first transaction and > use 'Expenses:Writing' in the second transaction instead of payables.) > > 2019-01-04 * "Foo Bar" "cashing in author cheque" > ; cheque: "12345678" > Liabilities:Checks 1000.00 USD > Assets:Checking -1000.00 USD > > (When you important the bank transactions, you'll have to go through > all outstanding checks and assign the metadata for cashsed checks > manually, or you might be able to write a progream to match on author > name or something clever.) > > So now you can easily track which checks are still outstanding. > Just look at Liabilities:Checks and do a GROUP BY on the 'cheque' > metadata. Those that have been cashed will be 0, the rest will > show up. It also solves the deduplication problem. > > But it doesn't give the view that accountants would expect and > it doesn't show what the account balance is if you take the uncashed > checks into account (although, as Zack pointed out, you could simply > do a balance on Assets:Checking *and* Liabilities:Checks). For that > I'd write a beancount plugin which would make 2 changes to my > transactions: > > 1) For transactions involving Liabilities:Payables and > Liabilities:Checks, it would change Liabilities:Checks to > Assets:Checking. > 2) For transactions involving Liabilities:Checks and Assets:Checking > it would drop the whole transaction (deduplication). > > Then if I want to do a bank reconciliation and see what checks are > outstanding, I would turn the plugin off. Otherwise it's on. > > I'm not really satisfied by this answer, but that's the best approach > I can think of. Maybe someone else has a more elegant solution. > > -- > Martin Michlmayr > https://www.cyrius.com/ > > -- > You received this message because you are subscribed to the Google Groups > "Beancount" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/beancount/20190417160131.GK1709%40jirafa.cyrius.com > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Beancount" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/CAK21%2BhN%2BeLNXmE9HBVozwep7h_%3Dutjtfwc7EjEM00c4eh0HD7g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
