I see that there is an open issue on github related to this too, see 
https://github.com/beancount/beancount/issues/742.

The present behaviour does not satisfy the definition of the pad directive 
in the language syntax, i.e. it does not 'insert a transaction that will 
make the subsequent balance assertion succeed, if it is needed'. To ensure 
this, in my opinion, ops.pad needs to be in PLUGINS_POST. I'm willing to 
file a PR on github(it's a two line change) but wanted to confirm that this 
doesn't break any other functionality.


On Tuesday, December 5, 2023 at 5:12:13 AM UTC+9 Soham Shanbhag wrote:

> Hi,
> I've been using padding to account for errors in my accounts and bank, for 
> example for transactions which I may have forgotten but are small enough 
> that I don't want to hunt for them. Usually, this goes along the lines of:
>
> 2023-12-04 pad Assets:Checking Equity:Adjustments
> 2023-12-05 balance Assets:Checking 1000 USD
>
> whenever I want to check an account in beancount with my bank. I'm also 
> using plugins which manipulate the transactions. However, beancount loads 
> the padding plugin (ops.pad) before my custom plugins in PLUGINS_PRE(see 
> beancount/loader.py), which leads to padding the accounts with values 
> before manipulation by my plugin. Since the balance directive is in 
> PLUGINS_POST, this leads to an error. For an example, see the following 
> beancount file and plugin file:
>
> ; file: temp.beancount
> option "operating_currency" "USD"
> option "insert_pythonpath" "True"
> plugin "plugin_temp"
>
> 2020-01-01 open Equity:Adjustments
> 2020-01-01 open Assets:Checking          USD
> 2020-01-01 open Expenses:Groceries
>
> 2023-01-01 pad Assets:Checking Equity:Adjustments
> 2023-01-02 balance Assets:Checking 1000 USD
>
> 2023-02-01 * "Eggs"
>     Expenses:Groceries          100 USD
>     Assets:Checking
>
> 2023-03-01 pad Assets:Checking Equity:Adjustments
> 2023-03-02 balance Assets:Checking 700 USD
>
> ; file: plugin_temp.py in the same directory
>
> from beancount.core import data
>
> __plugins__ = ('plugin_temp',)
>
> def plugin_temp(entries, unused_options_map):
>     new_entries = list(e for e in data.filter_txns(entries) if e.flag == 
> '*')
>     return new_entries + entries, []
>
>
> With bean-check, this gives the error
> Balance failed for 'Assets:Checking': expected 700 USD != accumulated 600 
> USD (100 too little)
>
>    2023-03-02 balance Assets:Checking                                 700 
> USD
>
> Is there a particular reason ops.pad is in PLUGINS_PRE and not in 
> PLUGINS_POST? Putting ops.pad in PLUGINS_POST seems to solve this issue.
>
>
> Also, it seems that issue 
> https://groups.google.com/g/beancount/c/bMo9A6lM9Z4/m/egj3rGBMBAAJ is 
> still unsolved. This also affects my above workflow, but I'm presently 
> easily sidestepping it by not using padding on an account where I do 
> balance checks.
>

-- 
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/02d0ae5f-599a-4c4b-94d9-a3f58ead8615n%40googlegroups.com.

Reply via email to