lib: fix behavior of nested budgets and --show-unbudgeted
This commit is contained in:
parent
92e7370f1f
commit
f3366c7256
@ -65,11 +65,16 @@ type BudgetReportRow = PeriodicReportRow BudgetCell
|
||||
-- and compare these to get a 'BudgetReport'.
|
||||
-- Unbudgeted accounts may be hidden or renamed (see budgetRollup).
|
||||
budgetReport :: ReportOpts -> Bool -> Bool -> DateSpan -> Day -> Journal -> BudgetReport
|
||||
budgetReport ropts assrt showunbudgeted reportspan d j =
|
||||
budgetReport ropts' assrt showunbudgeted reportspan d j =
|
||||
let
|
||||
-- Budget report demands ALTree mode to ensure subaccounts and subaccount budgets are properly handled
|
||||
-- and that reports with and without --show-unbudgeted make sense when compared side by side
|
||||
ropts = ropts' { accountlistmode_ = ALTree }
|
||||
q = queryFromOpts d ropts
|
||||
budgetedaccts =
|
||||
dbg2 "budgetedacctsinperiod" $
|
||||
nub $
|
||||
concatMap expandAccountName $
|
||||
accountNamesFromPostings $
|
||||
concatMap tpostings $
|
||||
concatMap (flip runPeriodicTransaction reportspan) $
|
||||
@ -77,7 +82,7 @@ budgetReport ropts assrt showunbudgeted reportspan d j =
|
||||
actualj = dbg1 "actualj" $ budgetRollUp budgetedaccts showunbudgeted j
|
||||
budgetj = dbg1 "budgetj" $ budgetJournal assrt ropts reportspan j
|
||||
actualreport@(MultiBalanceReport (actualspans, _, _)) = dbg1 "actualreport" $ multiBalanceReport ropts q actualj
|
||||
budgetgoalreport@(MultiBalanceReport (_, budgetgoalitems, budgetgoaltotals)) = dbg1 "budgetgoalreport" $ multiBalanceReport ropts q budgetj
|
||||
budgetgoalreport@(MultiBalanceReport (_, budgetgoalitems, budgetgoaltotals)) = dbg1 "budgetgoalreport" $ multiBalanceReport (ropts{empty_=True}) q budgetj
|
||||
budgetgoalreport'
|
||||
-- If no interval is specified:
|
||||
-- budgetgoalreport's span might be shorter actualreport's due to periodic txns;
|
||||
|
||||
@ -377,42 +377,149 @@ You can now see a monthly budget report:
|
||||
$ hledger balance -M --budget
|
||||
Budget performance in 2017/11/01-2017/12/31:
|
||||
|
||||
|| 2017/11 2017/12
|
||||
======================++=================================================
|
||||
<unbudgeted> || $20 $100
|
||||
assets:bank:checking || $-2445 [99% of $-2480] $-2665 [107% of $-2480]
|
||||
expenses:bus || $49 [98% of $50] $53 [106% of $50]
|
||||
expenses:food || $396 [99% of $400] $412 [103% of $400]
|
||||
expenses:movies || $30 [100% of $30] 0 [0% of $30]
|
||||
income || $1950 [98% of $2000] $2100 [105% of $2000]
|
||||
----------------------++-------------------------------------------------
|
||||
|| 0 0
|
||||
|| Nov Dec
|
||||
======================++====================================================
|
||||
assets || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
assets:bank || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
assets:bank:checking || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
expenses || $495 [ 103% of $480] $565 [ 118% of $480]
|
||||
expenses:bus || $49 [ 98% of $50] $53 [ 106% of $50]
|
||||
expenses:food || $396 [ 99% of $400] $412 [ 103% of $400]
|
||||
expenses:movies || $30 [ 100% of $30] 0 [ 0% of $30]
|
||||
income || $1950 [ 98% of $2000] $2100 [ 105% of $2000]
|
||||
----------------------++----------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0]
|
||||
```
|
||||
By default, only accounts with budget goals during the report period are shown.
|
||||
`--show-unbudgeted` shows unbudgeted accounts as well.
|
||||
Top-level accounts with no budget goals anywhere below them are grouped under `<unbudgeted>`.
|
||||
|
||||
By default, only accounts with budget goals during the report period are shown. In the example
|
||||
above, transactions in `expenses:gifts` and `expenses:supplies` are counted towards `expenses` budget,
|
||||
but accounts `expenses:gifts` and `expenses:supplies` are not shown, as they don't have any budgets.
|
||||
|
||||
|
||||
You can use `--show-unbudgeted` shows unbudgeted accounts as well:
|
||||
```shell
|
||||
$ hledger balance -M --budget --show-unbudgeted
|
||||
Budget performance in 2017/11/01-2017/12/31:
|
||||
|
||||
|| Nov Dec
|
||||
======================++====================================================
|
||||
assets || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
assets:bank || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
assets:bank:checking || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
||||
expenses || $495 [ 103% of $480] $565 [ 118% of $480]
|
||||
expenses:bus || $49 [ 98% of $50] $53 [ 106% of $50]
|
||||
expenses:food || $396 [ 99% of $400] $412 [ 103% of $400]
|
||||
expenses:gifts || 0 $100
|
||||
expenses:movies || $30 [ 100% of $30] 0 [ 0% of $30]
|
||||
expenses:supplies || $20 0
|
||||
income || $1950 [ 98% of $2000] $2100 [ 105% of $2000]
|
||||
----------------------++----------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0]
|
||||
```
|
||||
|
||||
|
||||
You can roll over unspent budgets to next period with `--cumulative`:
|
||||
```shell
|
||||
$ hledger balance -M --budget --cumulative
|
||||
Budget performance in 2017/11/01-2017/12/31:
|
||||
|
||||
|| 2017/11/30 2017/12/31
|
||||
======================++=================================================
|
||||
<unbudgeted> || $20 $120
|
||||
assets:bank:checking || $-2445 [99% of $-2480] $-5110 [103% of $-4960]
|
||||
expenses:bus || $49 [98% of $50] $102 [102% of $100]
|
||||
expenses:food || $396 [99% of $400] $808 [101% of $800]
|
||||
expenses:movies || $30 [100% of $30] $30 [50% of $60]
|
||||
income || $1950 [98% of $2000] $4050 [101% of $4000]
|
||||
----------------------++-------------------------------------------------
|
||||
|| 0 0
|
||||
|| Nov Dec
|
||||
======================++====================================================
|
||||
assets || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
||||
assets:bank || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
||||
assets:bank:checking || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
||||
expenses || $495 [ 103% of $480] $1060 [ 110% of $960]
|
||||
expenses:bus || $49 [ 98% of $50] $102 [ 102% of $100]
|
||||
expenses:food || $396 [ 99% of $400] $808 [ 101% of $800]
|
||||
expenses:movies || $30 [ 100% of $30] $30 [ 50% of $60]
|
||||
income || $1950 [ 98% of $2000] $4050 [ 101% of $4000]
|
||||
----------------------++----------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0]
|
||||
```
|
||||
|
||||
Note, the `-S/--sort-amount` flag is not yet fully supported with `--budget`.
|
||||
|
||||
For more examples, see [Budgeting and Forecasting](https://github.com/simonmichael/hledger/wiki/Budgeting and forecasting).
|
||||
|
||||
#### Nested budgets
|
||||
|
||||
You can add budgets to any account in your account hierarchy. If you have budgets on both parent account and some of its children, then budget(s)
|
||||
of the child account(s) would be added to the budget of their parent, much like account balances behave.
|
||||
|
||||
In the most simple case this means that once you add a budget to any account, all its parents would have budget as well.
|
||||
|
||||
To illustrate this, consider the following budget:
|
||||
```
|
||||
~ monthly from 2019/01
|
||||
expenses:personal $1,000.00
|
||||
expenses:personal:electronics $100.00
|
||||
liabilities
|
||||
```
|
||||
|
||||
With this, monthly budget for electronics is defined to be $100 and budget for personal expenses is an additional $1000, which implicity means
|
||||
that budget for both `expenses:personal` and `expenses` is $1100.
|
||||
|
||||
Transactions in `expenses:personal:electronics` will be counted both towards its $100 budget and $1100 of `expenses:personal` , and transactions in any other subaccount of `expenses:personal` would be
|
||||
counted towards only towards the budget of `expenses:personal`.
|
||||
|
||||
For example, let's consider these transactions:
|
||||
```journal
|
||||
~ monthly from 2019/01
|
||||
expenses:personal $1,000.00
|
||||
expenses:personal:electronics $100.00
|
||||
liabilities
|
||||
|
||||
2019/01/01 Google home hub
|
||||
expenses:personal:electronics $90.00
|
||||
liabilities $-90.00
|
||||
|
||||
2019/01/02 Phone screen protector
|
||||
expenses:personal:electronics:upgrades $10.00
|
||||
liabilities
|
||||
|
||||
2019/01/02 Weekly train ticket
|
||||
expenses:personal:train tickets $153.00
|
||||
liabilities
|
||||
|
||||
2019/01/03 Flowers
|
||||
expenses:personal $30.00
|
||||
liabilities
|
||||
```
|
||||
|
||||
As you can see, we have transactions in `expenses:personal:electronics:upgrades` and `expenses:personal:train tickets`, and since both of these accounts are without explicitly defined budget,
|
||||
these transactions would be counted towards budgets of `expenses:personal:electronics` and `expenses:personal` accordingly:
|
||||
|
||||
```shell
|
||||
$ hledger balance --budget -M
|
||||
Budget performance in 2019/01:
|
||||
|
||||
|| Jan
|
||||
===============================++===============================
|
||||
expenses || $283.00 [ 26% of $1100.00]
|
||||
expenses:personal || $283.00 [ 26% of $1100.00]
|
||||
expenses:personal:electronics || $100.00 [ 100% of $100.00]
|
||||
liabilities || $-283.00 [ 26% of $-1100.00]
|
||||
-------------------------------++-------------------------------
|
||||
|| 0 [ 0]
|
||||
```
|
||||
|
||||
And with `--show-unbudgeted`, we can get a better picture of budget allocation and consumption:
|
||||
```shell
|
||||
$ hledger balance --budget -M --show-unbudgeted
|
||||
Budget performance in 2019/01:
|
||||
|
||||
|| Jan
|
||||
========================================++===============================
|
||||
expenses || $283.00 [ 26% of $1100.00]
|
||||
expenses:personal || $283.00 [ 26% of $1100.00]
|
||||
expenses:personal:electronics || $100.00 [ 100% of $100.00]
|
||||
expenses:personal:electronics:upgrades || $10.00
|
||||
expenses:personal:train tickets || $153.00
|
||||
liabilities || $-283.00 [ 26% of $-1100.00]
|
||||
----------------------------------------++-------------------------------
|
||||
|| 0 [ 0]
|
||||
```
|
||||
|
||||
### Output format
|
||||
|
||||
The balance command supports [output destination](/manual.html#output-destination) and [output format](/manual.html#output-format) selection.
|
||||
|
||||
@ -34,28 +34,31 @@
|
||||
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==================++==============================================================================
|
||||
<unbudgeted> || 0 0 $40
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
------------------++------------------------------------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==================++==================================================================
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
------------------++------------------------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|
||||
# 2. --show-unbudgeted
|
||||
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget --show-unbudgeted
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==============================++==============================================================================
|
||||
<unbudgeted>:expenses:cab || 0 0 $15
|
||||
<unbudgeted>:expenses:movies || 0 0 $25
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
------------------------------++------------------------------------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==================++==================================================================
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25]
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25]
|
||||
expenses:cab || 0 0 $15
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
expenses:movies || 0 0 $25
|
||||
------------------++------------------------------------------------------------------
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|
||||
# 3. Test that budget works with mix of commodities
|
||||
<
|
||||
@ -95,14 +98,15 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==================++=====================================================================================
|
||||
<unbudgeted> || 0 0 $40
|
||||
assets:cash || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25]
|
||||
expenses:food || £10 [ 150% of $10] 20 CAD [ 210% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
------------------++-------------------------------------------------------------------------------------
|
||||
|| $-15, £10 [ 0] $-21, 20 CAD [ 0] 0 [ 0]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03
|
||||
==================++======================================================================================
|
||||
assets || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25]
|
||||
assets:cash || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25]
|
||||
expenses || £10 [ 60% of $25] $5, 20 CAD [ 104% of $25] $51 [ 204% of $25]
|
||||
expenses:food || £10 [ 150% of $10] 20 CAD [ 210% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
------------------++--------------------------------------------------------------------------------------
|
||||
|| $-15, £10 [ 0] $-21, 20 CAD [ 0] 0 [ 0]
|
||||
|
||||
<
|
||||
~ daily
|
||||
@ -129,13 +133,13 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
$ hledger -f- bal --budget
|
||||
Budget performance in 2018/01/01-2018/01/03:
|
||||
|
||||
|| 2018/01/01-2018/01/03
|
||||
===++==========================
|
||||
a || 2 [ 7% of 30]
|
||||
b || 2 [ 2% of 100]
|
||||
c || 2 [ 0% of 1000]
|
||||
---++--------------------------
|
||||
|| 6 [ 1% of 1130]
|
||||
|| 2018/01/01-2018/01/03
|
||||
===++=======================
|
||||
a || 2 [ 7% of 30]
|
||||
b || 2 [ 2% of 100]
|
||||
c || 2 [ 0% of 1000]
|
||||
---++-----------------------
|
||||
|| 6 [ 1% of 1130]
|
||||
|
||||
# 5. Multiple periodic transactions with different intervals are combined.
|
||||
# Budget goals with lower frequency than the report are posted in the
|
||||
@ -143,25 +147,25 @@ Budget performance in 2018/01/01-2018/01/03:
|
||||
$ hledger -f- bal --budget -D
|
||||
Budget performance in 2018/01/01-2018/01/03:
|
||||
|
||||
|| 2018/01/01 2018/01/02 2018/01/03
|
||||
===++==============================================================================
|
||||
a || 1 [ 10% of 10] 0 [ 0% of 10] 1 [ 10% of 10]
|
||||
b || 1 [ 1% of 100] 0 [ 0] 1 [ 0]
|
||||
c || 1 [ 0% of 1000] 0 [ 0] 1 [ 0]
|
||||
---++------------------------------------------------------------------------------
|
||||
|| 3 [ 0% of 1110] 0 [ 0% of 10] 3 [ 30% of 10]
|
||||
|| 2018/01/01 2018/01/02 2018/01/03
|
||||
===++=========================================================
|
||||
a || 1 [ 10% of 10] 0 [ 0% of 10] 1 [ 10% of 10]
|
||||
b || 1 [ 1% of 100] 0 [ 0] 1 [ 0]
|
||||
c || 1 [ 0% of 1000] 0 [ 0] 1 [ 0]
|
||||
---++---------------------------------------------------------
|
||||
|| 3 [ 0% of 1110] 0 [ 0% of 10] 3 [ 30% of 10]
|
||||
|
||||
# 6. Budget goals with higher frequency than the report get added up appropriately.
|
||||
$ hledger -f- bal --budget -W
|
||||
Budget performance in 2018/01/01w01:
|
||||
|
||||
|| 2018/01/01w01
|
||||
===++==========================
|
||||
a || 2 [ 7% of 30]
|
||||
b || 2 [ 2% of 100]
|
||||
c || 2 [ 0% of 1000]
|
||||
---++--------------------------
|
||||
|| 6 [ 1% of 1130]
|
||||
|| 2018/01/01w01
|
||||
===++===================
|
||||
a || 2 [ 7% of 30]
|
||||
b || 2 [ 2% of 100]
|
||||
c || 2 [ 0% of 1000]
|
||||
---++-------------------
|
||||
|| 6 [ 1% of 1130]
|
||||
|
||||
# 7. A bounded two day budget. The end date is exclusive as usual.
|
||||
<
|
||||
@ -187,12 +191,12 @@ Budget performance in 2018/01/01w01:
|
||||
$ hledger -f- bal --budget -D
|
||||
Budget performance in 2018/01/01-2018/01/04:
|
||||
|
||||
|| 2018/01/01 2018/01/02 2018/01/03 2018/01/04
|
||||
==============++========================================================================================================
|
||||
<unbudgeted> || 1 1 1 1
|
||||
a || 1 1 [ 100% of 1] 1 [ 100% of 1] 1
|
||||
--------------++--------------------------------------------------------------------------------------------------------
|
||||
|| 2 2 [ 200% of 1] 2 [ 200% of 1] 2
|
||||
|| 2018/01/01 2018/01/02 2018/01/03 2018/01/04
|
||||
==============++================================================================
|
||||
<unbudgeted> || 1 1 1 1
|
||||
a || 1 1 [ 100% of 1] 1 [ 100% of 1] 1
|
||||
--------------++----------------------------------------------------------------
|
||||
|| 2 2 [ 200% of 1] 2 [ 200% of 1] 2
|
||||
|
||||
# 8. Multiple bounded budgets.
|
||||
<
|
||||
@ -217,21 +221,21 @@ Budget performance in 2018/01/01-2018/01/04:
|
||||
$ hledger -f- bal --budget -D
|
||||
Budget performance in 2018/01/01-2018/01/04:
|
||||
|
||||
|| 2018/01/01 2018/01/02 2018/01/03 2018/01/04
|
||||
===++========================================================================================================
|
||||
a || 1 [ 100% of 1] 1 [ 100% of 1] 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
---++--------------------------------------------------------------------------------------------------------
|
||||
|| 1 [ 100% of 1] 1 [ 100% of 1] 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
|| 2018/01/01 2018/01/02 2018/01/03 2018/01/04
|
||||
===++====================================================================
|
||||
a || 1 [ 100% of 1] 1 [ 100% of 1] 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
---++--------------------------------------------------------------------
|
||||
|| 1 [ 100% of 1] 1 [ 100% of 1] 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
|
||||
# 9. A "from A to B" budget should not be included in a report beginning on B.
|
||||
$ hledger -f- bal --budget -D -b 2018/1/3
|
||||
Budget performance in 2018/01/03-2018/01/04:
|
||||
|
||||
|| 2018/01/03 2018/01/04
|
||||
===++====================================================
|
||||
a || 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
---++----------------------------------------------------
|
||||
|| 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
|| 2018/01/03 2018/01/04
|
||||
===++==================================
|
||||
a || 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
---++----------------------------------
|
||||
|| 1 [ 10% of 10] 1 [ 10% of 10]
|
||||
|
||||
<
|
||||
~ daily
|
||||
@ -249,21 +253,21 @@ Budget performance in 2018/01/03-2018/01/04:
|
||||
$ hledger -f- bal --budget -D date:2018/1/1-2018/1/3
|
||||
Budget performance in 2018/01/01-2018/01/02:
|
||||
|
||||
|| 2018/01/01 2018/01/02
|
||||
===++====================================================
|
||||
a || 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
---++----------------------------------------------------
|
||||
|| 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
|| 2018/01/01 2018/01/02
|
||||
===++================================
|
||||
a || 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
---++--------------------------------
|
||||
|| 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
|
||||
# 11. With -E, zeroes are shown
|
||||
$ hledger -f- bal --budget -D date:2018/1/1-2018/1/3 -E
|
||||
Budget performance in 2018/01/01-2018/01/02:
|
||||
|
||||
|| 2018/01/01 2018/01/02
|
||||
===++====================================================
|
||||
a || 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
---++----------------------------------------------------
|
||||
|| 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
|| 2018/01/01 2018/01/02
|
||||
===++================================
|
||||
a || 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
---++--------------------------------
|
||||
|| 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
|
||||
# 12. subaccounts of budgeted accounts count towards budget
|
||||
<
|
||||
@ -276,9 +280,9 @@ Budget performance in 2018/01/01-2018/01/02:
|
||||
$ hledger -f- bal --budget -N
|
||||
Budget performance in 2018/01/01:
|
||||
|
||||
|| 2018/01/01
|
||||
===++==========================
|
||||
a || 1 [ 100% of 1]
|
||||
|| 2018/01/01
|
||||
===++================
|
||||
a || 1 [ 100% of 1]
|
||||
|
||||
# 13. budget goals on both parent and subaccounts are counted
|
||||
<
|
||||
@ -293,23 +297,24 @@ Budget performance in 2018/01/01:
|
||||
$ hledger -f- bal --budget
|
||||
Budget performance in 2018/01/01:
|
||||
|
||||
|| 2018/01/01
|
||||
=======++==========================
|
||||
a || 1 [ 1% of 100]
|
||||
a:b:c || 1 [ 100% of 1]
|
||||
-------++--------------------------
|
||||
|| 2 [ 2% of 101]
|
||||
|| 2018/01/01
|
||||
=======++==================
|
||||
a || 2 [ 2% of 101]
|
||||
a:b || 1 [ 100% of 1]
|
||||
a:b:c || 1 [ 100% of 1]
|
||||
-------++------------------
|
||||
|| 2 [ 2% of 101]
|
||||
|
||||
$ hledger -f- bal --budget --tree
|
||||
Budget performance in 2018/01/01:
|
||||
|
||||
|| 2018/01/01
|
||||
=======++==========================
|
||||
a || 2 [ 2% of 101]
|
||||
b || 1 [ 100% of 1]
|
||||
c || 1 [ 100% of 1]
|
||||
-------++--------------------------
|
||||
|| 2 [ 2% of 101]
|
||||
|| 2018/01/01
|
||||
=======++==================
|
||||
a || 2 [ 2% of 101]
|
||||
b || 1 [ 100% of 1]
|
||||
c || 1 [ 100% of 1]
|
||||
-------++------------------
|
||||
|| 2 [ 2% of 101]
|
||||
|
||||
# TODO
|
||||
# 14. respect hierarchy when sorting in tree mode
|
||||
@ -336,11 +341,205 @@ P 2018/01/26 SHARE €10
|
||||
$ hledger -f - bal -M --budget --cumulative --forecast --value
|
||||
Budget performance in 2018/05/01-2018/06/30:
|
||||
|
||||
|| May Jun
|
||||
================++====================================================
|
||||
<unbudgeted> || €-10 €-10
|
||||
assets:bank || 0 €-1 [ 100% of €-1]
|
||||
assets:pension || €10 €11 [1100% of €1]
|
||||
----------------++----------------------------------------------------
|
||||
|| 0 0 [ 0]
|
||||
|| May Jun
|
||||
================++==========================================
|
||||
<unbudgeted> || €-10 €-10
|
||||
assets || €10 €10 [ 0]
|
||||
assets:bank || 0 €-1 [ 100% of €-1]
|
||||
assets:pension || €10 €11 [1100% of €1]
|
||||
----------------++------------------------------------------
|
||||
|| 0 0 [ 0]
|
||||
|
||||
# 17. With subaccounts, child accounts are properly included in the parent balance when budget is checked
|
||||
<
|
||||
~ monthly from 2019/01
|
||||
expenses:personal $1,000.00
|
||||
liabilities
|
||||
|
||||
2019/01/01 Google home hub and home mini x2
|
||||
expenses:personal:electronics $10.00
|
||||
liabilities $-10.00
|
||||
|
||||
2019/01/02 Google Home Hub Permium Subscription
|
||||
expenses:personal:electronics:upgrades $10.00
|
||||
liabilities $-10.00
|
||||
|
||||
2019/01/03 Something else
|
||||
expenses:personal $30.00
|
||||
liabilities $-30.00
|
||||
|
||||
$ hledger -f- bal --budget
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
===================++==============================
|
||||
expenses || $50.00 [ 5% of $1,000.00]
|
||||
expenses:personal || $50.00 [ 5% of $1,000.00]
|
||||
liabilities || $-50.00 [ 5% of $-1000.00]
|
||||
-------------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --show-unbudgeted
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
========================================++==============================
|
||||
expenses || $50.00 [ 5% of $1,000.00]
|
||||
expenses:personal || $50.00 [ 5% of $1,000.00]
|
||||
expenses:personal:electronics || $20.00
|
||||
expenses:personal:electronics:upgrades || $10.00
|
||||
liabilities || $-50.00 [ 5% of $-1000.00]
|
||||
----------------------------------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --tree
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
=============++==============================
|
||||
expenses || $50.00 [ 5% of $1,000.00]
|
||||
personal || $50.00 [ 5% of $1,000.00]
|
||||
liabilities || $-50.00 [ 5% of $-1000.00]
|
||||
-------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --tree --show-unbudgeted
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
=================++==============================
|
||||
expenses || $50.00 [ 5% of $1,000.00]
|
||||
personal || $50.00 [ 5% of $1,000.00]
|
||||
electronics || $20.00
|
||||
upgrades || $10.00
|
||||
liabilities || $-50.00 [ 5% of $-1000.00]
|
||||
-----------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
# 18. Subaccounts + nested budgets
|
||||
<
|
||||
~ monthly from 2019/01
|
||||
expenses:personal $1,000.00
|
||||
expenses:personal:electronics $100.00
|
||||
liabilities
|
||||
|
||||
2019/01/01 Google home hub and home mini x2
|
||||
expenses:personal:electronics $10.00
|
||||
liabilities $-10.00
|
||||
|
||||
2019/01/02 Google Home Hub Permium Subscription
|
||||
expenses:personal:electronics:upgrades $10.00
|
||||
liabilities $-10.00
|
||||
|
||||
2019/01/03 Something else
|
||||
expenses:personal $30.00
|
||||
liabilities $-30.00
|
||||
|
||||
$ hledger -f- bal --budget
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
===============================++==============================
|
||||
expenses || $50.00 [ 5% of $1100.00]
|
||||
expenses:personal || $50.00 [ 5% of $1100.00]
|
||||
expenses:personal:electronics || $20.00 [ 20% of $100.00]
|
||||
liabilities || $-50.00 [ 5% of $-1100.00]
|
||||
-------------------------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --show-unbudgeted
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
========================================++==============================
|
||||
expenses || $50.00 [ 5% of $1100.00]
|
||||
expenses:personal || $50.00 [ 5% of $1100.00]
|
||||
expenses:personal:electronics || $20.00 [ 20% of $100.00]
|
||||
expenses:personal:electronics:upgrades || $10.00
|
||||
liabilities || $-50.00 [ 5% of $-1100.00]
|
||||
----------------------------------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --tree
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
=================++==============================
|
||||
expenses || $50.00 [ 5% of $1100.00]
|
||||
personal || $50.00 [ 5% of $1100.00]
|
||||
electronics || $20.00 [ 20% of $100.00]
|
||||
liabilities || $-50.00 [ 5% of $-1100.00]
|
||||
-----------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
$ hledger -f- bal --budget --tree --show-unbudgeted
|
||||
Budget performance in 2019/01/01-2019/01/03:
|
||||
|
||||
|| 2019/01/01-2019/01/03
|
||||
=================++==============================
|
||||
expenses || $50.00 [ 5% of $1100.00]
|
||||
personal || $50.00 [ 5% of $1100.00]
|
||||
electronics || $20.00 [ 20% of $100.00]
|
||||
upgrades || $10.00
|
||||
liabilities || $-50.00 [ 5% of $-1100.00]
|
||||
-----------------++------------------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
## Zero budget == no budget
|
||||
<
|
||||
~ monthly from 2019-01
|
||||
expenses:bills $100 ; bills has a $100 budget of its own, separate from subaccounts
|
||||
expenses:bills:a $20 ; a has non-zero budget and non-zero posted amount
|
||||
expenses:bills:b $200 ; b's budget is larger than bills'; we can see it's added to, not part of, that
|
||||
expenses:bills:c $50 ; c has a budget but no postings
|
||||
expenses:bills:f $0 ; f has an explicit zero budget
|
||||
income:cash ; cash has a negative $370 budget balancing the above
|
||||
|
||||
2019-01-01 transaction1
|
||||
income:cash
|
||||
expenses:bills:a $10
|
||||
expenses:bills:b $40
|
||||
expenses:bills:d $20 ; d has postings but no budget
|
||||
expenses:bills:e $10 ; e has postings summing to zero, and no budget
|
||||
expenses:bills:f $10
|
||||
|
||||
2019-01-02 transaction2
|
||||
income:cash
|
||||
expenses:bills:e -$10
|
||||
|
||||
# By default it hides d (because no budget) and e (because zero posted amount).
|
||||
# f is shown though its budget is zero, it probably shouldn't be.
|
||||
$ hledger bal -f- --budget
|
||||
Budget performance in 2019/01/01-2019/01/02:
|
||||
|
||||
|| 2019/01/01-2019/01/02
|
||||
==================++=======================
|
||||
expenses || $80 [ 22% of $370]
|
||||
expenses:bills || $80 [ 22% of $370]
|
||||
expenses:bills:a || $10 [ 50% of $20]
|
||||
expenses:bills:b || $40 [ 20% of $200]
|
||||
expenses:bills:c || 0 [ 0% of $50]
|
||||
expenses:bills:f || $10 [ 0]
|
||||
income || $-80 [ 22% of $-370]
|
||||
income:cash || $-80 [ 22% of $-370]
|
||||
------------------++-----------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
# --show-unbudgeted shows d
|
||||
$ hledger bal -f- --budget --show-unbudgeted
|
||||
Budget performance in 2019/01/01-2019/01/02:
|
||||
|
||||
|| 2019/01/01-2019/01/02
|
||||
==================++=======================
|
||||
expenses || $80 [ 22% of $370]
|
||||
expenses:bills || $80 [ 22% of $370]
|
||||
expenses:bills:a || $10 [ 50% of $20]
|
||||
expenses:bills:b || $40 [ 20% of $200]
|
||||
expenses:bills:c || 0 [ 0% of $50]
|
||||
expenses:bills:d || $20
|
||||
expenses:bills:f || $10 [ 0]
|
||||
income || $-80 [ 22% of $-370]
|
||||
income:cash || $-80 [ 22% of $-370]
|
||||
------------------++-----------------------
|
||||
|| 0 [ 0]
|
||||
|
||||
|
||||
@ -38,12 +38,13 @@
|
||||
$ hledger -f- bal --budget -DTN
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================================
|
||||
<unbudgeted> || 0 0 $40 $40
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25] $75 [ 100% of $75]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
|
||||
#** Default sort with account declarations
|
||||
|
||||
@ -83,12 +84,13 @@ account expenses:leisure
|
||||
$ hledger -f- bal --budget -DTN
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================================
|
||||
<unbudgeted> || 0 0 $40 $40
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25] $75 [ 100% of $75]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|
||||
# # 2. --show-unbudgeted
|
||||
# $ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget --show-unbudgeted
|
||||
@ -156,26 +158,26 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
$ hledger -f- bal --budget -DTNS
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================================
|
||||
<unbudgeted> || 0 0 $40 $40
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==================++========================================================================================
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25] $75 [ 100% of $75]
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
assets:cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|
||||
#** Sort by actual amount, tree mode.
|
||||
|
||||
$ hledger -f- bal --budget -DTNS --tree
|
||||
Budget performance in 2016/12/01-2016/12/03:
|
||||
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
==============++========================================================================================================
|
||||
<unbudgeted> || 0 0 $40 $40
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $11 [ 44% of $25] $35 [ 47% of $75]
|
||||
food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|| 2016/12/01 2016/12/02 2016/12/03 Total
|
||||
===========++========================================================================================
|
||||
expenses || $10 [ 40% of $25] $14 [ 56% of $25] $51 [ 204% of $25] $75 [ 100% of $75]
|
||||
food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10] $30 [ 100% of $30]
|
||||
leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] $5 [ 11% of $45]
|
||||
assets || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
cash || $-10 [ 40% of $-25] $-14 [ 56% of $-25] $-51 [ 204% of $-25] $-75 [ 100% of $-75]
|
||||
|
||||
#** other ?
|
||||
# with --show-unbudgeted
|
||||
|
||||
Loading…
Reference in New Issue
Block a user