On Mon, Jul 6, 2020 at 7:31 AM Justus Pendleton <[email protected]> wrote:
> The v3 goals & design document expresses an openness to some kind of
> support for budgeting semantics.
>
> Beancount does not support budgeting constraints explicitly, but I think
>> it would be possible to extend the balance assertion semantics to cover
>> this.
>>
>> The current balance assertions check (a) a single commodity, and (b) that
>> the amount is precisely equal to an expected one. Balance assertions should
>> be extended to support inequalities, e.g.,
>>
>> 2020-06-02 balance Liabilities:CreditCard > 1000.00 USD
>>
>> and perhaps we could check for the total inventory like this
>>
>> 2020-06-02 balanceall Assets:Cash 200.00 USD, 300.00 CAD
>>
>> I'd be curious to hear what would work best from users who do budgeting
>> and design a minimalistic expression language to support that use case
>> (though I'd try to keep it as simple as possible to avoid feature creep)
>>
>
> I left a brief comment on the document based on my personal experiences
> with budgeting. Martin asked for more detail & the mailing-list felt like a
> better medium for that, so here it is.
>
> I think that Martin's insight is a good one: there is a lot of
> similarities between a balance statement and a budgeting constraint and it
> is tempting to reuse the syntax (possibly with some extensions, as
> suggested above).
>
> The more I think about, the more I think it should be a new directive,
> rather than reusing the balance directive. The primary reason I say that
> is: people are mostly going to want budgeting constraints to be in a
> single, primary currency with magical currency conversions happening
> underneath the covers for them. If your Expenses:Vacation budget is
> USD$1,000 you're not going to be impressed if beancount tells you "you only
> USD$500, congratulations you are under budget! Of course, you also spent
> €1,500 and £750 on that vacation...."
>
> I personally have finances & spending split across three currencies but
> only think about budgeting relative to a primary currency. I would be
> annoyed if I had to budget ₫79,000 because Spotify bills my Vietnamese
> credit card separately from the AUD$9.99 I am billed by Netflix Australia
> on my Australian credit card. I just look (plus a few others) at all that
> as "eh, about USD$50 a month on digital streaming services".
>
> But trying to make the existing balance statement handle currency
> conversions seem fraught and not especially useful. It seems more less
> confusing and error-prone to keep it as an exact equality assertion.
>
> An additional reason to keep them separate: balance assertions are
> "eternal" and hard errors but budget constraint violations are "ephemeral"
> and soft warnings. If my beancount file violates a balance assertion then
> that means my accounting is messed up and I start going through bank
> statements to see what I did wrong. Then I edit my beancount history to
> make things right. The balance assertion error goes away.
>
> When I violate a budget constraint....I take note of that and decide eat
> at home for the rest of the month. I definitely don't want beancount,
> everytime it runs, to tell me "hey, back in November 1982 you violated the
> budgeting constraint for Expenses:Restaurant".
>
> Keeping them separate makes it easier to give them different runtime
> behaviour. Maybe only show budget constraint violations from the the past
> 30 days. I dunno.
>
Two really good points.
In summary:
- Budgeting needs a new type of balance check with automatic conversions.
- Balance check needs to be applied on the tail end of time series only.
> So my suggestion would be:
>
> 1. Keep balance directive mostly as-is. Add support for complete (and not
> just partial) assertions. Consider supporting intra-day or end-of-day
> balance statements. But I'm not sure they need to actually support
> inequalities.
> 2. Add a budget directive that only accepts a single currency (i.e.
> doesn't support the "complete assertions" syntax). Perform implicit
> currency conversions to that currency. The amount is (implicitly, by
> reporting & plugins) treated as an inequality but I'm not sure any syntax
> is required to denote it.
>
> (nb that even though these are different directives in the user interface
> for clarity they might be unified into a single code path since, as
> Martin's document points out, they share so many similarities)
>
> That means a balance-statement is '=' and a budget-statement is '<='. My
> proposal means there is no way to denote a '>=' assertion in beancount. I
> can imagine uses cases for a '>=' assertion ("I don't want my emergency
> fund to ever drop below $5,000") but they are purely theoretical for me so
> I'm hard-pressed to care much about them. I'll leave it to others to argue
> that maintaining full inequality support is a worthwhile goal :)
>
Other question: How does forecasting interact with budgeting? Is it
necessary?
--
You received this message because you are subscribed to the Google Groups
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/beancount/CAK21%2BhMZFnH6%2BVoNGN29JVhsoHShKJ66FRf-nYhHWt4i5tYoBw%40mail.gmail.com.