Budgeting - Let's decide what we want!
darin at blueyonder.co.uk
Mon Sep 1 11:59:34 CDT 2003
I have been lurking in the background of this discussion since it began
because I have been busy trying to figure out how to do alot of what has
been discussed here. Since my current employment has finished and I
won't be able to start anything new for several weeks yet, I am left
with some time on my hands which I would like to use productively (first
time for everything ;-). I feel that I could get a good deal done on a
budgeting engine over the next few weeks as that is the one area which I
personally need in gnucash more than any other.
So on to business. Of the two methods proposed so far I am inclined to
agree with Matthew, in separating the budgeting information from the
current engine data structures. I will outline my ideas (which are very
close to those already explained by Matthew so I appologize if I am
repeating him) and explain how I think that everyone could be happy with
a separated implementation. I am working on a prototype of the
budgeting druid (GUI only) of which I will post some screen shots in the
next day or two.
In order to understand the following I should define a few things.
Budget Timeframe: The duration this budget is active. Usually this
would be one year for a home user, but could be anything.
Budget Period: The lowest common frequency denominator for all expenses
listed in the budget. Usually this is one month but it could be a week,
a year, or ten years if appropriate.
Budget Category: A discrete budget-able item. eg Food, Rent, etc. Each
catagory would be related to one or more gnucash accounts against which
it would be compared for reporting.
To set up a budget the user would have to enter a value for each
category, a frequency, and the related accounts, as shown in the table
Budget Category Account Budget Value Frequency
Rent Expenses:Rent $500 monthly
Food Expenses:Groceries $50 weekly
Holiday in the Sun! Assets:SGoal:Holiday(*) $2400 yearly
The budgeting engine would then take these values and divide them up
evenly over the Budget Timeframe, using the Period as the common
timevalue. For example if the Budget Period is one month we would get a
table like this. (note: I am using a 4 week month for simplicity)
Budget Category Jan Feb March April May June etc.
Rent $500 $500 $500 $500 $500 $500
Food $200 $200 $200 $200 $200 $200
Holiday in the Sun! $200 $200 $200 $200 $200 $200
Now the user can modify this table to suit their specific needs. For
example October and December might need higher food budgets in order to
accomodate Thanksgiving and Christmas. (all those hungry relatives...)
As well it might not be appropriate to spread the holiday out over the
entire year. If we are going on Holiday in April we might want to ramp
up the payments till then and then not have any in that category.
Now you might look at this and say "Hey there aren't going to be any
Holiday expences till March when I book my everything included all
expences paid trip to the tropics. Why spread it out over the year." If
the user only wants to budget the entire amount in March/April then they
are free to but this lets people like me who know that come March if I
haven't saved up some money, I will have to go into debt (not fun) to
pay for the vacation and be always catching up later. By associating
the Holiday category with both a Savings goal(*) and an Expense account
I can on a monthly basis transfer money from my chequing account into
the savings goal, knowing that when I pay for the trip I will use the
money saved so far.
I think that by defining separate budget categories and then relating
them back to gnucash accounts we can accomplish everything that people
want. And yet the infrastructure will sufficently separate as to allow
a greater flexability.
As well then every account type will be able to be budgeted (not just
income/expense). I find it very likely that I will want to be able to
set up a category for my credit cards. This would allow me to make sure
that my credit card balance decreses by a set amount each month and
track that in the budget. Conversely I will want to know that my
Savings Account is increasing by a certain amount every month.
I am pretty much ready to start implementing something based on the
above ideas. I will first finish the mock ups of the budgeting druid
(today or tomorrow) and post them to a web page for comment. If anyone
has any serious concerns/comments/questions/critisims I would love to
hear them. But I do want to get going on this quickly so that I can get
something done in the next few weeks.
(*) Note: I use the Savings Goal concept as described by Lauren
I personally feel that although this method is very slick and works
within the current architecture it is not at all obvious to the
uninitiated. At some point I would like to tackle the Savings Goal
concept as well making it easier to use and set up for the novice user
but for now my priority is budgeting.
More information about the gnucash-devel