3276 lines
103 KiB
Groff
3276 lines
103 KiB
Groff
.\"t
|
|
|
|
.TH "hledger" "1" "March 2019" "hledger 1.14.1" "hledger User Manuals"
|
|
|
|
|
|
|
|
.SH NAME
|
|
.PP
|
|
hledger \- a command\-line accounting tool
|
|
.SH SYNOPSIS
|
|
.PP
|
|
\f[C]hledger\ [\-f\ FILE]\ COMMAND\ [OPTIONS]\ [ARGS]\f[]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]hledger\ [\-f\ FILE]\ ADDONCMD\ \-\-\ [OPTIONS]\ [ARGS]\f[]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]hledger\f[]
|
|
.SH DESCRIPTION
|
|
.PP
|
|
hledger is a cross\-platform program for tracking money, time, or any
|
|
other commodity, using double\-entry accounting and a simple, editable
|
|
file format.
|
|
hledger is inspired by and largely compatible with ledger(1).
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Tested on unix, mac, windows, hledger aims to be a reliable, practical
|
|
tool for daily use.
|
|
.PP
|
|
This is hledger's command\-line interface (there are also curses and web
|
|
interfaces).
|
|
Its basic function is to read a plain text file describing financial
|
|
transactions (in accounting terms, a general journal) and print useful
|
|
reports on standard output, or export them as CSV.
|
|
hledger can also read some other file formats such as CSV files,
|
|
translating them to journal format.
|
|
Additionally, hledger lists other hledger\-* executables found in the
|
|
user's $PATH and can invoke them as subcommands.
|
|
.PP
|
|
hledger reads data from one or more files in hledger journal, timeclock,
|
|
timedot, or CSV format specified with \f[C]\-f\f[], or
|
|
\f[C]$LEDGER_FILE\f[], or \f[C]$HOME/.hledger.journal\f[] (on windows,
|
|
perhaps \f[C]C:/Users/USER/.hledger.journal\f[]).
|
|
If using \f[C]$LEDGER_FILE\f[], note this must be a real environment
|
|
variable, not a shell variable.
|
|
You can specify standard input with \f[C]\-f\-\f[].
|
|
.PP
|
|
Transactions are dated movements of money between two (or more) named
|
|
accounts, and are recorded with journal entries like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2015/10/16\ bought\ food
|
|
\ expenses:food\ \ \ \ \ \ \ \ \ \ $10
|
|
\ assets:cash
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
For more about this format, see hledger_journal(5).
|
|
.PP
|
|
Most users use a text editor to edit the journal, usually with an editor
|
|
mode such as ledger\-mode for added convenience.
|
|
hledger's interactive add command is another way to record new
|
|
transactions.
|
|
hledger never changes existing transactions.
|
|
.PP
|
|
To get started, you can either save some entries like the above in
|
|
\f[C]~/.hledger.journal\f[], or run \f[C]hledger\ add\f[] and follow the
|
|
prompts.
|
|
Then try some commands like \f[C]hledger\ print\f[] or
|
|
\f[C]hledger\ balance\f[].
|
|
Run \f[C]hledger\f[] with no arguments for a list of commands.
|
|
.SH EXAMPLES
|
|
.PP
|
|
Two simple transactions in hledger journal format:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2015/9/30\ gift\ received
|
|
\ \ assets:cash\ \ \ $20
|
|
\ \ income:gifts
|
|
|
|
2015/10/16\ farmers\ market
|
|
\ \ expenses:food\ \ \ \ $10
|
|
\ \ assets:cash
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Some basic reports:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ print
|
|
2015/09/30\ gift\ received
|
|
\ \ \ \ assets:cash\ \ \ \ \ \ \ \ \ \ \ \ $20
|
|
\ \ \ \ income:gifts\ \ \ \ \ \ \ \ \ \ $\-20
|
|
|
|
2015/10/16\ farmers\ market
|
|
\ \ \ \ expenses:food\ \ \ \ \ \ \ \ \ \ \ $10
|
|
\ \ \ \ assets:cash\ \ \ \ \ \ \ \ \ \ \ \ $\-10
|
|
\f[]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ accounts\ \-\-tree
|
|
assets
|
|
\ \ cash
|
|
expenses
|
|
\ \ food
|
|
income
|
|
\ \ gifts
|
|
\f[]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $10\ \ assets:cash
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $10\ \ expenses:food
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-20\ \ income:gifts
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ cash
|
|
2015/09/30\ gift\ received\ \ \ assets:cash\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $20\ \ \ \ \ \ \ \ \ \ \ $20
|
|
2015/10/16\ farmers\ market\ \ assets:cash\ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-10\ \ \ \ \ \ \ \ \ \ \ $10
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
More commands:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ available\ commands
|
|
$\ hledger\ add\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ add\ more\ transactions\ to\ the\ journal\ file
|
|
$\ hledger\ balance\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ all\ accounts\ with\ aggregated\ balances
|
|
$\ hledger\ balance\ \-\-help\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ detailed\ help\ for\ balance\ command
|
|
$\ hledger\ balance\ \-\-depth\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ only\ top\-level\ accounts
|
|
$\ hledger\ register\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ account\ postings,\ with\ running\ total
|
|
$\ hledger\ reg\ income\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ postings\ to/from\ income\ accounts
|
|
$\ hledger\ reg\ \[aq]assets:some\ bank:checking\[aq]\ #\ show\ postings\ to/from\ this\ checking\ account
|
|
$\ hledger\ print\ desc:shop\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ transactions\ with\ shop\ in\ the\ description
|
|
$\ hledger\ activity\ \-W\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ show\ transaction\ counts\ per\ week\ as\ a\ bar\ chart
|
|
\f[]
|
|
.fi
|
|
.SH OPTIONS
|
|
.SS General options
|
|
.PP
|
|
To see general usage help, including general options which are supported
|
|
by most hledger commands, run \f[C]hledger\ \-h\f[].
|
|
.PP
|
|
General help options:
|
|
.TP
|
|
.B \f[C]\-h\ \-\-help\f[]
|
|
show general usage (or after COMMAND, command usage)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-version\f[]
|
|
show version
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-debug[=N]\f[]
|
|
show debug output (levels 1\-9, default: 1)
|
|
.RS
|
|
.RE
|
|
.PP
|
|
General input options:
|
|
.TP
|
|
.B \f[C]\-f\ FILE\ \-\-file=FILE\f[]
|
|
use a different input file.
|
|
For stdin, use \- (default: \f[C]$LEDGER_FILE\f[] or
|
|
\f[C]$HOME/.hledger.journal\f[])
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-rules\-file=RULESFILE\f[]
|
|
Conversion rules file to use when reading CSV (default: FILE.rules)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-separator=CHAR\f[]
|
|
Field separator to expect when reading CSV (default: \[aq],\[aq])
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-alias=OLD=NEW\f[]
|
|
rename accounts named OLD to NEW
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-anon\f[]
|
|
anonymize accounts and payees
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-pivot\ FIELDNAME\f[]
|
|
use some other field or tag for the account name
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-I\ \-\-ignore\-assertions\f[]
|
|
ignore any failing balance assertions
|
|
.RS
|
|
.RE
|
|
.PP
|
|
General reporting options:
|
|
.TP
|
|
.B \f[C]\-b\ \-\-begin=DATE\f[]
|
|
include postings/txns on or after this date
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-e\ \-\-end=DATE\f[]
|
|
include postings/txns before this date
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-D\ \-\-daily\f[]
|
|
multiperiod/multicolumn report by day
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-W\ \-\-weekly\f[]
|
|
multiperiod/multicolumn report by week
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-M\ \-\-monthly\f[]
|
|
multiperiod/multicolumn report by month
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-Q\ \-\-quarterly\f[]
|
|
multiperiod/multicolumn report by quarter
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-Y\ \-\-yearly\f[]
|
|
multiperiod/multicolumn report by year
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-p\ \-\-period=PERIODEXP\f[]
|
|
set start date, end date, and/or reporting interval all at once using
|
|
period expressions syntax (overrides the flags above)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-date2\f[]
|
|
match the secondary date instead (see command help for other effects)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-U\ \-\-unmarked\f[]
|
|
include only unmarked postings/txns (can combine with \-P or \-C)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-P\ \-\-pending\f[]
|
|
include only pending postings/txns
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-C\ \-\-cleared\f[]
|
|
include only cleared postings/txns
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-R\ \-\-real\f[]
|
|
include only non\-virtual postings
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-NUM\ \-\-depth=NUM\f[]
|
|
hide/aggregate accounts or postings more than NUM levels deep
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-E\ \-\-empty\f[]
|
|
show items with zero amount, normally hidden (and vice\-versa in
|
|
hledger\-ui/hledger\-web)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-B\ \-\-cost\f[]
|
|
convert amounts to their cost at transaction time (using the transaction
|
|
price, if any)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-V\ \-\-value\f[]
|
|
convert amounts to their market value on the report end date (using the
|
|
most recent applicable market price, if any)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-auto\f[]
|
|
apply automated posting rules to modify transactions.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[C]\-\-forecast\f[]
|
|
apply periodic transaction rules to generate future transactions, to 6
|
|
months from now or report end date.
|
|
.RS
|
|
.RE
|
|
.PP
|
|
When a reporting option appears more than once in the command line, the
|
|
last one takes precedence.
|
|
.PP
|
|
Some reporting options can also be written as query arguments.
|
|
.SS Command options
|
|
.PP
|
|
To see options for a particular command, including command\-specific
|
|
options, run: \f[C]hledger\ COMMAND\ \-h\f[].
|
|
.PP
|
|
Command\-specific options must be written after the command name, eg:
|
|
\f[C]hledger\ print\ \-x\f[].
|
|
.PP
|
|
Additionally, if the command is an addon, you may need to put its
|
|
options after a double\-hyphen, eg:
|
|
\f[C]hledger\ ui\ \-\-\ \-\-watch\f[].
|
|
Or, you can run the addon executable directly:
|
|
\f[C]hledger\-ui\ \-\-watch\f[].
|
|
.SS Command arguments
|
|
.PP
|
|
Most hledger commands accept arguments after the command name, which are
|
|
often a query, filtering the data in some way.
|
|
.SS Argument files
|
|
.PP
|
|
You can save a set of command line options/arguments in a file, one per
|
|
line, and then reuse them by writing \f[C]\@FILENAME\f[] in a command
|
|
line.
|
|
To prevent this expansion of \f[C]\@\f[]\-arguments, precede them with a
|
|
\f[C]\-\-\f[] argument.
|
|
For more, see Save frequently used options.
|
|
.SS Special characters in arguments and queries
|
|
.PP
|
|
In shell command lines, option and argument values which contain
|
|
"problematic" characters, ie spaces, and also characters significant to
|
|
your shell such as \f[C]<\f[], \f[C]>\f[], \f[C](\f[], \f[C])\f[],
|
|
\f[C]|\f[] and \f[C]$\f[], should be escaped by enclosing them in quotes
|
|
or by writing backslashes before the characters.
|
|
Eg:
|
|
.PP
|
|
\f[C]hledger\ register\ \-p\ \[aq]last\ year\[aq]\ "accounts\ receivable\ (receivable|payable)"\ amt:\\>100\f[].
|
|
.SS More escaping
|
|
.PP
|
|
Characters significant both to the shell and in regular expressions may
|
|
need one extra level of escaping.
|
|
These include parentheses, the pipe symbol and the dollar sign.
|
|
Eg, to match the dollar symbol, bash users should do:
|
|
.PP
|
|
\f[C]hledger\ balance\ cur:\[aq]\\$\[aq]\f[]
|
|
.PP
|
|
or:
|
|
.PP
|
|
\f[C]hledger\ balance\ cur:\\\\$\f[]
|
|
.SS Even more escaping
|
|
.PP
|
|
When hledger runs an addon executable (eg you type \f[C]hledger\ ui\f[],
|
|
hledger runs \f[C]hledger\-ui\f[]), it de\-escapes command\-line options
|
|
and arguments once, so you might need to \f[I]triple\f[]\-escape.
|
|
Eg in bash, running the ui command and matching the dollar sign,
|
|
it\[aq]s:
|
|
.PP
|
|
\f[C]hledger\ ui\ cur:\[aq]\\\\$\[aq]\f[]
|
|
.PP
|
|
or:
|
|
.PP
|
|
\f[C]hledger\ ui\ cur:\\\\\\\\$\f[]
|
|
.PP
|
|
If you asked why \f[I]four\f[] slashes above, this may help:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
unescaped:
|
|
T}@T{
|
|
\f[C]$\f[]
|
|
T}
|
|
T{
|
|
escaped:
|
|
T}@T{
|
|
\f[C]\\$\f[]
|
|
T}
|
|
T{
|
|
double\-escaped:
|
|
T}@T{
|
|
\f[C]\\\\$\f[]
|
|
T}
|
|
T{
|
|
triple\-escaped:
|
|
T}@T{
|
|
\f[C]\\\\\\\\$\f[]
|
|
T}
|
|
.TE
|
|
.PP
|
|
(The number of backslashes in fish shell is left as an exercise for the
|
|
reader.)
|
|
.PP
|
|
You can always avoid the extra escaping for addons by running the addon
|
|
directly:
|
|
.PP
|
|
\f[C]hledger\-ui\ cur:\\\\$\f[]
|
|
.SS Less escaping
|
|
.PP
|
|
Inside an argument file, or in the search field of hledger\-ui or
|
|
hledger\-web, or at a GHCI prompt, you need one less level of escaping
|
|
than at the command line.
|
|
And backslashes may work better than quotes.
|
|
Eg:
|
|
.PP
|
|
\f[C]ghci>\ :main\ balance\ cur:\\$\f[]
|
|
.SS Command line tips
|
|
.PP
|
|
If in doubt, keep things simple:
|
|
.IP \[bu] 2
|
|
write options after the command (\f[C]hledger\ CMD\ \-OPTIONS\ ARGS\f[])
|
|
.IP \[bu] 2
|
|
run add\-on executables directly (\f[C]hledger\-ui\ \-OPTIONS\ ARGS\f[])
|
|
.IP \[bu] 2
|
|
enclose problematic args in single quotes
|
|
.IP \[bu] 2
|
|
if needed, also add a backslash to escape regexp metacharacters
|
|
.PP
|
|
To find out exactly how a command line is being parsed, add
|
|
\f[C]\-\-debug=2\f[] to troubleshoot.
|
|
.SS Unicode characters
|
|
.PP
|
|
hledger is expected to handle unicode (non\-ascii) characters, but this
|
|
requires a well\-configured environment.
|
|
.PP
|
|
To handle unicode characters in the command line or input data, a system
|
|
locale that can decode them must be configured (POSIX\[aq]s default
|
|
\f[C]C\f[] locale will not work).
|
|
Eg in bash, you could do:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
export\ LANG=en_US.UTF\-8
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
See Troubleshooting for more about this.
|
|
.PP
|
|
Unicode characters should appear correctly in hledger\[aq]s output.
|
|
For the hledger and hledger\-ui tools, this requires that
|
|
.IP \[bu] 2
|
|
your terminal supports unicode
|
|
.IP \[bu] 2
|
|
the terminal\[aq]s font includes the required unicode glyphs
|
|
.IP \[bu] 2
|
|
the terminal is configured to display "wide" characters as double width
|
|
(otherwise report alignment will be off)
|
|
.SS Input files
|
|
.PP
|
|
hledger reads transactions from a data file (and the add command writes
|
|
to it).
|
|
By default this file is \f[C]$HOME/.hledger.journal\f[] (or on Windows,
|
|
something like \f[C]C:/Users/USER/.hledger.journal\f[]).
|
|
You can override this with the \f[C]$LEDGER_FILE\f[] environment
|
|
variable:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ setenv\ LEDGER_FILE\ ~/finance/2016.journal
|
|
$\ hledger\ stats
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
or with the \f[C]\-f/\-\-file\f[] option:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ /some/file\ stats
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
The file name \f[C]\-\f[] (hyphen) means standard input:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ cat\ some.journal\ |\ hledger\ \-f\-
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Usually the data file is in hledger\[aq]s journal format, but it can
|
|
also be one of several other formats, listed below.
|
|
hledger detects the format automatically based on the file extension, or
|
|
if that is not recognised, by trying each built\-in "reader" in turn:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
lw(10.3n) lw(33.5n) lw(26.2n).
|
|
T{
|
|
Reader:
|
|
T}@T{
|
|
Reads:
|
|
T}@T{
|
|
Used for file extensions:
|
|
T}
|
|
_
|
|
T{
|
|
\f[C]journal\f[]
|
|
T}@T{
|
|
hledger\[aq]s journal format, also some Ledger journals
|
|
T}@T{
|
|
\f[C]\&.journal\f[] \f[C]\&.j\f[] \f[C]\&.hledger\f[] \f[C]\&.ledger\f[]
|
|
T}
|
|
T{
|
|
\f[C]timeclock\f[]
|
|
T}@T{
|
|
timeclock files (precise time logging)
|
|
T}@T{
|
|
\f[C]\&.timeclock\f[]
|
|
T}
|
|
T{
|
|
\f[C]timedot\f[]
|
|
T}@T{
|
|
timedot files (approximate time logging)
|
|
T}@T{
|
|
\f[C]\&.timedot\f[]
|
|
T}
|
|
T{
|
|
\f[C]csv\f[]
|
|
T}@T{
|
|
comma\-separated values (data interchange)
|
|
T}@T{
|
|
\f[C]\&.csv\f[]
|
|
T}
|
|
.TE
|
|
.PP
|
|
If needed (eg to ensure correct error messages when a file has the
|
|
"wrong" extension), you can force a specific reader/format by prepending
|
|
it to the file path with a colon.
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ csv:/some/csv\-file.dat\ stats
|
|
$\ echo\ \[aq]i\ 2009/13/1\ 08:00:00\[aq]\ |\ hledger\ print\ \-ftimeclock:\-
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
You can also specify multiple \f[C]\-f\f[] options, to read multiple
|
|
files as one big journal.
|
|
There are some limitations with this:
|
|
.IP \[bu] 2
|
|
directives in one file will not affect the other files
|
|
.IP \[bu] 2
|
|
balance assertions will not see any account balances from previous files
|
|
.PP
|
|
If you need those, either use the include directive, or concatenate the
|
|
files, eg: \f[C]cat\ a.journal\ b.journal\ |\ hledger\ \-f\-\ CMD\f[].
|
|
.SS Smart dates
|
|
.PP
|
|
hledger\[aq]s user interfaces accept a flexible "smart date" syntax
|
|
(unlike dates in the journal file).
|
|
Smart dates allow some english words, can be relative to today\[aq]s
|
|
date, and can have less\-significant date parts omitted (defaulting to
|
|
1).
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]2004/10/1\f[], \f[C]2004\-01\-01\f[], \f[C]2004.9.1\f[]
|
|
T}@T{
|
|
exact date, several separators allowed.
|
|
Year is 4+ digits, month is 1\-12, day is 1\-31
|
|
T}
|
|
T{
|
|
\f[C]2004\f[]
|
|
T}@T{
|
|
start of year
|
|
T}
|
|
T{
|
|
\f[C]2004/10\f[]
|
|
T}@T{
|
|
start of month
|
|
T}
|
|
T{
|
|
\f[C]10/1\f[]
|
|
T}@T{
|
|
month and day in current year
|
|
T}
|
|
T{
|
|
\f[C]21\f[]
|
|
T}@T{
|
|
day in current month
|
|
T}
|
|
T{
|
|
\f[C]october,\ oct\f[]
|
|
T}@T{
|
|
start of month in current year
|
|
T}
|
|
T{
|
|
\f[C]yesterday,\ today,\ tomorrow\f[]
|
|
T}@T{
|
|
\-1, 0, 1 days from today
|
|
T}
|
|
T{
|
|
\f[C]last/this/next\ day/week/month/quarter/year\f[]
|
|
T}@T{
|
|
\-1, 0, 1 periods from the current period
|
|
T}
|
|
T{
|
|
\f[C]20181201\f[]
|
|
T}@T{
|
|
8 digit YYYYMMDD with valid year month and day
|
|
T}
|
|
T{
|
|
\f[C]201812\f[]
|
|
T}@T{
|
|
6 digit YYYYMM with valid year and month
|
|
T}
|
|
.TE
|
|
.PP
|
|
Counterexamples \- malformed digit sequences might give surprising
|
|
results:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]201813\f[]
|
|
T}@T{
|
|
6 digits with an invalid month is parsed as start of 6\-digit year
|
|
T}
|
|
T{
|
|
\f[C]20181301\f[]
|
|
T}@T{
|
|
8 digits with an invalid month is parsed as start of 8\-digit year
|
|
T}
|
|
T{
|
|
\f[C]20181232\f[]
|
|
T}@T{
|
|
8 digits with an invalid day gives an error
|
|
T}
|
|
T{
|
|
\f[C]201801012\f[]
|
|
T}@T{
|
|
9+ digits beginning with a valid YYYYMMDD gives an error
|
|
T}
|
|
.TE
|
|
.SS Report start & end date
|
|
.PP
|
|
Most hledger reports show the full span of time represented by the
|
|
journal data, by default.
|
|
So, the effective report start and end dates will be the earliest and
|
|
latest transaction or posting dates found in the journal.
|
|
.PP
|
|
Often you will want to see a shorter time span, such as the current
|
|
month.
|
|
You can specify a start and/or end date using \f[C]\-b/\-\-begin\f[],
|
|
\f[C]\-e/\-\-end\f[], \f[C]\-p/\-\-period\f[] or a \f[C]date:\f[] query
|
|
(described below).
|
|
All of these accept the smart date syntax.
|
|
One important thing to be aware of when specifying end dates: as in
|
|
Ledger, end dates are exclusive, so you need to write the date
|
|
\f[I]after\f[] the last day you want to include.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]\-b\ 2016/3/17\f[]
|
|
T}@T{
|
|
begin on St.
|
|
Patrick\[aq]s day 2016
|
|
T}
|
|
T{
|
|
\f[C]\-e\ 12/1\f[]
|
|
T}@T{
|
|
end at the start of december 1st of the current year (11/30 will be the
|
|
last date included)
|
|
T}
|
|
T{
|
|
\f[C]\-b\ thismonth\f[]
|
|
T}@T{
|
|
all transactions on or after the 1st of the current month
|
|
T}
|
|
T{
|
|
\f[C]\-p\ thismonth\f[]
|
|
T}@T{
|
|
all transactions in the current month
|
|
T}
|
|
T{
|
|
\f[C]date:2016/3/17\-\f[]
|
|
T}@T{
|
|
the above written as queries instead
|
|
T}
|
|
T{
|
|
\f[C]date:\-12/1\f[]
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[C]date:thismonth\-\f[]
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[C]date:thismonth\f[]
|
|
T}@T{
|
|
T}
|
|
.TE
|
|
.SS Report intervals
|
|
.PP
|
|
A report interval can be specified so that commands like register,
|
|
balance and activity will divide their reports into multiple subperiods.
|
|
The basic intervals can be selected with one of \f[C]\-D/\-\-daily\f[],
|
|
\f[C]\-W/\-\-weekly\f[], \f[C]\-M/\-\-monthly\f[],
|
|
\f[C]\-Q/\-\-quarterly\f[], or \f[C]\-Y/\-\-yearly\f[].
|
|
More complex intervals may be specified with a period expression.
|
|
Report intervals can not be specified with a query, currently.
|
|
.SS Period expressions
|
|
.PP
|
|
The \f[C]\-p/\-\-period\f[] option accepts period expressions, a
|
|
shorthand way of expressing a start date, end date, and/or report
|
|
interval all at once.
|
|
.PP
|
|
Here\[aq]s a basic period expression specifying the first quarter of
|
|
2009.
|
|
Note, hledger always treats start dates as inclusive and end dates as
|
|
exclusive:
|
|
.PP
|
|
\f[C]\-p\ "from\ 2009/1/1\ to\ 2009/4/1"\f[]
|
|
.PP
|
|
Keywords like "from" and "to" are optional, and so are the spaces, as
|
|
long as you don\[aq]t run two dates together.
|
|
"to" can also be written as "\-".
|
|
These are equivalent to the above:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "2009/1/1\ 2009/4/1"\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p2009/1/1to2009/4/1\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p2009/1/1\-2009/4/1\f[]
|
|
T}
|
|
.TE
|
|
.PP
|
|
Dates are smart dates, so if the current year is 2009, the above can
|
|
also be written as:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "1/1\ 4/1"\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "january\-apr"\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "this\ year\ to\ 4/1"\f[]
|
|
T}
|
|
.TE
|
|
.PP
|
|
If you specify only one date, the missing start or end date will be the
|
|
earliest or latest transaction in your journal:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]\-p\ "from\ 2009/1/1"\f[]
|
|
T}@T{
|
|
everything after january 1, 2009
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "from\ 2009/1"\f[]
|
|
T}@T{
|
|
the same
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "from\ 2009"\f[]
|
|
T}@T{
|
|
the same
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "to\ 2009"\f[]
|
|
T}@T{
|
|
everything before january 1, 2009
|
|
T}
|
|
.TE
|
|
.PP
|
|
A single date with no "from" or "to" defines both the start and end date
|
|
like so:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]\-p\ "2009"\f[]
|
|
T}@T{
|
|
the year 2009; equivalent to "2009/1/1 to 2010/1/1"
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "2009/1"\f[]
|
|
T}@T{
|
|
the month of jan; equivalent to "2009/1/1 to 2009/2/1"
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "2009/1/1"\f[]
|
|
T}@T{
|
|
just that day; equivalent to "2009/1/1 to 2009/1/2"
|
|
T}
|
|
.TE
|
|
.PP
|
|
The argument of \f[C]\-p\f[] can also begin with, or be, a report
|
|
interval expression.
|
|
The basic report intervals are \f[C]daily\f[], \f[C]weekly\f[],
|
|
\f[C]monthly\f[], \f[C]quarterly\f[], or \f[C]yearly\f[], which have the
|
|
same effect as the \f[C]\-D\f[],\f[C]\-W\f[],\f[C]\-M\f[],\f[C]\-Q\f[],
|
|
or \f[C]\-Y\f[] flags.
|
|
Between report interval and start/end dates (if any), the word
|
|
\f[C]in\f[] is optional.
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "weekly\ from\ 2009/1/1\ to\ 2009/4/1"\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "monthly\ in\ 2008"\f[]
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "quarterly"\f[]
|
|
T}
|
|
.TE
|
|
.PP
|
|
Note that \f[C]weekly\f[], \f[C]monthly\f[], \f[C]quarterly\f[] and
|
|
\f[C]yearly\f[] intervals will always start on the first day on week,
|
|
month, quarter or year accordingly, and will end on the last day of same
|
|
period, even if associated period expression specifies different
|
|
explicit start and end date.
|
|
.PP
|
|
For example:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "weekly\ from\ 2009/1/1\ to\ 2009/4/1"\f[] \-\- starts on
|
|
2008/12/29, closest preceeding Monday
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "monthly\ in\ 2008/11/25"\f[] \-\- starts on 2018/11/01
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "quarterly\ from\ 2009\-05\-05\ to\ 2009\-06\-01"\f[] \-
|
|
starts on 2009/04/01, ends on 2009/06/30, which are first and last days
|
|
of Q2 2009
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "yearly\ from\ 2009\-12\-29"\f[] \- starts on 2009/01/01,
|
|
first day of 2009
|
|
T}
|
|
.TE
|
|
.PP
|
|
The following more complex report intervals are also supported:
|
|
\f[C]biweekly\f[], \f[C]bimonthly\f[],
|
|
\f[C]every\ day|week|month|quarter|year\f[],
|
|
\f[C]every\ N\ days|weeks|months|quarters|years\f[].
|
|
.PP
|
|
All of these will start on the first day of the requested period and end
|
|
on the last one, as described above.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "bimonthly\ from\ 2008"\f[] \-\- periods will have boundaries
|
|
on 2008/01/01, 2008/03/01, ...
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 2\ weeks"\f[] \-\- starts on closest preceeding Monday
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 5\ month\ from\ 2009/03"\f[] \-\- periods will have
|
|
boundaries on 2009/03/01, 2009/08/01, ...
|
|
T}
|
|
.TE
|
|
.PP
|
|
If you want intervals that start on arbitrary day of your choosing and
|
|
span a week, month or year, you need to use any of the following:
|
|
.PP
|
|
\f[C]every\ Nth\ day\ of\ week\f[], \f[C]every\ <weekday>\f[],
|
|
\f[C]every\ Nth\ day\ [of\ month]\f[],
|
|
\f[C]every\ Nth\ weekday\ [of\ month]\f[],
|
|
\f[C]every\ MM/DD\ [of\ year]\f[], \f[C]every\ Nth\ MMM\ [of\ year]\f[],
|
|
\f[C]every\ MMM\ Nth\ [of\ year]\f[].
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]\-p\ "every\ 2nd\ day\ of\ week"\f[] \-\- periods will go from Tue
|
|
to Tue
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ Tue"\f[] \-\- same
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 15th\ day"\f[] \-\- period boundaries will be on 15th
|
|
of each month
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 2nd\ Monday"\f[] \-\- period boundaries will be on
|
|
second Monday of each month
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 11/05"\f[] \-\- yearly periods with boundaries on 5th
|
|
of Nov
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ 5th\ Nov"\f[] \-\- same
|
|
T}
|
|
T{
|
|
\f[C]\-p\ "every\ Nov\ 5th"\f[] \-\- same
|
|
T}
|
|
.TE
|
|
.PP
|
|
Show historical balances at end of 15th each month (N is exclusive end
|
|
date):
|
|
.PP
|
|
\f[C]hledger\ balance\ \-H\ \-p\ "every\ 16th\ day"\f[]
|
|
.PP
|
|
Group postings from start of wednesday to end of next tuesday (N is
|
|
start date and exclusive end date):
|
|
.PP
|
|
\f[C]hledger\ register\ checking\ \-p\ "every\ 3rd\ day\ of\ week"\f[]
|
|
.SS Depth limiting
|
|
.PP
|
|
With the \f[C]\-\-depth\ N\f[] option (short form: \f[C]\-N\f[]),
|
|
commands like account, balance and register will show only the uppermost
|
|
accounts in the account tree, down to level N.
|
|
Use this when you want a summary with less detail.
|
|
This flag has the same effect as a \f[C]depth:\f[] query argument (so
|
|
\f[C]\-2\f[], \f[C]\-\-depth=2\f[] or \f[C]depth:2\f[] are basically
|
|
equivalent).
|
|
.SS Pivoting
|
|
.PP
|
|
Normally hledger sums amounts, and organizes them in a hierarchy, based
|
|
on account name.
|
|
The \f[C]\-\-pivot\ FIELD\f[] option causes it to sum and organize
|
|
hierarchy based on the value of some other field instead.
|
|
FIELD can be: \f[C]code\f[], \f[C]description\f[], \f[C]payee\f[],
|
|
\f[C]note\f[], or the full name (case insensitive) of any tag.
|
|
As with account names, values containing \f[C]colon:separated:parts\f[]
|
|
will be displayed hierarchically in reports.
|
|
.PP
|
|
\f[C]\-\-pivot\f[] is a general option affecting all reports; you can
|
|
think of hledger transforming the journal before any other processing,
|
|
replacing every posting\[aq]s account name with the value of the
|
|
specified field on that posting, inheriting it from the transaction or
|
|
using a blank value if it\[aq]s not present.
|
|
.PP
|
|
An example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2016/02/16\ Member\ Fee\ Payment
|
|
\ \ \ \ assets:bank\ account\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ EUR
|
|
\ \ \ \ income:member\ fees\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ ;\ member:\ John\ Doe
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Normal balance report showing account names:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ EUR\ \ assets:bank\ account
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ income:member\ fees
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Pivoted balance report, using member: tag values instead:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-pivot\ member
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ EUR
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ John\ Doe
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
One way to show only amounts with a member: value (using a query,
|
|
described below):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-pivot\ member\ tag:member=.
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ John\ Doe
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Another way (the acct: query matches against the pivoted "account
|
|
name"):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-pivot\ member\ acct:.
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ John\ Doe
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR
|
|
\f[]
|
|
.fi
|
|
.SS Cost
|
|
.PP
|
|
The \f[C]\-B/\-\-cost\f[] flag converts amounts to their cost at
|
|
transaction time, if they have a transaction price specified.
|
|
.SS Market value
|
|
.PP
|
|
The \f[C]\-V/\-\-value\f[] flag converts reported amounts to their
|
|
current market value.
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Specifically, when there is a market price (P directive) for the
|
|
amount\[aq]s commodity, dated on or before today\[aq]s date (or the
|
|
report end date if specified), the amount will be converted to the
|
|
price\[aq]s commodity.
|
|
.PP
|
|
When there are multiple applicable P directives, \-V chooses the most
|
|
recent one, or in case of equal dates, the last\-parsed one.
|
|
.PP
|
|
For example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
#\ one\ euro\ is\ worth\ this\ many\ dollars\ from\ nov\ 1
|
|
P\ 2016/11/01\ €\ $1.10
|
|
|
|
#\ purchase\ some\ euros\ on\ nov\ 3
|
|
2016/11/3
|
|
\ \ \ \ assets:euros\ \ \ \ \ \ \ \ €100
|
|
\ \ \ \ assets:checking
|
|
|
|
#\ the\ euro\ is\ worth\ fewer\ dollars\ by\ dec\ 21
|
|
P\ 2016/12/21\ €\ $1.03
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
How many euros do I have ?
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ t.j\ bal\ \-N\ euros
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ €100\ \ assets:euros
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
What are they worth at end of nov 3 ?
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ t.j\ bal\ \-N\ euros\ \-V\ \-e\ 2016/11/4
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ $110.00\ \ assets:euros
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
What are they worth after 2016/12/21 ?
|
|
(no report end date specified, defaults to today)
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ t.j\ bal\ \-N\ euros\ \-V
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ $103.00\ \ assets:euros
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Currently, hledger\[aq]s \-V only uses market prices recorded with P
|
|
directives, not transaction prices (unlike Ledger).
|
|
.PP
|
|
Currently, \-V has a limitation in multicolumn balance reports: it uses
|
|
the market prices on the report end date for all columns.
|
|
(Instead of the prices on each column\[aq]s end date.)
|
|
.SS Combining \-B and \-V
|
|
.PP
|
|
Using \-B/\-\-cost and \-V/\-\-value together is currently allowed, but
|
|
the results are probably not meaningful.
|
|
Let us know if you find a use for this.
|
|
.SS Output destination
|
|
.PP
|
|
Some commands (print, register, stats, the balance commands) can write
|
|
their output to a destination other than the console.
|
|
This is controlled by the \f[C]\-o/\-\-output\-file\f[] option.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-o\ \-\ \ \ \ \ #\ write\ to\ stdout\ (the\ default)
|
|
$\ hledger\ balance\ \-o\ FILE\ \ #\ write\ to\ FILE
|
|
\f[]
|
|
.fi
|
|
.SS Output format
|
|
.PP
|
|
Some commands can write their output in other formats.
|
|
Eg print and register can output CSV, and the balance commands can
|
|
output CSV or HTML.
|
|
This is controlled by the \f[C]\-O/\-\-output\-format\f[] option, or by
|
|
specifying a \f[C]\&.csv\f[] or \f[C]\&.html\f[] file extension with
|
|
\f[C]\-o/\-\-output\-file\f[].
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-O\ csv\ \ \ \ \ \ \ #\ write\ CSV\ to\ stdout
|
|
$\ hledger\ balance\ \-o\ FILE.csv\ \ #\ write\ CSV\ to\ FILE.csv
|
|
\f[]
|
|
.fi
|
|
.SS Regular expressions
|
|
.PP
|
|
hledger uses regular expressions in a number of places:
|
|
.IP \[bu] 2
|
|
query terms, on the command line and in the hledger\-web search form:
|
|
\f[C]REGEX\f[], \f[C]desc:REGEX\f[], \f[C]cur:REGEX\f[],
|
|
\f[C]tag:...=REGEX\f[]
|
|
.IP \[bu] 2
|
|
CSV rules conditional blocks: \f[C]if\ REGEX\ ...\f[]
|
|
.IP \[bu] 2
|
|
account alias directives and options:
|
|
\f[C]alias\ /REGEX/\ =\ REPLACEMENT\f[],
|
|
\f[C]\-\-alias\ /REGEX/=REPLACEMENT\f[]
|
|
.PP
|
|
hledger\[aq]s regular expressions come from the regex\-tdfa library.
|
|
In general they:
|
|
.IP \[bu] 2
|
|
are case insensitive
|
|
.IP \[bu] 2
|
|
are infix matching (do not need to match the entire thing being matched)
|
|
.IP \[bu] 2
|
|
are POSIX extended regular expressions
|
|
.IP \[bu] 2
|
|
also support GNU word boundaries (\\<, \\>, \\b, \\B)
|
|
.IP \[bu] 2
|
|
and parenthesised capturing groups and numeric backreferences in
|
|
replacement strings
|
|
.IP \[bu] 2
|
|
do not support mode modifiers like (?s)
|
|
.PP
|
|
Some things to note:
|
|
.IP \[bu] 2
|
|
In the \f[C]alias\f[] directive and \f[C]\-\-alias\f[] option, regular
|
|
expressions must be enclosed in forward slashes (\f[C]/REGEX/\f[]).
|
|
Elsewhere in hledger, these are not required.
|
|
.IP \[bu] 2
|
|
In queries, to match a regular expression metacharacter like \f[C]$\f[]
|
|
as a literal character, prepend a backslash.
|
|
Eg to search for amounts with the dollar sign in hledger\-web, write
|
|
\f[C]cur:\\$\f[].
|
|
.IP \[bu] 2
|
|
On the command line, some metacharacters like \f[C]$\f[] have a special
|
|
meaning to the shell and so must be escaped at least once more.
|
|
See Special characters.
|
|
.SH QUERIES
|
|
.PP
|
|
One of hledger\[aq]s strengths is being able to quickly report on
|
|
precise subsets of your data.
|
|
Most commands accept an optional query expression, written as arguments
|
|
after the command name, to filter the data by date, account name or
|
|
other criteria.
|
|
The syntax is similar to a web search: one or more space\-separated
|
|
search terms, quotes to enclose whitespace, prefixes to match specific
|
|
fields, a not: prefix to negate the match.
|
|
.PP
|
|
We do not yet support arbitrary boolean combinations of search terms;
|
|
instead most commands show transactions/postings/accounts which match
|
|
(or negatively match):
|
|
.IP \[bu] 2
|
|
any of the description terms AND
|
|
.IP \[bu] 2
|
|
any of the account terms AND
|
|
.IP \[bu] 2
|
|
any of the status terms AND
|
|
.IP \[bu] 2
|
|
all the other terms.
|
|
.PP
|
|
The print command instead shows transactions which:
|
|
.IP \[bu] 2
|
|
match any of the description terms AND
|
|
.IP \[bu] 2
|
|
have any postings matching any of the positive account terms AND
|
|
.IP \[bu] 2
|
|
have no postings matching any of the negative account terms AND
|
|
.IP \[bu] 2
|
|
match all the other terms.
|
|
.PP
|
|
The following kinds of search terms can be used.
|
|
Remember these can also be prefixed with \f[B]\f[BC]not:\f[B]\f[], eg to
|
|
exclude a particular subaccount.
|
|
.TP
|
|
.B \f[B]\f[BC]REGEX\f[B], \f[BC]acct:REGEX\f[B]\f[]
|
|
match account names by this regular expression.
|
|
(With no prefix, \f[C]acct:\f[] is assumed.)
|
|
.RS
|
|
.RE
|
|
same as above
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]amt:N,\ amt:<N,\ amt:<=N,\ amt:>N,\ amt:>=N\f[B]\f[]
|
|
match postings with a single\-commodity amount that is equal to, less
|
|
than, or greater than N.
|
|
(Multi\-commodity amounts are not tested, and will always match.) The
|
|
comparison has two modes: if N is preceded by a + or \- sign (or is 0),
|
|
the two signed numbers are compared.
|
|
Otherwise, the absolute magnitudes are compared, ignoring sign.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]code:REGEX\f[B]\f[]
|
|
match by transaction code (eg check number)
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]cur:REGEX\f[B]\f[]
|
|
match postings or transactions including any amounts whose
|
|
currency/commodity symbol is fully matched by REGEX.
|
|
(For a partial match, use \f[C]\&.*REGEX.*\f[]).
|
|
Note, to match characters which are regex\-significant, like the dollar
|
|
sign (\f[C]$\f[]), you need to prepend \f[C]\\\f[].
|
|
And when using the command line you need to add one more level of
|
|
quoting to hide it from the shell, so eg do:
|
|
\f[C]hledger\ print\ cur:\[aq]\\$\[aq]\f[] or
|
|
\f[C]hledger\ print\ cur:\\\\$\f[].
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]desc:REGEX\f[B]\f[]
|
|
match transaction descriptions.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]date:PERIODEXPR\f[B]\f[]
|
|
match dates within the specified period.
|
|
PERIODEXPR is a period expression (with no report interval).
|
|
Examples: \f[C]date:2016\f[], \f[C]date:thismonth\f[],
|
|
\f[C]date:2000/2/1\-2/15\f[], \f[C]date:lastweek\-\f[].
|
|
If the \f[C]\-\-date2\f[] command line flag is present, this matches
|
|
secondary dates instead.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]date2:PERIODEXPR\f[B]\f[]
|
|
match secondary dates within the specified period.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]depth:N\f[B]\f[]
|
|
match (or display, depending on command) accounts at or above this depth
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]note:REGEX\f[B]\f[]
|
|
match transaction notes (part of description right of \f[C]|\f[], or
|
|
whole description when there\[aq]s no \f[C]|\f[])
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]payee:REGEX\f[B]\f[]
|
|
match transaction payee/payer names (part of description left of
|
|
\f[C]|\f[], or whole description when there\[aq]s no \f[C]|\f[])
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]real:,\ real:0\f[B]\f[]
|
|
match real or virtual postings respectively
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]status:,\ status:!,\ status:*\f[B]\f[]
|
|
match unmarked, pending, or cleared transactions respectively
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[B]\f[BC]tag:REGEX[=REGEX]\f[B]\f[]
|
|
match by tag name, and optionally also by tag value.
|
|
Note a tag: query is considered to match a transaction if it matches any
|
|
of the postings.
|
|
Also remember that postings inherit the tags of their parent
|
|
transaction.
|
|
.RS
|
|
.RE
|
|
.PP
|
|
The following special search term is used automatically in hledger\-web,
|
|
only:
|
|
.TP
|
|
.B \f[B]\f[BC]inacct:ACCTNAME\f[B]\f[]
|
|
tells hledger\-web to show the transaction register for this account.
|
|
Can be filtered further with \f[C]acct\f[] etc.
|
|
.RS
|
|
.RE
|
|
.PP
|
|
Some of these can also be expressed as command\-line options (eg
|
|
\f[C]depth:2\f[] is equivalent to \f[C]\-\-depth\ 2\f[]).
|
|
Generally you can mix options and query arguments, and the resulting
|
|
query will be their intersection (perhaps excluding the
|
|
\f[C]\-p/\-\-period\f[] option).
|
|
.SH COMMANDS
|
|
.PP
|
|
hledger provides a number of subcommands; \f[C]hledger\f[] with no
|
|
arguments shows a list.
|
|
.PP
|
|
If you install additional \f[C]hledger\-*\f[] packages, or if you put
|
|
programs or scripts named \f[C]hledger\-NAME\f[] in your PATH, these
|
|
will also be listed as subcommands.
|
|
.PP
|
|
Run a subcommand by writing its name as first argument (eg
|
|
\f[C]hledger\ incomestatement\f[]).
|
|
You can also write one of the standard short aliases displayed in
|
|
parentheses in the command list (\f[C]hledger\ b\f[]), or any any
|
|
unambiguous prefix of a command name (\f[C]hledger\ inc\f[]).
|
|
.PP
|
|
Here are all the builtin commands in alphabetical order.
|
|
See also \f[C]hledger\f[] for a more organised command list, and
|
|
\f[C]hledger\ CMD\ \-h\f[] for detailed command help.
|
|
.SS accounts
|
|
.PP
|
|
accounts, a
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show account names.
|
|
.PP
|
|
This command lists account names, either declared with account
|
|
directives (\-\-declared), posted to (\-\-used), or both (the default).
|
|
With query arguments, only matched account names and account names
|
|
referenced by matched postings are shown.
|
|
It shows a flat list by default.
|
|
With \f[C]\-\-tree\f[], it uses indentation to show the account
|
|
hierarchy.
|
|
In flat mode you can add \f[C]\-\-drop\ N\f[] to omit the first few
|
|
account name components.
|
|
Account names can be depth\-clipped with \f[C]depth:N\f[] or
|
|
\f[C]\-\-depth\ N\f[] or \f[C]\-N\f[].
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ accounts
|
|
assets:bank:checking
|
|
assets:bank:saving
|
|
assets:cash
|
|
expenses:food
|
|
expenses:supplies
|
|
income:gifts
|
|
income:salary
|
|
liabilities:debts
|
|
\f[]
|
|
.fi
|
|
.SS activity
|
|
.PP
|
|
activity
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show an ascii barchart of posting counts per interval.
|
|
.PP
|
|
The activity command displays an ascii histogram showing transaction
|
|
counts by day, week, month or other reporting interval (by day is the
|
|
default).
|
|
With query arguments, it counts only matched transactions.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ activity\ \-\-quarterly
|
|
2008\-01\-01\ **
|
|
2008\-04\-01\ *******
|
|
2008\-07\-01\
|
|
2008\-10\-01\ **
|
|
\f[]
|
|
.fi
|
|
.SS add
|
|
.PP
|
|
add
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Prompt for transactions and add them to the journal.
|
|
.PP
|
|
Many hledger users edit their journals directly with a text editor, or
|
|
generate them from CSV.
|
|
For more interactive data entry, there is the \f[C]add\f[] command,
|
|
which prompts interactively on the console for new transactions, and
|
|
appends them to the journal file (if there are multiple
|
|
\f[C]\-f\ FILE\f[] options, the first file is used.) Existing
|
|
transactions are not changed.
|
|
This is the only hledger command that writes to the journal file.
|
|
.PP
|
|
To use it, just run \f[C]hledger\ add\f[] and follow the prompts.
|
|
You can add as many transactions as you like; when you are finished,
|
|
enter \f[C]\&.\f[] or press control\-d or control\-c to exit.
|
|
.PP
|
|
Features:
|
|
.IP \[bu] 2
|
|
add tries to provide useful defaults, using the most similar (by
|
|
description) recent transaction (filtered by the query, if any) as a
|
|
template.
|
|
.IP \[bu] 2
|
|
You can also set the initial defaults with command line arguments.
|
|
.IP \[bu] 2
|
|
Readline\-style edit keys can be used during data entry.
|
|
.IP \[bu] 2
|
|
The tab key will auto\-complete whenever possible \- accounts,
|
|
descriptions, dates (\f[C]yesterday\f[], \f[C]today\f[],
|
|
\f[C]tomorrow\f[]).
|
|
If the input area is empty, it will insert the default value.
|
|
.IP \[bu] 2
|
|
If the journal defines a default commodity, it will be added to any bare
|
|
numbers entered.
|
|
.IP \[bu] 2
|
|
A parenthesised transaction code may be entered following a date.
|
|
.IP \[bu] 2
|
|
Comments and tags may be entered following a description or amount.
|
|
.IP \[bu] 2
|
|
If you make a mistake, enter \f[C]<\f[] at any prompt to restart the
|
|
transaction.
|
|
.IP \[bu] 2
|
|
Input prompts are displayed in a different colour when the terminal
|
|
supports it.
|
|
.PP
|
|
Example (see the tutorial for a detailed explanation):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ add
|
|
Adding\ transactions\ to\ journal\ file\ /src/hledger/examples/sample.journal
|
|
Any\ command\ line\ arguments\ will\ be\ used\ as\ defaults.
|
|
Use\ tab\ key\ to\ complete,\ readline\ keys\ to\ edit,\ enter\ to\ accept\ defaults.
|
|
An\ optional\ (CODE)\ may\ follow\ transaction\ dates.
|
|
An\ optional\ ;\ COMMENT\ may\ follow\ descriptions\ or\ amounts.
|
|
If\ you\ make\ a\ mistake,\ enter\ <\ at\ any\ prompt\ to\ restart\ the\ transaction.
|
|
To\ end\ a\ transaction,\ enter\ .\ when\ prompted.
|
|
To\ quit,\ enter\ .\ at\ a\ date\ prompt\ or\ press\ control\-d\ or\ control\-c.
|
|
Date\ [2015/05/22]:\
|
|
Description:\ supermarket
|
|
Account\ 1:\ expenses:food
|
|
Amount\ \ 1:\ $10
|
|
Account\ 2:\ assets:checking
|
|
Amount\ \ 2\ [$\-10.0]:\
|
|
Account\ 3\ (or\ .\ or\ enter\ to\ finish\ this\ transaction):\ .
|
|
2015/05/22\ supermarket
|
|
\ \ \ \ expenses:food\ \ \ \ \ \ \ \ \ \ \ \ \ $10
|
|
\ \ \ \ assets:checking\ \ \ \ \ \ \ \ $\-10.0
|
|
|
|
Save\ this\ transaction\ to\ the\ journal\ ?\ [y]:\
|
|
Saved.
|
|
Starting\ the\ next\ transaction\ (.\ or\ ctrl\-D/ctrl\-C\ to\ quit)
|
|
Date\ [2015/05/22]:\ <CTRL\-D>\ $
|
|
\f[]
|
|
.fi
|
|
.SS balance
|
|
.PP
|
|
balance, bal, b
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show accounts and their balances.
|
|
.PP
|
|
The balance command is hledger\[aq]s most versatile command.
|
|
Note, despite the name, it is not always used for showing real\-world
|
|
account balances; the more accounting\-aware balancesheet and
|
|
incomestatement may be more convenient for that.
|
|
.PP
|
|
By default, it displays all accounts, and each account\[aq]s change in
|
|
balance during the entire period of the journal.
|
|
Balance changes are calculated by adding up the postings in each
|
|
account.
|
|
You can limit the postings matched, by a query, to see fewer accounts,
|
|
changes over a different time period, changes from only cleared
|
|
transactions, etc.
|
|
.PP
|
|
If you include an account\[aq]s complete history of postings in the
|
|
report, the balance change is equivalent to the account\[aq]s current
|
|
ending balance.
|
|
For a real\-world account, typically you won\[aq]t have all transactions
|
|
in the journal; instead you\[aq]ll have all transactions after a certain
|
|
date, and an "opening balances" transaction setting the correct starting
|
|
balance on that date.
|
|
Then the balance command will show real\-world account balances.
|
|
In some cases the \-H/\-\-historical flag is used to ensure this (more
|
|
below).
|
|
.PP
|
|
The balance command can produce several styles of report:
|
|
.SS Classic balance report
|
|
.PP
|
|
This is the original balance report, as found in Ledger.
|
|
It usually looks like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ assets
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ bank:saving
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ \ \ cash
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2\ \ expenses
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ food
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ supplies
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ income
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ gifts
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ salary
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ liabilities:debts
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
By default, accounts are displayed hierarchically, with subaccounts
|
|
indented below their parent.
|
|
At each level of the tree, accounts are sorted by account code if any,
|
|
then by account name.
|
|
Or with \f[C]\-S/\-\-sort\-amount\f[], by their balance amount.
|
|
.PP
|
|
"Boring" accounts, which contain a single interesting subaccount and no
|
|
balance of their own, are elided into the following line for more
|
|
compact output.
|
|
(Eg above, the "liabilities" account.) Use \f[C]\-\-no\-elide\f[] to
|
|
prevent this.
|
|
.PP
|
|
Account balances are "inclusive" \- they include the balances of any
|
|
subaccounts.
|
|
.PP
|
|
Accounts which have zero balance (and no non\-zero subaccounts) are
|
|
omitted.
|
|
Use \f[C]\-E/\-\-empty\f[] to show them.
|
|
.PP
|
|
A final total is displayed by default; use \f[C]\-N/\-\-no\-total\f[] to
|
|
suppress it, eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-p\ 2008/6\ expenses\ \-\-no\-total
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2\ \ expenses
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ food
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ supplies
|
|
\f[]
|
|
.fi
|
|
.SS Customising the classic balance report
|
|
.PP
|
|
You can customise the layout of classic balance reports with
|
|
\f[C]\-\-format\ FMT\f[]:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-format\ "%20(account)\ %12(total)"
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ assets\ \ \ \ \ \ \ \ \ \ $\-1
|
|
\ \ \ \ \ \ \ \ \ bank:saving\ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cash\ \ \ \ \ \ \ \ \ \ $\-2
|
|
\ \ \ \ \ \ \ \ \ \ \ \ expenses\ \ \ \ \ \ \ \ \ \ \ $2
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ food\ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ supplies\ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ income\ \ \ \ \ \ \ \ \ \ $\-2
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gifts\ \ \ \ \ \ \ \ \ \ $\-1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ salary\ \ \ \ \ \ \ \ \ \ $\-1
|
|
\ \ \ liabilities:debts\ \ \ \ \ \ \ \ \ \ \ $1
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
The FMT format string (plus a newline) specifies the formatting applied
|
|
to each account/balance pair.
|
|
It may contain any suitable text, with data fields interpolated like so:
|
|
.PP
|
|
\f[C]%[MIN][.MAX](FIELDNAME)\f[]
|
|
.IP \[bu] 2
|
|
MIN pads with spaces to at least this width (optional)
|
|
.IP \[bu] 2
|
|
MAX truncates at this width (optional)
|
|
.IP \[bu] 2
|
|
FIELDNAME must be enclosed in parentheses, and can be one of:
|
|
.RS 2
|
|
.IP \[bu] 2
|
|
\f[C]depth_spacer\f[] \- a number of spaces equal to the account\[aq]s
|
|
depth, or if MIN is specified, MIN * depth spaces.
|
|
.IP \[bu] 2
|
|
\f[C]account\f[] \- the account\[aq]s name
|
|
.IP \[bu] 2
|
|
\f[C]total\f[] \- the account\[aq]s balance/posted total, right
|
|
justified
|
|
.RE
|
|
.PP
|
|
Also, FMT can begin with an optional prefix to control how
|
|
multi\-commodity amounts are rendered:
|
|
.IP \[bu] 2
|
|
\f[C]%_\f[] \- render on multiple lines, bottom\-aligned (the default)
|
|
.IP \[bu] 2
|
|
\f[C]%^\f[] \- render on multiple lines, top\-aligned
|
|
.IP \[bu] 2
|
|
\f[C]%,\f[] \- render on one line, comma\-separated
|
|
.PP
|
|
There are some quirks.
|
|
Eg in one\-line mode, \f[C]%(depth_spacer)\f[] has no effect, instead
|
|
\f[C]%(account)\f[] has indentation built in.
|
|
Experimentation may be needed to get pleasing results.
|
|
.PP
|
|
Some example formats:
|
|
.IP \[bu] 2
|
|
\f[C]%(total)\f[] \- the account\[aq]s total
|
|
.IP \[bu] 2
|
|
\f[C]%\-20.20(account)\f[] \- the account\[aq]s name, left justified,
|
|
padded to 20 characters and clipped at 20 characters
|
|
.IP \[bu] 2
|
|
\f[C]%,%\-50(account)\ \ %25(total)\f[] \- account name padded to 50
|
|
characters, total padded to 20 characters, with multiple commodities
|
|
rendered on one line
|
|
.IP \[bu] 2
|
|
\f[C]%20(total)\ \ %2(depth_spacer)%\-(account)\f[] \- the default
|
|
format for the single\-column balance report
|
|
.SS Colour support
|
|
.PP
|
|
The balance command shows negative amounts in red, if:
|
|
.IP \[bu] 2
|
|
the \f[C]TERM\f[] environment variable is not set to \f[C]dumb\f[]
|
|
.IP \[bu] 2
|
|
the output is not being redirected or piped anywhere
|
|
.SS Flat mode
|
|
.PP
|
|
To see a flat list instead of the default hierarchical display, use
|
|
\f[C]\-\-flat\f[].
|
|
In this mode, accounts (unless depth\-clipped) show their full names and
|
|
"exclusive" balance, excluding any subaccount balances.
|
|
In this mode, you can also use \f[C]\-\-drop\ N\f[] to omit the first
|
|
few account name components.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-p\ 2008/6\ expenses\ \-N\ \-\-flat\ \-\-drop\ 1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ food
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ supplies
|
|
\f[]
|
|
.fi
|
|
.SS Depth limited balance reports
|
|
.PP
|
|
With \f[C]\-\-depth\ N\f[] or \f[C]depth:N\f[] or just \f[C]\-N\f[],
|
|
balance reports show accounts only to the specified numeric depth.
|
|
This is very useful to summarise a complex set of accounts and get an
|
|
overview.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-N\ \-1
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ assets
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2\ \ expenses
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ income
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ liabilities
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Flat\-mode balance reports, which normally show exclusive balances, show
|
|
inclusive balances at the depth limit.
|
|
.SS Multicolumn balance report
|
|
.PP
|
|
Multicolumn or tabular balance reports are a very useful hledger
|
|
feature, and usually the preferred style.
|
|
They share many of the above features, but they show the report as a
|
|
table, with columns representing time periods.
|
|
This mode is activated by providing a reporting interval.
|
|
.PP
|
|
There are three types of multicolumn balance report, showing different
|
|
information:
|
|
.IP "1." 3
|
|
By default: each column shows the sum of postings in that period, ie the
|
|
account\[aq]s change of balance in that period.
|
|
This is useful eg for a monthly income statement:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-quarterly\ income\ expenses\ \-E
|
|
Balance\ changes\ in\ 2008:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ 2008q1\ \ 2008q2\ \ 2008q3\ \ 2008q4\
|
|
===================++=================================
|
|
\ expenses:food\ \ \ \ \ ||\ \ \ \ \ \ \ 0\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\
|
|
\ expenses:supplies\ ||\ \ \ \ \ \ \ 0\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\
|
|
\ income:gifts\ \ \ \ \ \ ||\ \ \ \ \ \ \ 0\ \ \ \ \ $\-1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\
|
|
\ income:salary\ \ \ \ \ ||\ \ \ \ \ $\-1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ $\-1\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\
|
|
\f[]
|
|
.fi
|
|
.RE
|
|
.IP "2." 3
|
|
With \f[C]\-\-cumulative\f[]: each column shows the ending balance for
|
|
that period, accumulating the changes across periods, starting from 0 at
|
|
the report start date:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-quarterly\ income\ expenses\ \-E\ \-\-cumulative
|
|
Ending\ balances\ (cumulative)\ in\ 2008:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ 2008/03/31\ \ 2008/06/30\ \ 2008/09/30\ \ 2008/12/31\
|
|
===================++=================================================
|
|
\ expenses:food\ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\
|
|
\ expenses:supplies\ ||\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\
|
|
\ income:gifts\ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ $\-1\
|
|
\ income:salary\ \ \ \ \ ||\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ $\-1\
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ \ 0\
|
|
\f[]
|
|
.fi
|
|
.RE
|
|
.IP "3." 3
|
|
With \f[C]\-\-historical/\-H\f[]: each column shows the actual
|
|
historical ending balance for that period, accumulating the changes
|
|
across periods, starting from the actual balance at the report start
|
|
date.
|
|
This is useful eg for a multi\-period balance sheet, and when you are
|
|
showing only the data after a certain start date:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ ^assets\ ^liabilities\ \-\-quarterly\ \-\-historical\ \-\-begin\ 2008/4/1
|
|
Ending\ balances\ (historical)\ in\ 2008/04/01\-2008/12/31:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ 2008/06/30\ \ 2008/09/30\ \ 2008/12/31\
|
|
======================++=====================================
|
|
\ assets:bank:checking\ ||\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ \ 0\
|
|
\ assets:bank:saving\ \ \ ||\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ $1\
|
|
\ assets:cash\ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ $\-2\ \ \ \ \ \ \ \ \ $\-2\ \ \ \ \ \ \ \ \ $\-2\
|
|
\ liabilities:debts\ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $1\
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ \ 0\
|
|
\f[]
|
|
.fi
|
|
.RE
|
|
.PP
|
|
Multicolumn balance reports display accounts in flat mode by default; to
|
|
see the hierarchy, use \f[C]\-\-tree\f[].
|
|
.PP
|
|
With a reporting interval (like \f[C]\-\-quarterly\f[] above), the
|
|
report start/end dates will be adjusted if necessary so that they
|
|
encompass the displayed report periods.
|
|
This is so that the first and last periods will be "full" and comparable
|
|
to the others.
|
|
.PP
|
|
The \f[C]\-E/\-\-empty\f[] flag does two things in multicolumn balance
|
|
reports: first, the report will show all columns within the specified
|
|
report period (without \-E, leading and trailing columns with all zeroes
|
|
are not shown).
|
|
Second, all accounts which existed at the report start date will be
|
|
considered, not just the ones with activity during the report period
|
|
(use \-E to include low\-activity accounts which would otherwise would
|
|
be omitted).
|
|
.PP
|
|
The \f[C]\-T/\-\-row\-total\f[] flag adds an additional column showing
|
|
the total for each row.
|
|
.PP
|
|
The \f[C]\-A/\-\-average\f[] flag adds a column showing the average
|
|
value in each row.
|
|
.PP
|
|
Here\[aq]s an example of all three:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-Q\ income\ expenses\ \-\-tree\ \-ETA
|
|
Balance\ changes\ in\ 2008:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ ||\ \ 2008q1\ \ 2008q2\ \ 2008q3\ \ 2008q4\ \ \ \ Total\ \ Average\
|
|
============++===================================================
|
|
\ expenses\ \ \ ||\ \ \ \ \ \ \ 0\ \ \ \ \ \ $2\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ $2\ \ \ \ \ \ \ $1\
|
|
\ \ \ food\ \ \ \ \ ||\ \ \ \ \ \ \ 0\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ 0\
|
|
\ \ \ supplies\ ||\ \ \ \ \ \ \ 0\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ 0\
|
|
\ income\ \ \ \ \ ||\ \ \ \ \ $\-1\ \ \ \ \ $\-1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ $\-2\ \ \ \ \ \ $\-1\
|
|
\ \ \ gifts\ \ \ \ ||\ \ \ \ \ \ \ 0\ \ \ \ \ $\-1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ 0\
|
|
\ \ \ salary\ \ \ ||\ \ \ \ \ $\-1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ 0\
|
|
\-\-\-\-\-\-\-\-\-\-\-\-++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ $\-1\ \ \ \ \ \ $1\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ 0\
|
|
|
|
#\ Average\ is\ rounded\ to\ the\ dollar\ here\ since\ all\ journal\ amounts\ are
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Limitations:
|
|
.PP
|
|
In multicolumn reports the \f[C]\-V/\-\-value\f[] flag uses the market
|
|
price on the report end date, for all columns (not the price on each
|
|
column\[aq]s end date).
|
|
.PP
|
|
Eliding of boring parent accounts in tree mode, as in the classic
|
|
balance report, is not yet supported in multicolumn reports.
|
|
.SS Budget report
|
|
.PP
|
|
With \f[C]\-\-budget\f[], extra columns are displayed showing budget
|
|
goals for each account and period, if any.
|
|
Budget goals are defined by periodic transactions.
|
|
This is very useful for comparing planned and actual income, expenses,
|
|
time usage, etc.
|
|
\-\-budget is most often combined with a report interval.
|
|
.PP
|
|
For example, you can take average monthly expenses in the common expense
|
|
categories to construct a minimal monthly budget:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
;;\ Budget
|
|
~\ monthly
|
|
\ \ income\ \ $2000
|
|
\ \ expenses:food\ \ \ \ $400
|
|
\ \ expenses:bus\ \ \ \ \ $50
|
|
\ \ expenses:movies\ \ $30
|
|
\ \ assets:bank:checking
|
|
|
|
;;\ Two\ months\ worth\ of\ expenses
|
|
2017\-11\-01
|
|
\ \ income\ \ $1950
|
|
\ \ expenses:food\ \ \ \ $396
|
|
\ \ expenses:bus\ \ \ \ \ $49
|
|
\ \ expenses:movies\ \ $30
|
|
\ \ expenses:supplies\ \ $20
|
|
\ \ assets:bank:checking
|
|
|
|
2017\-12\-01
|
|
\ \ income\ \ $2100
|
|
\ \ expenses:food\ \ \ \ $412
|
|
\ \ expenses:bus\ \ \ \ \ $53
|
|
\ \ expenses:gifts\ \ \ $100
|
|
\ \ assets:bank:checking
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
You can now see a monthly budget report:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-M\ \-\-budget
|
|
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:movies\ \ \ \ \ \ ||\ \ \ \ $30\ [\ 100%\ of\ \ \ \ $30]\ \ \ \ \ \ \ 0\ [\ \ \ 0%\ of\ \ \ \ $30]\
|
|
\ income\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ $1950\ [\ \ 98%\ of\ \ $2000]\ \ \ $2100\ [\ 105%\ of\ \ $2000]\
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ 0\ [\ \ \ \ \ \ \ \ \ \ \ \ \ \ 0]\ \ \ \ \ \ \ 0\ [\ \ \ \ \ \ \ \ \ \ \ \ \ \ 0]\
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Note this is different from a normal balance report in several ways:
|
|
.IP \[bu] 2
|
|
Only accounts with budget goals during the report period are shown, by
|
|
default.
|
|
.IP \[bu] 2
|
|
In each column, in square brackets after the actual amount, budgeted
|
|
amounts are shown, along with the percentage of budget used.
|
|
.IP \[bu] 2
|
|
All parent accounts are always shown, even in flat mode.
|
|
Eg assets, assets:bank, and expenses above.
|
|
.IP \[bu] 2
|
|
Amounts always include all subaccounts, budgeted or unbudgeted, even in
|
|
flat mode.
|
|
.PP
|
|
This means that the numbers displayed will not always add up! Eg above,
|
|
the \f[C]expenses\f[] actual amount includes the gifts and supplies
|
|
transactions, but the \f[C]expenses:gifts\f[] and
|
|
\f[C]expenses:supplies\f[] accounts are not shown, as they have no
|
|
budget amounts declared.
|
|
.PP
|
|
This can be confusing.
|
|
When you need to make things clearer, use the \f[C]\-E/\-\-empty\f[]
|
|
flag, which will reveal all accounts including unbudgeted ones, giving
|
|
the full picture.
|
|
Eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-M\ \-\-budget\ \-\-empty
|
|
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]\
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
You can roll over unspent budgets to next period with
|
|
\f[C]\-\-cumulative\f[]:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-M\ \-\-budget\ \-\-cumulative
|
|
Budget\ performance\ in\ 2017/11/01\-2017/12/31:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ||\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 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]\
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
For more examples, see Budgeting and Forecasting.
|
|
.SS Nested budgets
|
|
.PP
|
|
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.
|
|
.PP
|
|
In the most simple case this means that once you add a budget to any
|
|
account, all its parents would have budget as well.
|
|
.PP
|
|
To illustrate this, consider the following budget:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
~\ monthly\ from\ 2019/01
|
|
\ \ \ \ expenses:personal\ \ \ \ \ \ \ \ \ \ \ \ \ $1,000.00
|
|
\ \ \ \ expenses:personal:electronics\ \ \ \ $100.00
|
|
\ \ \ \ liabilities
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
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 \f[C]expenses:personal\f[] and
|
|
\f[C]expenses\f[] is $1100.
|
|
.PP
|
|
Transactions in \f[C]expenses:personal:electronics\f[] will be counted
|
|
both towards its $100 budget and $1100 of \f[C]expenses:personal\f[] ,
|
|
and transactions in any other subaccount of \f[C]expenses:personal\f[]
|
|
would be counted towards only towards the budget of
|
|
\f[C]expenses:personal\f[].
|
|
.PP
|
|
For example, let\[aq]s consider these transactions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
~\ 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
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
As you can see, we have transactions in
|
|
\f[C]expenses:personal:electronics:upgrades\f[] and
|
|
\f[C]expenses:personal:train\ tickets\f[], and since both of these
|
|
accounts are without explicitly defined budget, these transactions would
|
|
be counted towards budgets of \f[C]expenses:personal:electronics\f[] and
|
|
\f[C]expenses:personal\f[] accordingly:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ 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]\
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
And with \f[C]\-\-empty\f[], we can get a better picture of budget
|
|
allocation and consumption:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balance\ \-\-budget\ \-M\ \-\-empty
|
|
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]\
|
|
\f[]
|
|
.fi
|
|
.SS Output format
|
|
.PP
|
|
The balance command supports output destination and output format
|
|
selection.
|
|
.SS balancesheet
|
|
.PP
|
|
balancesheet, bs
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple balance sheet, showing historical ending
|
|
balances of asset and liability accounts (ignoring any report begin
|
|
date).
|
|
It assumes that these accounts are under a top\-level \f[C]asset\f[] or
|
|
\f[C]liability\f[] account (case insensitive, plural forms also
|
|
allowed).
|
|
.PP
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balancesheet
|
|
Balance\ Sheet
|
|
|
|
Assets:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ assets
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ bank:saving
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ \ \ cash
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
|
|
Liabilities:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ liabilities:debts
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
|
|
Total:
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
As with multicolumn balance reports, you can alter the report mode with
|
|
\f[C]\-\-change\f[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
|
|
Normally balancesheet shows historical ending balances, which is what
|
|
you need for a balance sheet; note this means it ignores report begin
|
|
dates.
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS balancesheetequity
|
|
.PP
|
|
balancesheetequity, bse
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Just like balancesheet, but also reports Equity (which it assumes is
|
|
under a top\-level \f[C]equity\f[] account).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ balancesheetequity
|
|
Balance\ Sheet\ With\ Equity
|
|
|
|
Assets:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ assets
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ bank:saving
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-3\ \ \ \ cash
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2
|
|
|
|
Liabilities:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ liabilities:debts
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
|
|
Equity:
|
|
\ \ \ \ \ \ \ \ \ \ $1\ \ equity:owner
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ $1
|
|
|
|
Total:
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.SS cashflow
|
|
.PP
|
|
cashflow, cf
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple cashflow statement, showing changes in
|
|
"cash" accounts.
|
|
It assumes that these accounts are under a top\-level \f[C]asset\f[]
|
|
account (case insensitive, plural forms also allowed) and do not contain
|
|
\f[C]receivable\f[] or \f[C]A/R\f[] in their name.
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ cashflow
|
|
Cashflow\ Statement
|
|
|
|
Cash\ flows:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ assets
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ bank:saving
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ \ \ cash
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
|
|
Total:
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
Normally cashflow shows changes in assets per period, though as with
|
|
multicolumn balance reports you can alter the report mode with
|
|
\f[C]\-\-change\f[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS check\-dates
|
|
.PP
|
|
check\-dates
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Check that transactions are sorted by increasing date.
|
|
With \-\-date2, checks secondary dates instead.
|
|
With \-\-strict, dates must also be unique.
|
|
With a query, only matched transactions\[aq] dates are checked.
|
|
Reads the default journal file, or another specified with \-f.
|
|
.SS check\-dupes
|
|
.PP
|
|
check\-dupes
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Reports account names having the same leaf but different prefixes.
|
|
In other words, two or more leaves that are categorized differently.
|
|
Reads the default journal file, or another specified as an argument.
|
|
.PP
|
|
An example: http://stefanorodighiero.net/software/hledger\-dupes.html
|
|
.SS close
|
|
.PP
|
|
close, equity
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Prints a "closing balances" transaction and an "opening balances"
|
|
transaction that bring account balances to and from zero, respectively.
|
|
Useful for bringing asset/liability balances forward into a new journal
|
|
file, or for closing out revenues/expenses to retained earnings at the
|
|
end of a period.
|
|
.PP
|
|
The closing transaction transfers balances to "equity:closing balances".
|
|
The opening transaction transfers balances from "equity:opening
|
|
balances".
|
|
You can chose to print just one of the transactions by using the
|
|
\f[C]\-\-opening\f[] or \f[C]\-\-closing\f[] flag.
|
|
.PP
|
|
If you split your journal files by time (eg yearly), you will typically
|
|
run this command at the end of the year, and save the closing
|
|
transaction as last entry of the old file, and the opening transaction
|
|
as the first entry of the new file.
|
|
This makes the files self contained, so that correct balances are
|
|
reported no matter which of them are loaded.
|
|
Ie, if you load just one file, the balances are initialised correctly;
|
|
or if you load several files, the redundant closing/opening transactions
|
|
cancel each other out.
|
|
(They will show up in print or register reports; you can exclude them
|
|
with a query like
|
|
\f[C]not:desc:\[aq](opening|closing)\ balances\[aq]\f[].)
|
|
.PP
|
|
If you\[aq]re running a business, you might also use this command to
|
|
"close the books" at the end of an accounting period, transferring
|
|
income statement account balances to retained earnings.
|
|
(You may want to change the equity account name to something like
|
|
"equity:retained earnings".)
|
|
.PP
|
|
By default, the closing transaction is dated yesterday, the balances are
|
|
calculated as of end of yesterday, and the opening transaction is dated
|
|
today.
|
|
To close on some other date, use:
|
|
\f[C]hledger\ close\ \-e\ OPENINGDATE\f[].
|
|
Eg, to close/open on the 2018/2019 boundary, use \f[C]\-e\ 2019\f[].
|
|
You can also use \-p or \f[C]date:PERIOD\f[] (any starting date is
|
|
ignored).
|
|
.PP
|
|
Both transactions will include balance assertions for the
|
|
closed/reopened accounts.
|
|
You probably shouldn\[aq]t use status or realness filters (like \-C or
|
|
\-R or \f[C]status:\f[]) with this command, or the generated balance
|
|
assertions will depend on these flags.
|
|
Likewise, if you run this command with \-\-auto, the balance assertions
|
|
will probably always require \-\-auto.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
Carrying asset/liability balances into a new file for 2019, all from
|
|
command line:
|
|
.PP
|
|
\f[I]Warning: we use \f[CI]>>\f[I] here to append; be careful not to
|
|
type a single \f[CI]>\f[I] which would wipe your journal!\f[]
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ close\ \-f\ 2018.journal\ \-e\ 2019\ assets\ liabilities\ \-\-opening\ >>2019.journal
|
|
$\ hledger\ close\ \-f\ 2018.journal\ \-e\ 2019\ assets\ liabilities\ \-\-closing\ >>2018.journal
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Now:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ bs\ \-f\ 2019.journal\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ one\ file\ \-\ balances\ are\ correct
|
|
$\ hledger\ bs\ \-f\ 2018.journal\ \-f\ 2019.journal\ \ \ #\ two\ files\ \-\ balances\ still\ correct
|
|
$\ hledger\ bs\ \-f\ 2018.journal\ not:desc:closing\ \ #\ to\ see\ year\-end\ balances,\ must\ exclude\ closing\ txn
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Transactions spanning the closing date can complicate matters, breaking
|
|
balance assertions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2018/12/30\ a\ purchase\ made\ in\ 2018,\ clearing\ the\ following\ year
|
|
\ \ \ \ expenses:food\ \ \ \ \ \ \ \ \ \ 5
|
|
\ \ \ \ assets:bank:checking\ \ \-5\ \ ;\ [2019/1/2]
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Here\[aq]s one way to resolve that:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
;\ in\ 2018.journal:
|
|
2018/12/30\ a\ purchase\ made\ in\ 2018,\ clearing\ the\ following\ year
|
|
\ \ \ \ expenses:food\ \ \ \ \ \ \ \ \ \ 5
|
|
\ \ \ \ liabilities:pending
|
|
|
|
;\ in\ 2019.journal:
|
|
2019/1/2\ clearance\ of\ last\ year\[aq]s\ pending\ transactions
|
|
\ \ \ \ liabilities:pending\ \ \ \ 5\ =\ 0
|
|
\ \ \ \ assets:checking
|
|
\f[]
|
|
.fi
|
|
.SS files
|
|
.PP
|
|
files
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
List all files included in the journal.
|
|
With a REGEX argument, only file names matching the regular expression
|
|
(case sensitive) are shown.
|
|
.SS help
|
|
.PP
|
|
help
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show any of the hledger manuals.
|
|
.PP
|
|
The \f[C]help\f[] command displays any of the main hledger manuals, in
|
|
one of several ways.
|
|
Run it with no argument to list the manuals, or provide a full or
|
|
partial manual name to select one.
|
|
.PP
|
|
hledger manuals are available in several formats.
|
|
hledger help will use the first of these display methods that it finds:
|
|
info, man, $PAGER, less, stdout (or when non\-interactive, just stdout).
|
|
You can force a particular viewer with the \f[C]\-\-info\f[],
|
|
\f[C]\-\-man\f[], \f[C]\-\-pager\f[], \f[C]\-\-cat\f[] flags.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ help
|
|
Please\ choose\ a\ manual\ by\ typing\ "hledger\ help\ MANUAL"\ (a\ substring\ is\ ok).
|
|
Manuals:\ hledger\ hledger\-ui\ hledger\-web\ hledger\-api\ journal\ csv\ timeclock\ timedot
|
|
\f[]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ help\ h\ \-\-man
|
|
|
|
hledger(1)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hledger\ User\ Manuals\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hledger(1)
|
|
|
|
NAME
|
|
\ \ \ \ \ \ \ hledger\ \-\ a\ command\-line\ accounting\ tool
|
|
|
|
SYNOPSIS
|
|
\ \ \ \ \ \ \ hledger\ [\-f\ FILE]\ COMMAND\ [OPTIONS]\ [ARGS]
|
|
\ \ \ \ \ \ \ hledger\ [\-f\ FILE]\ ADDONCMD\ \-\-\ [OPTIONS]\ [ARGS]
|
|
\ \ \ \ \ \ \ hledger
|
|
|
|
DESCRIPTION
|
|
\ \ \ \ \ \ \ hledger\ \ is\ \ a\ \ cross\-platform\ \ program\ \ for\ tracking\ money,\ time,\ or\ any
|
|
\&...
|
|
\f[]
|
|
.fi
|
|
.SS import
|
|
.PP
|
|
import
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Read new transactions added to each FILE since last run, and add them to
|
|
the main journal file.
|
|
Or with \-\-dry\-run, just print the transactions that would be added.
|
|
.PP
|
|
The input files are specified as arguments \- no need to write \-f
|
|
before each one.
|
|
So eg to add new transactions from all CSV files to the main journal,
|
|
it\[aq]s just: \f[C]hledger\ import\ *.csv\f[]
|
|
.PP
|
|
New transactions are detected in the same way as print \-\-new: by
|
|
assuming transactions are always added to the input files in increasing
|
|
date order, and by saving \f[C]\&.latest.FILE\f[] state files.
|
|
.PP
|
|
The \-\-dry\-run output is in journal format, so you can filter it, eg
|
|
to see only uncategorised transactions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ import\ \-\-dry\ ...\ |\ hledger\ \-f\-\ print\ unknown\ \-\-ignore\-assertions
|
|
\f[]
|
|
.fi
|
|
.SS incomestatement
|
|
.PP
|
|
incomestatement, is
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple income statement, showing revenues and
|
|
expenses during a period.
|
|
It assumes that these accounts are under a top\-level \f[C]revenue\f[]
|
|
or \f[C]income\f[] or \f[C]expense\f[] account (case insensitive, plural
|
|
forms also allowed).
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
This command displays a simple income statement.
|
|
It currently assumes that you have top\-level accounts named
|
|
\f[C]income\f[] (or \f[C]revenue\f[]) and \f[C]expense\f[] (plural forms
|
|
also allowed.)
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ incomestatement
|
|
Income\ Statement
|
|
|
|
Revenues:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2\ \ income
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ gifts
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ salary
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2
|
|
|
|
Expenses:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2\ \ expenses
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ food
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ supplies
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2
|
|
|
|
Total:
|
|
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
Normally incomestatement shows revenues/expenses per period, though as
|
|
with multicolumn balance reports you can alter the report mode with
|
|
\f[C]\-\-change\f[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS prices
|
|
.PP
|
|
prices
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print market price directives from the journal.
|
|
With \-\-costs, also print synthetic market prices based on transaction
|
|
prices.
|
|
With \-\-inverted\-costs, also print inverse prices based on transaction
|
|
prices.
|
|
Prices (and postings providing prices) can be filtered by a query.
|
|
.SS print
|
|
.PP
|
|
print, txns, p
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show transaction journal entries, sorted by date.
|
|
.PP
|
|
The print command displays full journal entries (transactions) from the
|
|
journal file in date order, tidily formatted.
|
|
With \-\-date2, transactions are sorted by secondary date instead.
|
|
.PP
|
|
print\[aq]s output is always a valid hledger journal.
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
It preserves all transaction information, but it does not preserve
|
|
directives or inter\-transaction comments
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ print
|
|
2008/01/01\ income
|
|
\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ income:salary\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
|
|
2008/06/01\ gift
|
|
\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ income:gifts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
|
|
2008/06/02\ save
|
|
\ \ \ \ assets:bank:saving\ \ \ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
|
|
2008/06/03\ *\ eat\ &\ shop
|
|
\ \ \ \ expenses:food\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ expenses:supplies\ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ assets:cash\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-2
|
|
|
|
2008/12/31\ *\ pay\ off
|
|
\ \ \ \ liabilities:debts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Normally, the journal entry\[aq]s explicit or implicit amount style is
|
|
preserved.
|
|
Ie when an amount is omitted in the journal, it will be omitted in the
|
|
output.
|
|
You can use the \f[C]\-x\f[]/\f[C]\-\-explicit\f[] flag to make all
|
|
amounts explicit, which can be useful for troubleshooting or for making
|
|
your journal more readable and robust against data entry errors.
|
|
Note, \f[C]\-x\f[] will cause postings with a multi\-commodity amount
|
|
(these can arise when a multi\-commodity transaction has an implicit
|
|
amount) will be split into multiple single\-commodity postings, for
|
|
valid journal output.
|
|
.PP
|
|
With \f[C]\-B\f[]/\f[C]\-\-cost\f[], amounts with transaction prices are
|
|
converted to cost using that price.
|
|
This can be used for troubleshooting.
|
|
.PP
|
|
With \f[C]\-m\f[]/\f[C]\-\-match\f[] and a STR argument, print will show
|
|
at most one transaction: the one one whose description is most similar
|
|
to STR, and is most recent.
|
|
STR should contain at least two characters.
|
|
If there is no similar\-enough match, no transaction will be shown.
|
|
.PP
|
|
With \f[C]\-\-new\f[], for each FILE being read, hledger reads (and
|
|
writes) a special state file (\f[C]\&.latest.FILE\f[] in the same
|
|
directory), containing the latest transaction date(s) that were seen
|
|
last time FILE was read.
|
|
When this file is found, only transactions with newer dates (and new
|
|
transactions on the latest date) are printed.
|
|
This is useful for ignoring already\-seen entries in import data, such
|
|
as downloaded CSV files.
|
|
Eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ \-f\ bank1.csv\ print\ \-\-new
|
|
#\ shows\ transactions\ added\ since\ last\ print\ \-\-new\ on\ this\ file
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
This assumes that transactions added to FILE always have same or
|
|
increasing dates, and that transactions on the same day do not get
|
|
reordered.
|
|
See also the import command.
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
Here\[aq]s an example of print\[aq]s CSV output:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ print\ \-Ocsv
|
|
"txnidx","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","posting\-status","posting\-comment"
|
|
"1","2008/01/01","","","","income","","assets:bank:checking","1","$","","1","",""
|
|
"1","2008/01/01","","","","income","","income:salary","\-1","$","1","","",""
|
|
"2","2008/06/01","","","","gift","","assets:bank:checking","1","$","","1","",""
|
|
"2","2008/06/01","","","","gift","","income:gifts","\-1","$","1","","",""
|
|
"3","2008/06/02","","","","save","","assets:bank:saving","1","$","","1","",""
|
|
"3","2008/06/02","","","","save","","assets:bank:checking","\-1","$","1","","",""
|
|
"4","2008/06/03","","*","","eat\ &\ shop","","expenses:food","1","$","","1","",""
|
|
"4","2008/06/03","","*","","eat\ &\ shop","","expenses:supplies","1","$","","1","",""
|
|
"4","2008/06/03","","*","","eat\ &\ shop","","assets:cash","\-2","$","2","","",""
|
|
"5","2008/12/31","","*","","pay\ off","","liabilities:debts","1","$","","1","",""
|
|
"5","2008/12/31","","*","","pay\ off","","assets:bank:checking","\-1","$","1","","",""
|
|
\f[]
|
|
.fi
|
|
.IP \[bu] 2
|
|
There is one CSV record per posting, with the parent transaction\[aq]s
|
|
fields repeated.
|
|
.IP \[bu] 2
|
|
The "txnidx" (transaction index) field shows which postings belong to
|
|
the same transaction.
|
|
(This number might change if transactions are reordered within the file,
|
|
files are parsed/included in a different order, etc.)
|
|
.IP \[bu] 2
|
|
The amount is separated into "commodity" (the symbol) and "amount"
|
|
(numeric quantity) fields.
|
|
.IP \[bu] 2
|
|
The numeric amount is repeated in either the "credit" or "debit" column,
|
|
for convenience.
|
|
(Those names are not accurate in the accounting sense; it just puts
|
|
negative amounts under credit and zero or greater amounts under debit.)
|
|
.SS print\-unique
|
|
.PP
|
|
print\-unique
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print transactions which do not reuse an already\-seen description.
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ cat\ unique.journal
|
|
1/1\ test
|
|
\ (acct:one)\ \ 1
|
|
2/2\ test
|
|
\ (acct:two)\ \ 2
|
|
$\ LEDGER_FILE=unique.journal\ hledger\ print\-unique
|
|
(\-f\ option\ not\ supported)
|
|
2015/01/01\ test
|
|
\ \ \ \ (acct:one)\ \ \ \ \ \ \ \ \ \ \ \ \ 1
|
|
\f[]
|
|
.fi
|
|
.SS register
|
|
.PP
|
|
register, reg, r
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show postings and their running total.
|
|
.PP
|
|
The register command displays postings in date order, one per line, and
|
|
their running total.
|
|
This is typically used with a query selecting a particular account, to
|
|
see that account\[aq]s activity:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ checking
|
|
2008/01/01\ income\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ \ $1
|
|
2008/06/01\ gift\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ \ $2
|
|
2008/06/02\ save\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ $1
|
|
2008/12/31\ pay\ off\ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
With \-\-date2, it shows and sorts by secondary date instead.
|
|
.PP
|
|
The \f[C]\-\-historical\f[]/\f[C]\-H\f[] flag adds the balance from any
|
|
undisplayed prior postings to the running total.
|
|
This is useful when you want to see only recent activity, with a
|
|
historically accurate running balance:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ checking\ \-b\ 2008/6\ \-\-historical
|
|
2008/06/01\ gift\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ \ $2
|
|
2008/06/02\ save\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ $1
|
|
2008/12/31\ pay\ off\ \ \ \ \ \ \ \ \ \ \ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
The \f[C]\-\-depth\f[] option limits the amount of sub\-account detail
|
|
displayed.
|
|
.PP
|
|
The \f[C]\-\-average\f[]/\f[C]\-A\f[] flag shows the running average
|
|
posting amount instead of the running total (so, the final number
|
|
displayed is the average for the whole report period).
|
|
This flag implies \f[C]\-\-empty\f[] (see below).
|
|
It is affected by \f[C]\-\-historical\f[].
|
|
It works best when showing just one account and one commodity.
|
|
.PP
|
|
The \f[C]\-\-related\f[]/\f[C]\-r\f[] flag shows the \f[I]other\f[]
|
|
postings in the transactions of the postings which would normally be
|
|
shown.
|
|
.PP
|
|
The \f[C]\-\-invert\f[] flag negates all amounts.
|
|
For example, it can be used on an income account where amounts are
|
|
normally displayed as negative numbers.
|
|
It\[aq]s also useful to show postings on the checking account together
|
|
with the related account:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ \-\-related\ \-\-invert\ assets:checking
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, register shows summary postings, one per
|
|
interval, aggregating the postings to each account:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ \-\-monthly\ income
|
|
2008/01\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ income:salary\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/06\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ income:gifts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ $\-2
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Periods with no activity, and summary postings with a zero amount, are
|
|
not shown by default; use the \f[C]\-\-empty\f[]/\f[C]\-E\f[] flag to
|
|
see them:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ \-\-monthly\ income\ \-E
|
|
2008/01\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ income:salary\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/02\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/03\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/04\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/05\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-1
|
|
2008/06\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ income:gifts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/07\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/08\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/09\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/10\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/11\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
2008/12\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \ \ \ \ \ \ \ \ \ $\-2
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Often, you\[aq]ll want to see just one line per interval.
|
|
The \f[C]\-\-depth\f[] option helps with this, causing subaccounts to be
|
|
aggregated:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ register\ \-\-monthly\ assets\ \-\-depth\ 1h
|
|
2008/01\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ \ \ \ \ \ \ \ $1
|
|
2008/06\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
2008/12\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-1\ \ \ \ \ \ \ \ \ \ $\-1
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Note when using report intervals, if you specify start/end dates these
|
|
will be adjusted outward if necessary to contain a whole number of
|
|
intervals.
|
|
This ensures that the first and last intervals are full length and
|
|
comparable to the others in the report.
|
|
.SS Custom register output
|
|
.PP
|
|
register uses the full terminal width by default, except on windows.
|
|
You can override this by setting the \f[C]COLUMNS\f[] environment
|
|
variable (not a bash shell variable) or by using the
|
|
\f[C]\-\-width\f[]/\f[C]\-w\f[] option.
|
|
.PP
|
|
The description and account columns normally share the space equally
|
|
(about half of (width \- 40) each).
|
|
You can adjust this by adding a description width as part of
|
|
\-\-width\[aq]s argument, comma\-separated: \f[C]\-\-width\ W,D\f[] .
|
|
Here\[aq]s a diagram (won\[aq]t display correctly in \-\-help):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
<\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ width\ (W)\ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
|
|
date\ (10)\ \ description\ (D)\ \ \ \ \ \ \ account\ (W\-41\-D)\ \ \ \ \ amount\ (12)\ \ \ balance\ (12)
|
|
DDDDDDDDDD\ dddddddddddddddddddd\ \ aaaaaaaaaaaaaaaaaaa\ \ AAAAAAAAAAAA\ \ AAAAAAAAAAAA
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
and some examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ reg\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ use\ terminal\ width\ (or\ 80\ on\ windows)
|
|
$\ hledger\ reg\ \-w\ 100\ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ use\ width\ 100
|
|
$\ COLUMNS=100\ hledger\ reg\ \ \ \ \ \ \ \ \ #\ set\ with\ one\-time\ environment\ variable
|
|
$\ export\ COLUMNS=100;\ hledger\ reg\ #\ set\ till\ session\ end\ (or\ window\ resize)
|
|
$\ hledger\ reg\ \-w\ 100,40\ \ \ \ \ \ \ \ \ \ \ #\ set\ overall\ width\ 100,\ description\ width\ 40
|
|
$\ hledger\ reg\ \-w\ $COLUMNS,40\ \ \ \ \ \ #\ use\ terminal\ width,\ &\ description\ width\ 40
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS register\-match
|
|
.PP
|
|
register\-match
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print the one posting whose transaction description is closest to DESC,
|
|
in the style of the register command.
|
|
If there are multiple equally good matches, it shows the most recent.
|
|
Query options (options, not arguments) can be used to restrict the
|
|
search space.
|
|
Helps ledger\-autosync detect already\-seen transactions when importing.
|
|
.SS rewrite
|
|
.PP
|
|
rewrite
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print all transactions, rewriting the postings of matched transactions.
|
|
For now the only rewrite available is adding new postings, like print
|
|
\-\-auto.
|
|
.PP
|
|
This is a start at a generic rewriter of transaction entries.
|
|
It reads the default journal and prints the transactions, like print,
|
|
but adds one or more specified postings to any transactions matching
|
|
QUERY.
|
|
The posting amounts can be fixed, or a multiplier of the existing
|
|
transaction\[aq]s first posting amount.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
hledger\-rewrite.hs\ ^income\ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\ \ ;\ income\ tax\[aq]\ \-\-add\-posting\ \[aq](reserve:gifts)\ \ $100\[aq]
|
|
hledger\-rewrite.hs\ expenses:gifts\ \-\-add\-posting\ \[aq](reserve:gifts)\ \ *\-1"\[aq]
|
|
hledger\-rewrite.hs\ \-f\ rewrites.hledger
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
rewrites.hledger may consist of entries like:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
=\ ^income\ amt:<0\ date:2017
|
|
\ \ (liabilities:tax)\ \ *0.33\ \ ;\ tax\ on\ income
|
|
\ \ (reserve:grocery)\ \ *0.25\ \ ;\ reserve\ 25%\ for\ grocery
|
|
\ \ (reserve:)\ \ *0.25\ \ ;\ reserve\ 25%\ for\ grocery
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Note the single quotes to protect the dollar sign from bash, and the two
|
|
spaces between account and amount.
|
|
.PP
|
|
More:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ rewrite\ \-\-\ [QUERY]\ \ \ \ \ \ \ \ \-\-add\-posting\ "ACCT\ \ AMTEXPR"\ ...
|
|
$\ hledger\ rewrite\ \-\-\ ^income\ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]
|
|
$\ hledger\ rewrite\ \-\-\ expenses:gifts\ \-\-add\-posting\ \[aq](budget:gifts)\ \ *\-1"\[aq]
|
|
$\ hledger\ rewrite\ \-\-\ ^income\ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq](budget:foreign\ currency)\ \ *0.25\ JPY;\ diversify\[aq]
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Argument for \f[C]\-\-add\-posting\f[] option is a usual posting of
|
|
transaction with an exception for amount specification.
|
|
More precisely, you can use \f[C]\[aq]*\[aq]\f[] (star symbol) before
|
|
the amount to indicate that that this is a factor for an amount of
|
|
original matched posting.
|
|
If the amount includes a commodity name, the new posting amount will be
|
|
in the new commodity; otherwise, it will be in the matched posting
|
|
amount\[aq]s commodity.
|
|
.SS Re\-write rules in a file
|
|
.PP
|
|
During the run this tool will execute so called "Automated Transactions"
|
|
found in any journal it process.
|
|
I.e instead of specifying this operations in command line you can put
|
|
them in a journal file.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ rewrite\-rules.journal
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Make contents look like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
=\ ^income
|
|
\ \ \ \ (liabilities:tax)\ \ *.33
|
|
|
|
=\ expenses:gifts
|
|
\ \ \ \ budget:gifts\ \ *\-1
|
|
\ \ \ \ assets:budget\ \ *1
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Note that \f[C]\[aq]=\[aq]\f[] (equality symbol) that is used instead of
|
|
date in transactions you usually write.
|
|
It indicates the query by which you want to match the posting to add new
|
|
ones.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ rewrite\ \-\-\ \-f\ input.journal\ \-f\ rewrite\-rules.journal\ >\ rewritten\-tidy\-output.journal
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
This is something similar to the commands pipeline:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ rewrite\ \-\-\ \-f\ input.journal\ \[aq]^income\[aq]\ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]\ \\
|
|
\ \ |\ hledger\ rewrite\ \-\-\ \-f\ \-\ expenses:gifts\ \ \ \ \ \ \-\-add\-posting\ \[aq]budget:gifts\ \ *\-1\[aq]\ \ \ \ \ \ \ \\
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq]assets:budget\ \ *1\[aq]\ \ \ \ \ \ \ \\
|
|
\ \ >\ rewritten\-tidy\-output.journal
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
It is important to understand that relative order of such entries in
|
|
journal is important.
|
|
You can re\-use result of previously added postings.
|
|
.SS Diff output format
|
|
.PP
|
|
To use this tool for batch modification of your journal files you may
|
|
find useful output in form of unified diff.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ rewrite\ \-\-\ \-\-diff\ \-f\ examples/sample.journal\ \[aq]^income\[aq]\ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Output might look like:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
\-\-\-\ /tmp/examples/sample.journal
|
|
+++\ /tmp/examples/sample.journal
|
|
\@\@\ \-18,3\ +18,4\ \@\@
|
|
\ 2008/01/01\ income
|
|
\-\ \ \ \ assets:bank:checking\ \ $1
|
|
+\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ \ income:salary
|
|
+\ \ \ \ (liabilities:tax)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\@\@\ \-22,3\ +23,4\ \@\@
|
|
\ 2008/06/01\ gift
|
|
\-\ \ \ \ assets:bank:checking\ \ $1
|
|
+\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
|
|
\ \ \ \ \ income:gifts
|
|
+\ \ \ \ (liabilities:tax)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
If you\[aq]ll pass this through \f[C]patch\f[] tool you\[aq]ll get
|
|
transactions containing the posting that matches your query be updated.
|
|
Note that multiple files might be update according to list of input
|
|
files specified via \f[C]\-\-file\f[] options and \f[C]include\f[]
|
|
directives inside of these files.
|
|
.PP
|
|
Be careful.
|
|
Whole transaction being re\-formatted in a style of output from
|
|
\f[C]hledger\ print\f[].
|
|
.PP
|
|
See also:
|
|
.PP
|
|
https://github.com/simonmichael/hledger/issues/99
|
|
.SS rewrite vs. print \-\-auto
|
|
.PP
|
|
This command predates print \-\-auto, and currently does much the same
|
|
thing, but with these differences:
|
|
.IP \[bu] 2
|
|
with multiple files, rewrite lets rules in any file affect all other
|
|
files.
|
|
print \-\-auto uses standard directive scoping; rules affect only child
|
|
files.
|
|
.IP \[bu] 2
|
|
rewrite\[aq]s query limits which transactions can be rewritten; all are
|
|
printed.
|
|
print \-\-auto\[aq]s query limits which transactions are printed.
|
|
.IP \[bu] 2
|
|
rewrite applies rules specified on command line or in the journal.
|
|
print \-\-auto applies rules specified in the journal.
|
|
.SS roi
|
|
.PP
|
|
roi
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Shows the time\-weighted (TWR) and money\-weighted (IRR) rate of return
|
|
on your investments.
|
|
.PP
|
|
This command assumes that you have account(s) that hold nothing but your
|
|
investments and whenever you record current appraisal/valuation of these
|
|
investments you offset unrealized profit and loss into account(s) that,
|
|
again, hold nothing but unrealized profit and loss.
|
|
.PP
|
|
Any transactions affecting balance of investment account(s) and not
|
|
originating from unrealized profit and loss account(s) are assumed to be
|
|
your investments or withdrawals.
|
|
.PP
|
|
At a minimum, you need to supply a query (which could be just an account
|
|
name) to select your investments with \f[C]\-\-inv\f[], and another
|
|
query to identify your profit and loss transactions with
|
|
\f[C]\-\-pnl\f[].
|
|
.PP
|
|
It will compute and display the internalized rate of return (IRR) and
|
|
time\-weighted rate of return (TWR) for your investments for the time
|
|
period requested.
|
|
Both rates of return are annualized before display, regardless of the
|
|
length of reporting interval.
|
|
.SS stats
|
|
.PP
|
|
stats
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show some journal statistics.
|
|
.PP
|
|
The stats command displays summary information for the whole journal, or
|
|
a matched part of it.
|
|
With a reporting interval, it shows a report for each report period.
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ hledger\ stats
|
|
Main\ journal\ file\ \ \ \ \ \ \ \ :\ /src/hledger/examples/sample.journal
|
|
Included\ journal\ files\ \ \ :\
|
|
Transactions\ span\ \ \ \ \ \ \ \ :\ 2008\-01\-01\ to\ 2009\-01\-01\ (366\ days)
|
|
Last\ transaction\ \ \ \ \ \ \ \ \ :\ 2008\-12\-31\ (2333\ days\ ago)
|
|
Transactions\ \ \ \ \ \ \ \ \ \ \ \ \ :\ 5\ (0.0\ per\ day)
|
|
Transactions\ last\ 30\ days:\ 0\ (0.0\ per\ day)
|
|
Transactions\ last\ 7\ days\ :\ 0\ (0.0\ per\ day)
|
|
Payees/descriptions\ \ \ \ \ \ :\ 5
|
|
Accounts\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ 8\ (depth\ 3)
|
|
Commodities\ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ 1\ ($)
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS tags
|
|
.PP
|
|
tags
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
List all the tag names used in the journal.
|
|
With a TAGREGEX argument, only tag names matching the regular expression
|
|
(case insensitive) are shown.
|
|
With QUERY arguments, only transactions matching the query are
|
|
considered.
|
|
.SS test
|
|
.PP
|
|
test
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Run built\-in unit tests.
|
|
.PP
|
|
This command runs the unit tests built in to hledger\-lib and hledger,
|
|
printing test names and results on stdout.
|
|
If any test fails, the exit code will be non\-zero.
|
|
.PP
|
|
Test names include a group prefix.
|
|
If a (exact, case sensitive) group prefix, or a full test name is
|
|
provided as the first argument, only that group or test is run.
|
|
.PP
|
|
If a numeric second argument is provided, it will set the randomness
|
|
seed, for repeatable results from tests using randomness (currently none
|
|
of them).
|
|
.PP
|
|
This is mainly used by developers, but it\[aq]s nice to be able to
|
|
sanity\-check your installed hledger executable at any time.
|
|
All tests are expected to pass \- if you ever see otherwise, something
|
|
has gone wrong, please report a bug!
|
|
.SH ADD\-ON COMMANDS
|
|
.PP
|
|
hledger also searches for external add\-on commands, and will include
|
|
these in the commands list.
|
|
These are programs or scripts in your PATH whose name starts with
|
|
\f[C]hledger\-\f[] and ends with a recognised file extension (currently:
|
|
no extension, \f[C]bat\f[],\f[C]com\f[],\f[C]exe\f[],
|
|
\f[C]hs\f[],\f[C]lhs\f[],\f[C]pl\f[],\f[C]py\f[],\f[C]rb\f[],\f[C]rkt\f[],\f[C]sh\f[]).
|
|
.PP
|
|
Add\-ons can be invoked like any hledger command, but there are a few
|
|
things to be aware of.
|
|
Eg if the \f[C]hledger\-web\f[] add\-on is installed,
|
|
.IP \[bu] 2
|
|
\f[C]hledger\ \-h\ web\f[] shows hledger\[aq]s help, while
|
|
\f[C]hledger\ web\ \-h\f[] shows hledger\-web\[aq]s help.
|
|
.IP \[bu] 2
|
|
Flags specific to the add\-on must have a preceding \f[C]\-\-\f[] to
|
|
hide them from hledger.
|
|
So \f[C]hledger\ web\ \-\-serve\ \-\-port\ 9000\f[] will be rejected;
|
|
you must use \f[C]hledger\ web\ \-\-\ \-\-serve\ \-\-port\ 9000\f[].
|
|
.IP \[bu] 2
|
|
You can always run add\-ons directly if preferred:
|
|
\f[C]hledger\-web\ \-\-serve\ \-\-port\ 9000\f[].
|
|
.PP
|
|
Add\-ons are a relatively easy way to add local features or experiment
|
|
with new ideas.
|
|
They can be written in any language, but haskell scripts have a big
|
|
advantage: they can use the same hledger (and haskell) library functions
|
|
that built\-in commands do, for command\-line options, journal parsing,
|
|
reporting, etc.
|
|
.PP
|
|
Here are some hledger add\-ons available:
|
|
.SS Official add\-ons
|
|
.PP
|
|
These are maintained and released along with hledger.
|
|
.SS api
|
|
.PP
|
|
hledger\-api serves hledger data as a JSON web API.
|
|
.SS ui
|
|
.PP
|
|
hledger\-ui provides an efficient curses\-style interface.
|
|
.SS web
|
|
.PP
|
|
hledger\-web provides a simple web interface.
|
|
.SS Third party add\-ons
|
|
.PP
|
|
These are maintained separately, and usually updated shortly after a
|
|
hledger release.
|
|
.SS diff
|
|
.PP
|
|
hledger\-diff shows differences in an account\[aq]s transactions between
|
|
one journal file and another.
|
|
.SS iadd
|
|
.PP
|
|
hledger\-iadd is a curses\-style, more interactive replacement for the
|
|
add command.
|
|
.SS interest
|
|
.PP
|
|
hledger\-interest generates interest transactions for an account
|
|
according to various schemes.
|
|
.SS irr
|
|
.PP
|
|
hledger\-irr calculates the internal rate of return of an investment
|
|
account, but it\[aq]s superseded now by the built\-in roi command.
|
|
.SS Experimental add\-ons
|
|
.PP
|
|
These are available in source form in the hledger repo\[aq]s bin/
|
|
directory; installing them is pretty easy.
|
|
They may be less mature and documented than built\-in commands.
|
|
Reading and tweaking these is a good way to start making your own!
|
|
.SS autosync
|
|
.PP
|
|
hledger\-autosync is a symbolic link for easily running
|
|
ledger\-autosync, if installed.
|
|
ledger\-autosync does deduplicating conversion of OFX data and some CSV
|
|
formats, and can also download the data if your bank offers OFX Direct
|
|
Connect.
|
|
.SS chart
|
|
.PP
|
|
hledger\-chart.hs is an old pie chart generator, in need of some love.
|
|
.SS check
|
|
.PP
|
|
hledger\-check.hs checks more powerful account balance assertions.
|
|
.SH ENVIRONMENT
|
|
.PP
|
|
\f[B]COLUMNS\f[] The screen width used by the register command.
|
|
Default: the full terminal width.
|
|
.PP
|
|
\f[B]LEDGER_FILE\f[] The journal file path when not specified with
|
|
\f[C]\-f\f[].
|
|
Default: \f[C]~/.hledger.journal\f[] (on windows, perhaps
|
|
\f[C]C:/Users/USER/.hledger.journal\f[]).
|
|
.SH FILES
|
|
.PP
|
|
Reads data from one or more files in hledger journal, timeclock,
|
|
timedot, or CSV format specified with \f[C]\-f\f[], or
|
|
\f[C]$LEDGER_FILE\f[], or \f[C]$HOME/.hledger.journal\f[] (on windows,
|
|
perhaps \f[C]C:/Users/USER/.hledger.journal\f[]).
|
|
.SH BUGS
|
|
.PP
|
|
The need to precede addon command options with \f[C]\-\-\f[] when
|
|
invoked from hledger is awkward.
|
|
.PP
|
|
When input data contains non\-ascii characters, a suitable system locale
|
|
must be configured (or there will be an unhelpful error).
|
|
Eg on POSIX, set LANG to something other than C.
|
|
.PP
|
|
In a Microsoft Windows CMD window, non\-ascii characters and colours are
|
|
not supported.
|
|
.PP
|
|
In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger
|
|
add.
|
|
.PP
|
|
Not all of Ledger\[aq]s journal file syntax is supported.
|
|
See file format differences.
|
|
.PP
|
|
On large data files, hledger is slower and uses more memory than Ledger.
|
|
.SH TROUBLESHOOTING
|
|
.PP
|
|
Here are some issues you might encounter when you run hledger (and
|
|
remember you can also seek help from the IRC channel, mail list or bug
|
|
tracker):
|
|
.PP
|
|
\f[B]Successfully installed, but "No command \[aq]hledger\[aq]
|
|
found"\f[]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
stack and cabal install binaries into a special directory, which should
|
|
be added to your PATH environment variable.
|
|
Eg on unix\-like systems, that is ~/.local/bin and ~/.cabal/bin
|
|
respectively.
|
|
.PP
|
|
\f[B]I set a custom LEDGER_FILE, but hledger is still using the default
|
|
file\f[]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]LEDGER_FILE\f[] should be a real environment variable, not just a
|
|
shell variable.
|
|
The command \f[C]env\ |\ grep\ LEDGER_FILE\f[] should show it.
|
|
You may need to use \f[C]export\f[].
|
|
Here\[aq]s an explanation.
|
|
.PP
|
|
\f[B]"Illegal byte sequence" or "Invalid or incomplete multibyte or wide
|
|
character" errors\f[]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
In order to handle non\-ascii letters and symbols (like £), hledger
|
|
needs an appropriate locale.
|
|
This is usually configured system\-wide; you can also configure it
|
|
temporarily.
|
|
The locale may need to be one that supports UTF\-8, if you built hledger
|
|
with GHC < 7.2 (or possibly always, I\[aq]m not sure yet).
|
|
.PP
|
|
Here\[aq]s an example of setting the locale temporarily, on ubuntu
|
|
gnu/linux:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ file\ my.journal
|
|
my.journal:\ UTF\-8\ Unicode\ text\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ <\-\ the\ file\ is\ UTF8\-encoded
|
|
$\ locale\ \-a
|
|
C
|
|
en_US.utf8\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ <\-\ a\ UTF8\-aware\ locale\ is\ available
|
|
POSIX
|
|
$\ LANG=en_US.utf8\ hledger\ \-f\ my.journal\ print\ \ \ #\ <\-\ use\ it\ for\ this\ command
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Here\[aq]s one way to set it permanently, there are probably better
|
|
ways:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ echo\ "export\ LANG=en_US.UTF\-8"\ >>~/.bash_profile
|
|
$\ bash\ \-\-login
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
If we preferred to use eg \f[C]fr_FR.utf8\f[], we might have to install
|
|
that first:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$\ apt\-get\ install\ language\-pack\-fr
|
|
$\ locale\ \-a
|
|
C
|
|
en_US.utf8
|
|
fr_BE.utf8
|
|
fr_CA.utf8
|
|
fr_CH.utf8
|
|
fr_FR.utf8
|
|
fr_LU.utf8
|
|
POSIX
|
|
$\ LANG=fr_FR.utf8\ hledger\ \-f\ my.journal\ print
|
|
\f[]
|
|
.fi
|
|
.PP
|
|
Note some platforms allow variant locale spellings, but not all (ubuntu
|
|
accepts \f[C]fr_FR.UTF8\f[], mac osx requires exactly
|
|
\f[C]fr_FR.UTF\-8\f[]).
|
|
|
|
|
|
.SH "REPORTING BUGS"
|
|
Report bugs at http://bugs.hledger.org
|
|
(or on the #hledger IRC channel or hledger mail list)
|
|
|
|
.SH AUTHORS
|
|
Simon Michael <simon@joyful.com> and contributors
|
|
|
|
.SH COPYRIGHT
|
|
|
|
Copyright (C) 2007-2016 Simon Michael.
|
|
.br
|
|
Released under GNU GPL v3 or later.
|
|
|
|
.SH SEE ALSO
|
|
hledger(1), hledger\-ui(1), hledger\-web(1), hledger\-api(1),
|
|
hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_timedot(5),
|
|
ledger(1)
|
|
|
|
http://hledger.org
|