Skip to content

Balance assignment with subaccounts affects other commodities #2093

Open
@wgslr

Description

@wgslr

Using the =* balance assignment on an account with subaccounts sets all other commodities balance to 0. According to the documentation, other commodities should be unaffected as long as I'm using =* and not ==*. Compare the following examples:

Without subaccounts - correct behaviour

2023-10-01 | Add EUR
    equity            -10eur
    assets             10eur

2023-10-01 | Add USD
    equity            -12usd
    assets             12usd

2023-10-02 | Assign
    assets                 =* 20usd
    equity

The assignment transaction adds $8 to achieve the balance of $20, but eur is unaffected - as expected:

$ hledger print -x
2023-10-01 | Add EUR
    equity          -10eur
    assets           10eur

2023-10-01 | Add USD
    equity          -12usd
    assets           12usd

2023-10-02 | Assign
    assets            8usd =* 20usd
    equity           -8usd
$ hledger balance assets
               10eur
               20usd  assets
--------------------
               10eur
               20usd  

With subaccounts - unexpected behaviour

Asserting total balance of an account which has subacounts

2023-10-01 | Add EUR
    equity          -10eur
    assets           10eur

2023-10-01 | Add USD
    equity          -12usd
    assets           12usd

2023-10-02 | Assign
    assets                 =* 20usd
    equity

Now, a -10eur posting appears and clears the eur balance of assets:

$ hledger print -x
2023-10-01 | Add EUR
    equity               -10eur
    assets:cash           10eur

2023-10-01 | Add USD
    equity               -12usd
    assets:cash           12usd

2023-10-02 | Assign
    assets          -10eur
    assets            8usd =* 20usd
    equity           10eur
    equity           -8usd

$ hledger reg assets
2023-10-01 | Add EUR             assets:cash                  10eur         10eur
2023-10-01 | Add USD             assets:cash                  12usd         10eur
                                                                            12usd
2023-10-02 | Assign              assets                      -10eur              
                                                               8usd         20usd

$ hledger balance assets
              -10eur
                8usd  assets
               10eur
               12usd  assets:cash
--------------------
               20usd  

Expected behaviour

I'd expect a single posting assets 8usd be generated to get the correct usd balance, and eur balance to remain -10eur.

Note that this works correctly when the posting value is given explicitely:

# journal.hledger
2023-10-01 | Add EUR
    equity   -10eur
    assets:cash   10eur

2023-10-01 | Add USD
    equity   -12usd
    assets:cash  12usd

2023-10-02 | Assert
    assets   8usd =* 20usd
    equity   
hledger balance assets
                8usd  assets
               10eur
               12usd  assets:cash
--------------------
               10eur
               20usd  

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-BUGSomething wrong, confusing or sub-standard in the software, docs, or user experience.affects3-fewAffects just a few users.annoyance2-minorMinor to moderate usability/doc bug, reasonably easy to avoid or tolerate.docsDocumentation-related.journalThe journal file format, and its features.needs-codeTo unblock: needs code/code updatesneeds-impact-analysisTo unblock: needs analysis of interactions with other features, users, ecosystem

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions