\input texinfo @c -*-texinfo-*- @comment $Id: ledger.texi,v 1.6 2003/10/01 22:11:23 johnw Exp $ @comment %**start of header @setfilename ledger.info @settitle Ledger Accouting Tool @syncodeindex pg cp @comment %**end of header @dircategory Ledger Accouting Tool @direntry * ledger: (ledger)The Ledger Accouting Tool. @end direntry @titlepage @title Ledger Accouting Tool @author John Wiegley <@email{johnw@@newartisans.com}> @page @vskip 0pt plus 1filll @c @insertcopying @end titlepage @contents @ifnottex @node Top @top Ledger Accouting Tool @c @insertcopying @end ifnottex @chapter Introduction @code{ledger} is an accouting tool that has the chutzpah to exist. It provides not one bell or whistle for the money, and returns the user back to the days before user interfaces were even a twinkle on their father's CRT. What it does do is provide a double-entry accouting ledger with all of the flexibility and muscle of its modern day cousins---without any of the fat. Think of it as the bran muffin of accouting tools. To begin with, you need to start keeping a ledger. This is the basis of all accouting, and if you don't know how to do it, now is the time to learn. The little booklet that comes with your checkbook is a ledger, so we'll describe double-entry accouting in terms of that. A checkbook ledger records debits (subtractions, or withdrawals) and credits (additions, or deposits) with reference to a single account: your checking account. Where the money comes from, and where it goes to, are simply described in the memo field where you write the person or the company's name. The ultimate aim of keeping a checkbook ledger is so you know how much money is available to spend at all times. That is really the aim of all ledgers. What computers add is the ability to walk through all of those transactions and tell you things about your spending habits; let you devise budgets to get control over your spending; squirrel away money into virtual savings account without having to physically move the money around; etc. As you keep your checkbook ledger, you are recording a lot of information about your life and your habits, and sometimes that information can tell you things you aren't even aware of. That is the aim of all good accouting tools. The next step up from a checkbook ledger is a ledger that covers all of your accounts, not just your checking account. In this ledger, you write not only who the money goes to---in the case of a debit---but where the money is coming from. In the checkbook ledger, its assumed that all of the money is coming from your checking account. But in a general ledger, you have to write two-lines: The source and target. There must always be a debit from some account for any credit made to anyone else. This is what is meant by ``double-entry'' accouting. For example, let's say you have a checking account and a brokerage account, and that you can write checks from both of them. Rather than keeping two checkbooks, you decide to use one ledger for both. Once you get the hang of this, you'll be ready to use one ledger for all of your accouting needs, which gets you to the point of this introduction. So in your general ledger, you need to pay Pacific Bell Telephone for your monthly phone bill. The cost is $23.00. In a checkbook ledger, you would write out a line that credits your account with Pacific Bell by $23 as follows: @example 9/29 100 Pacific Bell $23.00 $77.00 @end example Very simple: You've written check #100 for $23 to Pacific Bell, which leaves your balance in checking at $77. But in a general ledger, you need to say where the money is coming from. A general ledger entry would look like this: @example 9/29 100 Pacific Bell $23.00 $223.00 Checking $-23.00 $77.00 @end example What does all of this mean? The first line shows a credit (or payment) to Pacific Bell to the tune of $23.00. Then, because there is no one ``balance'' in a general ledger, we've written in the total balance of your payments to the account ``Pacific Bell''. This was done by looking at the last entry for ``Pacific Bell'' in the general ledger, adding $23.00 to that amount, and writing in the total in the balance column. Secondly, the money is coming from your ``Checking'' account, which means a debit (or withdrawal) of $23.00, which will leave the ending balance in your ``Checking'' account at $77.00. The transaction itself must balance to $0: $23 goes to Pacific Bell, $23 comes from Checking: there is nothing left over to be accounted for. The money has in fact moved from one account to another. This is basis of double-entry accounting: That money never pops out of existence, it is always described as a transaction between accounts---as a flow from one place to another. Keeping a general ledger is the same as keeping two separate ledgers: One for Pacific Bell and one for Checking. In that case, each time you write a credit into one, you write a corresponding debit into the other. This makes it much easier to write in the running balance, since you don't have to go looking back for the last time an account was referenced, but it also means having a lot of ledger books if you deal with multiple accounts. Enter the beauty of a computerized accouting tool. The purpose of @code{ledger} is to make general ledger accouting simple by keeping track of the balances for you. Your only job is to enter credit/debit pairs and make sure they balance. If a transaction does not balance, @code{ledger} will display an error and ignore the transaction.@footnote{In some special cases, it will automatically balance the entry for you.} Your usage of @code{ledger} will have two parts: Keeping the ledger, and using the @code{ledger} tool to provide you with information summaries derived from your ledger's entries. @chapter Keeping a ledger The most important part of accounting is keeping a good ledger. If you have a good ledger, tools can be written to work whatever mathematically tricks you need to better understand your spending patterns. Without a good ledger, no tool, however smart, can help you. The @code{ledger} program aims at making ledger entry as simple as possible. Since it is a command-line tool, it does not provide a user interface for keeping a ledger. If you like, you may use @code{gnucash} to maintain your ledger, in which case the @code{ledger} program will read @code{gnucash}'s data files directly. In that case, read the @code{gnucash} manual now, and skip to the next chapter. If you are not using @code{gnucash}, but a text editor to maintain your ledger, read on. @code{ledger} has been designed to make data entry as simple as possible, by keeping the ledger format easy, and also by automagically determining as much information as possible based on the nature of your entries. For example, you do not need to tell @code{ledger} about the accounts you use. Any time @code{ledger} sees a debit or a credit to an account it knows nothing about, it will create it. If you use a commodity that is new to @code{ledger}, it will create that commodity, and determine its display characteristics (placement of the symbol before or after the amount, display precision, etc) based on how you used the commodity in the transaction. Here is the Pacific Bell example from above, given as a @code{ledger} transaction: @example 9/29 (100) Pacific Bell Expenses:Utilities:Telephone $23.00 Assets:Checking $-23.00 @end example As you can see, it is very similar to what would be written on paper, minus the computed balance totals, and adding in account names that work better with @code{ledger}'s scheme of things. In fact, since @code{ledger} is smart about many things, you don't need to specify the balanced amount, if it is the same as the first line: @example 9/29 (100) Pacific Bell Expenses:Utilities:Telephone $23.00 Assets:Checking @end example For this entry, @code{ledger} will figure out that $-23.00 must come from ``Assets:Checking'' in order to balance the entry. @section Commodities and currencies @code{ledger} makes no assumptions about the commodities you use; it only requires that you specify a commodity. The commodity may be any non-numeric string that does not contain a period, comma, forward slash or at sign (@@). It may appear before or after the amount, although it is assumed that symbols appearing before the amount refer to currencies, while non-joined symbols apearing after the amount refer to commodities. Here are some valid currency and commodity specifiers: @example $20.00 ; currency: twenty US dollars USD 20 ; currency: the same 40 AAPL ; commodity: 40 shares of Apple Computer stock DM 60 ; currency: 60 Deutsch Mark £50 ; currency: 50 British pounds 50e ; currency: 50 Euros (use appropriate symbol) @end example @code{ledger} will examine the first use of any commodity to determine how that commodity should be printed on reports. It pays attention to whether the name of commodity was separated from the amount, whether it came before or after, the precision used in specifying the amount, whether thousand marks were used, etc. This is done so that printing the commodity looks the same as the way you use it. An account may contain multiple commodities, in which case it will have separate totals for each. For example, if your brokage account contains both cash, gold, and several stock quantities, the balance might look like: @example $200.00 100.00 AU AAPL 40 BORL 100 FEQTX 50 Assets:Brokerage @end example This balance report shows how much of each commodity is in your brokerage account. Sometimes, you will want to know the current street value of your balance, and not the commodity totals. For this to happen, you must specify what the current price is for each commodity. The price can be in any commodity, in which case the balance will be computed in terms of that commodity. The usual way to specify prices is with a file of price settings, which might look like this: @example AU=$357.00 AAPL=$37 BORL=$19 FEQTX=$32 @end example Specify the prices file using the @samp{-p} option: @example /home/johnw $ ledger -f ledger.dat -p prices.db balance brokerage @end example Now the balance for your brokerage account will be given in US dollars, since the prices database has specified conversion factors from each commodity into dollars: @example $40880.00 Assets:Brokerage @end example You can convert from any commodity to any other commodity. Let's say you had $5000 in your checking account, and for whatever reason you wanted to know many ounces of gold that would buy. If gold is currently $357 per ounce, then each dollar is worth 1/357 AU: @example /home/johnw $ ledger -f ledger.dat -p "\$=0.00280112 AU" balance checking @end example @example 14.01 AU Assets:Checking @end example $5000 would buy 14 ounces of gold, which becomes the new display commodity since a conversion factor was provided. Commodities conversions can also be chained, up to a depth of 10. Here is a sample prices database that uses chaining: @example AAPL=$15 $=0.00280112 AU AU=300 Euro Euro=DM 0.75 @end example This is a roundabout way of reporting AAPL shares in their Deutsch Mark equivalent. @section Accounts and Inventories Since @code{ledger}'s accounts and commodity system is so flexible, you can have accounts that don't really exist, and use commodities that no one else recognizes. For example, let's say you are buying and selling various items in EverQuest, and want to keep track of them using a ledger. Just add items of whatever quantity you wish into your EverQuest account: @example 9/29 Get some stuff at the Inn Places:Black's Tavern -3 Apples Places:Black's Tavern -5 Steaks EverQuest:Inventory @end example Now your EverQuest:Inventory has 3 apples and 5 steaks in it. The amounts are negative, because you are taking @emph{from} Black's Tavern in order to credit your Inventory account. Note that you don't have to use ``Places:Black's Tavern'' as the source account. You could use ``EverQuest:System'' to represent the fact that you acquired them online. The only purpose for choosing one kind of source account over another is for generate more informative reports later on. The more you know, the better analysis you can perform. If you later sell some of these items to another player, the entry would look like: @example 10/2 Sturm Brightblade EverQuest:Inventory -2 Steaks EverQuest:Inventory 15 Gold @end example Now you've turned 2 steaks into 15 gold, courtesy of your customer, Sturm Brightblade. Note that if you're playing on a system where ``Gold'' is the standard currency, you should use the @samp{-D} flag to tell @code{ledger} that that is the default commodity. @chapter Using @code{ledger} @chapter Computing Huqúqu'lláh As a Bahá'í, I need to compute Huqúqu'lláh on some of my assets. The exact details of this matter are rather complex, so if you have any interest, I encourage you to do research on the Web. For any fellow Bahá'ís out there who want to track Huqúqu'lláh, the @code{ledger} tool makes this extraordinarily easy. Just too easy, in fact. Here's all you have to do: If an expense is exempt from Huqúqu'lláh---a ``necessary'' expense---put an exclamation mark befroe the account name: @example 2002.12.31 Rent !Expenses:Rent $450.00 Assets:Checking $-450.00 @end example Even easier than that, simply put a list of regular expressions that match the categories you consider exempt in a file called @file{.huquq}, and the special marking will be done for you. Here is the file I use: @example ^Income: ^Retirement: ^Expenses:Rent ^Expenses:Taxes @end example When you're ready to pay Huqúqu'lláh, just write the check to the account ``Huququ'llah'' (no accents, one apostrophe): @example 2003.01.20 * (101) Baha'i Huququ'llah Trust Huququ'llah $1,000.00 Assets:Checking $-1,000.00 @end example That's it. To see how much Huqúq is currently owed based on your ledger data, type: @example /home/johnw $ ledger -f ledger.dat balance huquq @end example Not sure if you should pay yet? Go to your newspaper, or look on the Web, and find the current price of gold per ounce. Then pass this figure to the @samp{-G} option. If it were $357.10, you would use: @example /home/johnw $ ledger -f ledger.dat balance -G 357.10 huquq @end example Now your balance report will be given in mi@underline{th}qáls of gold, not dollars. If the balance on your Huqúqu'lláh account is more than -19 mi@underline{th}qáls (remember, it is a liability account, so amounts are negative), then get out your checkbook. @bye