doc: static site uses hakyll(-std) again, import wiki content
This commit is contained in:
		
							parent
							
								
									b045d6b530
								
							
						
					
					
						commit
						c92b6520ea
					
				
							
								
								
									
										1
									
								
								doc/site/developer-guide.md
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								doc/site/developer-guide.md
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | ||||
| ../developer-guide.md | ||||
							
								
								
									
										31
									
								
								doc/site/download.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								doc/site/download.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| # Download | ||||
| 
 | ||||
| \\ | ||||
| **I want to download and get started quickly !**\\ | ||||
| <!-- <sub>(If the download is out of date or doesn't run on my system, I might troubleshoot or donate to fund improvements)</sub> --> | ||||
| | **I'm on Debian or Ubuntu**\\ `apt-get install hledger[-web]` \\ \\ **I'm on Gentoo**\\ `emerge hledger[-web]` <!-- \\ --> <!-- \\ --> <!-- **I'm on another GNU/Linux\\<small>(or can run Linux binaries)</small>**\\ --> <!-- <\\!-- [hledger.linux-32.zip]()\\ -\\-> --> <!-- <\\!-- [hledger-web.linux-32.zip]()\\ -\\-> --> <!-- <\\!-- [hledger.linux-64.zip]()\\ -\\-> --> <!-- <\\!-- [hledger-web.linux-64.zip]()\\ -\\-> --> <!-- Use cabal --> <!-- </td> --> \\ \\ **I'm on Red Hat/Fedora/CentOS**\\ `yum install hledger` \\ \\ **I'm on NixOS**\\ `nix-env -iA nixpkgs.haskellPackages.hledger` | **I'm on Windows**\\ <!-- [windows install guide](windows-install.html)\\ --> Download, unzip, and run:\\ [hledger-0.23.3.win32.zip](http://hledger.org/downloads/hledger-0.23.3-windows-intel32.exe.zip)\\ [hledger-web-0.23.3.win32.zip](http://hledger.org/downloads/hledger-web-0.23.3-windows-intel32.exe.zip)\\ | **I'm on Mac**\\ <!-- **I'm on Mac OSX 10.9+**\\ --> <!-- [mac install guide](mac-install.html)\\ --> <!-- [hledger.mac.zip]()\\ --> <!-- [hledger-web.mac.zip]()\\ --> Use cabal | | ||||
| 
 | ||||
| **I want to build the  | ||||
| [latest release](http://hackage.haskell.org/package/hledger-web) with | ||||
| [GHC](http://haskell.org/haskell) and | ||||
| [cabal](http://haskell.org/cabal/download.html)...** | ||||
| | `cabal sandbox init; cabal update; cabal install hledger[-web]`\\ | | ||||
| <!-- [cabal install guide](cabal-install.html) --> | ||||
| 
 | ||||
| **I want to build the [latest development code](http://hledger.org/code)...** | ||||
| | `git clone https://github.com/simonmichael/hledger; cd hledger; make sandbox install`\\ | | ||||
| 
 | ||||
| **I want more info...** | ||||
| 
 | ||||
| The [[installing|Installation Guide]] describes how to install using cabal in more detail. | ||||
| 
 | ||||
| hledger is shipped as two executables: `hledger` (the command-line | ||||
| tool) and `hledger-web` (the web interface).  If you install | ||||
| `hledger-web`, `hledger` will also be installed automatically (except on Windows). | ||||
| 
 | ||||
| Building, testing and supporting cross-platform binaries is costly, so | ||||
| it's demand-driven - you can indicate demand by making a project | ||||
| donation of any size. Binaries funded in this way will be linked here. | ||||
| This is a quick way to help the project and your fellow users! | ||||
| 
 | ||||
| [[https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5J33NLXYXCYAY|{{https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif }}]] | ||||
							
								
								
									
										215
									
								
								doc/site/faq.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								doc/site/faq.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,215 @@ | ||||
| # Frequently asked questions | ||||
| 
 | ||||
| ## hledger and ledger | ||||
| 
 | ||||
| ### How does hledger relate to ledger ? | ||||
| 
 | ||||
| hledger was inspired by and is partly a clone of John Wiegley's [ledger](http://ledger-cli.org), | ||||
| specifically Ledger 3. | ||||
| 
 | ||||
| I was a happy ledger user and contributor for some time; I still use it | ||||
| occasionally. I wrote hledger because I wanted to develop financial tools | ||||
| in the Haskell programming language and ecosystem, whose advantages I | ||||
| believe are compelling. I have also tried to make hledger a little more | ||||
| simple, usable, installable, documented, appealing to collaborators, and | ||||
| to provide alternate user interfaces to make it more widely useful. | ||||
| 
 | ||||
| ledger has more advanced power-user features on the command-line | ||||
| (periodic and modifier transactions, budgets, capital gains tracking, | ||||
| value expressions, custom output formats, etc.) and it remains faster | ||||
| and more memory efficient (for now!)... | ||||
| 
 | ||||
| hledger builds faster and has an up-to-date manual and an optional web | ||||
| interface (which often works on ledger files too)... | ||||
| 
 | ||||
| The two projects collaborate freely.  We share the | ||||
| [#ledger](irc://irc.freenode.net/#ledger) IRC channel but have | ||||
| separate mail lists | ||||
| ([hledger list](http://groups.google.com/group/hledger/), | ||||
| [ledger-cli list](http://groups.google.com/group/ledger-cli/)).  I try | ||||
| to give back by providing infrastructure | ||||
| ([ledger-cli.org](http://ledger-cli.org)) and IRC support. | ||||
| hledger stays compatible with ledger wherever possible, so that you | ||||
| can often use both tools on the same data file. | ||||
| 
 | ||||
| Summary: hledger is a friendly, co-evolving, compatible rewrite of Ledger | ||||
| in Haskell, lacking some of ledger's power features and raw performance, | ||||
| and focussing on robustness, usability, ease of development, and | ||||
| experimental add-ons such as the [web interface](MANUAL.html#web). | ||||
| 
 | ||||
| ### And ledger 4 ? | ||||
| 
 | ||||
| There is also a [[https://github.com/ledger/ledger4|ledger4]] on github; this is  | ||||
| John's own rewrite of the core of | ||||
| ledger 3 in haskell. It's an early library prototype, not a usable tool. | ||||
| Perhaps some day hledger or something like it would use this as its foundation.  | ||||
| 
 | ||||
| ### File format differences ? | ||||
| 
 | ||||
| hledger's file format is mostly identical with ledger's, by design. | ||||
| Generally, it's easy to keep a journal file that works with both hledger | ||||
| and ledger if you avoid ledger's most specialised syntax. | ||||
| Some ledger syntax is parsed but ignored (such as | ||||
| [automated transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Automated-Transactions), [periodic transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Periodic-Transactions), and | ||||
| [[manual#historical-prices|historical prices]]). | ||||
| Some features are not currently parsed and will cause an error, eg | ||||
| ledger's more recent top-level directives. There can also be subtle | ||||
| differences in parser behaviour, eg [[manual#comments|hledger comments]] vs [[http://ledger-cli.org/3.0/doc/ledger3.html#Commenting-on-your-Journal|ledger comments]]. | ||||
| 
 | ||||
| ### Feature differences ? | ||||
| 
 | ||||
| hledger mimics a subset of [ledger 3.x](http://ledger-cli.org), and adds some features of its own. | ||||
| 
 | ||||
| We currently support: | ||||
| 
 | ||||
| - ledger's journal format, mostly | ||||
| - csv format | ||||
| - timelog format | ||||
| - regular journal transactions | ||||
| - multiple commodities | ||||
| - fixed prices | ||||
| - virtual postings | ||||
| - print, register & balance commands | ||||
| - filtering by many criteria, with different query syntax | ||||
| - display expressions containing just a simple date predicate | ||||
| - some basic output formatting | ||||
| 
 | ||||
| We do not support: | ||||
| 
 | ||||
| - automated transactions | ||||
| - value expressions | ||||
| - fluctuating prices and historical price records | ||||
| - display formats other than `d>[DATE]` or similar | ||||
| - budget reports | ||||
| 
 | ||||
| And we add these commands: | ||||
| 
 | ||||
| - add | ||||
| - balancesheet | ||||
| - cashflow | ||||
| - chart | ||||
| - incomestatement | ||||
| - irr | ||||
| - interest | ||||
| - vty | ||||
| - web | ||||
| 
 | ||||
| ### Option/command differences ? | ||||
| 
 | ||||
| ledger options and commands not supported include: | ||||
| ``` | ||||
| Basic options: | ||||
| -o, --output FILE      write output to FILE | ||||
| -i, --init-file FILE   initialize ledger using FILE (default: ~/.ledgerrc) | ||||
| -a, --account NAME     use NAME for the default account (useful with QIF) | ||||
| 
 | ||||
| Report filtering: | ||||
| -c, --current          show only current and past entries (not future) | ||||
| --period-sort EXPR sort each report period's entries by EXPR | ||||
| -L, --actual           consider only actual (non-automated) transactions | ||||
| --budget           generate budget entries based on periodic entries | ||||
| --add-budget       show all transactions plus the budget | ||||
| --unbudgeted       show only unbudgeted transactions | ||||
| --forecast EXPR    generate forecast entries while EXPR is true | ||||
| -l, --limit EXPR       calculate only transactions matching EXPR | ||||
| -t, --amount EXPR      use EXPR to calculate the displayed amount | ||||
| -T, --total EXPR       use EXPR to calculate the displayed total | ||||
| 
 | ||||
| Output customization: | ||||
| -n, --collapse         Only show totals in the top-most accounts. | ||||
| -P, --by-payee         show summarized totals by payee | ||||
| -x, --comm-as-payee    set commodity name as the payee, for reporting | ||||
| --dow              show a days-of-the-week report | ||||
| -S, --sort EXPR        sort report according to the value expression EXPR | ||||
| --head COUNT       show only the first COUNT entries (negative inverts) | ||||
| --tail COUNT       show only the last COUNT entries (negative inverts) | ||||
| --pager PAGER      send all output through the given PAGER program | ||||
| -A, --average          report average transaction amount | ||||
| -D, --deviation        report deviation from the average | ||||
| -%, --percentage       report balance totals as a percentile of the parent | ||||
| --totals           in the "xml" report, include running total | ||||
| -j, --amount-data      print only raw amount data (useful for scripting) | ||||
| -J, --total-data       print only raw total data | ||||
| -y, --date-format STR  use STR as the date format (default: %Y/%m/%d) | ||||
| --balance-format      --register-format       --print-format | ||||
| --plot-amount-format  --plot-total-format     --equity-format | ||||
| --prices-format       --wide-register-format | ||||
| 
 | ||||
| Commodity reporting: | ||||
| --price-db FILE    sets the price database to FILE (def: ~/.pricedb) | ||||
| -L, --price-exp MINS   download quotes only if newer than MINS (def: 1440) | ||||
| -Q, --download         download price information when needed | ||||
| -O, --quantity         report commodity totals (this is the default) | ||||
| -V, --market           report last known market value | ||||
| -g, --performance      report gain/loss for each displayed transaction | ||||
| -G, --gain             report net gain/loss | ||||
| 
 | ||||
| Commands: | ||||
| xml      [REGEXP]...   print matching entries in XML format | ||||
| equity   [REGEXP]...   output equity entries for matching accounts | ||||
| prices   [REGEXP]...   display price history for matching commodities | ||||
| entry DATE PAYEE AMT   output a derived entry, based on the arguments | ||||
| ``` | ||||
| 
 | ||||
| ### Other functionality differences ? | ||||
| 
 | ||||
| - hledger recognises description and negative patterns by "desc:" | ||||
|   and "not:" prefixes, unlike ledger 3's free-form parser | ||||
| 
 | ||||
| - hledger does not require a space between command-line flags and their values, | ||||
|   eg `-fFILE` works as well as `-f FILE` | ||||
| 
 | ||||
| - hledger's weekly reporting intervals always start on mondays | ||||
| 
 | ||||
| - hledger shows start and end dates of the intervals requested, | ||||
|   not just the span containing data | ||||
| 
 | ||||
| - hledger always shows timelog balances in hours | ||||
| 
 | ||||
| - hledger splits multi-day timelog sessions at midnight by default (Ledger does this with an option) | ||||
| 
 | ||||
| - hledger doesn't track the value of commodities with varying | ||||
|   price; prices are fixed as of the transaction date | ||||
| 
 | ||||
| - hledger's output follows the decimal point character, digit grouping, | ||||
|   and digit group separator character used in the journal. | ||||
| 
 | ||||
| - hledger print shows amounts for all postings, and shows unit prices for | ||||
|   amounts which have them. (This means that it does not currently print | ||||
|   multi-commodity transactions in valid journal format.) | ||||
| 
 | ||||
| - hledger print ignores the --date2 flag, always showing both dates. | ||||
|   ledger print shows only the secondary date with --aux-date, but not | ||||
|   vice versa. | ||||
| 
 | ||||
| - hledger's default commodity directive (D) sets the commodity to be | ||||
|   used for subsequent commodityless amounts, and also sets that | ||||
|   commodity's display settings if such an amount is the first | ||||
|   seen. ledger uses D only for commodity display settings and for the | ||||
|   entry command. | ||||
| 
 | ||||
| - hledger generates a description for timelog sessions, instead of | ||||
|   taking it from the clock-out entry | ||||
| 
 | ||||
| - hledger's [include directive](MANUAL.html#including-other-files) does not support | ||||
|   shell glob patterns (eg `include *.journal` ), which ledger does. | ||||
| 
 | ||||
| - when checking [balance assertions](MANUAL.html#balance-assertions) | ||||
|   hledger sorts the account's postings first by date and then (for | ||||
|   postings with the same date) by parse order. ledger goes strictly by | ||||
|   parse order. | ||||
| 
 | ||||
| - ledger allows amounts to have a | ||||
|   [fixed lot price](MANUAL.html#prices) and a regular price in any | ||||
|   order (and uses whichever appears first). hledger requires the fixed | ||||
|   lot price to come last (and ignores it). | ||||
| 
 | ||||
| ### Implementation differences ? | ||||
| 
 | ||||
| ledger is written in C++, whereas hledger is written in [Haskell](http://haskell.org). | ||||
| Haskell is a highly regarded up-and-coming programming language that enables | ||||
| a coding style known as pure functional programming, offering the | ||||
| promise of more bug-free and maintainable software built in fewer | ||||
| lines of code. Haskell also provides a more abstracted, portable | ||||
| platform which can make deployment and installation easier in some | ||||
| cases. | ||||
							
								
								
									
										53
									
								
								doc/site/how-to-read-csv-files.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								doc/site/how-to-read-csv-files.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| # How to read CSV files | ||||
| 
 | ||||
| Here's a quick example of [[manual#csv-files|converting a CSV file]]. | ||||
| 
 | ||||
| Say we have downloaded `checking.csv` from a bank for the first time: | ||||
| 
 | ||||
|     "Date","Note","Amount" | ||||
|     "2012/3/22","DEPOSIT","50.00" | ||||
|     "2012/3/23","TRANSFER TO SAVINGS","-10.00" | ||||
| 
 | ||||
| We tell hledger how to intepret this with a file named `checking.csv.rules`, using the [[manual#csv-files|CSV rules syntax]]. Eg: | ||||
| 
 | ||||
|     # skip the first CSV line (headings) | ||||
|     skip 1 | ||||
| 
 | ||||
|     # use the first three fields in each CSV record as transaction date, description and amount respectively | ||||
|     fields   date, description, amount | ||||
| 
 | ||||
|     # prepend $ to CSV amounts | ||||
|     currency $ | ||||
| 
 | ||||
|     # always set the first account to assets:bank:checking | ||||
|     account1 assets:bank:checking | ||||
| 
 | ||||
|     # if the CSV record contains ‘SAVINGS’, set the second account to assets:bank:savings | ||||
|     # (if not set, it will be expenses:unknown or income:unknown) | ||||
|     if ~ SAVINGS | ||||
|       account2 assets:bank:savings | ||||
| 
 | ||||
| Now hledger can read this CSV file as journal data: | ||||
| 
 | ||||
|     $ hledger -f checking.csv print | ||||
|     using conversion rules file checking.csv.rules | ||||
|     2012/03/22 DEPOSIT | ||||
|         income:unknown             $-50.00 | ||||
|         assets:bank:checking        $50.00 | ||||
| 
 | ||||
|     2012/03/23 TRANSFER TO SAVINGS | ||||
|         assets:bank:savings         $10.00 | ||||
|         assets:bank:checking       $-10.00 | ||||
| 
 | ||||
| We might save this output as `checking.journal`, and/or merge it (manually) into the main journal file. | ||||
| We could also run other commands: | ||||
| 
 | ||||
|     $ hledger -f checking.csv balance | ||||
|     using conversion rules file checking.csv.rules | ||||
|                   $50.00  assets:bank | ||||
|                   $40.00    checking | ||||
|                   $10.00    savings | ||||
|                  $-50.00  income:unknown | ||||
|     -------------------- | ||||
|                        0 | ||||
| 
 | ||||
							
								
								
									
										48
									
								
								doc/site/how-to-use-account-aliases.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								doc/site/how-to-use-account-aliases.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| # How to use account aliases | ||||
| 
 | ||||
| Here's an example of using [[manual#account-aliases|account aliases]]. | ||||
| 
 | ||||
| Say a sole proprietor has a `personal.journal`: | ||||
| 
 | ||||
|     2014/1/2 | ||||
|         expenses:food  $1 | ||||
|         assets:cash | ||||
| 
 | ||||
| and a `business.journal`: | ||||
| 
 | ||||
|     2014/1/1 | ||||
|         expenses:office supplies  $1 | ||||
|         assets:business checking | ||||
| 
 | ||||
| So each entity (the business owner, and the business) has their own file with its own simple chart of accounts. | ||||
| However, at tax reporting time we need to view these as a single entity (at least in the US). | ||||
| In `unified.journal`, we include both files, and rewrite the personal | ||||
| account names to fit into the business chart of accounts, | ||||
| 
 | ||||
|     alias expenses    = equity:draw:personal | ||||
|     alias assets:cash = assets:personal cash | ||||
|     include personal.journal | ||||
|     end aliases | ||||
| 
 | ||||
|     include business.journal | ||||
| 
 | ||||
| Now we can see the data from both files at once, and the personal account names have changed: | ||||
| 
 | ||||
|     $ hledger -f unified.journal print | ||||
|     2014/01/01                                    # from business.journal - no aliases applied | ||||
|         expenses:office supplies            $1 | ||||
|         assets:business checking           $-1 | ||||
| 
 | ||||
|     2014/01/02                                    # from personal.journal | ||||
|         equity:draw:personal:food            $1   # <- was expenses:food | ||||
|         assets:personal cash                $-1   # <- was assets:cash | ||||
| 
 | ||||
| You can also specify aliases on the command line. This could be useful to | ||||
| quickly rewrite account names when sharing a report with someone else, such as | ||||
| your accountant: | ||||
| 
 | ||||
|     $ hledger --alias 'my earning=income:business' ... | ||||
| 
 | ||||
| Note that  | ||||
| journal directive aliases are applied first, then command-line aliases, | ||||
| and at most one of each will be applied to each account name. | ||||
							
								
								
									
										33
									
								
								doc/site/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								doc/site/index.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| #  hledger | ||||
| 
 | ||||
| ## lightweight, portable, dependable accounting tools | ||||
| 
 | ||||
| hledger is a computer program for easily tracking money, time, or other commodities, | ||||
| on unix, mac and windows. | ||||
| 
 | ||||
| It is first a command-line tool, but there is also a [web interface](manual.html#web) | ||||
| and a [Haskell library](http://hackage.haskell.org/package/hledger-lib) for | ||||
| building your own programs and [scripts](more-docs.html#scripting-examples) | ||||
| (hledger is written in Haskell). | ||||
| hledger was inspired by and is largely compatible with [Ledger](faq.html#hledger-and-ledger). | ||||
| hledger is free software available under the GNU General Public License v3+. | ||||
| 
 | ||||
| hledger aims to help both computer experts and regular folks | ||||
| to gain clarity and control in their finances and time management, | ||||
| but currently it is a bit more suited to techies. | ||||
| I use it every day to: | ||||
| 
 | ||||
| -   track spending and income | ||||
| -   see time reports by day/week/month/project | ||||
| -   get accurate numbers for client billing and tax filing | ||||
| -   track invoices | ||||
| 
 | ||||
| Though limited in features, hledger is lightweight, usable and reliable. | ||||
| For some, it is a simpler, less distracting, more future-proof alternative to Quicken or GnuCash. | ||||
| To get started, see the navigation links. | ||||
| 
 | ||||
| <!-- Has hledger saved you or your employer money, time or peace of mind ? --> | ||||
| <!-- Donations: --> | ||||
| <!-- **[Gittip](https://www.gittip.com/simonmichael/)**, --> | ||||
| <!-- [https://www.paypal.com/en_US/i/btn/x-click-but04.gif](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5J33NLXYXCYAY) --> | ||||
| <!-- Also testimonials, examples, blogging, packaging, and patches. --> | ||||
							
								
								
									
										263
									
								
								doc/site/installing.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								doc/site/installing.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,263 @@ | ||||
| # Installation Guide | ||||
| 
 | ||||
| - [[#How to install]] | ||||
| - [[#Troubleshooting]] | ||||
| 
 | ||||
| ## How to install | ||||
| 
 | ||||
| hledger works on GNU/linux, mac and windows. | ||||
| Here are several ways to install it: | ||||
| 
 | ||||
| ### a. With your system package manager | ||||
| 
 | ||||
| If you have a system package manager that includes hledger, | ||||
| this will be the quickest and easiest way to install, | ||||
| if you don't need the very latest version. | ||||
| 
 | ||||
| ^ On distro/packaging system: ^ Run: ^ | ||||
| | Debian & Ubuntu: | `apt-get install hledger [hledger-web]` | | ||||
| | Red Hat, Fedora & CentOS (?): | `yum install hledger` | | ||||
| | NixOS: | `nix-env -iA nixpkgs.haskellPackages.hledger` | | ||||
| 
 | ||||
| ### b. Download binaries from hledger.org | ||||
| 
 | ||||
| Ready-to-run [[download|downloads]] for GNU/Linux, Mac OSX, and | ||||
| Microsoft Windows are provided on a donation basis. These have not | ||||
| been updated recently, but you can fix that by making a donation of | ||||
| any size (see the page for more). | ||||
| 
 | ||||
| These are simple compressed executables (not installers), so after downloading | ||||
| you may need to decompress, adjust permissions, and rename the file. Eg: | ||||
| 
 | ||||
|     $ gunzip hledger-web-0.18.2-mac-x86_64.gz | ||||
|     $ chmod +x hledger-web-0.18.2-mac-x86_64 | ||||
|     $ mv hledger-web-0.18.2-mac-x86_64 /usr/local/bin/hledger-web | ||||
|     $ /usr/local/bin/hledger-web --version | ||||
| 
 | ||||
| ### c. Build released source from Hackage | ||||
| 
 | ||||
| You can download and build the latest release yourself using [cabal](http://www.haskell.org/cabal/users-guide/), | ||||
| the standard installer for Haskell software. | ||||
| This is the most common way to install hledger, but not always the easiest; | ||||
| use the troubleshooting tips below if needed. | ||||
| 
 | ||||
| Ensure you have [GHC](http://haskell.org/ghc) or | ||||
| the [Haskell Platform](http://haskell.org/platform) installed. | ||||
| hledger requires GHC 7.2 or greater, and hledger-web requires GHC 7.4 or greater. | ||||
| 
 | ||||
| Also note that some Haskell packages depend on C packages, and cabal | ||||
| currently isn't able to install or identify those for you. A common | ||||
| issue is not having all the ncurses C libraries installed. A quick way | ||||
| to ensure you have all required C libs is to | ||||
| [install hledger once with your system package manager](#install-with-your-system-package-manager) | ||||
| before installing the latest version with cabal. | ||||
| 
 | ||||
| Then install the hledger command-line tool: | ||||
| 
 | ||||
|     $ cabal update | ||||
|     $ cabal install hledger [--dry-run] | ||||
|     $ hledger --version | ||||
| 
 | ||||
| You should see the proper version reported. | ||||
| If you get "could not resolve dependencies", "hledger not found", | ||||
| or any other problem, see [troubleshooting](#troubleshooting). | ||||
| Also note, to use non-ascii characters like £ in your data, you might need to [configure a suitable locale](MANUAL.html#locale). | ||||
| 
 | ||||
| #### Installing hledger-web | ||||
| 
 | ||||
| To also install the web interface, in theory just do: | ||||
| 
 | ||||
|     $ cabal install hledger-web | ||||
| 
 | ||||
| In practice, this is a real beast to keep working, so as of 2014/4/17 it's best to do it this way: | ||||
| 
 | ||||
|     $ cabal sandbox init             # start with a clean cabal package db, requires cabal 1.18 | ||||
|     $ cabal update | ||||
|     $ cabal install -j alex happy    # update to alex 3.1 and happy 1.19 | ||||
|     $ cabal install -j hledger-web   # don't cabal install hledger first | ||||
| 
 | ||||
| This installs hledger and hledger-web. hledger-web will appear as the `web` command in hledger's commands list. | ||||
| 
 | ||||
| There are other [[start#add-on-commands|add-on packages]], hopefully compatible with the current hledger release and your platform. | ||||
| 
 | ||||
| ### d. Build latest source from git | ||||
| 
 | ||||
| To download and build the latest development version of hledger, ensure you have | ||||
| [git](http://git-scm.com) installed, then: | ||||
| 
 | ||||
|     $ git clone http://github.com/simonmichael/hledger.git | ||||
|     $ cd hledger | ||||
|     $ cabal update | ||||
|     $ [optional: cabal sandbox init] | ||||
|     $ cabal install ./hledger-lib ./hledger [./hledger-web] | ||||
| 
 | ||||
| The same [notes above](#install-from-hackage-with-cabal) about requirements and checking your installation apply. Note this time we mention `cabal sandbox`, a feature of cabal 1.18+ which can be used to reduce package dependency problems; it can be used when installing from Hackage as well. | ||||
| 
 | ||||
| ## Troubleshooting | ||||
| 
 | ||||
| There are a lot of ways things can go wrong, especially if you are building from source. | ||||
| Here are some known issues and things to try. Please also seek | ||||
| [support](DEVELOPMENT.html#support) from the | ||||
| [IRC channel](irc://irc.freenode.net/#ledger), | ||||
| [mail list](http://hledger.org/list) or | ||||
| [bug tracker](http://hledger.org/bugs). | ||||
| 
 | ||||
| Starting from the top, consider whether each of these might apply to | ||||
| you. Tip: blindly reinstalling/upgrading everything in sight probably | ||||
| won't work, it's better to go in small steps and understand the problem, | ||||
| or get help. | ||||
| 
 | ||||
| ### hledger not found ? | ||||
| If cabal install succeeded but you get a message like "hledger not found" when you run hledger, | ||||
| you should add cabal's bin directory to your PATH environment variable. | ||||
| Eg on unix-like systems, something like: | ||||
| ``` | ||||
| $ echo 'export PATH=$PATH:~/cabal/bin' >> ~/.bash_profile | ||||
| $ source ~/.bash_profile | ||||
| ``` | ||||
| On Ubuntu 14.04: | ||||
| ``` | ||||
| $ echo 'export PATH=~/.cabal/bin:$PATH' >> ~/.bashrc | ||||
| $ source ~/.bashrc | ||||
| ``` | ||||
| Test your PATH-variable with: | ||||
| ``` | ||||
| $ $PATH | ||||
| ``` | ||||
| ### hledger --version shows wrong version ? | ||||
| Perhaps you have multiple versions of hledger in your PATH. Eg you installed with the system package manager  | ||||
| (to get C libs) and then with cabal (to get the latest version), but cabal's bin directory appears too late | ||||
| in the PATH. Move it closer to the front. | ||||
| 
 | ||||
| ### Did you cabal update ? | ||||
| If not, `cabal update` and try again. | ||||
| 
 | ||||
| ### Do you have a new enough version of GHC ? | ||||
| Run `ghc --version`. hledger requires GHC 7.0 or greater | ||||
| (and on [some platforms](#5551), 7.2.1+ can be helpful). | ||||
| 
 | ||||
| ### Do you have a new enough version of cabal ? | ||||
| Avoid ancient versions, which are less capable and more confusing. | ||||
| `cabal --version` should ideally report at least 1.16 (or if you want to | ||||
| do sandboxed installs, 1.18). You may be able to upgrade it with: | ||||
| ``` | ||||
| $ cabal update | ||||
| $ cabal install cabal-install | ||||
| ``` | ||||
| 
 | ||||
| ### haskeline fails to install, requires Cabal >=1.16 | ||||
| 
 | ||||
| Related to the above. haskeline, one of hledger's dependencies, claims | ||||
| to require cabal-install version 1.16+, which is a problem if, say, | ||||
| you are on Debian Wheezy and only have cabal-install version 0.14. | ||||
| You can relax haskeline's version constraint like so: | ||||
| 
 | ||||
| ``` | ||||
| cabal unpack haskeline | ||||
| cd haskeline-X.Y | ||||
| (edit haskeline.cabal, comment out the `Cabal-Version:  >=1.16` line) | ||||
| cabal install | ||||
| (resume installing hledger) | ||||
| ``` | ||||
| 
 | ||||
| ### Are your installed GHC/cabal packages in good repair ? | ||||
| Run `ghc-pkg check`. If it reports problems, some of your packages have | ||||
| become inconsistent, and you should fix these first. | ||||
| [ghc-pkg-clean](https://gist.github.com/1185421) is an easy way. | ||||
| 
 | ||||
| ### cabal says "rejecting: system-fileio-0.3.11, 0.3.10 (conflict: blah blah blah.." | ||||
| system-fileio does not yet allow text 1.x, making cabal sweat. | ||||
| If your cabal is modern enough, adding `--max-backjumps=10000` should help. | ||||
| ([more](https://groups.google.com/d/topic/hledger/FdWGTSAVzYU/discussion)). | ||||
| 
 | ||||
| ### cabal can't satisfy the new dependencies due to old installed packages | ||||
| Cabal dependency failures become more likely as you install more | ||||
| packages over time. If `cabal install hledger-web --dry` says it can't | ||||
| satisfy dependencies, you have this problem. You can: | ||||
| 
 | ||||
| - (a) try to understand which packages to remove (with `ghc-pkg unregister`) | ||||
|    or which constraints to add (with `--constraint 'PKG == ...'`) to help cabal | ||||
|    find a solution | ||||
| 
 | ||||
| - (b) install into a fresh cabal sandbox, created with `cabal sandbox init`. | ||||
|    ([virthualenv](http://hackage.haskell.org/package/virthualenv) or | ||||
|    [cabal-dev](http://hackage.haskell.org/package/cabal-dev) also work). | ||||
| 
 | ||||
| - or (c<!-- -->) (easiest) erase your installed packages with | ||||
|    [ghc-pkg-reset](https://gist.github.com/1185421) and try again. | ||||
| 
 | ||||
| For more detail, see [How to cabal install](https://www.fpcomplete.com/user/simonmichael/how-to-cabal-install). | ||||
| 
 | ||||
| ### Dependency or compilation error in one of the new packages ? | ||||
|  If cabal starts downloading and building packages and then terminates | ||||
|  with an error, look at the output carefully and identify the problem | ||||
|  package(s).  If necessary, add `-v2` or `-v3` for more verbose | ||||
|  output. You can install the new packages one at a time to troubleshoot, | ||||
|  but remember cabal is smarter when installing all packages at once. | ||||
| 
 | ||||
|  Often the problem is that you need to install a particular C library | ||||
|  using your platform's package management system. Or the dependencies | ||||
|  specified on a package may need updating. Or there may be a compilation | ||||
|  error.  If you find an error in a hledger package, check the | ||||
|  [recent commits](http://github.com/simonmichael/hledger/commits) to | ||||
|  see if the [latest development version](#installing) might have a fix. | ||||
| 
 | ||||
| ### ExitFailure 11 | ||||
| See | ||||
| [http://hackage.haskell.org/trac/hackage/ticket/777](http://hackage.haskell.org/trac/hackage/ticket/777). | ||||
| This means that a build process has been killed, usually because it grew | ||||
| too large.  This is common on memory-limited VPS's and with GHC 7.4.1. | ||||
| Look for some memory-hogging processes you can kill, increase your RAM, | ||||
| or limit GHC's heap size by doing `cabal install ... --ghc-options='+RTS | ||||
| -M400m'` (400 megabytes works well on my 1G VPS, adjust up or down..) | ||||
| 
 | ||||
| ### Can't load .so/.DLL for: ncursesw (/usr/lib/libncursesw.so: file too short) | ||||
| (or similar): cf [GHC bug #5551](http://hackage.haskell.org/trac/ghc/ticket/5551). | ||||
| Upgrade GHC to 7.2.1, or try your luck with [this workaround](http://eclipsefp.github.com/faq.html). | ||||
| 
 | ||||
| ### Undefined iconv symbols on OS X | ||||
| This kind of error: | ||||
| 
 | ||||
|     Linking dist/build/hledger/hledger ... | ||||
|     Undefined symbols: | ||||
|       "_iconv_close", referenced from: | ||||
|           _hs_iconv_close in libHSbase-4.2.0.2.a(iconv.o) | ||||
|       "_iconv", referenced from: | ||||
|           _hs_iconv in libHSbase-4.2.0.2.a(iconv.o) | ||||
|       "_iconv_open", referenced from: | ||||
|           _hs_iconv_open in libHSbase-4.2.0.2.a(iconv.o) | ||||
| 
 | ||||
| probably means you are on a mac with macports libraries installed, cf | ||||
| [http://hackage.haskell.org/trac/ghc/ticket/4068](http://hackage.haskell.org/trac/ghc/ticket/4068). | ||||
| To work around temporarily, add this --extra-lib-dirs flag: | ||||
| 
 | ||||
|     $ cabal install hledger --extra-lib-dirs=/usr/lib | ||||
| 
 | ||||
| or permanently, add this to ~/.cabal/config: | ||||
| 
 | ||||
|     extra-lib-dirs: /usr/lib | ||||
| 
 | ||||
| ### "invalid preprocessing directive" on OS X | ||||
| 
 | ||||
| > "I'm trying to cabal install hledger-web on OS X, GHC 7.6, and getting error: invalid preprocessing directive #{mixedAmountAsHtml amt}". | ||||
| 
 | ||||
| [Example](https://gist.github.com/miikka/8886233) | ||||
| 
 | ||||
| Certain OS X and GHC versions do not work well together ([cabal #1496](https://github.com/haskell/cabal/issues/1496), [ghc #7678](https://ghc.haskell.org/trac/ghc/ticket/7678)). | ||||
| There's a fix for this in hledger HEAD as of 2014/2/8 (it's not in 0.22.1). | ||||
| If you find more cases, please report it. | ||||
| 
 | ||||
| ### Many warnings about "missing terminating ' character" on OS X | ||||
| 
 | ||||
| Related to the above problem, can be ignored. | ||||
| 
 | ||||
| ### hledger-vty requires curses-related libraries | ||||
| On Ubuntu, eg, you'll need the `libncurses5-dev` package. On Windows, | ||||
| these are not available (unless perhaps via Cygwin.) | ||||
| 
 | ||||
| ### hledger-chart requires GTK-related libraries | ||||
| On Ubuntu, eg, install the `libghc6-gtk-dev` package. See also [Gtk2Hs installation notes](http://code.haskell.org/gtk2hs/INSTALL). | ||||
| 
 | ||||
| ### error based on missing ncurses C libs on Ubuntu 14.04 trusty | ||||
| The following solved my dependency-problem with ncurses (this was required even when I had installed hledger 0.22 via apt-get) | ||||
|      sudo apt-get install libghc-hscurses-dev libghc-ncurses-dev | ||||
							
								
								
									
										5
									
								
								doc/site/ledgertips.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								doc/site/ledgertips.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| {{https://pbs.twimg.com/profile_images/455396161352781824/efsKSkXH_bigger.png |}} | ||||
| [[https://twitter.com/LedgerTips|@LedgerTips]] on twitter.com posts tips and tricks for all the [[https://github.com/ledger/ledger/wiki/Ports|Ledger ports and work-alikes]], in the spirit of [[https://twitter.com/HaskellTips|HaskellTips]]. | ||||
| 
 | ||||
| All *ledger users are invited to post tips! Contact Simon (sm) on #ledger with suggestions, or to get login details to become a guest host. | ||||
| Posts should include the `#ledgercli` hash tag. Links to longer tips are also welcome. | ||||
							
								
								
									
										1
									
								
								doc/site/manual.md
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								doc/site/manual.md
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | ||||
| ../manual.md | ||||
							
								
								
									
										108
									
								
								doc/site/more-docs.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								doc/site/more-docs.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,108 @@ | ||||
| # More docs... | ||||
| 
 | ||||
| [[old screenshots|Screenshots]] (old) | ||||
| 
 | ||||
| ## How-tos | ||||
| 
 | ||||
| - [[How to read CSV files]] | ||||
| - [[How to use account aliases]] | ||||
| 
 | ||||
| ## Blog posts & articles | ||||
| 
 | ||||
| - Simon's hledger-tagged blog posts:   | ||||
|   [Introducing hledger!](http://joyful.com/blog/2013-10-18-introducing-hledger.html), | ||||
|   [More on ledger](http://joyful.com/blog/2013-10-19-more-on-ledger.html), | ||||
|   [What is hledger ?](http://joyful.com/blog/2013-10-20-what-is-hledger.html), | ||||
|   [more...](http://joyful.com/tags/hledger.html) 2013- | ||||
| - [Joey Hess: hledger](http://joeyh.name/blog/entry/hledger) 2012 | ||||
| - [Magnus Henoch: monspuraj programoj](http://חנוך.se/diary/monspuraj_programoj/index.eo.html) ([english](http://translate.google.com/translate?hl=en&sl=eo&u=http://xn--9dbdkw.se/diary/monspuraj_programoj/index.eo.html)) 2012 | ||||
| - [Sascha Welter: Doing my own accounting](http://betabug.ch/blogs/ch-athens/1221) 2011 | ||||
| - [Clint Adams: Accounting at SFLC](http://www.softwarefreedom.org/blog/2011/sep/07/accounting-at-sflc/) 2011 | ||||
| - [Christine Spang: [h]ledger rocks my world](http://blog.spang.cc/posts/hledger_rocks_my_world/) 2010 | ||||
| - [Roman Cheplyaka: hledger](http://ro-che.blogspot.com/2010/02/hledger.html) 2010 | ||||
| - [Fabrice Niessen on Ledger, hledger, beancount, CSV2Ledger](http://www.mygooglest.com/fni/ledger.html) 2010 | ||||
| - [советы: Ledger — бухучёт в командной строке](http://s.arboreus.com/2009/05/personal-accounting-in-command-line.html) ([english](http://translate.google.com/translate?hl=en&sl=ru&u=http://s.arboreus.com/2009/05/personal-accounting-in-command-line.html)) 2009 | ||||
| 
 | ||||
| ## Related info | ||||
| 
 | ||||
| John Wiegley's [Ledger](http://www.ledger-cli.org/) inspired hledger. | ||||
| Here are some good intros, which also serve as a good orientation for hledger: | ||||
| 
 | ||||
| - [Ledger CLI Accounting for Geeks](http://blog.loadingdata.nl/accounting-for-geeks/#/) slides by Daniël Bos, 2014 | ||||
|   (press space to advance) | ||||
| - [ledger basics and habits](http://matthewturland.com/2014/03/29/ledger-basics-and-habits/) blog post by Matthew Turland, 2014 | ||||
| - [Hacking Your Finances for Fun and Profit](http://matthewturland.com/slides/ledger-stats/) slides by Matthew Turland, 2013 | ||||
| - [The accounting quest: Ledger](http://lwn.net/Articles/501681/) LWN.net, 2012 | ||||
| - [Ledger: Command-line double-entry accounting](https://news.ycombinator.com/item?id=872244) Hacker News discussion, 2009 | ||||
| - [Ledger's informative manual](http://ledger-cli.org/3.0/doc/ledger3.html), | ||||
|   and the [Ledger wiki](http://wiki.ledger-cli.org) | ||||
| - [Non-Profit Accounting With Ledger CLI, A Tutorial](https://gitorious.org/ledger/npo-ledger-cli/source/npo-ledger-cli-tutorial.md) | ||||
|   describes Software Freedom Conservancy's setup, 2013 | ||||
| 
 | ||||
| See also the two Twitter feeds: | ||||
| 
 | ||||
| - [@LedgerTips](https://twitter.com/LedgerTips) Tips and tricks for Ledger, hledger, beancount, etc. | ||||
| - [#ledgercli](https://twitter.com/search?q=%23ledgercli&src=typd&f=realtime) Search for latest mentions of the `#ledgercli` hash tag | ||||
| 
 | ||||
| ## Accounting | ||||
| 
 | ||||
| -  | ||||
|  [[wp>Accountancy]], | ||||
|  [[wp>Bookkeeping]], | ||||
|  [[wp>Double-entry bookkeeping system]], | ||||
|  [[wp>General journal]] | ||||
|  etc. at Wikipedia | ||||
| - [Accounting For Dragons](http://podcastle.org/2009/10/09/pc-miniature-38-accounting-for-dragons) why you should know accounting | ||||
| - [Bean Counter](http://www.dwmbeancounter.com/) - tutorials, such as | ||||
|   [So, you want to learn Bookkeeping!](http://www.dwmbeancounter.com/tutorial/Tutorial.html). | ||||
|   This has been recommended on the ledger list. | ||||
| - [Accounting Basics](http://www.accountingverse.com/accounting-basics/) | ||||
| - [Guru 99 Accounting Tutorials](http://www.guru99.com/accounting.html) | ||||
| - [principlesofaccounting.com](http://www.principlesofaccounting.com) | ||||
| - [Double Entry Bookkeeping](http://c2.com/cgi/wiki?DoubleEntryBookkeeping) discussion by software developers at the WikiWikiWeb | ||||
| - [The Vanished Grandeur of Accounting](http://www.bostonglobe.com/ideas/2014/06/07/the-vanished-grandeur-accounting/3zcbRBoPDNIryWyNYNMvbO/story.html) (Boston Globe) & [discussion](https://news.ycombinator.com/item?id=7933746) | ||||
| - [Winning Financially is Simple](http://directory.libsyn.com/episode/index/show/youneedabudget/id/2657122) and other good episodes from the [YNAB Podcast](http://directory.libsyn.com/shows/view/id/youneedabudget) | ||||
| - [Back to the Stone Age: Low-Tech Expense Tracking](http://www.getrichslowly.org/blog/2011/02/28/back-to-the-stone-age-low-tech-expense-tracking/) Get Rich Slowly | ||||
| - [Track Every Penny You Spend](http://www.getrichslowly.org/blog/2006/09/22/track-every-penny-you-spend/) Get Rich Slowly | ||||
| - [I’ve Tracked My Expenses — Now What?](http://www.getrichslowly.org/blog/2011/04/08/ask-the-readers-ive-tracked-my-expenses-now-what/) Get Rich Slowly | ||||
| - [A Slow-Tech Approach to Tracking Spending](http://mobile.nytimes.com/2014/05/12/your-money/household-budgeting/a-slow-tech-approach-to-tracking-spending.html) | ||||
| - [Your Financial Network Map](http://www.bargaineering.com/articles/financial-network-map.html) | ||||
| - [The Accountancy Model and The Accountancy Model Examples](http://timriley.net/appahost/accountancy_model.html) - two free books by Tim Riley | ||||
| - [Gnucash and double entry accounting](http://www.austintek.com/gnucash/ncsa-gnucash-talk.html) - double entry accounting introduction with examples | ||||
| - [Accounting for Computer Scientists](http://martin.kleppmann.com/2011/03/07/accounting-for-computer-scientists.html) | ||||
| - [Closing Entries](http://www.cliffsnotes.com/more-subjects/accounting/accounting-principles-i/completion-of-the-accounting-cycle/closing-entries) | ||||
| - [Tutorial on multiple currency accounting](http://www.mscs.dal.ca/~selinger/accounting/tutorial.html) by Peter Selinger | ||||
| 
 | ||||
| ## hledger add-ons | ||||
| 
 | ||||
| - [hledger-interest](http://hackage.haskell.org/package/hledger-interest) generates various kinds of interest transaction | ||||
| - [hledger-irr](http://hackage.haskell.org/package/hledger-irr) reports internal rate of return (effective interest rate) | ||||
| - [[h]ledger-autosync](https://bitbucket.org/egh/ledger-autosync) downloads/converts/deduplicates OFX data | ||||
| - [hledger-chart](http://hackage.haskell.org/package/hledger-chart) generates simple pie charts (unmaintained) | ||||
| - [hledger-vty](http://hackage.haskell.org/package/hledger-vty) a simple curses-style UI (unmaintained) | ||||
| - More in [[code>extra/]] | ||||
| 
 | ||||
| ## Scripting examples | ||||
| 
 | ||||
| - https://gist.github.com/4172604 printing average expenses by month | ||||
| - https://gist.github.com/4210558 calculating historical account balances | ||||
| - More in [[code>extra/]] | ||||
| 
 | ||||
| ## Similar projects | ||||
| 
 | ||||
| In addition to hledger and Ledger, there are other [[ledgerwiki>Ports|Ledger ports]] and Ledger-likes, incompatible but similar in concept: | ||||
| 
 | ||||
| - Martin Blais' [beancount](https://furius.ca/beancount/) (python) | ||||
| - Harshad RJ's [Abandon](https://github.com/hrj/abandon) (scala) | ||||
| - dimonf's [ledger.pl](https://github.com/dimonf/ledger.pl) (perl) | ||||
| - Omari Norman's [penny](https://github.com/massysett/penny) (haskell) | ||||
| - Uwe Hollerbach's [umm](http://hackage.haskell.org/package/UMM) (haskell) | ||||
| 
 | ||||
| Other things of interest: | ||||
| 
 | ||||
| - [bill](http://darcsden.com/alex/bill), [bill-atomo](http://darcsden.com/alex/bill-atomo) - small time-tracking and billing app | ||||
| - [debts](http://darcsden.com/ozamosi/debts) - small debt tracking web app | ||||
| - [housetab-multi](http://darcsden.com/dbp/housetab-multi), [housetab.org](http://housetab.org) - a web app to manage expenses between a group of friends | ||||
| - [You Need A Budget](http://www.youneedabudget.com/) | ||||
| - Software Freedom Conservancy's [[http://npoacct.sfconservancy.org|npo-acct]] project | ||||
| 
 | ||||
							
								
								
									
										50
									
								
								doc/site/old-screenshots.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								doc/site/old-screenshots.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| # Old screenshots | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ## Basic command-line reports | ||||
| 
 | ||||
| Showing the journal format, a register report, and a balance report: | ||||
| 
 | ||||
| {{http://hledger.org/images/hledger-screen-1.png|Basic command-line reports, like ledger}} | ||||
| 
 | ||||
| ## Time dashboard in emacs | ||||
| 
 | ||||
| The upper window displays today's time report every minute (using ansi-term, watch, a helper script, and hledger invoked via 'hours' symlink.) The lower window is viewing the timelog file, to tweak clock-ins/clock-outs made with C-x t i and C-x t o. | ||||
| 
 | ||||
| {{http://hledger.org/images/watchhours.png|The upper window displays today's time report every minute (using ansi-term, watch, a helper script, and hledger invoked via 'hours' symlink.) The lower window is viewing the timelog file, to tweak clock-ins/clock-outs made with C-x t i and C-x t o.}} | ||||
| 
 | ||||
| ## Pie charts (hledger-chart) | ||||
| 
 | ||||
| Viewing a year of monthly expense charts in emacs. These were generated by hledger 0.10 with -fchart, which became [[http://hackage.haskell.org/package/hledger-chart|hledger-chart]], presently unmaintained. | ||||
| 
 | ||||
| {{http://hledger.org/images/hledger-charts-2.png|Viewing a year of monthly expense charts in emacs (hledger 0.10 with -fchart).}} | ||||
| 
 | ||||
| ## Curses-style interface (hledger-vty) | ||||
| 
 | ||||
| [[http://hackage.haskell.org/package/hledger-vty|hledger-vty]], currently unmaintained. | ||||
| 
 | ||||
| {{http://hledger.org/images/sshot.png|The vty (curses-style) interface}} | ||||
| 
 | ||||
| ## Web interface (hledger-web) | ||||
| 
 | ||||
| This minimal web interface was hledger 0.11pre with -fwebyesod, which became [[http://hackage.haskell.org/package/hledger-web|hledger-web]]. | ||||
| Here's the [[http://demo.hledger.org|latest interface]]. | ||||
| 
 | ||||
| {{http://hledger.org/images/hledger-web-journal.png|The web interface (hledger 0.11pre with -fwebyesod).}} | ||||
| 
 | ||||
| 
 | ||||
| <!-- | ||||
| ``` | ||||
| zooming version (requires HTML) | ||||
| Click to enlarge, or mouse over for captions.. | ||||
| 
 | ||||
| <style> | ||||
| .highslide img {height:90px;} | ||||
| .highslide-caption {color:white; background-color:black;} | ||||
| </style> | ||||
| 
 | ||||
| <a name="hledger-screen-1" href="images/hledger-screen-1.png" class="highslide" onclick="return hs.expand(this)"> | ||||
|  <img src="images/hledger-screen-1.png" title="Basic command-line reports, like ledger" /></a> | ||||
| ``` | ||||
| --> | ||||
							
								
								
									
										1129
									
								
								doc/site/release-notes.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1129
									
								
								doc/site/release-notes.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										36
									
								
								doc/site/sidebar.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								doc/site/sidebar.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| ~~NOCACHE~~ | ||||
| 
 | ||||
| [[Home]] | ||||
| 
 | ||||
| [[Download]] | ||||
| 
 | ||||
| [[Release Notes]] | ||||
| 
 | ||||
| [[step-by-step|Tutorial]] | ||||
| 
 | ||||
| [[Manual]] | ||||
| 
 | ||||
| [[Developer Guide]] | ||||
| 
 | ||||
| [[FAQ]] | ||||
| 
 | ||||
| [[More docs]] | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| [Code](http://hledger.org/code) | ||||
| 
 | ||||
| [Bug tracker](http://hledger.org/bugs) & | ||||
| [trello](http://hledger.org/trello) | ||||
| 
 | ||||
| [Mail list](http://hledger.org/list) | ||||
| 
 | ||||
| [#hledger IRC](http://hledger.org/irc) | ||||
| (also [#ledger](http://webchat.freenode.net?channels=ledger&randomnick=1)) | ||||
| 
 | ||||
| [[https://twitter.com/LedgerTips|@LedgerTips]], | ||||
| [#ledgercli](https://twitter.com/search?q=%23ledgercli&src=typd&f=realtime) | ||||
| (Twitter) | ||||
| 
 | ||||
| <!-- [web ui demo](http://demo.hledger.org/) --> | ||||
| <!-- [web ui demo](http://demo.hledger.org/register?q=inacct%3Aassets%3Abank%3Achecking+sym%3A\%24) --> | ||||
							
								
								
									
										32
									
								
								doc/site/site.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								doc/site/site.tmpl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | ||||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||||
|     <head> | ||||
|         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | ||||
|         <title>$title$</title> | ||||
|         <link href="/css/site.css" rel="stylesheet"> | ||||
| 				<style> | ||||
| 						body { max-width:50em; margin:auto; color:black; background-color:#eee; } | ||||
| 						ul.nav { padding-left:0; text-align:right; } | ||||
| 						.nav li { display:inline; margin-right:1em; } | ||||
| 				</style> | ||||
|     </head> | ||||
|     <body> | ||||
| 				<ul class="nav"> | ||||
| 						<li><a href="index.html">Home</a> | ||||
| 						<li><a href="download.html">Download</a> | ||||
| 						<li><a href="release-notes.html">Release Notes</a> | ||||
| 						<li><a href="step-by-step.html">Tutorial</a> | ||||
| 						<li><a href="manual.html">Manual</a> | ||||
| 						<li><a href="developer-guide.html">Developer Guide</a> | ||||
| 						<li><a href="faq.html">FAQ</a> | ||||
| 						<li><a href="more-docs.html">More docs</a> | ||||
| 				</ul> | ||||
| 
 | ||||
|         $body$ | ||||
| 
 | ||||
| 				<em>2014/11/4: The site is going through some changes, for now please enjoy the old-school styling.</em> | ||||
| 
 | ||||
|     </body> | ||||
| </html> | ||||
							
								
								
									
										695
									
								
								doc/site/step-by-step.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										695
									
								
								doc/site/step-by-step.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,695 @@ | ||||
| # hledger Step by Step (draft) | ||||
| 
 | ||||
| *(c) Simon Michael, 2014* | ||||
| 
 | ||||
| Welcome! Here you can learn hledger (and a little double-entry | ||||
| accounting) by practicing, one hands-on exercise at a time, in the | ||||
| style of the "Learn X the Hard Way" books. Exercises are grouped into | ||||
| these chapters: | ||||
| 
 | ||||
| - [[#0. SETUP]] | ||||
| - [[#1. BASIC DATA ENTRY & REPORTING]] | ||||
| - [[#2. USEFUL ACCOUNTING CONCEPTS]] | ||||
| 
 | ||||
| You'll learn the most if you work through each small step in order. | ||||
| If a step specifies no particular task, your task is to run the examples and understand it. | ||||
| 
 | ||||
| If you get stuck, or have any other feedback, report it on IRC or the mail list (see the sidebar), | ||||
| or right on this page (click the pencil on the right). | ||||
| 
 | ||||
| You'll need: | ||||
| 
 | ||||
| 1. hledger, installed using the [[installing|Installation Guide]]. These exercises were last tested with: hledger 0.23dev-20140212. | ||||
| 
 | ||||
| 2. A basic understanding of the command line, text file editing, and regular expressions. Or, the ability to ask for help on the IRC channel. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| ## 0. SETUP | ||||
| 
 | ||||
| --- | ||||
| ### Check your hledger | ||||
| 
 | ||||
| Get a command prompt, and run hledger to check the version. It should be reasonably [[release-notes|up to date]].: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger --version | ||||
| hledger 0.23 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ## 1. BASIC DATA ENTRY & REPORTING | ||||
| 
 | ||||
| --- | ||||
| ### Locate your journal file with "hledger stats" | ||||
| 
 | ||||
| hledger reads financial transactions from a "journal file" (so named because it represents a [[wp>General Journal]]). | ||||
| The default journal file is in your home directory; check its path using the [[manual#stats|stats]] command. | ||||
| You should see something like: | ||||
| ``` | ||||
| $ hledger stats | ||||
| The hledger journal file "/home/YOU/.hledger.journal" was not found. | ||||
| Please create it first, eg with "hledger add" or a text editor. | ||||
| Or, specify an existing journal file with -f or LEDGER_FILE. | ||||
| ``` | ||||
| 
 | ||||
| Most hledger commands read this file but can not change it; the `add` and `web` commands can also write it. | ||||
| 
 | ||||
| (If `stats` reports that the file exists, eg because you previously created it, move it out of the way temporarily for these exercises.) | ||||
| 
 | ||||
| --- | ||||
| ### Record a transaction with "hledger add" | ||||
| 
 | ||||
| Follow the help and use the [[manual#add|add]] command to record your first transaction, | ||||
| an imaginary purchase at the supermarket. | ||||
| We'll go through this in detail. Later you'll learn other ways to enter data. | ||||
| 
 | ||||
| ``` | ||||
| $ hledger add | ||||
| Adding transactions to journal file /home/YOU/.hledger.journal | ||||
| Provide field values at the prompts, or press enter to accept defaults. | ||||
| Use readline keys to edit, use tab key to complete account names. | ||||
| A code (in parentheses) may be entered following transaction dates. | ||||
| A comment may be entered following descriptions or amounts. | ||||
| If you make a mistake, enter < at any prompt to restart the transaction. | ||||
| To complete a transaction, enter . when prompted. | ||||
| To quit, press control-d or control-c. | ||||
| 
 | ||||
| Starting a new transaction. | ||||
| date ? [2014/02/12]:  | ||||
| ``` | ||||
| 
 | ||||
| `add` prompts for each transaction field. The first is the date. | ||||
| The value in square brackets is the suggested default (today's date). Press enter to accept it. | ||||
| 
 | ||||
| ``` | ||||
| description ? : trip to the supermarket | ||||
| ``` | ||||
| 
 | ||||
| Transactions have an optional description (a single line of text) to help you understand them. | ||||
| You can describe the transaction here, or put a payee name, or leave it blank.  | ||||
| Type `trip to the supermarket` and press enter. | ||||
| 
 | ||||
| ``` | ||||
| account 1 ? : expenses | ||||
| ``` | ||||
| 
 | ||||
| Transactions have two or more accounts. Keep it simple; just enter `expenses` for the first one. | ||||
| 
 | ||||
| If you're thinking "expenses sounds more like a category": it is, but double entry accounting calls those "accounts", too. | ||||
| A purchase is a transfer of money from an asset account to an expense account. | ||||
| An asset is something you own, like some money in a bank account or in your pocket. | ||||
| Once the money has been "moved" to an expense, you no longer own it, but the increasing balance in the expense account reminds you where it went. | ||||
| 
 | ||||
| ``` | ||||
| amount  1 ? : $10 | ||||
| ``` | ||||
| 
 | ||||
| The amount being "moved" to `expenses`. In this case 10 US dollars. | ||||
| 
 | ||||
| ``` | ||||
| account 2 ? : assets | ||||
| ``` | ||||
| 
 | ||||
| Next, specify which account the money comes from. Just say `assets`. | ||||
| 
 | ||||
| ``` | ||||
| amount  2 ? [$-10.0]:  | ||||
| ``` | ||||
| 
 | ||||
| Now you're asked for the amount to "move" to or from the `assets` account. | ||||
| As the default, hledger offers the amount required to "balance" the postings entered so far. | ||||
| The minus sign indicates the money is moving from this account. | ||||
| (hledger uses positive and negative sign instead of accounting's traditional "debit" and "credit" terminology.) | ||||
| In a balanced transaction, the sum of posted amounts is zero, in other words no money disappears into thin air. | ||||
| hledger does not allow unbalanced transactions. | ||||
| Press enter to accept the default. It has an extra decimal place, but never mind. | ||||
| 
 | ||||
| ``` | ||||
| account 3 (or . to complete this transaction) ? : . | ||||
| ``` | ||||
| 
 | ||||
| Type `.` (period) and press enter. | ||||
| 
 | ||||
| ``` | ||||
| Transaction entered: | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets          $-10.0 | ||||
| 
 | ||||
| Accept this transaction ? [y]: | ||||
| ``` | ||||
| 
 | ||||
| You are given a chance to review the transaction just entered. | ||||
| Here you see hledger's plain text data format for journal entries: | ||||
| a non-indented YYYY/MM/DD date, space, and description, | ||||
| followed by two or more indented posting lines, each containing an account name, | ||||
| two or more spaces, and an amount.  | ||||
| (Account names can contain spaces, so at least two spaces are needed to separate them from the amount.) | ||||
| Press enter. | ||||
| 
 | ||||
| ``` | ||||
| Added to the journal. | ||||
| 
 | ||||
| Starting a new transaction. | ||||
| date ? [2014/02/12]: <CTRL-D> | ||||
| $ | ||||
| ``` | ||||
| 
 | ||||
| hledger has saved it to the journal file and is ready for the next | ||||
| entry.  Press control-d (on Windows, control-c) once to exit. | ||||
| 
 | ||||
| `stats` should now report that your journal exists and contains one transaction: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger stats | ||||
| Main journal file        : /home/YOU/.hledger.journal | ||||
| Included journal files   :  | ||||
| Transactions span        : 2014-02-12 to 2014-02-13 (1 days) | ||||
| Last transaction         : 2014-02-12 (0 days ago) | ||||
| Transactions             : 1 (1.0 per day) | ||||
| Transactions last 30 days: 1 (0.0 per day) | ||||
| Transactions last 7 days : 1 (0.1 per day) | ||||
| Payees/descriptions      : 1 | ||||
| Accounts                 : 2 (depth 1) | ||||
| Commodities              : 1 ($) | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### Show transactions with "hledger print" | ||||
| 
 | ||||
| The [[manual#print|print]] command shows a tidied-up view of the transaction entries in your journal. | ||||
| Since there's just one so far, you should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger print | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets            $-10 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### Examine your journal file | ||||
| 
 | ||||
| List and print the journal file (on Windows, use `dir` and `type` and the file path from `hledger stats`): | ||||
| 
 | ||||
| ``` | ||||
| $ ls -l ~/.hledger.journal | ||||
| -rw-rw-r-- 1 YOU YOU 74 Feb 12 08:10 /home/YOU/.hledger.journal | ||||
| $ cat ~/.hledger.journal | ||||
| 
 | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### A convenience: inferred amounts | ||||
| 
 | ||||
| Why is the amount missing from the assets posting above ? | ||||
| As a convenience to make manual data entry easier, if one amount is missing | ||||
| hledger infers it so as to balance the transaction ($-10 in this case). | ||||
| For consistency, `add` uses the same convention when it writes an entry. | ||||
| (But `print` shows the inferred amount, for clarity.) | ||||
| Only one missing amount is allowed in each transaction. | ||||
| 
 | ||||
| --- | ||||
| ### Edit the journal file | ||||
| 
 | ||||
| Since the journal file is plain text, you can edit it directly with any text editor. | ||||
| Edit the file and change it to test whether two missing amounts is reported as an error. Eg: | ||||
| 
 | ||||
| ``` | ||||
| $ emacs ~/.hledger.journal | ||||
| ``` | ||||
| 
 | ||||
| Remove the expenses amount and save the file. It now looks like this: | ||||
| 
 | ||||
| ``` | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses            | ||||
|     assets | ||||
| ``` | ||||
| 
 | ||||
| Running `print` again, you should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger print | ||||
| hledger: could not balance this transaction (can't have more than one missing amount; remember to put 2 or more spaces before amounts) | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses | ||||
|     assets | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| All hledger commands expect the journal to be well-formed, and will report an error and exit otherwise. | ||||
| 
 | ||||
| --- | ||||
| ### Two spaces | ||||
| 
 | ||||
| Notice the last part of that error message: "`... remember to put 2 or more spaces before amounts)`". | ||||
| Another cause of this error is forgetting to put two spaces before the | ||||
| amount, like this: | ||||
| 
 | ||||
| ``` | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses $10  ; <- only one space between expenses and $10 - need at least two | ||||
|     assets | ||||
| ``` | ||||
| 
 | ||||
| Since account names may contain spaces, hledger thinks the first | ||||
| posting is to an account named "`expenses $10`", with a missing | ||||
| amount.  So remember: two or more spaces. | ||||
| 
 | ||||
| --- | ||||
| ### Unbalanced transactions | ||||
| 
 | ||||
| Edit the file to look like this: | ||||
| 
 | ||||
| ``` | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses        $10 | ||||
|     assets          $10 | ||||
| ``` | ||||
| 
 | ||||
| Here, we wrote both posting amounts but got the sign wrong on one of them, so they don't add up to zero. | ||||
| hledger should detect this mistake. Verify it by running some command, eg `print`. You should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger print | ||||
| hledger: could not balance this transaction (real postings are off by $20) | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets             $10 | ||||
| ``` | ||||
| 
 | ||||
| That makes sense. (It calls them "real" postings because there are some other kinds of posting you haven't learned about yet; they aren't important.) | ||||
| 
 | ||||
| Correct the mistake by adding the minus sign, or just removing the assets amount entirely, and verify | ||||
| that `print` works again. | ||||
| 
 | ||||
| --- | ||||
| ### Record a transaction by editing | ||||
| 
 | ||||
| Edit the file again and manually add a second purchase transaction. | ||||
| It's often quickest to copy & paste a similar entry, then change it. | ||||
| Make the file look like this: | ||||
| 
 | ||||
| ``` | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets | ||||
| 
 | ||||
| 2014/02/13 forgot the bread | ||||
|     expenses           $5 | ||||
|     assets | ||||
| ``` | ||||
| 
 | ||||
| The blank line between transactions is customary, though not required. | ||||
| Test your work with `print`. You should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger print | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses           $10 | ||||
|     assets            $-10 | ||||
| 
 | ||||
| 2014/02/13 forgot the bread | ||||
|     expenses            $5 | ||||
|     assets             $-5 | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### Show postings and a running total with "hledger register" | ||||
| 
 | ||||
| The [[manual#register|register]] command shows transactions in a different format. More precisely, it shows postings. | ||||
| Remember, a posting is an increase or decrease of some account by some amount, and a transaction contains two or more of them. | ||||
| Run `register` and compare with the output of `print` above. You should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger register | ||||
| 2014/02/12 trip to the super..  expenses                       $10           $10 | ||||
|                                 assets                        $-10             0 | ||||
| 2014/02/13 forgot the bread     expenses                        $5            $5 | ||||
|                                 assets                         $-5             0 | ||||
| ``` | ||||
| 
 | ||||
| Postings are displayed one per line. | ||||
| The transaction's date and description is displayed only for the first posting in each transaction. | ||||
| Next we see the posted account's name and the amount posted. | ||||
| The final column is a running total of the posted amounts. | ||||
| 
 | ||||
| --- | ||||
| ### Show a per-account register report | ||||
| 
 | ||||
| Notice how the running total above keeps resetting to 0. | ||||
| This makes sense (since we know each transaction's postings add up to zero) but isn't very useful. | ||||
| The register report is more useful when we restrict it to a subset of postings - | ||||
| say, only the postings within a single account. | ||||
| You can do this by specifying the account name as a command line argument. | ||||
| 
 | ||||
| Run a register report for the `expenses` account. You should see: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger register expenses | ||||
| 2014/02/12 trip to the super..  expenses                       $10           $10 | ||||
| 2014/02/13 forgot the bread     expenses                        $5           $15 | ||||
| ``` | ||||
| 
 | ||||
| Now it's clear that your `expenses` balance - ie, the total amount spent - has increased to $15. | ||||
| 
 | ||||
| Your `assets` balance should have dropped accordingly. Check it: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger register assets | ||||
| 2014/02/12 trip to the super..  assets                        $-10          $-10 | ||||
| 2014/02/13 forgot the bread     assets                         $-5          $-15 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### Query expressions | ||||
| 
 | ||||
| The account name argument above is an example of a | ||||
| [[manual#queries|query expression]], a search pattern which restricts a report to a subset of the data. | ||||
| In this way  you can make very precise queries. | ||||
| 
 | ||||
| Note that it is a case-insensitive regular expression which matches anywhere inside the account name. | ||||
| So "`e`" would match both `expenses` and `assets`. | ||||
| 
 | ||||
| And if you had an account named `other assets`, "`assets`" would also match that, so to match only the `assets` | ||||
| account you'd need a more precise pattern like "`^assets$`". | ||||
| If this doesn't make sense, read a little about regular expressions. | ||||
| In a regular expression `^` means "match at the beginning" and `$` means "match at the end". | ||||
| 
 | ||||
| Multiple query arguments are ANDed and ORed together in a fixed way - follow the link for details. | ||||
| Basically queries on the same field are ORed, and queries on different fields are ANDed. | ||||
| 
 | ||||
| Run the following examples and make sure they make sense, consulting the manual as needed. | ||||
| 
 | ||||
| Show only transactions whose description contains the regular expression "`bread`": | ||||
| 
 | ||||
| ``` | ||||
| $ hledger print desc:bread | ||||
| 2014/02/13 forgot the bread | ||||
|     expenses            $5 | ||||
|     assets             $-5 | ||||
| ``` | ||||
| 
 | ||||
| Show only postings on or after a certain date to an account whose name ends with "es": | ||||
| ``` | ||||
| $ hledger register date:2014/2/13- 'es$' | ||||
| 2014/02/13 forgot the bread     expenses                        $5            $5 | ||||
| ``` | ||||
| 
 | ||||
| Note how the account-matching pattern `es$` needs to be quoted here, | ||||
| because it contains the regular expression metacharacter `$` which would otherwise be interpreted by the unix shell. | ||||
| 
 | ||||
| --- | ||||
| ### Show accounts and their balances with "hledger balance" | ||||
| 
 | ||||
| The third of hledger's three core reporting commands is [[manual#balance|balance]]. | ||||
| Use it to list all the accounts posted to, and their ending balance. | ||||
| You should see account balances agreeing with the final running total in the register reports above: | ||||
| 
 | ||||
| ``` | ||||
|                 $-15  assets | ||||
|                  $15  expenses | ||||
| -------------------- | ||||
|                    0 | ||||
| ``` | ||||
| 
 | ||||
| The overall total of these balances is also shown. As with other reports, you can use a query expression to select a subset of the data to report on. | ||||
| Eg: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger balance assets | ||||
|                 $-15  assets | ||||
| -------------------- | ||||
|                 $-15 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### balance shows the sum of matched posting amounts | ||||
| 
 | ||||
| Here's a balance report based only on the postings dated 2013/2/13: | ||||
| ``` | ||||
| $ hledger balance date:2014/2/13 | ||||
|                  $-5  assets | ||||
|                   $5  expenses | ||||
| -------------------- | ||||
|                    0 | ||||
| ``` | ||||
| 
 | ||||
| As you can see from this, `balance` does not always report the current | ||||
| real-world account balance, rather it shows the sum of the postings | ||||
| you have selected. | ||||
| If you're not sure what those are, run a `register` report with the same arguments to see them: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger register date:2014/2/13 | ||||
| 2014/02/13 forgot the bread     expenses                        $5            $5 | ||||
|                                 assets                         $-5             0 | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ### Review | ||||
| 
 | ||||
| You have learned: | ||||
| 
 | ||||
| - a simple plain text notation for recording financial transactions, used by hledger, Ledger and others | ||||
| 
 | ||||
| - what is the journal file, where it is, and how to get statistics on it with `hledger stats` | ||||
| 
 | ||||
| - how to record new transactions using `hledger add` | ||||
| 
 | ||||
| - how to record transactions by editing the journal file | ||||
| 
 | ||||
| - what the journal entry for a purchase looks like | ||||
| 
 | ||||
| - how to detect some common errors, by eye or with hledger | ||||
| 
 | ||||
| - how hledger selects data to report on, and how to select by account, description, or date | ||||
| 
 | ||||
| - how to list transactions with `hledger print` | ||||
| 
 | ||||
| - how to list postings and see an account's balance over time with `hledger register` | ||||
| 
 | ||||
| - how to list accounts and their current balance, or the sum of their postings in some period, with `hledger balance` | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| <!-- | ||||
| 
 | ||||
| ### Test yourself | ||||
| 
 | ||||
| Start a journal tracking the cash in your pocket or wallet. Every day for one week, | ||||
| 
 | ||||
| 1. record each and every outflow and inflow of this cash, to the penny | ||||
| 2. run reports showing the transactions, per-account running balance, and current account balances | ||||
| 
 | ||||
| After seven days, do an audit: | ||||
| 
 | ||||
| - Count the cash. Does it exactly match the final balance in your hledger reports ? | ||||
|   If not, try to identify how and when things went wrong. | ||||
|   If you're confident you found the mistake, have corrected the journal and it now agrees with reality, that counts as a pass. | ||||
| 
 | ||||
| - Can you easily recall and understand the purpose of each transaction, with the help of your descriptions ? | ||||
| 
 | ||||
| You don't need to categorise, you don't need to track anything other than the amount of cash in your pocket, and it's only for seven days. | ||||
| Can you complete this challenge ? Keep at it! :) | ||||
| I couldn't do this when I started using hledger, but I can now. Build that muscle. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| --> | ||||
| 
 | ||||
| 
 | ||||
| ## 2. USEFUL ACCOUNTING CONCEPTS | ||||
| 
 | ||||
| --- | ||||
| ### Assets, Liabilities and Equity | ||||
| 
 | ||||
| Accounting describes the status of a business, person or other entity at any point in time in terms of three amounts: | ||||
| 
 | ||||
| - **Assets**      - Things owned | ||||
| - **Liabilities** - Things owed | ||||
| - **Equity**      - The amount invested by owners/shareholders | ||||
| 
 | ||||
| The foundation of double-entry accounting is the [[wp>accounting equation]], which says | ||||
| that Equity is always equal to Assets minus Liabilities (or, Net Assets). | ||||
| 
 | ||||
| This is also written as: Assets = Liabilities + Equity. | ||||
| Another way to say it: what the entity owns is funded either by debt or by the capital provided by its owners. | ||||
| 
 | ||||
| These three are called the Balance Sheet accounts. Their balances summarise the overall financial status at some point in time. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ### Revenue and Expenses | ||||
| 
 | ||||
| Two more amounts are used to describe changes in the above during a given period: | ||||
| 
 | ||||
| - **Revenue**     - Money flowing in | ||||
| - **Expenses**    - Money flowing out | ||||
| 
 | ||||
| You may be accustomed to using the word Income instead Revenue. | ||||
| That's fine, just remember that Income is sometimes used to mean Net | ||||
| Income, which is Revenue - Expenses. | ||||
| 
 | ||||
| These two are called the Income Statement accounts.  The balances they | ||||
| accumulate during some period of time indicate the inflows and | ||||
| outflows during that period (which will affect the Assets and | ||||
| Liabilities balances). | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ### Chart of Accounts | ||||
| 
 | ||||
| Five numbers does not give a lot of detail. If you want to know what | ||||
| portion of expenses went to buy food, you could add up just the | ||||
| transactions with (say) "supermarket" in their description. You know how to do this with hledger: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger register desc:supermarket expenses | ||||
| 2014/02/12 trip to the super..  expenses                       $10           $10 | ||||
| ``` | ||||
| 
 | ||||
| But descriptions are irregular, and as you can see we missed the $5 purchase on the following day. | ||||
| 
 | ||||
| Instead, the major "top-level" accounts above are subdivided into subaccounts which can be used | ||||
| in transactions, thereby categorising them in a more structured way. | ||||
| If needed, these subaccounts can be subdivided further. | ||||
| This tree of accounts is called the Chart of Accounts. Here's a simple example | ||||
| where `assets`, `revenue` and `expenses` each have a few subaccounts: | ||||
| 
 | ||||
| ``` | ||||
| assets | ||||
|   checking | ||||
|   cash | ||||
| liabilities | ||||
| equity | ||||
| revenue | ||||
|   business income | ||||
|   gifts received | ||||
| expenses | ||||
|   food | ||||
|   rent | ||||
|   supplies | ||||
| ``` | ||||
| 
 | ||||
| In some organisations and accounting systems (eg, QuickBooks), the | ||||
| tree structure is de-emphasised, so the above is represented more | ||||
| like: | ||||
| 
 | ||||
| ^ Account name ^ Account type ^ | ||||
| | checking     | ASSET        | | ||||
| | cash         | ASSET        | | ||||
| | business income     | REVENUE        | | ||||
| | gifts received     | REVENUE        | | ||||
| | food         | EXPENSE        | | ||||
| | rent         | EXPENSE        | | ||||
| | supplies     | EXPENSE        | | ||||
| 
 | ||||
| In others, the tree structure is encoded as decimal account numbers, something like this: | ||||
| 
 | ||||
| ``` | ||||
| 1000 assets | ||||
| 1100   checking | ||||
| 1200   cash | ||||
| 2000 liabilities | ||||
| 3000 equity | ||||
| 4000 revenue | ||||
| 4100   business income | ||||
| 4200   gifts received | ||||
| 5000 expenses | ||||
| 5100   food | ||||
| 5200   rent | ||||
| 5300   supplies | ||||
| ``` | ||||
| 
 | ||||
| --- | ||||
| ### Subaccounts in hledger | ||||
| 
 | ||||
| With hledger, tree structure is implied by writing account names like `ACCOUNT:SUBACCOUNT`. | ||||
| Try it: edit your journal file and change the account names like so: | ||||
| 
 | ||||
| ``` | ||||
| $ cat ~/.hledger.journal | ||||
| 
 | ||||
| 2014/02/12 trip to the supermarket | ||||
|     expenses:supplies     $10 | ||||
|     assets:checking | ||||
| 
 | ||||
| 2014/02/13 forgot the bread | ||||
|     expenses:food      $5 | ||||
|     assets:cash | ||||
| ``` | ||||
| 
 | ||||
| hledger will infer the chart of accounts from these names, and `balance` will indent subaccounts to show the tree structure: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger balance | ||||
|                 $-15  assets | ||||
|                  $-5    cash | ||||
|                 $-10    checking | ||||
|                  $15  expenses | ||||
|                   $5    food | ||||
|                  $10    supplies | ||||
| -------------------- | ||||
|                    0 | ||||
| ``` | ||||
| 
 | ||||
| For clarity, the common part of the subaccount names is not displayed. | ||||
| You can see the full account names used internally like this: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger balance --flat --empty | ||||
|                 $-15  assets | ||||
|                  $-5  assets:cash | ||||
|                 $-10  assets:checking | ||||
|                  $15  expenses | ||||
|                   $5  expenses:food | ||||
|                  $10  expenses:supplies | ||||
| -------------------- | ||||
|                    0 | ||||
| ``` | ||||
| 
 | ||||
| With `--flat`, the balance command shows full account names without indentation. | ||||
| The `--empty` flag here requests that the accounts with no direct postings of their own be displayed. | ||||
| Normally the balance report omits or elides such "uninteresting" accounts when they don't add much information. | ||||
| (In the default indented view, they are included to clarify the structure.) | ||||
| 
 | ||||
| As you can see, the balance reported for parent accounts includes the | ||||
| balances of any subaccounts (it would also include any postings to the | ||||
| parent account itself.) | ||||
| 
 | ||||
| hledger accepts whatever account names you choose, so you can use as much or as little account hierarchy as you need. | ||||
| Most users have at least two levels of accounts. | ||||
| You can always limit the amount of detail in a balance report with `--depth`: | ||||
| 
 | ||||
| ``` | ||||
| $ hledger balance --depth 1 | ||||
|                 $-15  assets | ||||
|                  $15  expenses | ||||
| -------------------- | ||||
|                    0 | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <!-- | ||||
| 
 | ||||
| ### Transactions | ||||
| 
 | ||||
| A transaction is a movement of money from some account(s) to some | ||||
| other account(s).  There are many common types of transaction.  A | ||||
| purchase is where money moves from an asset account to an expense | ||||
| account.  Eg, buying food. | ||||
| 
 | ||||
| --> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user