hledger/hledger/Hledger/Cli/Commands/Check.txt
2025-06-04 07:54:03 -10:00

107 lines
4.3 KiB
Plaintext

check
Check for various kinds of errors in your data.
Flags:
no command-specific flags
hledger provides a number of built-in correctness checks to help
validate your data and prevent errors. Some are run automatically, some
when you enable --strict mode; or you can run any of them on demand by
providing them as arguments to the check command. check produces no
output and a zero exit code if all is well. Eg:
hledger check # run basic checks
hledger check -s # run basic and strict checks
hledger check ordereddates payees # run basic checks and two others
If you are an Emacs user, you can also configure flycheck-hledger to run
these checks, providing instant feedback as you edit the journal.
Here are the checks currently available. Generally, they are performed
in the order they are shown here (and only the first failure is
reported).
Basic checks
These important checks are performed by default, by almost all hledger
commands:
- parseable - data files are in a supported format, with no syntax
errors and no invalid include directives. This ensures that all files
exist and are readable.
- autobalanced - all transactions are balanced, after automatically
inferring missing amounts and conversion rates and then converting
amounts to cost. This ensures that each transaction's entry is well
formed.
- assertions - all balance assertions in the journal are passing.
Balance assertions are a strong defense against errors; they help
catch many problems. If this check gets in your way, you can disable
it with -I/--ignore-assertions. Or you can add that to your config
file to disable it by default (and then use -s/--strict or
hledger check assertions to enable it).
Strict checks
These additional checks are performed by all commands when the
-s/--strict flag is used (strict mode). They provide extra
error-catching power to keep your data clean and correct. Strict mode
also always enables the assertions check.
- balanced - like autobalanced, but all conversions between commodities
must use explicit cost notation or equity postings. This prevents
wrong conversions caused by typos.
- commodities - all commodity symbols used must be declared. This guards
against mistyping or omitting commodity symbols. Declaring commodities
also sets their precision for display and transaction balancing.
- accounts - all account names used must be declared. This prevents the
use of mis-spelled or outdated account names.
Other checks
These are not wanted by everyone, but can be run using the check
command:
- tags - all tags used must be declared. This prevents mis-spelled tag
names. Note hledger fairly often finds unintended tags in comments.
- payees - all payees used in transactions must be declared. This will
force you to declare any new payee name before using it. Most people
will probably find this a bit too strict.
- ordereddates - within each file, transactions must be ordered by date.
This is a simple and effective error catcher. It's not included in
strict mode, but you can add it by running
hledger check -s ordereddates. If enabled, this check is performed
before balance assertions.
- recentassertions - all accounts with balance assertions must have one
that's within the 7 days before their latest posting. This will
encourage adding balance assertions for your active asset/liability
accounts, which in turn should encourage you to reconcile regularly
with those real world balances - another strong defense against
errors. hledger close --assert can help generate assertion entries.
Over time the older assertions become somewhat redundant, and you can
remove them if you like (they don't affect performance much, but they
add some noise to the journal).
- uniqueleafnames - no two accounts may have the same last account name
part (eg the checking in assets:bank:checking). This ensures each
account can be matched by a unique short name, easier to remember and
to type.
Custom checks
You can build your own custom checks with add-on command scripts. See
also Cookbook > Scripting. Here are some examples from hledger/bin/:
- hledger-check-tagfiles - all tag values containing / (a forward slash)
exist as file paths
- hledger-check-fancyassertions - more complex balance assertions are
passing