hledger/tests/journal/valuation.test
Stephen Morgan 162a936360 lib: BudgetReport uses new renderTable inteface, now has more compact output.
This changes showMixedAmountElided so that the width to elide to is
given as an argument, rather than fixed at 22 characters. This
actually uses the new renderTable interface. Mostly this is just an
internal change, but since we have more information about the widths
of things, we can actually get rid of some superfluous spaces in the
budget report output, previously there to make sure it stayed aligned
with the largest reasonable contents.
2020-11-04 14:25:20 +11:00

634 lines
18 KiB
Plaintext

# http://hledger.org/journal.html#market-prices
# http://hledger.org/hledger.html#market-value
# 1. Market prices are ignored by -B.
<
P 2011/01/01 € $1.35
2011/01/01
expenses:foreign €100
assets
$ hledger -f- bal -NB
€-100 assets
€100 expenses:foreign
# 2. Market prices are used by bal -V.
# Market prices for other commodities are not used.
# Nor are transaction prices.
<
P 2011/01/01 € $1.35
P 2011/01/01 GBP $1.35
2011/01/01
(expenses:foreign) €100 @ $1.20
$ hledger -f- bal -N -V
$135.00 expenses:foreign
# 3. The location of price directives does not matter.
# If multiple directives have the same date, the last parsed is used.
<
3000/01/01
(a) $100
P 2000/1/1 $ €1.35
3000/03/03
(b) $100
P 2000/1/1 $ €1.30
$ hledger -f- bal -N -V a
€130.00 a
# 4. Market prices in the future are ignored when the valuation date
# is today, which is the default with -V. #453, #683
<
P 2000/1/1 $ €1.20
P 3000/1/1 $ €1.30
3000/01/01
(a) $100
$ hledger -f- bal -N -V
€120.00 a
# 5. Market prices in the future are not ignored when they are before
# the valuation date set with an explicit report end date, as in
# hledger 1.14 and older, and Ledger. See also valuation2.test, #1083
<
P 3000/1/1 $ €1.10
3000/01/01
(a) $100
$ hledger -f- bal -N -V -e 3000/2
€110.00 a
# 6. Market prices interact with D directives and with amount style canonicalisation. #131
<
D 1000.00 H ; declare a default commodity named H
P 2015/08/15 EEEE 41.66 ; default commodity H is used for these market prices
P 2015/08/15 FFFF 74.62
P 2015/08/15 GGGG 32.39
2015/08/15
a 2.4120 EEEE @@ 100 ; default commodity H is used for these transaction prices
a 0.3350 FFFF @@ 25
a 0.7718 GGGG @@ 25
b ; implicit balancing amount is in the cost commodity, H
$ hledger -f- balance -V
150.48 H a
-150.00 H b
--------------------
0.48 H
# 7. register -V affects posting amounts and total.
<
P 2000/1/1 $ €1.20
2000/1/1
(a) $100
$ hledger -f- reg -V
2000-01-01 (a) €120.00 €120.00
# 8. print -V affects posting amounts but not balance assertions.
<
P 2000/1/1 $ €1.20
2000/1/1
(a) $100 = $100
$ hledger -f- print -V
2000-01-01
(a) €120.00 = $100
>=0
# --value tests
<
P 2000/01/01 A 1 B
P 2000/01/15 A 5 B
P 2000/02/01 A 2 B
P 2000/03/01 A 3 B
P 2000/04/01 A 4 B
2000/01/01
(a) 1 A @ 6 B
2000/02/01
(a) 1 A @ 7 B
2000/03/01
(a) 1 A @ 8 B
# print
# 9. print costs using transaction prices
$ hledger -f- print --value=cost
2000-01-01
(a) 6 B
2000-02-01
(a) 7 B
2000-03-01
(a) 8 B
>=0
# 10. print value using market prices on each transaction's (posting's) date
$ hledger -f- print --value=then
2000-01-01
(a) 1 B
2000-02-01
(a) 2 B
2000-03-01
(a) 3 B
>=0
# 11. print value using prices on last day of report period (2000-02-29)
$ hledger -f- print --value=end date:2000/01-2000/03
2000-01-01
(a) 2 B
2000-02-01
(a) 2 B
>=0
# 12. print value using prices on last day of report period (no period specified)
# specified - uses last day of journal (2000-03-01)
$ hledger -f- print --value=end
2000-01-01
(a) 3 B
2000-02-01
(a) 3 B
2000-03-01
(a) 3 B
>=0
# 13. print value using prices on a specified date
$ hledger -f- print --value=2000-01-15
2000-01-01
(a) 5 B
2000-02-01
(a) 5 B
2000-03-01
(a) 5 B
>=0
# 14. print value using prices today
# (assuming today's date is >= 2000-04-01)
$ hledger -f- print --value=now
2000-01-01
(a) 4 B
2000-02-01
(a) 4 B
2000-03-01
(a) 4 B
>=0
# register
# 15. register report valued at cost.
$ hledger -f- reg --value=cost
2000-01-01 (a) 6 B 6 B
2000-02-01 (a) 7 B 13 B
2000-03-01 (a) 8 B 21 B
# 16. register report valued at posting dates
$ hledger -f- reg --value=then
2000-01-01 (a) 1 B 1 B
2000-02-01 (a) 2 B 3 B
2000-03-01 (a) 3 B 6 B
# 17. register report valued at period end
$ hledger -f- reg --value=end
2000-01-01 (a) 3 B 3 B
2000-02-01 (a) 3 B 6 B
2000-03-01 (a) 3 B 9 B
# 18. register report valued at specified date
$ hledger -f- reg --value=2000-01-15
2000-01-01 (a) 5 B 5 B
2000-02-01 (a) 5 B 10 B
2000-03-01 (a) 5 B 15 B
# 19. register report valued today
$ hledger -f- reg --value=now
2000-01-01 (a) 4 B 4 B
2000-02-01 (a) 4 B 8 B
2000-03-01 (a) 4 B 12 B
# 20. single-period register report valued at default date (same as --value=now)
$ hledger -f- reg -V
2000-01-01 (a) 4 B 4 B
2000-02-01 (a) 4 B 8 B
2000-03-01 (a) 4 B 12 B
# register with -H (starting balance)
# 21. register with starting balance, valued at cost.
$ hledger -f- reg --value=cost -b 200002 -H
2000-02-01 (a) 7 B 13 B
2000-03-01 (a) 8 B 21 B
# 22. register with starting balance, valued at period end.
# That is unspecified so the last posting date is used, ie 2000/3/1, so the price is 3 B.
# Starting balance is 5 B as above.
$ hledger -f- reg --value=end -b 200002 -H
2000-02-01 (a) 3 B 8 B
2000-03-01 (a) 3 B 11 B
# 23. register with starting balance, valued at specified date (when the price is 5 B).
# Starting balance is 5 B as above.
$ hledger -f- reg --value=2000-01-15 -b 200002 -H
2000-02-01 (a) 5 B 10 B
2000-03-01 (a) 5 B 15 B
# register, periodic
# 24. periodic register report valued at cost.
# The total for january is 6 B (1 A valued at 1/1, price 1 B, and 1 A
# valued at 1/20, price 5 B).
# Need an extra transaction for this test:
<
P 2000/01/01 A 1 B
P 2000/01/15 A 5 B
P 2000/02/01 A 2 B
P 2000/03/01 A 3 B
P 2000/04/01 A 4 B
2000/01/01
(a) 1 A @ 6 B
2000/01/20
(a) 1 A @ 7 B
2000/02/01
(a) 1 A @ 8 B
2000/03/01
(a) 1 A @ 9 B
$ hledger -f- reg --value=cost -M
2000-01 a 13 B 13 B
2000-02 a 8 B 21 B
2000-03 a 9 B 30 B
# back to the original test journal:
<
P 2000/01/01 A 1 B
P 2000/01/15 A 5 B
P 2000/02/01 A 2 B
P 2000/03/01 A 3 B
P 2000/04/01 A 4 B
2000/01/01
(a) 1 A @ 6 B
2000/02/01
(a) 1 A @ 7 B
2000/03/01
(a) 1 A @ 8 B
# 25. periodic register report valued at period end
$ hledger -f- reg --value=end -M
2000-01 a 5 B 5 B
2000-02 a 2 B 7 B
2000-03 a 3 B 10 B
# 26. periodic register report valued at specified date
$ hledger -f- reg --value=2000-01-15 -M
2000-01 a 5 B 5 B
2000-02 a 5 B 10 B
2000-03 a 5 B 15 B
# 27. periodic register report valued today
$ hledger -f- reg --value=now -M
2000-01 a 4 B 4 B
2000-02 a 4 B 8 B
2000-03 a 4 B 12 B
# 28. periodic register report valued at default date (same as --value=end)
$ hledger -f- reg -V -M
2000-01 a 5 B 5 B
2000-02 a 2 B 7 B
2000-03 a 3 B 10 B
# balance
# 29. single column balance report valued at cost
$ hledger -f- bal -N --value=cost
21 B a
# 30. single column balance report valued at period end
$ hledger -f- bal -N --value=end
9 B a
# 31. single column balance report valued at specified date
$ hledger -f- bal -N --value=2000-01-15
15 B a
# 32. single column balance report valued today
$ hledger -f- bal -N --value=now
12 B a
# 33. single column balance report valued at default date (same as --value=now)
$ hledger -f- bal -N -V
12 B a
# balance, periodic
# 34. multicolumn balance report valued at cost
$ hledger -f- bal -MTA --value=cost
Balance changes in 2000Q1, valued at cost:
|| Jan Feb Mar Total Average
===++=================================
a || 6 B 7 B 8 B 21 B 7 B
---++---------------------------------
|| 6 B 7 B 8 B 21 B 7 B
# 35. multicolumn balance report valued at period end
$ hledger -f- bal -M --value=end
Balance changes in 2000Q1, valued at period ends:
|| Jan Feb Mar
===++===============
a || 5 B 2 B 3 B
---++---------------
|| 5 B 2 B 3 B
# 36. multicolumn balance report valued at period end with -T or -A
$ hledger -f- bal -MTA --value=end
Balance changes in 2000Q1, valued at period ends:
|| Jan Feb Mar Total Average
===++=================================
a || 5 B 2 B 3 B 10 B 3 B
---++---------------------------------
|| 5 B 2 B 3 B 10 B 3 B
# 37. multicolumn balance report valued at other date
$ hledger -f- bal -MTA --value=2000-01-15
Balance changes in 2000Q1, valued at 2000-01-15:
|| Jan Feb Mar Total Average
===++=================================
a || 5 B 5 B 5 B 15 B 5 B
---++---------------------------------
|| 5 B 5 B 5 B 15 B 5 B
# 38. multicolumn balance report valued today (with today >= 2000-04-01)
$ hledger -f- bal -M --value=now
Balance changes in 2000Q1, current value:
|| Jan Feb Mar
===++===============
a || 4 B 4 B 4 B
---++---------------
|| 4 B 4 B 4 B
# 39. multicolumn balance report valued at default date (same as --value=end)
$ hledger -f- bal -M -V
Balance changes in 2000Q1, valued at period ends:
|| Jan Feb Mar
===++===============
a || 5 B 2 B 3 B
---++---------------
|| 5 B 2 B 3 B
# balance, periodic, with -H (starting balance and accumulating across periods)
# 40. multicolumn balance report with -H, valued at cost.
# The starting balance on 2000/01/01 is 6 B (cost of the first 2 A).
# February adds 1 A costing 7 B, making 13 B.
# March adds 1 A costing 8 B, making 21 B.
$ hledger -f- bal -M -H -b 200002 --value=cost
Ending balances (historical) in 2000-02-01..2000-03-31, valued at cost:
|| 2000-02-29 2000-03-31
===++========================
a || 13 B 21 B
---++------------------------
|| 13 B 21 B
# 41. multicolumn balance report with -H valued at period end.
# The starting balance is 1 A.
# February adds 1 A making 2 A, which is valued at 2000/02/29 as 4 B.
# March adds 1 A making 3 A, which is valued at 2000/03/31 as 9 B.
$ hledger -f- bal -MA -H -b 200002 --value=end
Ending balances (historical) in 2000-02-01..2000-03-31, valued at period ends:
|| 2000-02-29 2000-03-31 Average
===++=================================
a || 4 B 9 B 6 B
---++---------------------------------
|| 4 B 9 B 6 B
# 42. multicolumn balance report with -H valued at other date.
# The starting balance is 5 B (1 A valued at 2000/1/15).
$ hledger -f- bal -M -H -b 200002 --value=2000-01-15
Ending balances (historical) in 2000-02-01..2000-03-31, valued at 2000-01-15:
|| 2000-02-29 2000-03-31
===++========================
a || 10 B 15 B
---++------------------------
|| 10 B 15 B
# 43. multicolumn balance report with -H, valuing each period's carried-over balances at cost.
<
P 2000/01/01 A 1 B
P 2000/01/15 A 5 B
P 2000/02/01 A 2 B
P 2000/03/01 A 3 B
P 2000/04/01 A 4 B
2000/01/01
(a) 1 A @ 6 B
$ hledger -f- bal -ME -H -p200001-200004 --value=c
Ending balances (historical) in 2000Q1, valued at cost:
|| 2000-01-31 2000-02-29 2000-03-31
===++====================================
a || 6 B 6 B 6 B
---++------------------------------------
|| 6 B 6 B 6 B
# 44. multicolumn balance report with -H, valuing each period's carried-over balances at period end.
# Unrelated, also -H always disables -T.
$ hledger -f- bal -META -H -p200001-200004 --value=e
Ending balances (historical) in 2000Q1, valued at period ends:
|| 2000-01-31 2000-02-29 2000-03-31 Average
===++=============================================
a || 5 B 2 B 3 B 3 B
---++---------------------------------------------
|| 5 B 2 B 3 B 3 B
# 45. multicolumn balance report with -H, valuing each period's carried-over balances at other date.
$ hledger -f- bal -ME -H -p200001-200004 --value=2000-01-15
Ending balances (historical) in 2000Q1, valued at 2000-01-15:
|| 2000-01-31 2000-02-29 2000-03-31
===++====================================
a || 5 B 5 B 5 B
---++------------------------------------
|| 5 B 5 B 5 B
# balance --budget. The periodic transactions setting budget amounts
# are valued in the same way as ordinary transactions.
<
P 2000/01/01 A 1 B
P 2000/01/15 A 5 B
P 2000/02/01 A 2 B
P 2000/03/01 A 3 B
P 2000/04/01 A 4 B
~ monthly
(a) 2 A @ 1 B
2000/01/01
(a) 1 A @ 6 B
2000/02/01
(a) 1 A @ 7 B
2000/03/01
(a) 1 A @ 8 B
# 46. budget report, unvalued (for reference).
$ hledger -f- bal -M --budget
Budget performance in 2000Q1:
|| Jan Feb Mar
===++======================================================
a || 1 A [50% of 2 A] 1 A [50% of 2 A] 1 A [50% of 2 A]
---++------------------------------------------------------
|| 1 A [50% of 2 A] 1 A [50% of 2 A] 1 A [50% of 2 A]
# 47. budget report, valued at cost.
$ hledger -f- bal -MTA --budget --value=c
Budget performance in 2000Q1, valued at cost:
|| Jan Feb Mar Total Average
===++================================================================================================
a || 6 B [300% of 2 B] 7 B [350% of 2 B] 8 B [400% of 2 B] 21 B [350% of 6 B] 7 B [350% of 2 B]
---++------------------------------------------------------------------------------------------------
|| 6 B [300% of 2 B] 7 B [350% of 2 B] 8 B [400% of 2 B] 21 B [350% of 6 B] 7 B [350% of 2 B]
# 48. budget report, valued at period ends.
$ hledger -f- bal -MTA --budget --value=e
Budget performance in 2000Q1, valued at period ends:
|| Jan Feb Mar Total Average
===++=============================================================================================
a || 5 B [50% of 10 B] 2 B [50% of 4 B] 3 B [50% of 6 B] 10 B [50% of 20 B] 3 B [50% of 7 B]
---++---------------------------------------------------------------------------------------------
|| 5 B [50% of 10 B] 2 B [50% of 4 B] 3 B [50% of 6 B] 10 B [50% of 20 B] 3 B [50% of 7 B]
# 49. budget report, valued at other date.
$ hledger -f- bal -MTA --budget --value=2000-01-15
Budget performance in 2000Q1, valued at 2000-01-15:
|| Jan Feb Mar Total Average
===++================================================================================================
a || 5 B [50% of 10 B] 5 B [50% of 10 B] 5 B [50% of 10 B] 15 B [50% of 30 B] 5 B [50% of 10 B]
---++------------------------------------------------------------------------------------------------
|| 5 B [50% of 10 B] 5 B [50% of 10 B] 5 B [50% of 10 B] 15 B [50% of 30 B] 5 B [50% of 10 B]
# 50. --value=then with --historical. How is the starting total valued ?
# Currently not supported.
<
P 2020-01-01 A 1 B
P 2020-02-01 A 2 B
P 2020-03-01 A 3 B
P 2020-04-01 A 4 B
2020-01-01
(a) 1 A
2020-02-01
(a) 1 A
2020-03-01
(a) 1 A
2020-04-01
(a) 1 A
$ hledger -f- reg --value=then -b 2020-03 -H
>2 /not yet supported/
>=1
# 51. --value=then with a report interval. How are the summary amounts valued ?
# Currently each interval's unvalued sum is valued on its first day.
<
P 2020-01-01 A 1 B
P 2020-02-01 A 2 B
P 2020-03-01 A 3 B
P 2020-04-01 A 4 B
2020-01-01
(a) 1 A
2020-02-01
(a) 1 A
2020-03-01
(a) 1 A
2020-04-01
(a) 1 A
$ hledger -f- reg --value=then -Q
2020Q1 a 3 B 3 B
2020Q2 a 4 B 7 B
>=0
# 52. print --value should affect all postings, including when there's an implicit transaction price
<
P 2020-01-01 A 1 C
P 2020-01-01 B 1 C
2020-01-01
a 1 A
b -1 B
$ hledger -f- print -V
2020-01-01
a 1 C
b -1 C
>=0