I'm just starting to use ledger to implement finances for an
organization.  The organization is a home with a bunch of folks where
we share costs.  I'm thinking that the virtual transactions will work
great for budgeting; for example I'm thinking of doing something like
this to track utilities bills:

4/1 Pay electric
  Expenses:Utilities:Electric   $100
  Housebills:Dave    ; because I'm the one who actually paid it
  (Budget:Utilities:2010-04)  $100

4/1 Pay gas for April and May
  Expenses:Utilities:Water   $100
  Housebills:Jane    ; Maybe she paid the water bill
  (Budget:Utilities:2010-04)  $50
  (Budget:Utilities:2010-05)  $50

; ... etc for all the utilities

; Then when it's time to issue housebill, I can use
;   ledger bal budget:utilities:2010-04
; to find out that the total utilities for the month were $150

4/15 Charge utilities
  Income:Utilities Collected   $-150
  (Budget:Utilities:2010-04)  $-150
  Housebills:Dave  $50
  Housebills:Jane  $50
  Housebills:Alex  $50

splitting the costs evenly among my housemates



So there are two features that would be nice here:

 1: For many instances of the virtual posting (the first and the last,
specifically) I want the posting to the budget to be the exact same as
some real posting.  For example, I'd like to add the exact value I
spent on electricity to the utilities budget and having to type the
same number twice leaves room for error.

 2: There are a bunch of cases where I want to divide a charge evenly
among a bunch of postings.  Both in the "Take the utilities budget for
this month and divide it evenly among my housemates" case (all
non-virtual) and in the "Take the water bill (real charge) and divide
it evenly among virtual budget charges for two months" cases.


Maybe these can be implemented by allowing some sort of special syntax
in the amount field?  So I could write something like:


4/1 Pay electric
  Expenses:Utilities:Electric   $100
  (Budget:Utilities:2010-04)  ^=^
  Housebills:Dave    ; because I'm the one who actually paid it

4/1 Pay gas for April and May
  Expenses:Utilities:Water   $100
  (Budget:Utilities:2010-04)  ^/^
  (Budget:Utilities:2010-05)  ^/^
  Housebills:Jane    ; Maybe she paid the water bill

4/15 Charge utilities
  Income:Utilities Collected   $-150
  (Budget:Utilities:2010-04)  ^=^
  Housebills:Dave  ^-/^
  Housebills:Jane  ^-/^
  Housebills:Alex  ^-/^

This is not necessarily the best syntax.  The semantics would basically be:

 - When you read a ^=^, interpret it as equal to whatever is written
immediately above it.

 - When you read a ^-=^, interpret it as the negative of whatever is
written immediately above it.

 - When you read a ^/^, hold off on calculating its value and keep
reading until you find a posting that isn't ^/^.  Then take the value
immediately above the first ^/^, divide it by the number of ^/^s, and
assign that it all of them.  ^-/^ is the same but assigns the
negative.

^^ elements perhaps can't be after a posting with an empty amount.  If
you place a ^=^ after a ^/^ it copies the value of the ^/^ not the
total that it was adding up to.

Would something like this be reasonable? I'd be interesting in helping
implement too, although I'll admit that I've had some difficulty
getting a build environment for ledger (I can probably build based on
whatever is in MacPorts but that isn't git master, I think).

--dave

-- 
[email protected] | langtonlabs.org | flickr.com/photos/glasser/

Reply via email to