392 lines
14 KiB
Text
392 lines
14 KiB
Text
\input texinfo @c -*-texinfo-*-
|
||
@comment $Id: ledger.texi,v 1.5 2003/10/01 21:55:40 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 which commodity. The commodity may be
|
||
any non-numeric string that does not contain a period, comma, forward
|
||
slash or at sign (@@). Here are some valid commodity specifiers:
|
||
|
||
@example
|
||
$20.00 ; twenty US dollars
|
||
20 USD ; the same
|
||
AAPL 40 ; 40 shares of Apple Computer stock
|
||
DM 60 ; 60 Deutsch Mark
|
||
<EFBFBD>50 ; 50 British pounds
|
||
@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<75>qu'll<6C>h
|
||
|
||
As a Bah<61>'<27>, I need to compute Huq<75>qu'll<6C>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<61>'<27>s out there who want to track Huq<75>qu'll<6C>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<EFBFBD>qu'll<6C>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<75>qu'll<6C>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<75>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<75>qu'll<6C>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
|