Beancount for Kitty, simple model

TL;DR

A simple model of a kitty for Beancount.

After laying down the needs in Looking at Beancount, I went for a direct mapping of the different accounts, setting most of them as Assets and the External one as an Equity:

2021-01-01 open Assets:Common   EUR
2021-01-01 open Assets:Alice    EUR
2021-01-01 open Assets:Bob      EUR
2021-01-01 open Assets:Carol    EUR
2021-01-01 open Equity:External EUR

Now, let’s recap the first transactions, where the three participants do a wire transfer to the common account:

 1. External --> Common:   100 EUR
 2. Common   --> Alice:    100 EUR 
 3. External --> Common:    90 EUR
 4. External --> Common:   120 EUR
 5. Common   --> Bob:       90 EUR
 6. Common   --> Carol:    120 EUR

Their mapping to Beancount is straightforward:

2021-01-01 * "wire transfer from Alice, from the bank"
   Assets:Common   100 EUR
   Equity:External

2021-01-01 * "attribution to Alice"
   Assets:Alice  100 EUR
   Assets:Common

2021-01-02 * "wire transfer from Bob, from the bank"
   Assets:Common   90 EUR
   Equity:External

2021-01-02 * "wire transfer from Carol, from the bank"
   Assets:Common   120 EUR
   Equity:External

2021-01-03 * "attribution to Bob"
   Assets:Bob    90 EUR
   Assets:Common

2021-01-03 * "attribution to Carol"
   Assets:Carol  120 EUR
   Assets:Common

Now the expenses directly from the common account:

 7. Common   --> External:  60 EUR
 8. Alice    --> Common:    20 EUR
 9. Bob      --> Common:    20 EUR
10. Carol    --> Common:    20 EUR

These can be represented with two records, one related to what comes from the bank statement, the other one for the splitting:

2021-01-20 * "buying something for the group, via the bank"
   Assets:Common -60 EUR
   Equity:External

2021-01-20 * "splitting the expense"
   Assets:Alice  -20 EUR
   Assets:Bob    -20 EUR
   Assets:Carol  -20 EUR
   Assets:Common

Last the direct expense from Alice (let’s stick to the simpler model):

11. Common --> Alice:  30 EUR
12. Alice  --> Common: 10 EUR
13. Bob    --> Common: 10 EUR
14. Carol  --> Common: 10 EUR

This can be addressed in one single recording:

2021-01-27 * "Alice buying something directly"
   Assets:Alice  30 EUR
   Assets:Alice -10 EUR
   Assets:Bob   -10 EUR
   Assets:Carol -10 EUR

So… let’s see how it goes:

$ bean-report example.bc balances
Assets:Alice       100 EUR
Assets:Bob          60 EUR
Assets:Carol        90 EUR
Assets:Common   
Equity:External   -250 EUR
Expenses        
Income          
Liabilities

It’s working, which is fair. I’m not sure it’s the best way to model the whole thing… but it’s surely one!


Comments? Octodon, Twitter, GitHub, Reddit, or drop me a line!