Re: [gratipay/finances] Port to Beancount (#35)

49 views
Skip to first unread message

Martin Blais

unread,
Jan 15, 2017, 11:47:07 PM1/15/17
to gratipay/finances, Beancount, gratipay/finances, Martin Blais, Mention
I still don't understand what you wrote. I re-read it many times, but it still
doesn't make sense to me. I'm not much of an accountant, and we're not using
those words the same way.

Here's how I would approach this problem should I have to do the same thing
myself. Please note that I am not an accountant and that whatever you do, this
is not legal advice in any way, and you should consult a professional to look at
setting up your company's finances (DISCLAIMER: I'M NOT A PRO. Don't trust
anything I say, we're just talking about ideas here).

You can cut-and-paste the following to run queries against it.
     


;; First, I'd ask, "what aggregates do I want to keep track of?"                      
;;                                                                                    
;; - The amount of borrowed money I owe to each donator:                              
;;                                                                                    
;;     Liabilities:Donator:<DonatorName>                                              
2016-01-01 open Liabilities:Donator:Donald            USD
2016-01-01 open Liabilities:Donator:Mike              USD
2016-01-01 open Liabilities:Donator:Rex               USD


;; - The amount of pending payments I owe to each project:                            
;;                                                                                    
;;     Liabilities:Project:<ProjectName>                                              
;;                                                                                    
2016-01-01 open Liabilities:Project:Linux             USD
2016-01-01 open Liabilities:Project:Apache            USD
2016-01-01 open Liabilities:Project:MySQL             USD
2016-01-01 open Liabilities:Project:Firefox           USD


;; These are the "client accounts" for which you could generate a journal and         
;; send statements to donators or projects about.                                     


;; To keep the company's money separated from the escrow money I'd open two           
;; real, separate corporate bank accounts (you might have to actually do this I       
;; think, if there's banking regulation affecting the holding of other people's       
;; money).                                                                            
;;                                                                                    
;; - The amount of money in our escrow account                                        
;;                                                                                    
;;     Assets:US:BigBank:Escrow                                                       
;;                                                                                    
2015-06-01 open Assets:US:BigBank:Escrow               USD


;; - The amount of money in our company account                                       
;;                                                                                    
;;     Assets:US:BigBank:Checking                                                     
;;                                                                                    
2015-06-01 open Assets:US:BigBank:Checking             USD


;; Then there's the rest of the regular company operating accounts:                   
;;                                                                                    
;; - The amount of income we took (I'll assume it's fees as a % of                    
;;   contributions, but it doesn't matter):                                           
;;                                                                                    
;;     Income:US:Fees                                                                 
;;                                                                                    
2015-06-01 open Income:US:Fees                         USD


;; - Company expenses                                                                 
;;                                                                                    
;;     Expenses:<...>                                                                 
;;                                                                                    
2015-06-01 open Expenses:OfficeSupplies
2015-06-01 open Expenses:Salaries:Chad                         USD


;; I would want to disconnect the notion of payments actually made to                 
;; contributions made to projects. So we're going to do accrual accounting with       
;; the accounts above:                                                                
;;                                                                                    
;; - When a donator makes a payment, I'll assume they pay sums seldomly and           
;;   ahead of time, even if the donations accrue monthly. For the example I'll        
;;   assume that they're one-time donations intended to be spread out over many       
;;   months to projects.                                                              
;;                                                                                    
;; - I'll further assume that while donations to projects accrue monthly,             
;;   payments to them are made every three months, just to make things a bit          
;;   more hairy. This is a realistic need too: in reality payments might bounce       
;;   or be delayed for various reasons.                                               


;; Let's look at some transactions now.                                               
;;                                                                                    
;; When a donator makes a payment, you receive the money in the escrow account        
;; and add to the amount you owe them:                                                

2016-01-10 * "Received money from Donald"
  Liabilities:Donator:Donald    -10000.00 USD
  Assets:US:BigBank:Escrow

2016-01-11 * "Received money from Mike"
  Liabilities:Donator:Mike    -2000.00 USD
  Assets:US:BigBank:Escrow

2016-01-12 * "Received money from Rex"
  Liabilities:Donator:Rex    -4500.00 USD
  Assets:US:BigBank:Escrow


;; When it's time to accrue donator payments to particular projects, you create       
;; a transaction for that. I'll assume this occurs at the end of a month:             

2016-01-31 * "Monthly donation for Donald"
  Liabilities:Donator:Donald    500.00 USD
  Liabilities:Project:Linux    -300.00 USD
  Liabilities:Project:Apache   -120.00 USD
  Liabilities:Project:Firefox   -80.00 USD

2016-01-31 * "Monthly donation for Mike"
  Liabilities:Donator:Mike      210.00 USD
  Liabilities:Project:Linux     -90.00 USD
  Liabilities:Project:MySQL    -120.00 USD


;; When you accept a fee for processing this, you could do that in a separate         
;; transaction, while at the same time tranferring money to the company's             
;; account:                                                                           

2016-01-31 * "Collecting fees for processing"
  Liabilities:Donator:Donald     20.00 USD
  Liabilities:Donator:Mike       20.00 USD
  Liabilities:Donator:Rex        20.00 USD
  Income:US:Fees                -60.00 USD
  Assets:US:BigBank:Escrow      -60.00 USD
  Assets:US:BigBank:Checking     60.00 USD


;; Finally, when you get to making a payment to a project, you take it out of         
;; the escrow account:                                                                

2016-02-25 * "Apache Foundation" "February payment"
  Liabilities:Project:Apache     120.00 USD
  Assets:US:BigBank:Escrow

2016-02-25 * "Mozilla Foundation" "February payment"
  Liabilities:Project:Firefox     80.00 USD
  Assets:US:BigBank:Escrow

2016-02-25 * "Linus Torvalds" "February payment"
  Liabilities:Project:Linux      390.00 USD
  Assets:US:BigBank:Escrow

2016-02-25 * "Oracle" "February payment"
  Liabilities:Project:MySQL      120.00 USD
  Assets:US:BigBank:Escrow


;; After the payments, the balances should be zero. If you like, you could            
;; assert this:                                                                       

2016-02-26 balance Liabilities:Project:Linux    0.00 USD
2016-02-26 balance Liabilities:Project:Apache   0.00 USD
2016-02-26 balance Liabilities:Project:Firefox  0.00 USD
2016-02-26 balance Liabilities:Project:MySQL    0.00 USD


;; All the other company expenses entered as per usual:                               

2017-03-12 * "Envelopes"
  Expenses:OfficeSupplies          7.99 USD
  Assets:US:BigBank:Checking



I'd organize these in sections, in whichever way makes it easiest to update.
I would write scripts to automatically generate the accrual of payments with appropriate percentages and fees and whatever.
Then I'd also write scripts to generate per-client statements of accounts to be mailed or rendered on the company's site.

Hope this helps,





On Sat, Jan 14, 2017 at 6:52 AM, Chad Whitacre <notifi...@github.com> wrote:

If you tell us what you're trying to achieve we might be able to come up with something

We want to:

  1. keep operations (our money) and escrow (your money) separate,
  2. have operations hit Equity:Earnings:Current on the balance sheet (as usual),
  3. have escrow hit Liabilities:Escrow on the balance sheet,
  4. balance Assets:Escrow and Liabilities:Escrow, and
  5. have operations and escrow both show up on the income statement.

My proposal is:

2012-06-01  *
    Assets:Escrow             10.00 USD
    Income:Escrow            -10.00 USD
2012-06-01  *
    Equity:Earnings:Current   10.00 USD
    Liabilities:Escrow       -10.00 USD

I understand that you need to differentiate between income to Gratipay and funds held on account, but this is exactly what Income: vs Liabilities: are for.

This seems to suggest that we simply do:

2012-06-01  *
    Assets:Escrow             10.00 USD
    Liabilities:Escrow       -10.00 USD

That would address (1) through (4), but not (5): without running through Income, escrow doesn't show up on the income statement.

you can easily write Python scripts and plugins on top of it, to automated some of your work (this might help keep the input simpler if needed)

Not a bad idea. Presumably we'd then do:

2012-06-01  *
    Assets:Escrow             10.00 USD
    Income:Escrow            -10.00 USD

and automate the additional transaction to clear from Equity:Earnings:Current to Liabilities:Escrow.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.


Reply all
Reply to author
Forward
0 new messages