diff --git a/doc/manual.md b/doc/manual.md index 33292fd29..857a4677f 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -1851,6 +1851,58 @@ have different release schedules and platform support. #### autosync +```{.shell .right} +$ hledger autosync --help +usage: hledger-autosync [-h] [-m MAX] [-r] [-a ACCOUNT] [-l LEDGER] [-i INDENT] + [--initial] [--fid FID] [--assertions] [-d] [--hledger] + [--slow] [--which] + [PATH] + +Synchronize ledger. + +positional arguments: + PATH do not sync; import from OFX file + +optional arguments: + -h, --help show this help message and exit + -m MAX, --max MAX maximum number of days to process + -r, --resync do not stop until max days reached + -a ACCOUNT, --account ACCOUNT + set account name for import + -l LEDGER, --ledger LEDGER + specify ledger file to READ for syncing + -i INDENT, --indent INDENT + number of spaces to use for indentation + --initial create initial balance entries + --fid FID pass in fid value for OFX files that do not supply it + --assertions create balance assertion entries + -d, --debug enable debug logging + --hledger force use of hledger (on by default if invoked as hledger- + autosync) + --slow use slow, but possibly more robust, method of calling ledger + (no subprocess) + --which display which version of ledger/hledger/ledger-python will + be used by ledger-autosync to check for previous + transactions +$ head acct1.ofx +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUIDe:8509488b59d1bb45 + +$ hledger autosync acct1.ofx +2013/08/30 MONTHLY SERVICE FEE + ; ofxid: 3000.4303001832.201308301 + WF:4303001832 -$6.00 + [assets:business:bank:wf:bchecking:banking] $6.00 + +``` + [ledger-autosync](https://bitbucket.org/egh/ledger-autosync/commits/all), which includes a `hledger-autosync` alias, downloads transactions from your bank(s) via OFX, and prints just the new ones as journal @@ -1861,6 +1913,29 @@ download. #### diff +```{.shell .right} +$ hledger diff --help +Usage: hledger-diff account:name left.journal right.journal +$ cat a.journal +1/1 + (acct:one) 1 + +$ cat b.journal +1/1 + (acct:one) 1 +2/2 + (acct:two) 2 + +$ hledger diff acct:two a.journal b.journal +Unmatched transactions in the first journal: + +Unmatched transactions in the second journal: + +2015/02/02 + (acct:two) $2 + +``` + [hledger-diff](http://hackage.haskell.org/package/hledger-diff) compares two journal files. Given an account name, it prints out the transactions affecting that account which are in one journal file but @@ -1869,6 +1944,87 @@ journals with bank statements. #### interest +```{.shell .right} +$ hledger interest --help +Usage: hledger-interest [OPTION...] ACCOUNT + -h --help print this message and exit + -V --version show version number and exit + -v --verbose echo input ledger to stdout (default) + -q --quiet don't echo input ledger to stdout + --today compute interest up until today + -f FILE --file=FILE input ledger file (pass '-' for stdin) + -s ACCOUNT --source=ACCOUNT interest source account + -t ACCOUNT --target=ACCOUNT interest target account + --act use 'act' day counting convention + --30-360 use '30/360' day counting convention + --30E-360 use '30E/360' day counting convention + --30E-360isda use '30E/360isda' day counting convention + --constant=RATE constant interest rate + --annual=RATE annual interest rate + --bgb288 compute interest according to German BGB288 + --ing-diba compute interest according for Ing-Diba Tagesgeld account +``` + +```{.shell .right .clear} +$ cat interest.journal +2008/09/26 Loan + Assets:Bank EUR 10000.00 + Liabilities:Bank + +2008/11/27 Payment + Assets:Bank EUR -3771.12 + Liabilities:Bank + +2009/05/03 Payment + Assets:Bank EUR -1200.00 + Liabilities:Bank + +2010/12/10 Payment + Assets:Bank EUR -3700.00 + Liabilities:Bank +``` + +```{.shell .right .clear} +$ hledger interest -- -f interest.journal --source=Expenses:Interest \ + --target=Liabilities:Bank --30-360 --annual=0.05 Liabilities:Bank +2008/09/26 Loan + Assets:Bank EUR 10000.00 + Liabilities:Bank EUR -10000.00 + +2008/11/27 0.05% interest for EUR -10000.00 over 61 days + Liabilities:Bank EUR -84.72 + Expenses:Interest EUR 84.72 + +2008/11/27 Payment + Assets:Bank EUR -3771.12 + Liabilities:Bank EUR 3771.12 + +2008/12/31 0.05% interest for EUR -6313.60 over 34 days + Liabilities:Bank EUR -29.81 + Expenses:Interest EUR 29.81 + +2009/05/03 0.05% interest for EUR -6343.42 over 123 days + Liabilities:Bank EUR -108.37 + Expenses:Interest EUR 108.37 + +2009/05/03 Payment + Assets:Bank EUR -1200.00 + Liabilities:Bank EUR 1200.00 + +2009/12/31 0.05% interest for EUR -5251.78 over 238 days + Liabilities:Bank EUR -173.60 + Expenses:Interest EUR 173.60 + +2010/12/10 0.05% interest for EUR -5425.38 over 340 days + Liabilities:Bank EUR -256.20 + Expenses:Interest EUR 256.20 + +2010/12/10 Payment + Assets:Bank EUR -3700.00 + Liabilities:Bank EUR 3700.00 + +``` + [hledger-interest](http://hackage.haskell.org/package/hledger-interest) computes interests for a given account. Using command line flags, the program can be configured to use various schemes for day-counting, @@ -1879,6 +2035,64 @@ with a fixed rate and the scheme mandated by the German BGB288 #### irr +```{.shell .right} +$ hledger irr --help +Usage: hledger-irr [OPTION...] + -h --help print this message and exit + -V --version show version number and exit + -c --cashflow also show all revant transactions + -f FILE --file=FILE input ledger file (pass '-' for stdin) + -i ACCOUNT --investment-account=ACCOUNT investment account + -t ACCOUNT --interest-account=ACCOUNT interest/gain/fees/losses account + -b DATE --begin=DATE calculate interest from this date + -e DATE --end=DATE calculate interest until this date + -D --daily calculate interest for each day + -W --weekly calculate interest for each week + -M --monthly calculate interest for each month + -Y --yearly calculate interest for each year +``` + +```{.shell .right .clear} +$ cat irr.journal +2011-01-01 Some wild speculation – I wonder if it pays off + Speculation €100.00 + Cash + +2011-02-01 More speculation (and adjustment of value) + Cash -€10.00 + Rate Gain -€1.00 + Speculation + +2011-03-01 Lets pull out some money (and adjustment of value) + Cash €30.00 + Rate Gain -€3.00 + Speculation + +2011-04-01 More speculation (and it lost some money!) + Cash -€50.00 + Rate Gain € 5.00 + Speculation + +2011-05-01 Getting some money out (and adjustment of value) + Speculation -€44.00 + Rate Gain -€ 3.00 + Cash + +2011-06-01 Emptying the account (after adjusting the value) + Speculation -€85.00 + Cash €90.00 + Rate Gain -€ 5.00 +``` + +```{.shell .right .clear} +$ hledger-irr -f irr.journal -t "Rate Gain" -i Speculation --monthly +2011/01/01 - 2011/02/01: 12.49% +2011/02/01 - 2011/03/01: 41.55% +2011/03/01 - 2011/04/01: -51.44% +2011/04/01 - 2011/05/01: 32.24% +2011/05/01 - 2011/06/01: 95.92% +``` + [hledger-irr](http://hackage.haskell.org/package/hledger-irr) computes the internal rate of return, also known as the effective interest rate, of a given investment. After specifying what account @@ -1889,50 +2103,64 @@ See the package page for more. #### web -```{.shell .bold .right} -$ hledger-web -$ hledger-web -E -B --depth 2 -f some.journal -$ hledger-web --server --port 5010 --base-url http://some.vhost.com --debug=1 + + + + +[hledger-web](http://hackage.haskell.org/package/hledger-web) provides +a web-based user interface for hledger. You can add new journal +entries with basic auto-completion, and easily browse your accounts, +with a more useful account register view and historical balance +charts. You can see a live demo (with junk data) at +[demo.hledger.org](http://demo.hledger.org). + +```{.shell .noclear} +$ hledger web --help +hledger-web [OPTIONS] [PATTERNS] + start serving the hledger web interface + +Flags: + --server log requests, and don't browse or auto-exit + --port=PORT set the tcp port (default: 5000) + --base-url=BASEURL set the base url (default: http://localhost:PORT) + --file-url=FILEURL set the static files url (default: BASEURL/static) +... +$ hledger web +Starting web app on port 5000 with base url http://localhost:5000 +Starting web browser if possible +Web app will auto-exit after a few minutes with no browsers (or press ctrl-c) ``` -[hledger-web](http://hackage.haskell.org/package/hledger-web) -provides a web-based user interface for viewing and modifying your ledger. -It includes an account register view that is more useful than the command-line register, and basic data entry. -You can see it running at [demo.hledger.org](http://demo.hledger.org). +By default, `hledger web` starts the web app, displays it in your +default web browser if possible, keeps it running for as long as you +have it open in a browser window, and then exits. -web-specific options: +With `--server`, it starts the web app in non-transient mode and logs +requests to the console. Typically when running hledger web as part +of a website you'll want to use `--base-url` to set the +protocol/hostname/port/path to be used in hyperlinks. The +`--file-url` option allows static files to be served from a different +url, eg for better caching or cookie-less serving. - --server log requests, don't exit on inactivity - --port=N serve on tcp port N (default 5000) - --base-url=URL use this base url (default http://localhost:PORT/) - --static-root=URL use this base url for static files (default http://localhost:PORT/static) + + -By default, the web command starts a transient local web app and displays it in your default web browser ("local ui mode"). -With `--server`, it starts the web app, leaves it running, and also logs requests to the console ("server mode"). +You can use `--port` to listen on a different TCP port, eg if you are +running multiple hledger-web instances. This need not be the same as +the PORT in the base url. -Typically in server mode you'll also want to use -`--base-url` to set the protocol/hostname/port/path to be used in -hyperlinks. +Note there is no built-in access control, so you will need to hide +hledger-web behind an authenticating proxy (such as apache or nginx) +if you want to restrict who can see and add entries to your journal. -You can use `--port` to listen on a different TCP port, eg if you are running multiple hledger-web -instances. Note `--port`'s argument need not be the same as the PORT -in the base url. - -The more advanced option `--static-root` allows the static files served from a -separate base url. This enables the optimization that the static files can be -served from a generic web server like apache, which is good at handling static -files and caching. One can also serve the files in a separate domain to reduce -cookies overhead. - -The web app detects changes in journal files (but not CSV or rules -files, currently), showing the new data on the next request. If such -a change makes the file unparseable, hledger-web will show an error +With [journal](#journal) and [timelog](#timelog) files (but not [CSV](#csv) files, currently) +the web app detects changes and will show the new data on the next request. +If a change makes the file unparseable, hledger-web will show an error until the file has been fixed. -Note there is no built-in access control, so unless you run it behind -an authenticating proxy (such as apache or nginx), any visitor to your -server will be able to see and add entries to the journal. - @@ -1956,23 +2184,66 @@ robustness). #### equity -Like ledger's equity command, this prints a single journal entry with -postings matching the current balance in each account (or the -specified accounts) in the default journal. An entry like this is -useful to carry over asset and liability balances when beginning a new -journal file, eg at the start of the year. +```{.shell .right} +$ hledger balance --flat -E assets liabilities + 0 assets:bank:checking + $1 assets:bank:saving + $-2 assets:cash + $1 liabilities:debts +-------------------- + 0 +$ hledger equity assets liabilities +2015/05/23 + assets:bank:saving $-1 + assets:cash $2 + liabilities:debts $-1 + equity:closing balances 0 -You can also use the same entry with signs reversed to close out the -old file, resetting balances to 0. This means you'll see the correct -asset/liability balances whether you use one file or a whole sequence -of files as input to hledger. +2015/05/23 + assets:bank:saving $1 + assets:cash $-2 + liabilities:debts $1 + equity:opening balances 0 + +``` + +This prints a journal entry which zeroes out the specified accounts +(or all accounts) with a transfer to/from "equity:closing balances" +(like Ledger's equity command). Also, it prints an similar entry with +opposite sign for restoring the balances from "equity:opening +balances". + +These can be useful for ending one journal file and starting a new +one, respectively. By zeroing your asset and liability accounts at the +end of a file and restoring them at the start of the next one, you +will see correct asset/liability balances whether you run hledger on +just one file, or on several files concatenated with [include](#include). #### print-unique -Prints only journal entries which are unique (by description). +```{.shell .right} +$ 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 + +``` + +Print only only journal entries which have a unique description. #### rewrite +```{.shell .right .bold} +$ hledger rewrite -- [QUERY] --add-posting "ACCT AMTEXPR" ... +$ hledger rewrite -- ^income --add-posting '(liabilities:tax) *.33' +$ hledger rewrite -- expenses:gifts --add-posting '(budget:gifts) *-1"' +``` + Prints all journal entries, adding specified custom postings to matched entries.