Future allocated money, aka Envelope Budgeting

Matt Graham matt_graham2001 at hotmail.com
Wed Jan 31 15:18:55 EST 2018

Love the thoughts!

Simplicity is king I think. I am going to ponder your idea for longer Chris. It may be that there is a better way to structure budgeting in gnc, or as Adrian says maybe a new user interface is the better way to go.

One thing on my todo list is to look into how I can attach a text field to each budget entry, and each account (to explain how the number was defined. Eg in my monthly budget I might want to attach a comment to the "Dining out" account that says "$50 per weekend, plus $100 each Wed for taking the wife to dinner" (if only I had the cash for that!!!!)). So, I may be looking more into budget account structures soon and thus be better placed to see the more flexible way forward...

Thanks and regards,

-------- Original message --------
From: Adrien Monteleone <adrien.monteleone at gmail.com>
Date: 1/2/18 03:36 (GMT+10:00)
To: gnucash-devel at lists.gnucash.org
Subject: Re: Future allocated money, aka Envelope Budgeting

> On Jan 31, 2018, at 10:09 AM, Christopher Lam <christopher.lck at gmail.com> wrote:
> Hi Matt- I thought this should move to the devel list, because of technical details, and this discussion will be very speculative.
> I had a thought about how envelope budgeting could work: "divide your paycheck into separate envelopes for different purposes".
> A solution: *Create another type of transaction.*
> There's already u(n)reconciled, (c)leared, (y)reconciled, (v)oid transactions. And (f)rozen I believe is unused. Let's create a new type - (b)udget. But the balances are handled differently.
> It would require some UI and calculations changes --
> 1. The account budget balance is always maintained similarly to Running/Reconciled/Cleared Balances. But it would count all previous split-values *and* the (b)udget split amounts. However the budget running balance is not shown in the default register. This means, existing balances/register are unchanged.

Having transactions in an account register that don’t affect the balance is going to be very problematic. I think this would really confuse users.

I would think budget levels for each expense account could be exposed in the properties/preferences for each one.

The allocation of budget money would have to be handled with a special dialog on demand, or as part of an income/asset account preferences with percentages/formulas. (essentially a template transaction that fires when entries are made in that account)

We already have a budgeting mechanism to set how much we *want* to spend on a particular expense.

What we’re discussing here is a way to ‘save up’ funds received for each of those expenses.

If I understand correctly, the budget module uses hidden accounts to keep track of everything. I would think these same accounts, or other hidden accounts paired with them, could do the job.

The question is just how to design the user interface of allocating assets to those hidden accounts.

>     Let's say we're in a bank account register
>     1/1    Opening $10000 Running Balance=$10000, Cleared/Reconciled Balance= $0, Budget=$10000
>     2/1    Income +$1000  Running Balance=$11000, Cleared/Reconciled Balance= $0, Budget=$11000
>     3/1    Food -$50            Running Balance=$10950, Cleared/Reconciled Balance= $0, Budget=$10950
>     4/1  <--- today              Running Balance=$10950, Cleared/Reconciled Balance= $0, Budget=$10950
> 2. We create another Register Action: "Allocate Budget".
> "Allocate Budget" means we create a (b)udget transaction with multisplits from assets to expense accounts. By default we allocate the whole $10950. The $10950 in an asset account means "the amount remaining to allocate".
>     4/1 Budget Transaction type "b"
>            Asset:Bank -$10950
>            Expense:Food $200
>            Expense:Gas $200
>            Expense:Taxes $300
>            Imbalance $10250
> Now the state of the Bank register is:
>     5/1 Running Balance=$10050, Cleared/Reconciled Balance=$0, Budget Balance= $0
> And the Food register is:
>     3/1 Food $50      Running Balance=$50 Cleared/Reconciled=$0 Budget=$50
>     4/1 Budget $200 Running Balance=$50 Cleared/Reconciled=$0 Budget=$250
>     5/1 <--- today    Running Balance=$50 Cleared/Reconciled=$0 Budget=$250
> 3. We can allow the imbalance account to collect unbudgeted/spare monies. Or we can decide to allocate an amount smaller than $10950, leaving the 'budget' balance in the bank register a positive value.
> 4. Now the Food account has several balances accessible via API
>     Running Balance $50 - as usual counts all split-values from "n" "y" "c" including future splits.
>     Unreconciled $50 - counts splits-values from "n"
>     Cleared $0 - counts splits-values from "n" "c"
>     Reconciled $0 - counts splits-values from "n" "y" c"
>     Budget $250 - counts all split-values from "n" "y" "c" "b"
> 5. A Budget report could be created, comparing the various expenses' running balances vs the budget balance. The difference is the amount left to spend in this category. For the food account it's 250-50 = $200 left to spend.

So you go through the trouble of creating a new split status to keep track of the remaining budget, but still have to calculate the remaining budget?

> 6. Anytime the user wishes to allocate more budget to food, they can simply create (b)udget transaction from Bank or Imbalance account to the Food account.
> 7. This means, in the account register, we'll see regular transactions which can be reconciled with the bank statement. We'll also see budget transactions, not reconcilable with the bank statement. Perhaps they should be a different color/background. But this is ok, because their amounts do not affect the account running balance. The Reconcile window can also filter them out. The existing reports are unaffected. The query mechanism should ignore them by default.
> What do we think of this?
> The budget balance for an asset account represents "money remaining to allocate", and the budget balance for an expense account effectively represents "the upper limit that I'll allow this account to be". The budget balance, minus running balance represents "money left in envelope". I can increase envelope contents by transferring budget money from asset to the expense accounts.
> I wouldn't know how to handle credit card nor loan interest.
> I think it's an interesting thought experiment. The devil will be in the details.
> The advantage will be that the underlying code can handle this augmented functionality without major difficulty (famous last words.)
> Chris

In the short term, if the code for SX could either be borrowed, or amended to allow for saving a template of a transaction that is then fired on demand (say with a button) instead of on a date stamp, that could help tremendously paired with the sub-account method outlined in the user thread. I think template transactions are already an enhancement request, so there are other use cases for this feature. The most prominent I can think of is payroll.


> On 31/01/18 15:59, David T. via gnucash-user wrote:
>> Matt,
>> I have to admit that I misread the tally; I did not see that the first $500 (AllocatedCash) was balancing the others. My apologies.
>> I'll let you and Adrien work this out, since I don't have a lot of background in this.
>> David
>>       On Wed, Jan 31, 2018 at 8:58, Matt Graham<matt_graham2001 at hotmail.com> wrote:   #yiv0595440679 #yiv0595440679 -- _filtered #yiv0595440679 {panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv0595440679 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}#yiv0595440679 #yiv0595440679 p.yiv0595440679MsoNormal, #yiv0595440679 li.yiv0595440679MsoNormal, #yiv0595440679 div.yiv0595440679MsoNormal {margin:0cm;margin-bottom:.0001pt;font-size:11.0pt;}#yiv0595440679 a:link, #yiv0595440679 span.yiv0595440679MsoHyperlink {color:blue;text-decoration:underline;}#yiv0595440679 a:visited, #yiv0595440679 span.yiv0595440679MsoHyperlinkFollowed {color:#954F72;text-decoration:underline;}#yiv0595440679 .yiv0595440679MsoChpDefault {} _filtered #yiv0595440679 {margin:72.0pt 72.0pt 72.0pt 72.0pt;}#yiv0595440679 div.yiv0595440679WordSection1 {}#yiv0595440679
>> Hi Dave!
>>     Yep, that is pretty much the conclusion I’ve come to. Not sure what you are asking about in “where are you balancing the funds”. The Cr and Dr are balanced in the example. Maybe you are asking the location in the hierarchy for the accounts? It all goes up to the root account “Assets”. For this idea, I had Current Assets, Fixed assets, and Allocated Assets. All the little allocation accounts were stored in the Allocated Assets branch.
>> They were balanced by a single account under current assets called “AllocatedCash” (as per the example below). This is the weird one – a negative asset account that reflects how much I SHOULDN’T spend out of current assets unless I am spending on my allocated causes.
>>     As per Adrian’s discussions, if you are spending out of the account that you have put your sub-account into, then there are less splits and it is far easier to understand. Using Adrien’s idea, at WORST you have a couple of transactions that are just as complex as every transaction the other way – but this is only in the rare event that you spend out of a different account from that which your sub-account is in.
>>     I still haven’t fully wrapped my head around Adrien’s most recent email, so that could create some more “Aha!” moments too.
>>     Thanks and regards,
>> Matt
>>     From: David T.
>> Sent: Wednesday, 31 January 2018 2:31 PM
>> To: matt_graham2001 at hotmail.com;Adrien Monteleone; gnucash-user at gnucash.org
>> Subject: RE: Subaccounts [WAS Re: Future allocated money vs Budgets]
>>     Matt,
>>       I see one huge problem: where are you balancing the funds for the allocated accounts? They need balancing, and once you add something to balance them, you might as well male them Subaccounts of checking anyway.
>>       Cheers,
>>  David
>> On Wed, Jan 31, 2018 at 4:06, Matt Graham
>>  <matt_graham2001 at hotmail.com>
>>       [Snip]
>> If, rather than a sub-account, I use a separate asset account then there is no balancing Cr to an asset to increase the allocation. In your example, you had a balancing Cr on the parent when you allocated the money. So, we receive a $1000 pay check, and want to allocate $500 to the four accounts:
>> Cr Income: Salary $1000
>> Dr Asset:Current:Checking $1000
>> Cr Asset:Current:AllocatedCash $500
>> Dr. Assets:Allocated:Vacation    $250
>> Dr. Assets:Allocated:Insurance  $150
>> Dr. Assets:Allocated:Dining      $ 50
>> Dr. Assets:Allocated:Coffee&Tea  $ 50
>>         _______________________________________________
>> gnucash-user mailing list
>> gnucash-user at gnucash.org
>> To update your subscription preferences or to unsubscribe:
>> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.gnucash.org%2Fmailman%2Flistinfo%2Fgnucash-user&data=02%7C01%7C%7Ca9626a533e104e7f9a5f08d568c8d06d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636530134058211558&sdata=dE%2BRZf4NCJE2pHBK5NK4pWGI6DeiWeGxXN8WTYEiGC0%3D&reserved=0
>> If you are using Nabble or Gmane, please see https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwiki.gnucash.org%2Fwiki%2FMailing_Lists&data=02%7C01%7C%7Ca9626a533e104e7f9a5f08d568c8d06d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636530134058211558&sdata=ppPjgir%2FYm8VMRpKjO%2FXc98vCiB2eDfUHbG9Gl1GbAQ%3D&reserved=0 for more information.
>> -----
>> Please remember to CC this list on all your replies.
>> You can do this by using Reply-To-List or Reply-All.
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at gnucash.org
> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.gnucash.org%2Fmailman%2Flistinfo%2Fgnucash-devel&data=02%7C01%7C%7Ca9626a533e104e7f9a5f08d568c8d06d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636530134058211558&sdata=Uuop2PseFaqR38hT6F%2BfQeyNsqUMTotAMeg8tcuAVWA%3D&reserved=0

gnucash-devel mailing list
gnucash-devel at gnucash.org

More information about the gnucash-devel mailing list