# Test generation of periodic transactions with --forecast. # Note periodic transaction tests should include a regular transaction # to pin the start date of forecasted transactions. # 1. A balance report with forecasted transactions. hledger bal -M -b 2016-11 -e 2017-02 -f - --forecast <<< 2016/12/31 expenses:housing $600 assets:cash ~ monthly from 2016/1 income $-1000 expenses:food $20 expenses:leisure $15 expenses:grocery $30 assets:cash >>> Balance changes in 2016-12-01..2017-01-31: || 2016-12 2017-01 ==================++================== assets:cash || $-600 $935 expenses:food || 0 $20 expenses:grocery || 0 $30 expenses:housing || $600 0 expenses:leisure || 0 $15 income || 0 $-1000 ------------------++------------------ || 0 0 >>>2 >>>=0 # 2. print forecasted transactions, with status and description. hledger print -b 2016-11 -e 2017-02 -f - --forecast <<< 2016/12/31 expenses:housing $600 assets:cash ~ monthly from 2016/1 * marked cleared, and with a description income $-1000 expenses:food $20 expenses:leisure $15 expenses:grocery $30 assets:cash >>> 2016-12-31 expenses:housing $600 assets:cash 2017-01-01 * marked cleared, and with a description ; generated-transaction: ~ monthly from 2016/1 income $-1000 expenses:food $20 expenses:leisure $15 expenses:grocery $30 assets:cash >>>2 >>>=0 # 3. A register with forecasted transactions, with a comment and tag. hledger register -b 2016-11 -e 2017-02 -f - --forecast tag:a <<< 2016/12/31 expenses:housing $600 assets:cash ~ monthly from 2016/1 ; or a comment, maybe with a:tag income $-1000 expenses:food $20 expenses:leisure $15 expenses:grocery $30 assets:cash >>> 2017-01-01 income $-1000 $-1000 expenses:food $20 $-980 expenses:leisure $15 $-965 expenses:grocery $30 $-935 assets:cash $935 0 >>>2 >>>=0 # 4. Check that --forecast generates transactions only after last transaction date in journal. hledger register -b 2015-12 -e 2017-02 -f - assets:cash --forecast <<< 2016/01/01 expenses:fun $10 ; more fireworks assets:cash 2016/12/02 expenses:housing $600 assets:cash ~ yearly from 2016 income $-10000 ; bonus assets:cash >>> 2016-01-01 assets:cash $-10 $-10 2016-12-02 assets:cash $-600 $-610 2017-01-01 assets:cash $10000 $9390 >>>2 >>>=0 # 5. Y affects M/D partial dates in periodic transactions. # The recur tag shows the original period expression and is not modified. hledger -f - print --forecast desc:forecast <<< Y 2000 ~ 2/1 forecast ; a real transaction to set the start of the forecast window 2000/1/1 real >>> 2000-02-01 forecast ; generated-transaction: ~ 2/1 >>>2 >>>=0 # 6. Y also sets the month to 1, affecting D dates: hledger -f - print --forecast desc:forecast <<< Y 2000 ~ 15 forecast ; a real transaction to set the start of the forecast window 2000/1/1 real >>> 2000-01-15 forecast ; generated-transaction: ~ 15 >>>2 >>>=0 # 7. Y also sets the day to 1, affecting relative dates: hledger -f - print --forecast desc:forecast <<< Y 2000 ~ next month forecast ; a real transaction to set the start of the forecast window 2000/1/1 real >>> 2000-02-01 forecast ; generated-transaction: ~ next month >>>2 >>>=0 # 8. A balance report with forecast-begin enabling transaction before report end hledger bal -M -b 2016-10 -e 2017-02 -f - --forecast=20160801- <<< 2016/12/31 expenses:housing $600 assets:cash ~ monthly from 2016/1 salary income $-1000 assets:cash >>> Balance changes in 2016-10-01..2017-01-31: || 2016-10 2016-11 2016-12 2017-01 ==================++==================================== assets:cash || $1000 $1000 $400 $1000 expenses:housing || 0 0 $600 0 income || $-1000 $-1000 $-1000 $-1000 ------------------++------------------------------------ || 0 0 0 0 >>>2 >>>=0 # 9. Parse error in malformed forecast period expression hledger bal -M -b 2016-10 -e 2017-02 -f - --forecast=20160801-foobar <<< 2016/12/31 expenses:housing $600 assets:cash ~ monthly from 2016/1 salary income $-1000 assets:cash >>> >>>2 hledger: could not parse forecast period : 1:10: | 1 | 20160801-foobar | ^ unexpected 'f' expecting end of input (use -h to see usage) >>>=1 # 10. Amount display style is applied to forecasted transactions. hledger -f - reg --forecast date:202001 <<< commodity 1,000.00 USD 2020-01-01 (a) 1,000.00 USD ~ every 28th day (a) 1000.00 USD >>> 2020-01-01 (a) 1,000.00 USD 1,000.00 USD 2020-01-28 (a) 1,000.00 USD 2,000.00 USD >>>2 >>>=0