Accounts, postings, and transactions can now all be filtered by the
tags in an account's declaration. In particular it's now possible to
more reliably select accounts by type, using their type: tag rather
than their name:
account myasset ; type:Asset
account myliability ; type:Liability
$ hledger accounts tag:type=^a
myasset
Accounts inherit tags from their parents.
API changes:
A finalised Journal has a new jdeclaredaccounttags field
for easy lookup of account tags.
Query.matchesTaggedAccount is a tag-aware version of matchesAccount.
217 lines
4.3 KiB
Plaintext
217 lines
4.3 KiB
Plaintext
# 1. we parse metadata tags in transaction and posting comments. Currently,
|
|
# - they can be on the same line and/or separate lines
|
|
# - they are always printed on separate lines
|
|
<
|
|
2010/01/01 ; txntag1: txn val 1
|
|
; txntag2: txn val 2
|
|
a 1
|
|
; posting1tag1: posting 1 val 1
|
|
; posting1tag2:
|
|
b -1 ; posting-2-tag-1: posting 2 val 1
|
|
; posting-2-tag-2:
|
|
; non-metadata:
|
|
$ hledger -f - print
|
|
2010-01-01 ; txntag1: txn val 1
|
|
; txntag2: txn val 2
|
|
a 1
|
|
; posting1tag1: posting 1 val 1
|
|
; posting1tag2:
|
|
b -1 ; posting-2-tag-1: posting 2 val 1
|
|
; posting-2-tag-2:
|
|
|
|
>=
|
|
|
|
# 2. reports can filter by tag existence
|
|
<
|
|
2010/01/01 ; foo:bar
|
|
a 1
|
|
b -1
|
|
|
|
2010/01/02 ; foo:baz
|
|
c 1
|
|
d -1
|
|
|
|
2010/01/03
|
|
e 1
|
|
f -1
|
|
$ hledger -f - print tag:foo
|
|
2010-01-01 ; foo:bar
|
|
a 1
|
|
b -1
|
|
|
|
2010-01-02 ; foo:baz
|
|
c 1
|
|
d -1
|
|
|
|
>=
|
|
|
|
# 3. or tag value
|
|
<
|
|
2010/01/01 ; foo:bar
|
|
a 1
|
|
b -1
|
|
|
|
2010/01/02
|
|
; foo:baz
|
|
c 1
|
|
d -1
|
|
|
|
2010/01/03
|
|
e 1
|
|
f -1
|
|
$ hledger -f - print tag:foo=bar
|
|
2010-01-01 ; foo:bar
|
|
a 1
|
|
b -1
|
|
|
|
>=
|
|
|
|
# 4. postings inherit their transaction's tags
|
|
<
|
|
2010/01/01
|
|
a 1 ; foo:bar
|
|
b -1
|
|
|
|
2010/01/02 ; foo:baz
|
|
c 1
|
|
d -1
|
|
|
|
2010/01/03 ; foo:bar
|
|
e 1
|
|
f -1
|
|
$ hledger -f - register tag:foo=bar
|
|
2010-01-01 a 1 1
|
|
2010-01-03 e 1 2
|
|
f -1 1
|
|
|
|
# 5. look for transactions without tags
|
|
<
|
|
2010/01/01 desc
|
|
a 1
|
|
b -1
|
|
|
|
2010/01/02
|
|
; foo:some tag
|
|
c 2
|
|
d -2
|
|
|
|
2010/01/03
|
|
e 3
|
|
f -3
|
|
|
|
2010/01/04 (code)
|
|
g 4
|
|
h -4
|
|
$ hledger -f - print not:tag:.
|
|
2010-01-01 desc
|
|
a 1
|
|
b -1
|
|
|
|
2010-01-03
|
|
e 3
|
|
f -3
|
|
|
|
2010-01-04 (code)
|
|
g 4
|
|
h -4
|
|
|
|
>=
|
|
|
|
# 6. query is not affected by implicit tags (XXX ?)
|
|
$ hledger -f ../../examples/sample.journal reg tag:d
|
|
|
|
# Querying accounts by tag.
|
|
<
|
|
account a ; type:A
|
|
account l ; type:Liability
|
|
account r ; type:R
|
|
account o ; othertag:
|
|
account u
|
|
|
|
2022-01-01
|
|
(r) 1
|
|
|
|
2022-01-02
|
|
(a) 1
|
|
(l) 1
|
|
|
|
# 7. We can match declared accounts by having a tag,
|
|
$ hledger -f- accounts --declared tag:.
|
|
a
|
|
l
|
|
r
|
|
o
|
|
|
|
# 8. not having a tag,
|
|
$ hledger -f- accounts --declared not:tag:.
|
|
u
|
|
|
|
# 9. or a tag and it's value. Tag values are matched infix.
|
|
$ hledger -f- accounts --declared tag:type=a
|
|
a
|
|
l
|
|
|
|
# 10. So we must anchor the regex to match single-letter account types.
|
|
$ hledger -f- accounts --declared tag:type=^a$
|
|
a
|
|
|
|
# 11. But if account type was declared in the long form, matching just one letter fails
|
|
$ hledger -f- accounts --declared tag:type=^l$
|
|
|
|
# 12. so we need to match more loosely
|
|
$ hledger -f- accounts --declared tag:type=^l
|
|
l
|
|
|
|
# 13. In the same way, we can match used accounts by tag.
|
|
$ hledger -f- accounts --used tag:type=r
|
|
r
|
|
|
|
# 14. We can match postings by their account's tags.
|
|
$ hledger -f- register -w80 tag:type=^a
|
|
2022-01-02 (a) 1 1
|
|
|
|
# 15. We can match transactions by their accounts' tags.
|
|
$ hledger -f- print tag:type=^a
|
|
2022-01-02
|
|
(a) 1
|
|
(l) 1
|
|
|
|
>=
|
|
|
|
# 16. And negatively match them by tag.
|
|
$ hledger -f- print tag:type=^a not:tag:type=^l
|
|
|
|
# 17. We can filter balance reports by account tags.
|
|
$ hledger -f- bal tag:type=^a
|
|
1 a
|
|
--------------------
|
|
1
|
|
|
|
# 18. Postingless declared accounts in balance reports are also filtered.
|
|
$ hledger -f- bal -N --declared -E o u tag:othertag
|
|
0 o
|
|
|
|
# 19. Accounts inherit the tags of their parents.
|
|
<
|
|
account a ; type:A
|
|
account a:aa
|
|
|
|
$ hledger -f- accounts tag:type=a
|
|
a
|
|
a:aa
|
|
|
|
# 20.
|
|
<
|
|
account a ; type:A
|
|
account a:aa
|
|
|
|
2022-01-01
|
|
(a:aa) 1
|
|
|
|
$ hledger -f- bal -N tag:type=a
|
|
1 a:aa
|
|
|
|
# 21.
|
|
$ hledger -f- reg -w80 tag:type=a
|
|
2022-01-01 (a:aa) 1 1
|