summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/Doxyfile275
-rw-r--r--docs/Manual.mellel/main.xml2
-rw-r--r--docs/date-examples.txt42
-rw-r--r--docs/ledger.info3640
-rw-r--r--docs/ledger.texi3960
-rw-r--r--docs/sample.dat26
6 files changed, 0 insertions, 7945 deletions
diff --git a/docs/Doxyfile b/docs/Doxyfile
deleted file mode 100644
index a03b54d4..00000000
--- a/docs/Doxyfile
+++ /dev/null
@@ -1,275 +0,0 @@
-# Doxyfile 1.5.1
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = Ledger
-PROJECT_NUMBER = 3.0
-OUTPUT_DIRECTORY = %builddir%/docs
-CREATE_SUBDIRS = NO
-OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF = "The $name class" \
- "The $name widget" \
- "The $name file" \
- is \
- provides \
- specifies \
- contains \
- represents \
- a \
- an \
- the
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = YES
-STRIP_FROM_PATH = /Applications/Copied/
-STRIP_FROM_INC_PATH =
-SHORT_NAMES = NO
-JAVADOC_AUTOBRIEF = NO
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
-INHERIT_DOCS = YES
-SEPARATE_MEMBER_PAGES = NO
-TAB_SIZE = 8
-ALIASES =
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-BUILTIN_STL_SUPPORT = YES
-DISTRIBUTE_GROUP_DOC = NO
-SUBGROUPING = YES
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL = NO
-EXTRACT_PRIVATE = NO
-EXTRACT_STATIC = NO
-EXTRACT_LOCAL_CLASSES = YES
-EXTRACT_LOCAL_METHODS = NO
-HIDE_UNDOC_MEMBERS = YES
-HIDE_UNDOC_CLASSES = YES
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-INTERNAL_DOCS = NO
-CASE_SENSE_NAMES = NO
-HIDE_SCOPE_NAMES = NO
-SHOW_INCLUDE_FILES = YES
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-SORT_BRIEF_DOCS = NO
-SORT_BY_SCOPE_NAME = NO
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
-MAX_INITIALIZER_LINES = 30
-SHOW_USED_FILES = YES
-SHOW_DIRECTORIES = NO
-FILE_VERSION_FILTER =
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_NO_PARAMDOC = NO
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = %srcdir%
-FILE_PATTERNS = *.c \
- *.cc \
- *.cxx \
- *.cpp \
- *.c++ \
- *.d \
- *.java \
- *.ii \
- *.ixx \
- *.ipp \
- *.i++ \
- *.inl \
- *.h \
- *.hh \
- *.hxx \
- *.hpp \
- *.h++ \
- *.idl \
- *.odl \
- *.cs \
- *.php \
- *.php3 \
- *.inc \
- *.m \
- *.mm \
- *.dox \
- *.py \
- *.C \
- *.CC \
- *.C++ \
- *.II \
- *.I++ \
- *.H \
- *.HH \
- *.H++ \
- *.CS \
- *.PHP \
- *.PHP3 \
- *.M \
- *.MM \
- *.PY
-RECURSIVE = NO
-EXCLUDE =
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS = *
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
-FILTER_SOURCE_FILES = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = YES
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-REFERENCES_LINK_SOURCE = YES
-USE_HTAGS = NO
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = NO
-COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT = html
-HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
-CHM_FILE =
-HHC_LOCATION =
-GENERATE_CHI = NO
-BINARY_TOC = NO
-TOC_EXPAND = NO
-DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = YES
-TREEVIEW_WIDTH = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = YES
-LATEX_OUTPUT = latex
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = usletter
-EXTRA_PACKAGES =
-LATEX_HEADER =
-PDF_HYPERLINKS = YES
-USE_PDFLATEX = YES
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT = rtf
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT = man
-MAN_EXTENSION = .3
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = NO
-XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
-XML_PROGRAMLISTING = YES
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
-SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-PERL_PATH = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = YES
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-GROUP_GRAPHS = YES
-UML_LOOK = YES
-TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-CALLER_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DIRECTORY_GRAPH = YES
-DOT_IMAGE_FORMAT = png
-DOT_PATH = /Applications/Copied/Doxygen.app/Contents/Resources/dot
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 1000
-DOT_TRANSPARENT = NO
-DOT_MULTI_TARGETS = NO
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
diff --git a/docs/Manual.mellel/main.xml b/docs/Manual.mellel/main.xml
deleted file mode 100644
index 10acf8fe..00000000
--- a/docs/Manual.mellel/main.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<archive creator='com.redlex.mellel' writer-version='13' compatibility-version='10'><pooled-objects><section-style ref='ss-0'><name>Default (1 column)</name><unique-id>ERSS-26967d18-8242-42d9-a231-f14908f85583</unique-id><column-count value='1'/><balance-columns value='yes'/><gutter-width value='11'/><gutter-line-type value='none'/><gutter-line-color type='calibrated-white' white='0' alpha='1'/><gutter-line-width value='1'/><gutter-line-top value='0'/><gutter-line-bottom value='0'/><background-color><value type='calibrated-white' white='1' alpha='1'/><opaque value='no'/></background-color><space-above-column value='0'/></section-style><section-style ref='ss-1'><name>2 Columns</name><unique-id>ERSS-00ca23ce-d93f-433a-8725-ef091011e6fd</unique-id><column-count value='2'/><balance-columns value='yes'/><gutter-width value='14.40000057220459'/><gutter-line-type value='solid'/><gutter-line-color type='calibrated-white' white='0' alpha='1'/><gutter-line-width value='0.5'/><gutter-line-top value='5'/><gutter-line-bottom value='5'/><background-color><value type='calibrated-white' white='1' alpha='1'/><opaque value='no'/></background-color><space-above-column value='0'/></section-style><section-style ref='ss-2'><name>3 Columns</name><unique-id>ERSS-776d85db-61b6-4109-b53f-0187642c4d42</unique-id><column-count value='3'/><balance-columns value='yes'/><gutter-width value='10.800000190734863'/><gutter-line-type value='none'/><gutter-line-color type='calibrated-white' white='0' alpha='1'/><gutter-line-width value='0.5'/><gutter-line-top value='5'/><gutter-line-bottom value='5'/><background-color><value type='calibrated-white' white='1' alpha='1'/><opaque value='no'/></background-color><space-above-column value='0'/></section-style><section-style ref='ss-3'><name>3 Columns (background)</name><unique-id>ERSS-fd7d57d7-b3a6-4823-9aa7-845e6243d3b8</unique-id><column-count value='3'/><balance-columns value='yes'/><gutter-width value='10.800000190734863'/><gutter-line-type value='none'/><gutter-line-color type='calibrated-white' white='0' alpha='1'/><gutter-line-width value='0.5'/><gutter-line-top value='5'/><gutter-line-bottom value='5'/><background-color><value type='calibrated-rgb' red='0.99301600456237793' green='1' blue='0.62362498044967651' alpha='1'/><opaque value='yes'/></background-color><space-above-column value='0'/></section-style><character-style ref='cs-0'><name>Title</name><shortcut>3</shortcut><unique-id>ERCS-535e8429-c441-4876-b588-0728feeecfb2</unique-id><variations><variation><line-type value='none'/><stroke-type value='none'/><secondary-font-script value='none'/><case-type value='small-caps'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='24'/><line-stroke-weight type='relative' value='100'/></variation><variation/><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation/><variation><line-type value='under'/></variation><variation/><variation/><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-1'><name>Heading</name><shortcut>4</shortcut><unique-id>ERCS-9251b4c9-d4f3-4df9-b0c5-68d0d27f34bb</unique-id><variations><variation><line-type value='none'/><stroke-type value='none'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='137.5'/><language value='Farsi'/><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font><opentype><discretionary-ligatures/><titling-alternates/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='16'/><line-stroke-weight type='relative' value='100'/></variation><variation/><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation/><variation><line-type value='under'/></variation><variation/><variation><main-font-size value='14'/></variation><variation><main-font-size value='14'/><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-2'><name>Header/footer</name><shortcut/><unique-id>ERCS-e6ef5c8c-cc64-4a1d-9e68-2d4dff765309</unique-id><variations><variation><main-font-size value='11'/><stroke-type value='none'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><line-type value='none'/><line-stroke-weight type='relative' value='100'/></variation><variation><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation><main-font-size value='10'/></variation><variation><main-font-size value='10'/><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-3'><name>Body</name><shortcut/><unique-id>ERCS-736c2800-45c1-4637-9f5c-5234175a5cdc</unique-id><variations><variation><ligatures value='yes'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Helvetica Neue</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><background-type value='none'/><main-font-size value='12'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><line-type value='none'/><stroke-type value='none'/></variation><variation><main-font><font-family>Helvetica Neue</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Helvetica Neue</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Helvetica Neue</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation><main-font-size value='11'/></variation><variation><main-font-size value='11'/><main-font><font-family>Helvetica Neue</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-4'><name>Regular</name><shortcut>1</shortcut><unique-id>ERCS-520af7d0-14e9-4bc7-9b4b-def9cb71ee51</unique-id><variations><variation><background-type value='none'/><stroke-type value='none'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='133'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype><discretionary-ligatures/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><main-font-size value='12'/><line-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><ligatures value='yes'/><line-stroke-weight type='relative' value='100'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-5'><name>Sub-heading</name><shortcut>5</shortcut><unique-id>ERCS-55328100-7846-47e1-a585-e7b3786f98bc</unique-id><variations><variation><line-type value='none'/><stroke-type value='none'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='128.57142639160156'/><language value='Farsi'/><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font><opentype><discretionary-ligatures/><titling-alternates/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='14'/><line-stroke-weight type='relative' value='100'/></variation><variation><main-font-size value='12'/></variation><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation/><variation><line-type value='under'/></variation><variation/><variation><main-font-size value='12'/></variation><variation><main-font-size value='12'/><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-6'><name>-</name><shortcut/><unique-id>ERCS-f5c8396d-a39e-4572-8ff2-c96fc49a732d</unique-id><variations><variation><line-type value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><background-type value='none'/><main-font-size value='12'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><ligatures value='yes'/><stroke-type value='none'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-7'><name>Author</name><shortcut/><unique-id>ERCS-14083e28-2b71-4152-819c-a3275ba3148b</unique-id><variations><variation><position value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><line-type value='none'/><baseline-shift value='0'/><main-font-size value='18'/><kashida value='yes'/><background-type value='none'/><stroke-type value='none'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-8'><name>Quotation</name><shortcut/><unique-id>ERCS-67ffcc5d-db4c-47bc-94e9-d735735063bd</unique-id><variations><variation><line-type value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='133'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font><opentype><discretionary-ligatures/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='12'/><stroke-type value='none'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-9'><name>Note text</name><shortcut>6</shortcut><unique-id>ERCS-4a3b6e47-1a2e-4621-bd3c-84653d66704e</unique-id><variations><variation><line-type value='none'/><stroke-type value='none'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='127'/><language value='Farsi'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype><discretionary-ligatures/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='11'/><line-stroke-weight type='relative' value='100'/></variation><variation><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation/><variation><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-10'><name>Note text small</name><shortcut>7</shortcut><unique-id>ERCS-38a2863b-6d51-48b3-9286-075760d73df8</unique-id><variations><variation><main-font-size value='10'/><stroke-type value='none'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><line-type value='none'/><line-stroke-weight type='relative' value='100'/></variation><variation><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation><main-font-size value='9'/></variation><variation><main-font-size value='9'/><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-11'><name>Citation</name><shortcut/><unique-id>ERCS-95056148-2573-4a6c-8535-29a54aa45ea5</unique-id><variations><variation><line-type value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='127'/><language value='Farsi'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><kashida value='yes'/><main-font-size value='11'/><position value='none'/><baseline-shift value='0'/><stroke-type value='none'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-12'><name>Numbering</name><shortcut/><unique-id>ERCS-736d8573-94d3-45f1-b2d0-b51dc0e2d54f</unique-id><variations><variation><line-type value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Courier New</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><background-type value='none'/><main-font-size value='12'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><ligatures value='yes'/><stroke-type value='none'/></variation><variation><main-font><font-family>Courier New</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Courier New</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Courier New</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation><main-font-size value='11'/></variation><variation><main-font-size value='11'/><main-font><font-family>Courier New</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><character-style ref='cs-13'><name>Foreign</name><shortcut>2</shortcut><unique-id>ERCS-44143335-80f4-4274-ab18-d3babcd943fa</unique-id><variations><variation><line-type value='none'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='arabic'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='133'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font><opentype><discretionary-ligatures/><contextual-alternates/></opentype><secondary-font><font-family>Scheherazade</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><main-font-size value='12'/><stroke-type value='none'/></variation><variation/><variation/><variation/><variation/><variation/><variation/><variation/></variations></character-style><character-style ref='cs-14'><name>Body</name><shortcut/><unique-id>ERCS-736c2800-45c1-4637-9f5c-5234175a5cdc</unique-id><variations><variation><main-font-size value='12'/><line-stroke-weight type='relative' value='100'/><secondary-font-script value='none'/><case-type value='none'/><char-color type='calibrated-white' white='0' alpha='1'/><stroke-weight type='relative' value='100'/><background-color type='calibrated-white' white='1' alpha='1'/><line-stroke-color type='calibrated-white' white='0' alpha='1'/><direction-override value='default'/><stroke-color type='calibrated-white' white='0' alpha='1'/><secondary-font-scale value='100'/><language value='None'/><main-font><font-family>Times</font-family><font-face>Regular</font-face></main-font><opentype/><secondary-font><font-family>Lucida Grande</font-family><font-face>Regular</font-face></secondary-font><fill-type value='solid'/><line-stroke-type value='none'/><ligatures value='yes'/><line-type value='none'/><background-type value='none'/><position value='none'/><baseline-shift value='0'/><kashida value='yes'/><stroke-type value='none'/></variation><variation><main-font><font-family>Times</font-family><font-face>Bold</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation><variation><main-font><font-family>Times</font-family><font-face>Bold Italic</font-face></main-font></variation><variation><line-type value='under'/></variation><variation><line-type value='under'/><char-color type='calibrated-rgb' red='0' green='0' blue='0.9960780143737793' alpha='1'/></variation><variation><main-font-size value='11'/></variation><variation><main-font-size value='11'/><main-font><font-family>Times</font-family><font-face>Italic</font-face></main-font></variation></variations></character-style><list-style ref='ls-0'><name>Bullet</name><unique-id>ERLS-7b5d0a7d-507e-47a7-b6a3-2428b0a45211</unique-id><levels><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='9'/><indent-pos value='9'/><symbol-pos value='0'/><symbol-type value='bullet'/><symbol-format-type value='none'/><symbol-character-attributes><character-style>cs-14</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes></levels></list-style><list-style ref='ls-1'><name>Harvard</name><unique-id>ERLS-1003053d-3f40-420d-bfdb-852df3437125</unique-id><levels><level-attributes><margin-pos value='24'/><indent-pos value='24'/><symbol-pos value='0'/><symbol-type value='roman-caps'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='latin-caps'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='lain-small'/><symbol-format-type value='add-round-brace'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='24'/><indent-pos value='24'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='wrap-round-braces'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='lain-small'/><symbol-format-type value='wrap-round-braces'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='roman-small'/><symbol-format-type value='add-round-brace'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='24'/><indent-pos value='24'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='wrap-round-braces'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='24'/><indent-pos value='24'/><symbol-pos value='0'/><symbol-type value='lain-small'/><symbol-format-type value='wrap-round-braces'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes></levels></list-style><list-style ref='ls-2'><name>Numbered</name><unique-id>ERLS-9361f404-031b-43f2-8474-9f5206842e4b</unique-id><levels><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes><level-attributes><margin-pos value='18'/><indent-pos value='18'/><symbol-pos value='0'/><symbol-type value='arabic'/><symbol-format-type value='add-dot'/><symbol-character-attributes><character-style>cs-4</character-style><character-style-variation value='base'/></symbol-character-attributes></level-attributes></levels></list-style><paragraph-style ref='ps-0'><name>Title</name><unique-id>ERPS-f0aad8c3-523e-4b21-b0f3-f81a31dd78a0</unique-id><shortcut>3</shortcut><alignment value='center'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='24'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-0</associated-character-style><next-style-name>Regular</next-style-name><keep-lines-together value='no'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='2'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-1'><name>Heading</name><unique-id>ERPS-9d6aa8a8-2564-48d2-891c-94e640504a4a</unique-id><shortcut>4</shortcut><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='11.519999504089355'/><space-below value='8.6399993896484375'/><space-above-top value='yes'/><associated-character-style>cs-1</associated-character-style><next-style-name>First paragraph</next-style-name><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='2'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-2'><name>Header/footer</name><unique-id>ERPS-ed548d9d-8344-4c9e-8219-57ded150cd3e</unique-id><shortcut/><alignment value='center'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-2</associated-character-style><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-3'><name>Body</name><unique-id>ERPS-28555d53-1b0d-492e-ac18-82c87a7a4c1d</unique-id><shortcut>2</shortcut><alignment value='justify'/><margins start='18' end='18' indent='18'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='fixed' value='16'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-4</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='yes'/><hyphenation-dictionary-name>US English</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-4'><name>ToC style</name><unique-id>ERPS-6f941e4a-ce57-45f0-a913-8c2a88afc806</unique-id><shortcut/><alignment value='start'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='indent' pos='5.6692914962768555' identi='37'/><tab-stop type='indent' pos='11.338582992553711' identi='38'/><tab-stop type='indent' pos='17.007875442504883' identi='39'/><tab-stop type='indent' pos='22.677165985107422' identi='40'/><tab-stop type='indent' pos='28.346456527709961' identi='41'/><tab-stop type='indent' pos='34.015750885009766' identi='42'/><tab-stop type='indent' pos='39.685039520263672' identi='43'/><tab-stop type='indent' pos='45.354331970214844' identi='44'/><tab-stop type='indent' pos='51.02362060546875' identi='45'/><tab-stop type='decimal' pos='472.96878051757812' align-char='.' leader='dot' identi='46'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-4</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-5'><name>Sub-heading</name><unique-id>ERPS-ee82c3cf-d1fe-48ed-b963-0a6f5d020d32</unique-id><shortcut>5</shortcut><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='1.4399999380111694'/><space-below value='5.7599997520446777'/><space-above-top value='yes'/><associated-character-style>cs-5</associated-character-style><next-style-name>First paragraph</next-style-name><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='2'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-6'><name>First paragraph</name><unique-id>ERPS-06906f45-c6e2-44e0-aa4f-fca7f91d6731</unique-id><shortcut/><alignment value='justify'/><margins start='18' end='18' indent='18'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='16'/></tab-array></tab-stops><line-spacing type='fixed' value='16'/><space-above value='0'/><space-below value='4.3199996948242188'/><space-above-top value='yes'/><associated-character-style>cs-4</associated-character-style><next-style-name>Regular</next-style-name><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='yes'/><hyphenation-dictionary-name>US English</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-7'><name>Regular</name><unique-id>ERPS-1ed36d81-c0eb-442e-8960-9b3e8b8dd631</unique-id><shortcut>1</shortcut><alignment value='justify'/><margins start='18' end='18' indent='35.990001678466797'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='16'/></tab-array></tab-stops><line-spacing type='fixed' value='16'/><space-above value='0'/><space-below value='4.3199996948242188'/><space-above-top value='no'/><associated-character-style>cs-4</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='yes'/><hyphenation-dictionary-name>US English</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-8'><name>-</name><unique-id>ERPS-c995d152-df27-4484-9bee-89856d4f723e</unique-id><shortcut/><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array/></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-9'><name>Date</name><unique-id>ERPS-0bdb60bb-4e52-478b-a502-73a1bb9fbff9</unique-id><shortcut/><alignment value='center'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array/></tab-stops><line-spacing type='auto' value='1'/><space-above value='18'/><space-below value='0'/><space-above-top value='no'/><associated-character-style>cs-4</associated-character-style><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-10'><name>Author</name><unique-id>ERPS-36d4387e-023e-45a0-a061-09eea2fcc36d</unique-id><shortcut/><alignment value='center'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array/></tab-stops><line-spacing type='auto' value='1'/><space-above value='10.800000190734863'/><space-below value='10.800000190734863'/><space-above-top value='no'/><associated-character-style>cs-7</associated-character-style><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-11'><name>Quotation</name><unique-id>ERPS-7e09316a-d4bb-400f-b0d1-f9d7b1791064</unique-id><shortcut/><alignment value='justify'/><margins start='36' end='36' indent='36'/><tab-stops><tab-array/></tab-stops><line-spacing type='fixed' value='16'/><space-above value='0'/><space-below value='4.3199996948242188'/><space-above-top value='no'/><associated-character-style>cs-8</associated-character-style><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='yes'/><hyphenation-dictionary-name>UK English</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-12'><name>Note text</name><unique-id>ERPS-818e9562-0f32-4b31-b0b0-13ad8a366c82</unique-id><shortcut>6</shortcut><alignment value='start'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='indent' pos='18' identi='18'/><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='54' identi='17'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='fixed' value='15'/><space-above value='0'/><space-below value='10'/><space-above-top value='yes'/><associated-character-style>cs-9</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name>Basque</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-13'><name>Note text small</name><unique-id>ERPS-e10b4f4a-8db0-4d77-9dba-e2ba460c32df</unique-id><shortcut>7</shortcut><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='indent' pos='18' identi='18'/><tab-stop type='indent' pos='36' identi='19'/><tab-stop type='indent' pos='54' identi='20'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='10'/><space-above-top value='yes'/><associated-character-style>cs-10</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-14'><name>Subnote text</name><unique-id>ERPS-0cd6daa8-7741-4e82-8e42-451a99e2277c</unique-id><shortcut/><alignment value='start'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='indent' pos='18' identi='18'/><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='54' identi='17'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='fixed' value='15'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-9</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name>Basque</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-15'><name>Citation</name><unique-id>ERPS-7ea91a3a-546c-4eb0-a705-0cdc90f6e4bd</unique-id><shortcut/><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array/></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='0'/><space-above-top value='no'/><keep-lines-together value='no'/><keep-line-together-type value='all'/><keep-first-lines-count value='1'/><keep-last-lines-count value='1'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-16'><name>Lists</name><unique-id>ERPS-55837069-b914-4a83-90e2-23440184fca8</unique-id><shortcut/><alignment value='justify'/><margins start='35.990001678466797' end='36' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='fixed' value='16'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-4</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='yes'/><hyphenation-dictionary-name>US English</hyphenation-dictionary-name><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><paragraph-style ref='ps-17'><name>Numbering</name><unique-id>ERPS-492ff9a0-ed2e-4d8b-b603-3c0397990b9c</unique-id><shortcut/><alignment value='justify'/><margins start='0' end='0' indent='0'/><tab-stops><tab-array><tab-stop type='regular' pos='18' identi='17'/><tab-stop type='regular' pos='36' identi='1'/><tab-stop type='regular' pos='54' identi='16'/><tab-stop type='regular' pos='72' identi='2'/><tab-stop type='regular' pos='90' identi='18'/><tab-stop type='regular' pos='108' identi='3'/><tab-stop type='regular' pos='126' identi='19'/><tab-stop type='regular' pos='144' identi='4'/><tab-stop type='regular' pos='162' identi='20'/><tab-stop type='regular' pos='180' identi='5'/><tab-stop type='regular' pos='216' identi='6'/><tab-stop type='regular' pos='252' identi='7'/><tab-stop type='regular' pos='288' identi='8'/><tab-stop type='regular' pos='324' identi='9'/><tab-stop type='regular' pos='360' identi='10'/><tab-stop type='regular' pos='396' identi='11'/><tab-stop type='regular' pos='432' identi='12'/></tab-array></tab-stops><line-spacing type='auto' value='1'/><space-above value='0'/><space-below value='0'/><space-above-top value='yes'/><associated-character-style>cs-12</associated-character-style><keep-lines-together value='yes'/><keep-line-together-type value='separate-first-last'/><keep-first-lines-count value='2'/><keep-last-lines-count value='2'/><keep-next-lines-count value='0'/><hyphenate value='no'/><hyphenation-dictionary-name/><use-custom-min-values value='no'/><custom-min-word-length value='5'/><custom-min-before-hyphen value='2'/><custom-min-after-hyphen value='2'/><hyphenation-zone value='0'/><hyphenation-limit value='3'/></paragraph-style><page-style ref='pgs-0'><name>Regular</name><unique-id>ERAS-d360619d-75dc-46eb-a9d0-7a824944b0c2</unique-id><page-style-type value='any-page'/><page-number-type value='arabic'/><first-header-visible value='no'/><first-footer-visible value='no'/><odd-attributes><page-color type='calibrated-white' white='1' alpha='1'/><header-visible value='no'/><footer-visible value='no'/><header-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'>- <page-number/> -<line-break/></c></p></header-text><footer-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'><line-break/>- <page-number/> -</c></p></footer-text><header-height value='26.8621826171875'/><footer-height value='26.8621826171875'/></odd-attributes><even-attributes><page-color type='calibrated-white' white='1' alpha='1'/><header-visible value='no'/><footer-visible value='no'/><header-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'>- <page-number/> -<line-break/></c></p></header-text><footer-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'><line-break/>- <page-number/> -</c></p></footer-text><header-height value='26.86199951171875'/><footer-height value='26.86199951171875'/></even-attributes></page-style><page-style ref='pgs-1'><name>Regular &amp; page</name><unique-id>ERAS-4c776385-67d3-4e05-a92c-4023a8163fe0</unique-id><page-style-type value='even-odd'/><page-number-type value='arabic'/><first-header-visible value='yes'/><first-footer-visible value='yes'/><odd-attributes><page-color type='calibrated-white' white='1' alpha='1'/><header-visible value='yes'/><footer-visible value='yes'/><header-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'>- <page-number/> -<line-break/></c></p></header-text><footer-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'><line-break/>- <page-number/> -</c></p></footer-text><header-height value='26.8621826171875'/><footer-height value='26.8621826171875'/></odd-attributes><even-attributes><page-color type='calibrated-white' white='1' alpha='1'/><header-visible value='yes'/><footer-visible value='yes'/><header-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'>- <page-number/> -<line-break/></c></p></header-text><footer-text><p style='ps-2' dir='ltr'><c style='cs-2' var='b'><line-break/>- <page-number/> -</c></p></footer-text><header-height value='26.86199951171875'/><footer-height value='26.86199951171875'/></even-attributes></page-style><note-style ref='ns-0'><name>Footnote</name><unique-id>ERNS-d33725d6-f107-4569-9687-bc596de48d54</unique-id><reference-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='none'/><note-symbol-char-attributes><position value='superscript'/></note-symbol-char-attributes></reference-symbol-attributes><note-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='add-dot'/><note-symbol-char-attributes><character-style>cs-9</character-style></note-symbol-char-attributes></note-symbol-attributes><note-symbol-tab value='yes'/><note-text-attributes><paragraph-style>ps-12</paragraph-style><character-style>cs-9</character-style></note-text-attributes><note-position value='bottom-of-column'/><note-splitting-permission value='anywhere'/><indexing-type value='serial'/><may-separate value='no'/><space-above-separator value='14'/><space-below-separator value='10'/><separator-placment value='left'/><separator-line-type value='solid'/><separator-color type='calibrated-white' white='0' alpha='1'/><separator-weight value='1'/><separator-coverage value='30'/></note-style><note-style ref='ns-1'><name>Footnote small</name><unique-id>ERNS-63ec112a-e8ab-4335-b603-0bf05f314129</unique-id><reference-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='none'/><note-symbol-char-attributes><position value='superscript'/></note-symbol-char-attributes></reference-symbol-attributes><note-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='add-dot'/><note-symbol-char-attributes><character-style>cs-10</character-style></note-symbol-char-attributes></note-symbol-attributes><note-symbol-tab value='yes'/><note-text-attributes><paragraph-style>ps-13</paragraph-style><character-style>cs-10</character-style></note-text-attributes><note-position value='bottom-of-column'/><note-splitting-permission value='anywhere'/><indexing-type value='serial'/><may-separate value='no'/><space-above-separator value='14'/><space-below-separator value='10'/><separator-placment value='left'/><separator-line-type value='solid'/><separator-color type='calibrated-white' white='0' alpha='1'/><separator-weight value='1'/><separator-coverage value='30'/></note-style><note-style ref='ns-2'><name>Endnote</name><unique-id>ERNS-bab0d83e-db56-4616-b2eb-a5f7e796f5c3</unique-id><reference-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='none'/><note-symbol-char-attributes><position value='superscript'/></note-symbol-char-attributes></reference-symbol-attributes><note-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='add-dot'/><note-symbol-char-attributes><character-style>cs-9</character-style></note-symbol-char-attributes></note-symbol-attributes><note-symbol-tab value='yes'/><note-text-attributes><paragraph-style>ps-12</paragraph-style><character-style>cs-9</character-style></note-text-attributes><note-position value='end-of-document'/><note-splitting-permission value='anywhere'/><indexing-type value='serial'/><may-separate value='no'/><space-above-separator value='0'/><space-below-separator value='10'/><separator-placment value='none'/><separator-line-type value='solid'/><separator-color type='calibrated-white' white='0' alpha='1'/><separator-weight value='1'/><separator-coverage value='30'/></note-style><note-style ref='ns-3'><name>Endnote small</name><unique-id>ERNS-50755ab9-af3d-486f-a316-b6fc8026a2f0</unique-id><reference-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='none'/><note-symbol-char-attributes><position value='superscript'/></note-symbol-char-attributes></reference-symbol-attributes><note-symbol-attributes><note-symbol-type value='arabic'/><note-symbol-fromat value='add-dot'/><note-symbol-char-attributes><character-style>cs-10</character-style></note-symbol-char-attributes></note-symbol-attributes><note-symbol-tab value='yes'/><note-text-attributes><paragraph-style>ps-13</paragraph-style><character-style>cs-10</character-style></note-text-attributes><note-position value='end-of-document'/><note-splitting-permission value='anywhere'/><indexing-type value='serial'/><may-separate value='no'/><space-above-separator value='0'/><space-below-separator value='0'/><separator-placment value='none'/><separator-line-type value='solid'/><separator-color type='calibrated-white' white='0' alpha='1'/><separator-weight value='1'/><separator-coverage value='30'/></note-style><note-stream ref='nsm-0'><name>Footnote</name><unique-id>note stream:-1191101285</unique-id><shortcut>N</shortcut><start-at value='1'/><attributes><note-style>ns-2</note-style></attributes></note-stream></pooled-objects><root><new-selection><anchor value='55'/><ending value='55'/><leading-edge value='yes'/></new-selection><document-setup><dictionary><screen-background-color type='calibrated-white' white='1' alpha='1'/><inner-margin value='72'/><outer-margin value='72'/><facing-pages value='no'/><binding-direction value='ltr'/><top-margin value='72'/><use-screen-background-color value='no'/><bottom-margin value='72'/></dictionary></document-setup><outline-settings><outline-open value='yes'/><outline-view-width value='150'/><outline-state><display-tags-separately value='yes'/><disclosure-states><element value='yes'/><element value='yes'/><element value='yes'/><element value='yes'/><element value='yes'/><element value='yes'/><element value='yes'/></disclosure-states><tag-dictionaries><element><tag-level value='-1'/><tag-tree-open value='yes'/><tag-index value='-1'/></element><element><tag-level value='0'/><tag-tree-open value='yes'/><tag-index value='1'/></element><element><tag-level value='0'/><tag-tree-open value='yes'/><tag-index value='2'/></element><element><tag-level value='0'/><tag-tree-open value='yes'/><tag-index value='3'/></element><element><tag-level value='0'/><tag-tree-open value='yes'/><tag-index value='4'/></element><element><tag-level value='0'/><tag-tree-open value='yes'/><tag-index value='5'/></element></tag-dictionaries></outline-state></outline-settings><misc-settings><print-markings value='no'/><doc-export-markings value='no'/><auto-title-sheet-rtl value='no'/><rtf-export-markings value='no'/></misc-settings><marker-names><element>Banana</element><element>Salmon</element><element>Cantaloupe</element><element>Lime</element><element>Sky</element><element>Light Lavender</element><element>Magnesium</element><element>Midnight</element></marker-names><print-info><data>040B73747265616D747970656481E803840140848484134E534D757461626C6544696374696F6E6172790084840C4E5344696374696F6E617279008484084E534F626A65637400858401691B92848484084E53537472696E67019584012B104E534A6F62446973706F736974696F6E86928497980F4E535072696E7453706F6F6C4A6F6286928497980B4E53506170657253697A658692848484074E5356616C7565009584012A84840C7B5F4E5353697A653D66667D9B81640281180386928497980D4E534D757374436F6C6C6174658692848484084E534E756D626572009B9A848401639D018692849798144E53566572746963616C506167696E6174696F6E8692849F9A8496960086928497980D4E535072696E7465724E616D658692849798184550534F4E205374796C75732050686F746F20525835303086928497980B4E535072696E7454696D658692848484064E5344617465009584016483000000DCC0632DC286928497980D4E5350616765734163726F73738692849F9AA396018692849798144E53566572746963616C6C7943656E74657265648692AA928497980F4E535072696E74416C6C50616765738692AA928497980B4E5350617065724E616D658692849798096E612D6C657474657286928497980F4E535363616C696E67466163746F728692849F9A84840166A0018692849798084E53436F706965738692AA92849798094E535072696E7465728692848484094E535072696E746572009592A58692849798104E535072696E7450726F7465637465648692849F9AA09D008692849798154E53486F72697A6F6E616C506167696E6174696F6E8692849F9AA396028692849798164E53486F72697A6F6E74616C6C7943656E74657265648692AA928497980B4E534661784E756D62657286928497980086928497980E4E53426F74746F6D4D617267696E8692849F9AB1A00086928497980B4E53546F704D617267696E8692849F9AB1A00086928497980B4E534669727374506167658692AA928497980A4E534C617374506167658692849F9AA39682FFFFFF7F86928497980C4E534C6566744D617267696E8692849F9AB1A0008692849798184E5344657461696C65644572726F725265706F7274696E678692B7928497980D4E5352696768744D617267696E8692849F9AB1A00086928497980A4E53536176655061746886928497980086928497980B4E535061676573446F776E8692AA928497980D4E534F7269656E746174696F6E8692A286</data></print-info><document-info><variables><variable>Notes on the Seven Valleys</variable><variable>&lt;subject&gt;</variable><variable>John Wiegley</variable><variable>jwiegley@gmail.com</variable><variable>http://johnwiegley.com</variable><variable>&lt;variable#6&gt;</variable><variable>&lt;variable#7&gt;</variable><variable>&lt;variable#8&gt;</variable><variable>&lt;variable#9&gt;</variable><variable>Address Line 1</variable><variable>Address Line 2</variable><variable>Address Line 3</variable><variable>Ret. Add. Ln 1</variable><variable>Ret. Add. Ln 2</variable><variable>Ret. Add. Ln 3</variable><variable>&lt;variable#16&gt;</variable><variable>&lt;variable#17&gt;</variable><variable>&lt;variable#18&gt;</variable><variable>&lt;variable#19&gt;</variable><variable>&lt;variable#20&gt;</variable></variables><keywords>mysticism sufism bahai valleys</keywords><category>&lt;category&gt;</category><comments>&lt;comments&gt;</comments></document-info><bibliography-should-generate-bibliography value='yes'/><text-model version='2'><document-text><page-range style='pgs-0'><section style='ss-0' column-order='ltr'><p style='ps-0' dir='ltr'><c style='cs-0'>Ledger</c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Introduction</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Tutorial</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Anatomy of a journal file</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>The reporting commands</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Using XPath expressions</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Scripting with Python</c></autotitle></c></p><p style='ps-1' dir='ltr'><c style='cs-1'><autotitle level='0' index='0'><c style='cs-1'>Ledger’s architecture</c></autotitle></c></p></section></page-range></document-text><note-streams><streams><stream>nsm-0</stream></streams><height-limit value='100'/><mark-notes-on-screen value='no'/><mark-notes-on-print value='no'/></note-streams><auto-title-setup><name>Essay</name><levels><level><flow><name>Level 1</name><main-format><elements><element><type>curr-level</type><specifier value='0'/><character-style>cs-1</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>. </text><specifier value='0'/><character-style>cs-1</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-1</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-1</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-1</paragraph-style></main-format><mention-format><elements><element><type>curr-level</type><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>. </text><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-2</paragraph-style></mention-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow><flow><name>Chart</name><main-format><elements><element><type>free-text</type><text>Chart </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-3</paragraph-style></main-format><toc-format><elements><element><type>free-text</type><text>Chart </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow><flow><name>Equation</name><main-format><elements><element><type>free-text</type><text>Equation </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-3</paragraph-style></main-format><toc-format><elements><element><type>free-text</type><text>Equation </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow><flow><name>Figure</name><main-format><elements><element><type>free-text</type><text>Figure </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-3</paragraph-style></main-format><toc-format><elements><element><type>free-text</type><text>Figure </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow><flow><name>Picture</name><main-format><elements><element><type>free-text</type><text>Picture </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-3</paragraph-style></main-format><toc-format><elements><element><type>free-text</type><text>Picture </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow><flow><name>Table</name><main-format><elements><element><type>free-text</type><text>Table </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-3</paragraph-style></main-format><toc-format><elements><element><type>free-text</type><text>Table </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>: </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow></level><level><flow><name>Level 2</name><main-format><elements><element><type>title</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><mention-format><elements><element><type>curr-level</type><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>. </text><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-2</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-2</paragraph-style></mention-format><toc-format><elements><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='lain-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow></level><level><flow><name>Level 3</name><main-format><elements><element><type>curr-level</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='b'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='b'/></element><element><type>title</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='b'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><toc-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>. </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='lain-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow></level><level><flow><name>Level 4</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>(</text><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><toc-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>. </text><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element><element><type>page-number</type><specifier value='0'/><character-style>cs-4</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-4</paragraph-style></toc-format><prompt-for-title value='yes'/><number-type value='roman-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='yes'/></flow></level><level><flow><name>Level 5</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>(</text><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-5</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level><level><flow><name>Level 6</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='lain-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level><level><flow><name>Level 7</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='roman-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level><level><flow><name>Level 8</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='b'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='arabic'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level><level><flow><name>Level 9</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='lain-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level><level><flow><name>Level 10</name><main-format><elements><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>tab</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>curr-level</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>free-text</type><text>) </text><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element><element><type>title</type><specifier value='0'/><character-style>cs-3</character-style><character-style-variation value='base'/></element></elements><paragraph-style>ps-5</paragraph-style></main-format><prompt-for-title value='no'/><number-type value='roman-small'/><number-start-at value='1'/><number-increment value='1'/><include-in-toc value='no'/></flow></level></levels></auto-title-setup><style-set><name>Essay</name><unique-id>ERSS-46432b76-59bf-4b49-95a3-8d89c0fd8b88</unique-id><locking-state value='unlocked'/><character-styles><style>cs-4</style><style>cs-6</style><style>cs-0</style><style>cs-7</style><style>cs-1</style><style>cs-5</style><style>cs-6</style><style>cs-8</style><style>cs-9</style><style>cs-10</style><style>cs-11</style><style>cs-6</style><style>cs-2</style><style>cs-12</style><style>cs-13</style></character-styles><paragraph-styles><style>ps-6</style><style>ps-7</style><style>ps-3</style><style>ps-8</style><style>ps-0</style><style>ps-9</style><style>ps-10</style><style>ps-1</style><style>ps-5</style><style>ps-8</style><style>ps-11</style><style>ps-12</style><style>ps-13</style><style>ps-14</style><style>ps-15</style><style>ps-8</style><style>ps-2</style><style>ps-16</style><style>ps-17</style><style>ps-4</style></paragraph-styles><list-styles><style>ls-0</style><style>ls-1</style><style>ls-2</style></list-styles><section-styles><style>ss-0</style><style>ss-1</style><style>ss-2</style><style>ss-3</style></section-styles><page-styles><style>pgs-0</style><style>pgs-1</style></page-styles><note-styles><style>ns-0</style><style>ns-1</style><style>ns-2</style><style>ns-3</style></note-styles><set-seed>41A771082020561D</set-seed><default-character-style/><default-paragraph-style/><default-list-style/><default-section-style/><default-page-style/><default-note-style/></style-set></text-model><view-options><show-options><space value='no'/><header-and-footer-frames value='yes'/><section-break value='no'/><paragraph-break value='no'/><autotitle-frame value='no'/><toolbar value='yes'/><tab value='no'/><line-break value='no'/><page-break value='no'/><soft-hyphen value='no'/><column-break value='no'/><pageStyle-break value='no'/><invisible-table-lines value='yes'/><paragraph-ruler value='yes'/><page-margins value='yes'/><citation-frames value='yes'/></show-options><compact-view-mode value='no'/><window-position>73 0 1092 878 0 0 1440 878 </window-position><zoom-mode value='explicit'/><zoom value='150'/></view-options></root></archive> \ No newline at end of file
diff --git a/docs/date-examples.txt b/docs/date-examples.txt
deleted file mode 100644
index 2c2afe94..00000000
--- a/docs/date-examples.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-2002-02-02
-2002/02/02
-2002.02.02
-02-02-2002
-02/02/2002
-02.02.2002
-02-02-02
-02/02/02
-02.02.02
-02-02
-02/02
-02.02
-20020202
-20020202T023318
-20020202T023318-0700
-20020202T023318-0100
-02-Feb-2002
-2002-Feb-02
-02 Feb 2002
-02-Feb-2002
-02 February 2002
-02-February-2002
-2002 Feb 02
-2002-Feb-02
-2002 February 02
-2002-February-02
-02 Feb
-02-Feb
-02 February
-02-February
-Feb 02
-Feb-02
-February 02
-February-02
-Feb 02, 2002
-February 02, 2002
-2002-02-02 12:00:00
-2002-02-02 12:00:00 AM
-2002-02-02 12:00 AM
-2002-02-02 12:00AM
-2002-02-02 12p
-2002-02-02 12a
diff --git a/docs/ledger.info b/docs/ledger.info
deleted file mode 100644
index 651f5d91..00000000
--- a/docs/ledger.info
+++ /dev/null
@@ -1,3640 +0,0 @@
-This is /Users/johnw/src/ledger/docs/ledger.info, produced by makeinfo
-version 4.7 from /Users/johnw/src/ledger/docs/ledger.texi.
-
-INFO-DIR-SECTION User Applications
- Copyright (c) 2003-2006, John Wiegley. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
- - Neither the name of New Artisans LLC nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-START-INFO-DIR-ENTRY
-* Ledger: (ledger). Command Line Accounting
-END-INFO-DIR-ENTRY
-
-
-File: ledger.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
-
-Overview
-********
-
-Copyright (c) 2003-2006, John Wiegley. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
- - Neither the name of New Artisans LLC nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-* Menu:
-
-* Introduction::
-* Running Ledger::
-* Keeping a ledger::
-* Using XML::
-
-
-File: ledger.info, Node: Introduction, Next: Running Ledger, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-Ledger is an accounting tool with the moxie to exist. It provides no
-bells or whistles, and returns the user to the days before user
-interfaces were even a twinkling in their father's CRT.
-
- What it does offer is a double-entry accounting ledger with all the
-flexibility and muscle of its modern day cousins, without any of the
-fat. Think of it as the Bran Muffin of accounting tools.
-
- To use it, you need to start keeping a ledger. This is the basis of
-all accounting, and if you haven't started yet, now is the time to
-learn. The little booklet that comes with your checkbook is a ledger,
-so we'll describe double-entry accounting in terms of that.
-
- A checkbook ledger records debits (subtractions, or withdrawals) and
-credits (additions, or deposits) with reference to a single account:
-the checking account. Where the money comes from, and where it goes
-to, are described in the payee field, where you write the person or
-company's name. The ultimate aim of keeping a checkbook ledger is to
-know how much money is available to spend. That's really the aim of
-all ledgers.
-
- What computers add is the ability to walk through these transactions,
-and tell you things about your spending habits; to let you devise
-budgets and get control over your spending; to squirrel away money into
-virtual savings account without having to physically move money around;
-etc. As you keep your ledger, you are recording information about your
-life and habits, and sometimes that information can start telling you
-things you aren't aware of. Such is the aim of all good accounting
-tools.
-
- The next step up from a checkbook ledger, is a ledger that keeps
-track of all your accounts, not just checking. In such a ledger, you
-record not only who gets paid--in the case of a debit--but where the
-money came from. In a checkbook ledger, its assumed that all the money
-comes from your checking account. But in a general ledger, you write
-transaction two-lines: the source account and target account. _There
-must always be a debit from at least one account for every credit made
-to another account_. This is what is meant by "double-entry"
-accounting: the ledger must always balance to zero, with an equal
-number of debits and credits.
-
- For example, let's say you have a checking account and a brokerage
-account, and you can write checks from both of them. Rather than keep
-two checkbooks, you decide to use one ledger for both. In this general
-ledger you need to record a payment to Pacific Bell for your monthly
-phone bill. The cost is $23.00, let's say, and you want to pay it from
-your checking account. In the general ledger you need to say where the
-money came from, in addition to where it's going to. The entry might
-look like this:
-
- 9/29 BAL Pacific Bell $-200.00 $-200.00
- Equity:Opening Balances $200.00
- 9/29 BAL Checking $100.00 $100.00
- Equity:Opening Balances $-100.00
- 9/29 100 Pacific Bell $23.00 $223.00
- Checking $-23.00 $77.00
-
- The first line shows a payment to Pacific Bell for $23.00. Because
-there is no "balance" in a general ledger--it's always zero--we write
-in the total balance of all payments to "Pacific Bell", which now is
-$223.00 (previously the balance was $200.00). This is done by looking
-at the last entry for "Pacific Bell" in the ledger, adding $23.00 to
-that amount, and writing the total in the balance column. And the
-money came from "Checking"--a withdrawal of $23.00--which leaves the
-ending balance in "Checking" at $77.00. This is a very manual
-procedure; but that's where computers come in...
-
- The transaction must balance to $0: $23 went to Pacific Bell, $23
-came from Checking. There is nothing left over to be accounted for,
-since the money has simply moved from one account to another. This is
-the basis of double-entry accounting: that money never pops in or out of
-existence; it is always a transaction from one account 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 a
-payment is written into one, you write a corresponding withdrawal into
-the other. This makes it easier to write in a "running balance", since
-you don't have to look back at the last time the account was
-referenced--but it also means having a lot of ledger books, if you deal
-with multiple accounts.
-
- Enter the beauty of computerized accounting. The purpose of the
-Ledger program is to make general ledger accounting simple, by keeping
-track of the balances for you. Your only job is to enter the
-transactions. If a transaction does not balance, Ledger displays an
-error and indicates the incorrect transaction.(1)
-
- In summary, there are two aspects of Ledger use: updating the ledger
-data file, and using the Ledger tool to view the summarized result of
-your entries.
-
- And just for the sake of example--as a starting point for those who
-want to dive in head-first--here are the ledger entries from above,
-formatting as the ledger program wishes to see them:
-
- 2004/09/29 Pacific Bell
- Payable:Pacific Bell $-200.00
- Equity:Opening Balances
-
- 2004/09/29 Checking
- Accounts:Checking $100.00
- Equity:Opening Balances
-
- 2004/09/29 Pacific Bell
- Payable:Pacific Bell $23.00
- Accounts:Checking
-
- The account balances and registers in this file, if saved as
-`ledger.dat', could be reported using:
-
- $ ledger -f ledger.dat balance
- $ ledger -f ledger.dat register checking
- $ ledger -f ledger.dat register bell
-
-* Menu:
-
-* Building the program::
-* Getting help::
-
- ---------- Footnotes ----------
-
- (1) In some special cases, it automatically balances this entry for
-you.
-
-
-File: ledger.info, Node: Building the program, Next: Getting help, Prev: Introduction, Up: Introduction
-
-1.1 Building the program
-========================
-
-Ledger is written in ANSI C++, and should compile on any platform. It
-depends on the GNU multiprecision integer library (libgmp), and the
-Perl regular expression library (libpcre). It was developed using GNU
-make and gcc 3.3, on a PowerBook running OS/X.
-
- To build and install once you have these libraries on your system,
-enter these commands:
-
- ./configure && make install
-
-
-File: ledger.info, Node: Getting help, Prev: Building the program, Up: Introduction
-
-1.2 Getting help
-================
-
-If you need help on how to use Ledger, or run into problems, you can
-just the Ledger mailing list at the following Web address:
-
- https://lists.sourceforge.net/lists/listinfo/ledger-discuss
-
- You can also find help at the `#ledger' channel on the IRC server
-`irc.freenode.net'.
-
-
-File: ledger.info, Node: Running Ledger, Next: Keeping a ledger, Prev: Introduction, Up: Top
-
-2 Running Ledger
-****************
-
-Ledger has a very simple command-line interface, named--enticing
-enough--`ledger'. It supports a few reporting commands, and a large
-number of options for refining the output from those commands. The
-basic syntax of any ledger command is:
-
- ledger [OPTIONS...] COMMAND [ARGS...]
-
- Command options must always precede the command word. After the
-command word there may appear any number of arguments. For most
-commands, these arguments are regular expressions that cause the output
-to relate only to transactions matching those regular expressions. For
-the `entry' command, the arguments have a special meaning, described
-below.
-
- The regular expressions arguments always match the account name that
-a transaction refers to. To match on the payee of the entry instead,
-precede the regular expression with `--'. For example, the following
-balance command reports account totals for rent, food and movies, but
-only those whose payee matches Freddie:
-
- ledger bal rent food movies -- freddie
-
- There are many, many command options available with the `ledger'
-command, and it takes a while to master them. However, none of them
-are required to use the basic reporting commands.
-
-* Menu:
-
-* Usage overview::
-* Commands::
-* Options::
-* Format strings::
-* Value expressions::
-* Period expressions::
-* File format::
-* Some typical queries::
-* Budgeting and forecasting::
-
-
-File: ledger.info, Node: Usage overview, Next: Commands, Prev: Running Ledger, Up: Running Ledger
-
-2.1 Usage overview
-==================
-
-Before getting into the details of how to run Ledger, it will be easier
-to introduce the features in the context of their typical usage. To
-that end, this section presents a series of recipes, gradually
-introducing all of the command-line features of Ledger.
-
- For the purpose of these examples, assume the environment variable
-LEDGER is set to the file `sample.dat' (which is included in the
-distribution), and that the contents of that file are:
-
- = /^Expenses:Books/
- (Liabilities:Taxes) -0.10
-
- ~ Monthly
- Assets:Bank:Checking $500.00
- Income:Salary
-
- 2004/05/01 * Checking balance
- Assets:Bank:Checking $1,000.00
- Equity:Opening Balances
-
- 2004/05/01 * Investment balance
- Assets:Brokerage 50 AAPL $30.00
- Equity:Opening Balances
-
- 2004/05/14 * Pay day
- Assets:Bank:Checking $500.00
- Income:Salary
-
- 2004/05/27 Book Store
- Expenses:Books $20.00
- Liabilities:MasterCard
-
- 2004/05/27 (100) Credit card company
- Liabilities:MasterCard $20.00
- Assets:Bank:Checking
-
- This sample file demonstrates a basic principle of accounting which
-it is recommended you follow: Keep all of your accounts under five
-parent Assets, Liabilities, Income, Expenses and Equity. It is
-important to do so in order to make sense out of the following examples.
-
-2.1.1 Checking balances
------------------------
-
-Ledger has seven basic commands, but by far the most often used are
-`balance' and `register'. To see a summary balance of all accounts,
-use:
-
- ledger bal
-
- `bal' is a short-hand for `balance'. This command prints out the
-summary totals of the five parent accounts used in `sample.dat':
-
- $1,480.00
- 50 AAPL Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
- $-2.00 Liabilities
- --------------------
- $-1,502.00
- 50 AAPL
-
- None of the child accounts are shown, just the parent account totals.
-We can see that in `Assets' there is $1,480.00, and 50 shares of Apple
-stock. There is also a negative grand total. Usually the grand total
-is zero, which means that all accounts balance(1). In this case, since
-the 50 shares of Apple stock cost $1,500.00 dollars, then these two
-amounts balance each other in the grand total. The extra $2.00 comes
-from a virtual transaction being added by the automatic entry at the
-top of the file. The entry is virtual because the account name was
-surrounded by parentheses in an automatic entry. Automatic entries
-will be discussed later, but first let's remove the virtual transaction
-from the balance report by using the `--real' option:
-
- ledger --real bal
-
- Now the report is:
-
- $1,480.00
- 50 AAPL Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
- --------------------
- $-1,500.00
- 50 AAPL
-
- Since the liability was a virtual transaction, it has dropped from
-the report and we see that final total is balanced.
-
- But we only know that it balances because `sample.dat' is quite
-simple, and we happen to know that the 50 shares of Apple stock cost
-$1,500.00. We can verify that things really balance by reporting the
-Apple shares in terms of their cost, instead of their quantity. To do
-this requires the `--basis', or `-B', option:
-
- ledger --real -B bal
-
- This command reports:
-
- $2,980.00 Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
-
- With the basis cost option, the grand total has disappeared, as it is
-now zero. The confirms that the cost of everything balances to zero,
-_which must always be true_. Reporting the real basis cost should
-never yield a remainder(2).
-
-2.1.1.1 Sub-account balances
-............................
-
-The totals reported by the balance command are only the topmost parent
-accounts. To see the totals of all child accounts as well, use the
-`-s' option:
-
- ledger --real -B -s bal
-
- This reports:
-
- $2,980.00 Assets
- $1,480.00 Bank:Checking
- $1,500.00 Brokerage
- $-2,500.00 Equity:Opening Balances
- $20.00 Expenses:Books
- $-500.00 Income:Salary
-
- This shows that the `Assets' total is made up from two child
-account, but that the total for each of the other accounts comes from
-one child account.
-
- Sometimes you may have a lot of children, nested very deeply, but
-only want to report the first two levels. This can be done with a
-display predicate, using a value expression. In the value expression,
-`T' represents the reported total, and `l' is the display level for the
-account:
-
- ledger --real -B -d "T&l<=2" bal
-
- This reports:
-
- $2,980.00 Assets
- $1,480.00 Bank
- $1,500.00 Brokerage
- $-2,500.00 Equity:Opening Balances
- $20.00 Expenses:Books
- $-500.00 Income:Salary
-
- Instead of reporting `Bank:Checking' as a child of `Assets', it
-report only `Bank', since that account is a nesting level of 2, while
-`Checking' is at level 3.
-
- To review the display predicate used--`T&l<=2'--this rather terse
-expression means: Display an account only if it has a non-zero total
-(`T'), and its nesting level is less than or equal to 2 (`l<=2').
-
-2.1.1.2 Specific account balances
-.................................
-
-While reporting the totals for all accounts can be useful, most often
-you will want to check the balance of a specific account or accounts.
-To do this, put one or more account names after the balance command.
-Since these names are really regular expressions, you can use partial
-names if you wish:
-
- ledger bal checking
-
- Reports:
-
- $1,480.00 Assets:Bank:Checking
-
- Any number of names may be used:
-
- ledger bal checking broker liab
-
- Reports:
-
- $1,480.00 Assets:Bank:Checking
- 50 AAPL Assets:Brokerage
- $-2.00 Liabilities
-
- In this case no grand total is reported, because you are asking for
-specific account balances.
-
- For those comfortable with regular expressions, any Perl regexp is
-allowed:
-
- ledger bal ^assets.*checking ^liab
-
- Reports:
-
- $1,480.00 Assets:Bank:Checking
- $-2.00 Liabilities:Taxes
-
-2.1.2 The register report
--------------------------
-
-While the `balance' command can be very handy for checking account
-totals, by far the most powerful of Ledger's reporting tools is the
-`register' command. In fact, internally both commands use the same
-logic, but report the results differently: `balance' shows the summary
-totals, while `register' reports each transaction and how it
-contributes to that total.
-
- Paradoxically, the most basic form of `register' is almost never
-used, since it displays every transaction:
-
- ledger reg
-
- `reg' is a short-hand for `register'. This command reports:
-
- 2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
- Equity:Opening Balan.. $-1,000.00 0
- 2004/05/01 Investment balance Assets:Brokerage 50 AAPL 50 AAPL
- Equity:Opening Balan.. $-1,500.00 $-1,500.00
- 50 AAPL
- 2004/05/14 Pay day Assets:Bank:Checking $500.00 $-1,000.00
- 50 AAPL
- Income:Salary $-500.00 $-1,500.00
- 50 AAPL
- 2004/05/27 Book Store Expenses:Books $20.00 $-1,480.00
- 50 AAPL
- Liabilities:MasterCard $-20.00 $-1,500.00
- 50 AAPL
- (Liabilities:Taxes) $-2.00 $-1,502.00
- 50 AAPL
- 2004/05/27 Credit card company Liabilities:MasterCard $20.00 $-1,482.00
- 50 AAPL
- Assets:Bank:Checking $-20.00 $-1,502.00
- 50 AAPL
-
- This rather verbose output shows every account transaction in
-`sample.dat', and how it affects the running total. The final total is
-identical to what we saw with the plain `balance' command. To see how
-things really balance, we can use `--real -B', just as we did with
-`balance':
-
- ledger --real -B reg
-
- Reports:
-
- 2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
- Equity:Opening Balan.. $-1,000.00 0
- 2004/05/01 Investment balance Assets:Brokerage $1,500.00 $1,500.00
- Equity:Opening Balan.. $-1,500.00 0
- 2004/05/14 Pay day Assets:Bank:Checking $500.00 $500.00
- Income:Salary $-500.00 0
- 2004/05/27 Book Store Expenses:Books $20.00 $20.00
- Liabilities:MasterCard $-20.00 0
- 2004/05/27 Credit card company Liabilities:MasterCard $20.00 $20.00
- Assets:Bank:Checking $-20.00 0
-
- Here we see that everything balances to zero in the end, as it must.
-
-2.1.2.1 Specific register queries
-.................................
-
-The most common use of the register command is to summarize
-transactions based on the account(s) they affect. Using `sample.dat'
-as as example, we could look at all book purchases using:
-
- ledger reg books
-
- Reports:
-
- 2004/05/29 Book Store Expenses:Books $20.00 $20.00
-
- If a double-dash (`--') occurs in the list of regular expressions,
-any following arguments are matched against payee names, instead of
-account names:
-
- ledger reg ^liab -- credit
-
- Reports:
-
- 2004/05/29 Credit card company Liabilities:MasterCard $20.00 $20.00
-
- There are many reporting options for tailoring which transactions are
-found, and also how to summarize the various amounts and totals that
-result. These are plumbed in greater depth below.
-
-2.1.3 Selecting transactions
-----------------------------
-
-Although the easiest way to use the register is to report all the
-transactions affecting a set of accounts, it can often result in more
-information than you want. To cope with an ever-growing amount of
-data, there are several options which can help you pinpoint your report
-to exactly the transactions that interest you most. This is called the
-"calculation" phase of Ledger. All of its related options are
-documented under `--help-calc'.
-
-2.1.3.1 By date
-...............
-
-`--current'(`-c') displays entries occurring on or before the current
-date. Any entry recorded for a future date will be ignored, as if it
-had not been seen. This is useful if you happen to pre-record entries,
-but still wish to view your balances in terms of what is available
-today.
-
- `--begin DATE' (`-b DATE') limits the report to only those entries
-occurring on or after DATE. The running total in the register will
-start at zero with the first transaction, even if there are earlier
-entries.
-
- To limit the display only, but still add earlier transactions to the
-running total, use the display expression `-d 'd>=[DATE]''):
-
- ledger --basis -b may -d 'd>=[5/14]' reg ^assets
-
- Reports:
-
- 2004/05/14 Pay day Assets:Bank:Checking $500.00 $3,000.00
- 2004/05/27 Credit card company Assets:Bank:Checking $-20.00 $2,980.00
-
- In this example, the displayed transactions start from `5/14', but
-the calculated total starts from the beginning of `may'.
-
- `--end DATE' (`-e DATE') states when reporting should end, both
-calculation and display. The ending date is inclusive.
-
- The DATE argument to the `-b' and `-e' options can be rather
-flexible. Assuming the current date to be November 15, 2004, then all
-of the following are equivalent:
-
- ledger -b oct bal
- ledger -b "this oct" bal
- ledger -b 2004/10 bal
- ledger -b 10 bal
- ledger -b last bal
- ledger -b "last month" bal
-
- To constrain the report to a specific time period, use `--period'
-(`-p'). A time period may have both a beginning and an end, or
-neither, as well as a specified interval. Here are a few examples:
-
- ledger -p 2004 bal
- ledger -p august bal
- ledger -p "from aug to oct" bal
- ledger -p "daily from 8/1 to 8/15" bal
- ledger -p "weekly since august" bal
- ledger -p "monthly from feb to oct" bal
- ledger -p "quarterly in 2004" bal
- ledger -p yearly bal
-
- See *Note Period expressions:: for more on syntax. Also, all of the
-options `-b', `-e' and `-p' may be used together, but whatever
-information occurs last takes priority. An example of such usage (in a
-script, perhaps) would be:
-
- ledger -b 2004 -e 2005 -p monthly reg ^expenses
-
- This command is identical to:
-
- ledger -p "monthly in 2004" reg ^expenses
-
- The transactions within a period may be sorted using
-`--period-sort', which takes a value expression. This is similar to
-the `--sort' option, except that it sorts within each period entry,
-rather than sorting all transactions in the report. See the
-documentation on `--sort' below for more details.
-
-2.1.3.2 By status
-.................
-
-By default, all regular transactions are included in each report. To
-limit the report to certain kinds of transactions, use one or more of
-the following options:
-
-`-C, --cleared'
- Consider only cleared transactions.
-
-`-U, --uncleared'
- Consider only uncleared and pending transactions.
-
-`-R, --real'
- Consider only real (non-virtual) transactions.
-
-`-L, --actual'
- Consider only actual (non-automated) transactions.
-
- Cleared transactions are indicated by an asterix placed just before
-the payee name in a transaction. The meaning of this flag is up to the
-user, but typically it means that an entry has been seen on a financial
-statement. Pending transactions use an exclamation mark in the same
-position, but are mainly used only by reconciling software. Uncleared
-transactions are for things like uncashed checks, credit charges that
-haven't appeared on a statement yet, etc.
-
- Real transactions are all non-virtual transactions, where the account
-name is not surrounded by parentheses or square brackets. Virtual
-transactions are useful for showing a transfer of money that never
-really happened, like money set aside for savings without actually
-transferring it from the parent account.
-
- Actual transactions are those not generated, either as part of an
-automated entry, or a budget or forecast report. A useful of when you
-might like to filter out generated transactions is with a budget:
-
- ledger --budget --actual reg ^expenses
-
- This command outputs all transactions affecting a budgeted account,
-but without subtracting the budget amount (because the generated
-transactions are suppressed with `--actual'). The report shows how
-much you actually spent on budgeted items.
-
-2.1.3.3 By relationship
-.......................
-
-Normally, a register report includes only the transactions that match
-the regular expressions specified after the command word. For example,
-to report all expenses:
-
- ledger reg ^expenses
-
- This reports:
-
- 2004/05/29 Book Store Expenses:Books $20.00 $20.00
-
- Using `--related' (`-r') reports the transactions that did not match
-your query, but only in entries that otherwise would have matched.
-This has the effect of indicating where money came from, or when to:
-
- ledger -r reg ^expenses
-
- Reports:
-
- 2004/05/29 Book Store Liabilities:MasterCard $20.00 $20.00
-
-2.1.3.4 By budget
-.................
-
-There is more information about budgeting and forecasting in *Note
-Budgeting and forecasting::. Basically, if you have any period entries
-in your ledger file, you can use these options. A period entry looks
-like:
-
- ~ Monthly
- Assets:Bank:Checking $500.00
- Income:Salary
-
- The difference from a regular entry is that the first line begins
-with a tilde (~), and instead of a payee there's a period expression
-(*Note Period expressions::). Otherwise, a period entry is in every
-other way the same as a regular entry.
-
- With such an entry in your ledger file, the `--budget' option will
-report only transactions that match a budgeted account. Using
-`sample.dat' from above:
-
- ledger --budget reg ^income
-
- Reports:
-
- 2004/05/01 Budget entry Income:Salary $500.00 $500.00
- 2004/05/14 Pay day Income:Salary $-500.00 0
-
- The final total is zero, indicating that the budget matched exactly
-for the reported period. Budgeting is most often helpful with period
-reporting; for example, to show monthly budget results use `--budget -p
-monthly'.
-
- The `--add-budget' option reports all matching transactions in
-addition to budget transactions; while `--unbudgeted' shows only those
-that don't match a budgeted account. To summarize:
-
-`--budget'
- Show transactions matching budgeted accounts.
-
-`--unbudgeted'
- Show transactions matching unbudgeted accounts.
-
-`--add-budget'
- Show both budgeted and unbudgeted transactions together (i.e., add
- the generated budget transactions to the regular report).
-
- A report with the `--forecast' option will add budgeted transactions
-while the specified value expression is true. For example:
-
- ledger --forecast 'd<[2005] reg ^income
-
- Reports:
-
- 2004/05/14 Pay day Income:Salary $-500.00 $-500.00
- 2004/12/01 Forecast entry Income:Salary $-500.00 $-1,000.00
- 2005/01/01 Forecast entry Income:Salary $-500.00 $-1,500.00
-
- The date this report was made was November 5, 2004; the reason the
-first forecast entry is in december is that forecast entries are only
-added for the future, and they only stop after the value expression has
-matched at least once, which is why the January entry appears. A
-forecast report can be very useful for determining when money will run
-out in an account, or for projecting future cash flow:
-
- ledger --forecast 'd<[2008]' -p yearly reg ^inc ^exp
-
- This reports balances projected income against projected expenses,
-showing the resulting total in yearly intervals until 2008. For the
-case of `sample.dat', which has no budgeted expenses, the result of the
-above command (in November 2004) is:
-
- 2004/01/01 - 2004/12/31 Income:Salary $-1,000.00 $-1,000.00
- Expenses:Books $20.00 $-980.00
- 2005/01/01 - 2005/12/31 Income:Salary $-6,000.00 $-6,980.00
- 2006/01/01 - 2006/12/31 Income:Salary $-6,000.00 $-12,980.00
- 2007/01/01 - 2007/12/31 Income:Salary $-6,000.00 $-18,980.00
- 2008/01/01 - 2008/01/01 Income:Salary $-500.00 $-19,480.00
-
-2.1.3.5 By value expression
-...........................
-
-Value expressions can be quite complex, and are treated more fully in
-*Note Value expressions::. They can be used for limiting a report with
-`--limit' (`-l'). The following command report income since august,
-but expenses since october:
-
- ledger -l '(/income/&d>=[aug])|(/expenses/&d>=[oct])' reg
-
- The basic form of this value expression is `(A&B)|(A&B)'. The `A'
-in each part matches against an account name with `/name/', while each
-`B' part compares the date of the transaction (`d') with a specified
-month. The resulting report will contain only transactions which match
-the value expression.
-
- Another use of value expressions is to calculate the amount reported
-for each line of a register report, or for computing the subtotal of
-each account shown in a balance report. This example divides each
-transaction amount by two:
-
- ledger -t 'a/2' reg ^exp
-
- The `-t' option doesn't affect the running total, only how the
-transaction amount is displayed. To change the running total, use
-`-T'. In that case, you will likely want to use the total (`O')
-instead of the amount (`a'):
-
- ledger -T 'O/2' reg ^exp
-
-2.1.4 Massaging register output
--------------------------------
-
-Even after filtering down your data to just the transactions you're
-interested in, the default reporting method of one transaction per line
-is often still too much. To combat this complexity, it is possible to
-ask Ledger to report the details to you in many different forms,
-summarized in various ways. This is the "display" phase of Ledger, and
-is documented under `--help-disp'.
-
-2.1.4.1 Summarizing
-...................
-
-When multiple transactions relate to a single entry, they are reported
-as part of that entry. For example, in the case of `sample.dat':
-
- ledger reg -- book
-
- Reports:
-
- 2004/05/29 Book Store Expenses:Books $20.00 $20.00
- Liabilities:MasterCard $-20.00 0
- (Liabilities:Taxes) $-2.00 $-2.00
-
- All three transactions are part of one entry, and as such the entry
-details are printed only once. To report every entry on a single line,
-use `-n' to collapse entries with multiple transactions:
-
- ledger -n reg -- book
-
- Reports:
-
- 2004/05/29 Book Store <Total> $-2.00 $-2.00
-
- In the balance report, `-n' causes the grand total not to be
-displayed at the bottom of the report.
-
- If an account occurs more than once in a report, it is possible to
-combine them all and report the total per-account, using `-s'. For
-example, this command:
-
- ledger -B reg ^assets
-
- Reports:
-
- 2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
- 2004/05/01 Investment balance Assets:Brokerage $1,500.00 $2,500.00
- 2004/05/14 Pay day Assets:Bank:Checking $500.00 $3,000.00
- 2004/05/27 Credit card company Assets:Bank:Checking $-20.00 $2,980.00
-
- But if the `-s' option is added, the result becomes:
-
- 2004/05/01 - 2004/05/29 Assets:Bank:Checking $1,480.00 $1,480.00
- Assets:Brokerage $1,500.00 $2,980.00
-
- When account subtotaling is used, only one entry is printed, and the
-date and name reflect the range of the combined transactions.
-
- With `-P', transactions relating to the same payee are combined. In
-this case, the date of the combined entry is that of the latest
-transaction.
-
- `-x' changes the payee name for each transaction to be the same as
-the commodity it uses. This can be especially useful combined with
-other options, like `-P'. For example:
-
- ledger -Px reg ^assets
-
- Reports:
-
- 2004/05/29 $ Assets:Bank:Checking $1,480.00 $1,480.00
- 2004/05/01 AAPL Assets:Brokerage 50 AAPL $1,480.00
- 50 AAPL
-
- This reports shows the subtotal for each commodity held, and where it
-is located. To see the basis cost, or initial investment, add `-B'.
-Applied to the example above:
-
- 2004/05/29 $ Assets:Bank:Checking $1,480.00 $1,480.00
- 2004/05/01 AAPL Assets:Brokerage $1,500.00 $2,980.00
-
- The only other options which affect summarized totals is `-E', which
-works only in the balance report. In this case, it shows matching
-accounts with a zero a balance, which are ordinarily excluded. This
-can be useful to see all the accounts involved in a report, even if
-some have no total.
-
-2.1.4.2 Quick periods
-.....................
-
-Although the `-p' option (also `--period') is much more versatile,
-there are other options to make the most common period reports easier:
-
-`-W, --weekly'
- Show weekly sub-totals. Same as `-p weekly'.
-
-`-M, --monthly'
- Show monthly sub-totals. Same as `-p monthly'.
-
-`-Y, --yearly'
- Show yearly sub-totals. Same as `-p yearly'.
-
- There is one kind of period report cannot be done with `-p'. This
-is the `--dow', or "days of the week" report, which shows summarized
-totals for each day of the week. The following examples shows a "day
-of the week" report of income and expenses:
-
- ledger --dow reg ^inc ^exp
-
- Reports:
-
- 2004/05/27 Thursdays Expenses:Books $20.00 $20.00
- 2004/05/14 Fridays Income:Salary $-500.00 $-480.00
-
-2.1.4.3 Ordering and width
-..........................
-
-The transactions displayed in a report are shown in the same order as
-they appear in the ledger file. To change the order and sort a report,
-use the `--sort' option. `--sort' takes a value expression to
-determine the value to sort against, making it possible to sort
-according to complex criteria. Here are some simple and useful
-examples:
-
- ledger --sort d reg ^exp # sort by date
- ledger --sort t reg ^exp # sort by amount total
- ledger --sort -t reg ^exp # reverse sort by amount total
- ledger --sort Ut reg ^exp # sort by abs amount total
-
- For the balance report, you will want to use `T' instead of `t':
-
- ledger --sort T reg ^exp # sort by amount total
- ledger --sort -T reg ^exp # reverse sort by amount total
- ledger --sort UT reg ^exp # sort by abs amount total
-
- The `--sort' options sorts all transactions in a report. If periods
-are used (such as `--monthly'), this can get somewhat confusing. In
-that case, you'll probably want to sort within periods using
-`--period-sort' instead of `--sort'.
-
- And if the register seems too cramped, and you have a lot of screen
-real estate, you can use `-w' to format the report within 132 acolumns,
-instead of 80. You are more likely then to see full payee and account
-names, as well as properly formatted totals when long-named commodities
-are used.
-
- If you want only the first or last N entries to be printed--which can
-be very useful for viewing the last 10 entries in your checking
-account, while also showing the cumulative balance from all
-entries--use the `--head' and/or `--tail' options. The two options may
-be used simultaneously, for example:
-
- ledger --tail 20 reg checking
-
- If the output from your command is very long, Ledger can output the
-data to a pager utility, such as `more' or `less':
-
- ledger --pager /usr/bin/less reg checking
-
-2.1.4.4 Averages and percentages
-................................
-
-To see the running total changed to a running average, use `-A'. The
-final transaction's total will be the overall average of all displayed
-transactions. The works in conjunction with period reporting, so that
-you can see your monthly average expenses with:
-
- ledger -AM reg ^expenses:food
- ledger -AMn reg ^expenses
-
- This works in the balance report too:
-
- ledger -AM bal ^expenses:food
- ledger -AMs bal ^expenses
-
- The `-D' option changes the running average into a deviation from
-the running average. This only makes sense in the register report,
-however.
-
- ledger -DM reg ^expenses:food
-
- In the balance report only, `-%' changes the reported totals into a
-percentage of the parent account. This kind of report is confusing if
-negative amounts are involved, and doesn't work at all if multiple
-commodities occur in an account's history. It has a somewhat limited
-usefulness, therefore, but in certain cases it can be handy, such as
-reviewing overall expenses:
-
- ledger -%s -S T bal ^expenses
-
-2.1.4.5 Reporting total data
-............................
-
-Normally in the `xml' report, only transaction amounts are printed. To
-include the running total under a `<total>' tag, use `--totals'. This
-does not affect any other report.
-
- In the register report only, the output can be changed with `-j' to
-show only the date and the amount--without commodities. This only
-makes sense if a single commodity appears in the report, but can be
-quite useful for scripting, or passing the data to Gnuplot. To show
-only the date and running total, use `-J'.
-
-2.1.4.6 Display by value expression
-...................................
-
-With `-d' you can decide which transactions (or accounts in the balance
-report) are displayed, according to a value expression. The computed
-total is not affected, only the display. This can be very useful for
-shortening a report without changing the running total:
-
- ledger -d 'd>=[last month]' reg checking
-
- This command shows the checking account's register, beginning from
-last month, but with the running total reflecting the entire history of
-the account.
-
-2.1.4.7 Change report format
-............................
-
-When dates are printed in any report, the default format is `%Y/%m/%d',
-which yields dates of the form `YYYY/mm/dd'. This can be changed with
-`-y', whose argument is a `strftime' string--see your system's C
-library documentation for the allowable codes. Mostly you will want to
-use `%Y', `%m' and `%d', in whatever combination is convenient for your
-locale.
-
- To change the format of the entire reported line, use `-F'. It
-supports quite a large number of options, which are all documented in
-*Note Format strings::. In addition, each specific kind of report
-(except for `xml') can be changed using one of the following options:
-
-`--balance-format'
- `balance' report. Default:
- %20T %2_%-a\n
-
-`--register-format'
- `register' report. Default:
- %D %-.20P %-.22A %12.66t %12.80T\n%/%32|%-.22A %12.66t %12.80T\n
-
-`--print-format'
- `print' report. Default:
- %D %-.35P %-.38A %22.108t %22.132T\n%/%48|%-.38A %22.108t %22.132T\n
-
-`--plot-amount-format'
- `register' report when `-j' (plot amount) is used. Default:
- %D %(St)\n
-
-`--plot-total-format'
- `register' report when `-J' (plot total) is used. Default:
- %D %(ST)\n
-
-`--equity-format'
- `equity' report. Default:
- \n%D %Y%C%P\n %-34W %12o%n\n%/ %-34W %12o%n\n
-
-`--prices-format'
- `prices' report. Default:
- \n%D %Y%C%P\n%/ %-34W %12t\n
-
-`--wide-register-format'
- `register' report when `-w' (wide) is used. Default:
- %D %-.35P %-.38A %22.108t %22.132T\n%/%48|%-.38A %22.108t %22.132T\n
-
-2.1.5 Standard queries
-----------------------
-
-If your ledger file uses the standard top-level accounts: Assets,
-Liabilities, Income, Expenses, Equity: then the following queries will
-enable you to generate some typical accounting reports from your data.
-
- Your _net worth_ can be determined by balancing assets against
-liabilities:
-
- ledger bal ^assets ^liab
-
- By removing long-term investment and loan accounts, you can see your
-current net liquidity (or liquid net worth):
-
- ledger bal ^assets ^liab -retirement -brokerage -loan
-
- Balancing expenses against income yields your _cash flow_, or net
-profit/loss:
-
- ledger bal ^exp ^inc
-
- In this case, if the number is positive it means you spent more than
-you earned during the report period.
-
- The most often used command is the "balance" command:
-
- export LEDGER=/home/johnw/doc/ledger.dat
- ledger balance
-
- Here I've set my Ledger environment variable to point to where my
-ledger file is hiding. Thereafter, I needn't specify it again.
-
-2.1.6 Reporting balance totals
-------------------------------
-
-The balance command prints out the summarized balances of all my
-top-level accounts, excluding sub-accounts. In order to see the
-balances for a specific account, just specify a regular expression
-after the balance command:
-
- ledger balance expenses:food
-
- This will show all the money that's been spent on food, since the
-beginning of the ledger. For food spending just this month
-(September), use:
-
- ledger -p sep balance expenses:food
-
- Or maybe you want to see all of your assets, in which case the -s
-(show sub-accounts) option comes in handy:
-
- ledger -s balance ^assets
-
- To exclude a particular account, use a regular expression with a
-leading minus sign. The following will show all expenses, but without
-food spending:
-
- ledger balance expenses -food
-
-2.1.7 Reporting percentages
----------------------------
-
-There is no built-in way to report transaction amounts or account
-balances in terms of percentages
-
- ---------- Footnotes ----------
-
- (1) It is impossible for accounts not to balance in ledger; it
-reports an error if a transaction does not balance
-
- (2) If it ever does, then generated transactions are involved, which
-can be removed using `--actual'
-
-
-File: ledger.info, Node: Commands, Next: Options, Prev: Usage overview, Up: Running Ledger
-
-2.2 Commands
-============
-
-2.2.1 balance
--------------
-
-The `balance' command reports the current balance of all accounts. It
-accepts a list of optional regexps, which confine the balance report to
-the matching accounts. If an account contains multiple types of
-commodities, each commodity's total is reported separately.
-
-2.2.2 register
---------------
-
-The `register' command displays all the transactions occurring in a
-single account, line by line. The account regexp must be specified as
-the only argument to this command. If any regexps occur after the
-required account name, the register will contain only those
-transactions that match. Very useful for hunting down a particular
-transaction.
-
- The output from `register' is very close to what a typical
-checkbook, or single-account ledger, would look like. It also shows a
-running balance. The final running balance of any register should
-always be the same as the current balance of that account.
-
- If you have Gnuplot installed, you may plot the amount or running
-total of any register by using the script `report', which is included
-in the Ledger distribution. The only requirement is that you add
-either `-j' or `-J' to your register command, in order to plot either
-the amount or total column, respectively.
-
-2.2.3 print
------------
-
-The `print' command prints out ledger entries in a textual format that
-can be parsed by Ledger. They will be properly formatted, and output
-in the most economic form possible. The "print" command also takes a
-list of optional regexps, which will cause only those transactions
-which match in some way to be printed.
-
- The `print' command can be a handy way to clean up a ledger file
-whose formatting has gotten out of hand.
-
-2.2.4 output
-------------
-
-The `output' command is very similar to the `print' command, except
-that it attempts to replicate the specified ledger file exactly. The
-format of the command is:
-
- ledger -f FILENAME output FILENAME
-
- Where `FILENAME' is the name of the ledger file to output. The
-reason for specifying this command is that only entries contained
-within that file will be output, and not an included entries (as can
-happen with the `print' command).
-
-2.2.5 xml
----------
-
-The `xml' command outputs results similar to what `print' and
-`register' display, but as an XML form. This data can then be read in
-and processed. Use the `--totals' option to include the running total
-with each transaction.
-
-2.2.6 emacs
------------
-
-The `emacs' command outputs results in a form that can be read directly
-by Emacs Lisp. The format of the sexp is:
-
- ((BEG-POS CLEARED DATE CODE PAYEE
- (ACCOUNT AMOUNT)...) ; list of transactions
- ...) ; list of entries
-
-2.2.7 equity
-------------
-
-The `equity' command prints out accounts balances as if they were
-entries. This makes it easy to establish the starting balances for an
-account, such as when *Note Archiving previous years::.
-
-2.2.8 prices
-------------
-
-The `prices' command displays the price history for matching
-commodities. The `-A' flag is useful with this report, to display the
-running average price, or `-D' to show each price's deviation from that
-average.
-
- There is also a `pricesdb' command which outputs the same
-information as `prices', but does in a format that can be parsed by
-Ledger.
-
-2.2.9 entry
------------
-
-The `entry' commands simplifies the creation of new entries. It works
-on the principle that 80% of all transactions are variants of earlier
-transactions. Here's how it works:
-
- Say you currently have this transaction in your ledger file:
-
- 2004/03/15 * Viva Italiano
- Expenses:Food $12.45
- Expenses:Tips $2.55
- Liabilities:MasterCard $-15.00
-
- Now it's `2004/4/9', and you've just eating at `Viva Italiano'
-again. The exact amounts are different, but the overall form is the
-same. With the `entry' command you can type:
-
- ledger entry 2004/4/9 viva food 11 tips 2.50
-
- This produces the following output:
-
- 2004/04/09 Viva Italiano
- Expenses:Food $11.00
- Expenses:Tips $2.50
- Liabilities:MasterCard $-13.50
-
- It works by finding a past transaction matching the regular
-expression `viva', and assuming that any accounts or amounts specified
-will be similar to that earlier transaction. If Ledger does not
-succeed in generating a new entry, an error is printed and the exit
-code is set to `1'.
-
- There is a shell script in the distribution's `scripts' directory
-called `entry', which simplifies the task of adding a new entry to your
-ledger. It launches `vi' to confirm that the entry looks appropriate.
-
- Here are a few more examples of the `entry' command, assuming the
-above journal entry:
-
- ledger entry 4/9 viva 11.50
- ledger entry 4/9 viva 11.50 checking # (from `checking')
- ledger entry 4/9 viva food 11.50 tips 8
- ledger entry 4/9 viva food 11.50 tips 8 cash
- ledger entry 4/9 viva food $11.50 tips $8 cash
- ledger entry 4/9 viva dining "DM 11.50"
-
-
-File: ledger.info, Node: Options, Next: Format strings, Prev: Commands, Up: Running Ledger
-
-2.3 Options
-===========
-
-With all of the reports, command-line options are useful to modify the
-output generated. These command-line options always occur before the
-command word. This is done to distinguish options from exclusive
-regular expressions, which also begin with a dash. The basic form for
-most commands is:
-
- ledger [OPTIONS] COMMAND [REGEXPS...] [-- [REGEXPS...]]
-
- The OPTIONS and REGEXPS expressions are both optional. You could
-just use `ledger balance', without any options--which prints a summary
-of all accounts. But for more specific reporting, or to change the
-appearance of the output, options are needed.
-
-* Menu:
-
-* Basic options::
-* Report filtering::
-* Output customization::
-* Commodity reporting::
-* Environment variables::
-
-
-File: ledger.info, Node: Basic options, Next: Report filtering, Prev: Options, Up: Options
-
-2.3.1 Basic options
--------------------
-
-These are the most basic command options. Most likely, the user will
-want to set them using *Note Environment variables::, instead of using
-actual command-line options:
-
- `--help' (`-h') prints a summary of all the options, and what they
-are used for. This can be a handy way to remember which options do
-what. This help screen is also printed if ledger is run without a
-command.
-
- `--version' (`-v') prints the current version of ledger and exits.
-This is useful for sending bug reports, to let the author know which
-version of ledger you are using.
-
- `--file FILE' (`-f FILE') reads FILE as a ledger file. This command
-may be used multiple times. FILE may also be a list of file names
-separated by colons. Typically, the environment variable `LEDGER_FILE'
-is set, rather than using this command-line option.
-
- `--output FILE' (`-o FILE') redirects output from any command to
-FILE. By default, all output goes to standard output.
-
- `--init-file FILE' (`-i FILE') causes FILE to be read by ledger
-before any other ledger file. This file may not contain any
-transactions, but it may contain option settings. To specify options
-in the init file, use the same syntax as the command-line. Here's an
-example init file:
-
- --price-db ~/finance/.pricedb
-
- ; ~/.ledgerrc ends here
-
- Option settings on the command-line or in the environment always take
-precedence over settings in the init file.
-
- `--cache FILE' identifies FILE as the default binary cache file.
-That is, if the ledger files to be read are specified using the
-environment variable `LEDGER_FILE', then whenever a command is finished
-a binary copy will be written to the specified cache, to speed up the
-loading time of subsequent queries. This filename can also be given
-using the environment variable `LEDGER_CACHE', or by putting the option
-into your init file. The `--no-cache' option causes Ledger to always
-ignore the binary cache.
-
- `--account NAME' (`-a NAME') specifies the default account which QIF
-file transactions are assumed to relate to.
-
-
-File: ledger.info, Node: Report filtering, Next: Output customization, Prev: Basic options, Up: Options
-
-2.3.2 Report filtering
-----------------------
-
-These options change which transactions affect the outcome of a report,
-in ways other than just using regular expressions:
-
- `--current'(`-c') displays only entries occurring on or before the
-current date.
-
- `--begin DATE' (`-b DATE') constrains the report to entries on or
-after DATE. Only entries after that date will be calculated, which
-means that the running total in the balance report will always start at
-zero with the first matching entry. (Note: This is different from
-using `--display' to constrain what is displayed).
-
- `--end DATE' (`-e DATE') constrains the report so that entries on or
-after DATE are not considered. The ending date is inclusive.
-
- `--period STR' (`-p STR') sets the reporting period to STR. This
-will subtotal all matching entries within each period separately,
-making it easy to see weekly, monthly, quarterly, etc., transaction
-totals. A period string can even specify the beginning and end of the
-report range, using simple terms like "last june" or "next month". For
-more using period expressions, see *Note Period expressions::.
-
- `--period-sort EXPR' sorts the transactions within each reporting
-period using the value expression EXPR. This is most often useful when
-reporting monthly expenses, in order to view the highest expense
-categories at the top of each month:
-
- ledger -M --period-sort -At reg ^Expenses
-
- `--cleared' (`-C') displays only transactions whose entry has been
-marked "cleared" (by placing an asterix to the right of the date).
-
- `--uncleared' (`-U') displays only transactions whose entry has not
-been marked "cleared" (i.e., if there is no asterix to the right of the
-date).
-
- `--real' (`-R') displays only real transactions, not virtual. (A
-virtual transaction is indicated by surrounding the account name with
-parentheses or brackets; see the section on using virtual transactions
-for more information).
-
- `--actual' (`-L') displays only actual transactions, and not those
-created due to automated transactions.
-
- `--related' (`-r') displays transactions that are related to
-whichever transactions would otherwise have matched the filtering
-criteria. In the register report, this shows where money went to, or
-the account it came from. In the balance report, it shows all the
-accounts affected by entries having a related transaction. For
-example, if a file had this entry:
-
- 2004/03/20 Safeway
- Expenses:Food $65.00
- Expenses:Cash $20.00
- Assets:Checking $-85.00
-
- And the register command was:
-
- ledger -r register food
-
- The following would be output, showing the transactions related to
-the transaction that matched:
-
- 2004/03/20 Safeway Expenses:Cash $-20.00 $-20.00
- Assets:Checking $85.00 $65.00
-
- `--budget' is useful for displaying how close your transactions meet
-your budget. `--add-budget' also shows unbudgeted transactions, while
-`--unbudgeted' shows only those. `--forecast' is a related option that
-projects your budget into the future, showing how it will affect future
-balances. *Note Budgeting and forecasting::.
-
- `--limit EXPR' (`-l EXPR') limits which transactions take part in
-the calculations of a report.
-
- `--amount EXPR' (`-t EXPR') changes the value expression used to
-calculate the "value" column in the `register' report, the amount used
-to calculate account totals in the `balance' report, and the values
-printed in the `equity' report. *Note Value expressions::.
-
- `--total EXPR' (`-T EXPR') sets the value expression used for the
-"totals" column in the `register' and `balance' reports.
-
-
-File: ledger.info, Node: Output customization, Next: Commodity reporting, Prev: Report filtering, Up: Options
-
-2.3.3 Output customization
---------------------------
-
-These options affect only the output, but not which transactions are
-used to create it:
-
- `--collapse' (`-n') causes entries in a `register' report with
-multiple transactions to be collapsed into a single, subtotaled entry.
-
- `--subtotal' (`-s') causes all entries in a `register' report to be
-collapsed into a single, subtotaled entry.
-
- `--by-payee' (`-P') reports subtotals by payee.
-
- `--comm-as-payee' (`-x') changes the payee of every transaction to
-be the commodity used in that transaction. This can be useful when
-combined with other options, such as `-s'.
-
- `--empty' (`-E') includes even empty accounts in the `balance'
-report.
-
- `--weekly' (`-W') reports transaction totals by the week. The week
-begins on whichever day of the week begins the month containing that
-transaction. To set a specific begin date, use a period string, such
-as `weekly from DATE'. `--monthly' (`-M') reports transaction totals
-by month; `--yearly' (`-Y') reports transaction totals by year. For
-more complex period, using the `--period' option described above.
-
- `--dow' reports transactions totals for each day of the week. This
-is an easy way to see if weekend spending is more than on weekdays.
-
- `--sort EXPR' (`-S EXPR') sorts a report by comparing the values
-determined using the value expression EXPR. For example, using `-S
--UT' in the balance report will sort account balances from greatest to
-least, using the absolute value of the total. For more on how to use
-value expressions, see *Note Value expressions::.
-
- `--wide' (`-w') causes the default `register' report to assume 132
-columns instead of 80.
-
- `--head' causes only the first N entries to be printed. This is
-different from using the command-line utility `head', which would limit
-to the first N transactions. `--tail' outputs only the last N entries.
-Both options may be used simultaneously. If a negative amount is
-given, it will invert the meaning of the flag (instead of the first
-five entries being printed, for example, it would print all but the
-first five).
-
- `--pager' tells Ledger to pass its output to the given pager
-program--very useful when the output is especially long. This behavior
-can be made the default by setting the `LEDGER_PAGER' environment
-variable.
-
- `--average' (`-A') reports the average transaction value.
-
- `--deviation' (`-D') reports each transaction's deviation from the
-average. It is only meaningful in the `register' and `prices' reports.
-
- `--percentage' (`-%') shows account subtotals in the `balance'
-report as percentages of the parent account.
-
- `--totals' include running total information in the `xml' report.
-
- `--amount-data' (`-j') changes the `register' report so that it
-output nothing but the date and the value column, and the latter
-without commodities. This is only meaningful if the report uses a
-single commodity. This data can then be fed to other programs, which
-could plot the date, analyze it, etc.
-
- `--total-data' (`-J') changes the `register' report so that it
-output nothing but the date and totals column, without commodities.
-
- `--display EXPR' (`-d EXPR') limits which transactions or accounts
-or actually displayed in a report. They might still be calculated, and
-be part of the running total of a register report, for example, but
-they will not be displayed. This is useful for seeing last month's
-checking transactions, against a running balance which includes all
-transaction values:
-
- ledger -d "d>=[last month]" reg checking
-
- The output from this command is very different from the following,
-whose running total includes only transactions from the last month
-onward:
-
- ledger -p "last month" reg checking
-
- Which is more useful depends on what you're looking to know: the
-total amount for the reporting range (`-p'), or simply a display
-restricted to the reporting range (using `-d').
-
- `--date-format STR' (`-y STR') changes the basic date format used by
-reports. The default uses a date like 2004/08/01, which represents the
-default date format of `%Y/%m/%d'. To change the way dates are printed
-in general, the easiest way is to put `--date-format FORMAT' in the
-Ledger initialization file `~/.ledgerrc' (or the file referred to by
-`LEDGER_INIT').
-
- `--format STR' (`-F STR') sets the reporting format for whatever
-report ledger is about to make. *Note Format strings::. There are
-also specific format commands for each report type:
-
- * `--balance-format STR'
-
- * `--register-format STR'
-
- * `--print-format STR'
-
- * `--plot-amount-format STR' (-j `register')
-
- * `--plot-total-format STR' (-J `register')
-
- * `--equity-format STR'
-
- * `--prices-format STR'
-
- * `--wide-register-format STR' (-w `register')
-
-
-File: ledger.info, Node: Commodity reporting, Next: Environment variables, Prev: Output customization, Up: Options
-
-2.3.4 Commodity reporting
--------------------------
-
-These options affect how commodity values are displayed:
-
- `--price-db FILE' sets the file that is used for recording
-downloaded commodity prices. It is always read on startup, to
-determine historical prices. Other settings can be placed in this file
-manually, to prevent downloading quotes for a specific, for example.
-This is done by adding a line like the following:
-
- ; Don't download quotes for the dollar, or timelog values
- N $
- N h
-
- `--price-exp MINS' (`-L MINS') sets the expected freshness of price
-quotes, in minutes. That is, if the last known quote for any commodity
-is older than this value--and if `--download' is being used--then the
-Internet will be consulted again for a newer price. Otherwise, the old
-price is still considered to be fresh enough.
-
- `--download' (`-Q') causes quotes to be automagically downloaded, as
-needed, by running a script named `getquote' and expecting that script
-to return a value understood by ledger. A sample implementation of a
-`getquote' script, implemented in Perl, is provided in the
-distribution. Downloaded quote price are then appended to the price
-database, usually specified using the environment variable
-`LEDGER_PRICE_DB'.
-
- There are several different ways that ledger can report the totals it
-displays. The most flexible way to adjust them is by using value
-expressions, and the `-t' and `-T' options. However, there are also
-several "default" reports, which will satisfy most users basic
-reporting needs:
-
-`-O, --quantity'
- Reports commodity totals (this is the default)
-
-`-B, --basis'
- Reports the cost basis for all transactions.
-
-`-V, --market'
- Reports the last known market value for all commodities.
-
-`-g, --performance'
- Reports the net gain/loss for each transaction in a `register'
- report.
-
-`-G --gain'
- Reports the net gain/loss for all commodities in the report that
- have a price history.
-
-
-File: ledger.info, Node: Environment variables, Prev: Commodity reporting, Up: Options
-
-2.3.5 Environment variables
----------------------------
-
-Every option to ledger may be set using an environment variable. If an
-option has a long name such `--this-option', setting the environment
-variable `LEDGER_THIS_OPTION' will have the same affect as specifying
-that option on the command-line. Options on the command-line always
-take precedence over environment variable settings, however.
-
- Note that you may also permanently specify option values by placing
-option settings in the file `~/.ledgerrc', for example:
-
- --cache /tmp/.mycache
-
-
-File: ledger.info, Node: Format strings, Next: Value expressions, Prev: Options, Up: Running Ledger
-
-2.4 Format strings
-==================
-
-Format strings may be used to change the output format of reports.
-They are specified by passing a formatting string to the `--format'
-(`-F') option. Within that string, constructs are allowed which make
-it possible to display the various parts of an account or transaction
-in custom ways.
-
- Within a format strings, a substitution is specified using a percent
-character (`%'). The basic format of all substitutions is:
-
- %[-][MIN WIDTH][.MAX WIDTH]EXPR
-
- If the optional minus sign (`-') follows the percent character,
-whatever is substituted will be left justified. The default is right
-justified. If a minimum width is given next, the substituted text will
-be at least that wide, perhaps wider. If a period and a maximum width
-is given, the substituted text will never be wider than this, and will
-be truncated to fit. Here are some examples:
-
- %-P An entry's payee, left justified
- %20P The same, right justified, at least 20 chars wide
- %.20P The same, no more than 20 chars wide
- %-.20P Left justified, maximum twenty chars wide
-
- The expression following the format constraints can be a single
-letter, or an expression enclosed in parentheses or brackets. The
-allowable expressions are:
-
-`%'
- Inserts a percent sign.
-
-`t'
- Inserts the results of the value expression specified by `-t'. If
- `-t' was not specified, the current report style's value
- expression is used.
-
-`T'
- Inserts the results of the value expression specified by `-T'. If
- `-T' was not specified, the current report style's value
- expression is used.
-
-`|'
- Inserts a single space. This is useful if a width is specified,
- for inserting a certain number of spaces.
-
-`_'
- Inserts a space for each level of an account's depth. That is, if
- an account has two parents, this construct will insert two spaces.
- If a minimum width is specified, that much space is inserted for
- each level of depth. Thus `%5_', for an account with four
- parents, will insert twenty spaces.
-
-`(EXPR)'
- Inserts the amount resulting from the value expression given in
- parentheses. To insert five times the total value of an account,
- for example, one could say `%12(5*O)'. Note: It's important to put
- the five first in that expression, so that the commodity doesn't
- get stripped from the total.
-
-`[DATEFMT]'
- Inserts the result of formatting a transaction's date with a date
- format string, exactly like those supported by `strftime'. For
- example: `%[%Y/%m/%d %H:%M:%S]'.
-
-`S'
- Insert the pathname of the file from which the entry's data was
- read.
-
-`B'
- Inserts the beginning character position of that entry within the
- file.
-
-`b'
- Inserts the beginning line of that entry within the file.
-
-`E'
- Inserts the ending character position of that entry within the
- file.
-
-`e'
- Inserts the ending line of that entry within the file.
-
-`D'
- By default, this is the same as `%[%Y/%m%/d]'. The date format
- used can be changed at any time with the `-y' flag, however.
- Using `%D' gives the user more control over the way dates are
- output.
-
-`d'
- This is the same as the `%D' option, unless the entry has an
- effective date, in which case it prints
- `[ACTUAL_DATE=EFFECtIVE_DATE]'.
-
-`X'
- If a transaction has been cleared, this inserts `*' followed by a
- space; otherwise nothing is inserted.
-
-`Y'
- This is the same as `%X', except that it only displays a state
- character if all of the member transactions have the same state.
-
-`C'
- Inserts the checking number for an entry, in parentheses, followed
- by a space; if none was specified, nothing is inserted.
-
-`P'
- Inserts the payee related to a transaction.
-
-`a'
- Inserts the optimal short name for an account. This is normally
- used in balance reports. It prints a parent account's name if
- that name has not been printed yet, otherwise it just prints the
- account's name.
-
-`A'
- Inserts the full name of an account.
-
-`W'
- This is the same as `%A', except that it first displays the
- transaction's state _if the entry's transaction states are not all
- the same_, followed by the full account name. This is offered as
- a printing optimization, so that combined with `%Y', only the
- minimum amount of state detail is printed.
-
-`o'
- Inserts the "optimized" form of a transaction's amount. This is
- used by the print report. In some cases, this inserts nothing; in
- others, it inserts the transaction amount and its cost. It's use
- is not recommend unless you are modifying the print report.
-
-`n'
- Inserts the note associated with a transaction, preceded by two
- spaces and a semi-colon, if it exists. Thus, no none becomes an
- empty string, while the note `foo' is substituted as ` ; foo'.
-
-`N'
- Inserts the note associated with a transaction, if one exists.
-
-`/'
- The `%/' construct is special. It separates a format string
- between what is printed for the first transaction of an entry, and
- what is printed for all subsequent transactions. If not used, the
- same format string is used for all transactions.
-
-
-File: ledger.info, Node: Value expressions, Next: Period expressions, Prev: Format strings, Up: Running Ledger
-
-2.5 Value expressions
-=====================
-
-Value expressions are an expression language used by Ledger to
-calculate values used by the program for many different purposes:
-
- 1. The values displayed in reports
-
- 2. For predicates (where truth is anything non-zero), to determine
- which transactions are calculated (`-l') or displayed (`-d').
-
- 3. For sorting criteria, to yield the sort key.
-
- 4. In the matching criteria used by automated transactions.
-
- Value expressions support most simple math and logic operators, in
-addition to a set of one letter functions and variables. A function's
-argument is whatever follows it. The following is a display predicate
-that I use with the `balance' command:
-
- ledger -d /^Liabilities/?T<0:UT>100 balance
-
- The effect is that account totals are displayed only if: 1) A
-Liabilities account has a total less than zero; or 2) the absolute
-value of the account's total exceeds 100 units of whatever commodity
-contains. If it contains multiple commodities, only one of them must
-exceed 100 units.
-
- Display predicates are also very handy with register reports, to
-constrain which entries are printed. For example, the following
-command shows only entries from the beginning of the current month,
-while still calculating the running balance based on all entries:
-
- ledger -d "d>[this month]" register checking
-
- This advantage to this command's complexity is that it prints the
-running total in terms of all entries in the register. The following,
-simpler command is similar, but totals only the displayed transactions:
-
- ledger -b "this month" register checking
-
-2.5.1 Variables
----------------
-
-Below are the one letter variables available in any value expression.
-For the register and print commands, these variables relate to
-individual transactions, and sometimes the account affected by a
-transaction. For the balance command, these variables relate to
-accounts--often with a subtle difference in meaning. The use of each
-variable for both is specified.
-
-`t'
- This maps to whatever the user specified with `-t'. In a register
- report, `-t' changes the value column; in a balance report, it has
- no meaning by default. If `-t' was not specified, the current
- report style's value expression is used.
-
-`T'
- This maps to whatever the user specified with `-T'. In a register
- report, `-T' changes the totals column; in a balance report, this
- is the value given for each account. If `-T' was not specified,
- the current report style's value expression is used.
-
-`m'
- This is always the present moment/date.
-
-2.5.1.1 Transaction/account details
-...................................
-
-`d'
- A transaction's date, as the number of seconds past the epoch.
- This is always "today" for an account.
-
-`a'
- The transaction's amount; the balance of an account, without
- considering children.
-
-`b'
- The cost of a transaction; the cost of an account, without its
- children.
-
-`v'
- The market value of a transaction, or an account without its
- children.
-
-`g'
- The net gain (market value minus cost basis), for a transaction or
- an account without its children. It is the same as `v-b'.
-
-`l'
- The depth ("level") of an account. If an account has one parent,
- it's depth is one.
-
-`n'
- The index of a transaction, or the count of transactions affecting
- an account.
-
-`X'
- 1 if a transaction's entry has been cleared, 0 otherwise.
-
-`R'
- 1 if a transaction is not virtual, 0 otherwise.
-
-`Z'
- 1 if a transaction is not automated, 0 otherwise.
-
-2.5.1.2 Calculated totals
-.........................
-
-`O'
- The total of all transactions seen so far, or the total of an
- account and all its children.
-
-`N'
- The total count of transactions affecting an account and all its
- children.
-
-`B'
- The total cost of all transactions seen so far; the total cost of
- an account and all its children.
-
-`V'
- The market value of all transactions seen so far, or of an account
- and all its children.
-
-`G'
- The total net gain (market value minus cost basis), for a series of
- transactions, or an account and its children. It is the same as
- `V-B'.
-
-2.5.2 Functions
----------------
-
-The available one letter functions are:
-
-`-'
- Negates the argument.
-
-`U'
- The absolute (unsigned) value of the argument.
-
-`S'
- Strips the commodity from the argument.
-
-`A'
- The arithmetic mean of the argument; `Ax' is the same as `x/n'.
-
-`P'
- The present market value of the argument. The syntax `P(x,d)' is
- supported, which yields the market value at time `d'. If no date
- is given, then the current moment is used.
-
-2.5.3 Operators
----------------
-
-The binary and ternary operators, in order of precedence, are:
-
- 1. `* /'
-
- 2. `+ -'
-
- 3. `! < > ='
-
- 4. `& | ?:'
-
-2.5.4 Complex expressions
--------------------------
-
-More complicated expressions are possible using:
-
-`NUM'
- A plain integer represents a commodity-less amount.
-
-`{AMOUNT}'
- An amount in braces can be any kind of amount supported by ledger,
- with or without a commodity. Use this for decimal values.
-
-`/REGEXP/'
-
-`W/REGEXP/'
- A regular expression that matches against an account's full name.
- If a transaction, this will match against the account affected by
- the transaction.
-
-`//REGEXP/'
-
-`p/REGEXP/'
- A regular expression that matches against an entry's payee name.
-
-`///REGEXP/'
-
-`w/REGEXP/'
- A regular expression that matches against an account's base name.
- If a transaction, this will match against the account affected by
- the transaction.
-
-`c/REGEXP/'
- A regular expression that matches against the entry code (the text
- that occurs between parentheses before the payee name).
-
-`e/REGEXP/'
- A regular expression that matches against a transaction's note, or
- comment field.
-
-`(EXPR)'
- A sub-expression is nested in parenthesis. This can be useful
- passing more complicated arguments to functions, or for overriding
- the natural precedence order of operators.
-
-`[DATE]'
- Useful specifying a date in plain terms. For example, you could
- say `[2004/06/01]'.
-
-
-File: ledger.info, Node: Period expressions, Next: File format, Prev: Value expressions, Up: Running Ledger
-
-2.6 Period expressions
-======================
-
-A period expression indicates a span of time, or a reporting interval,
-or both. The full syntax is:
-
- [INTERVAL] [BEGIN] [END]
-
- The optional INTERVAL part may be any one of:
-
- every day
- every week
- every monthly
- every quarter
- every year
- every N days # N is any integer
- every N weeks
- every N months
- every N quarters
- every N years
- daily
- weekly
- biweekly
- monthly
- bimonthly
- quarterly
- yearly
-
- After the interval, a begin time, end time, both or neither may be
-specified. As for the begin time, it can be either of:
-
- from <SPEC>
- since <SPEC>
-
- The end time can be either of:
-
- to <SPEC>
- until <SPEC>
-
- Where SPEC can be any of:
-
- 2004
- 2004/10
- 2004/10/1
- 10/1
- october
- oct
- this week # or day, month, quarter, year
- next week
- last week
-
- The beginning and ending can be given at the same time, if it spans a
-single period. In that case, just use SPEC by itself. In that case,
-the period `oct', for example, will cover all the days in october. The
-possible forms are:
-
- <SPEC>
- in <SPEC>
-
- Here are a few examples of period expressions:
-
- monthly
- monthly in 2004
- weekly from oct
- weekly from last month
- from sep to oct
- from 10/1 to 10/5
- monthly until 2005
- from apr
- until nov
- last oct
- weekly last august
-
-
-File: ledger.info, Node: File format, Next: Some typical queries, Prev: Period expressions, Up: Running Ledger
-
-2.7 File format
-===============
-
-The ledger file format is quite simple, but also very flexible. It
-supports many options, though typically the user can ignore most of
-them. They are summarized below.
-
- The initial character of each line determines what the line means,
-and how it should be interpreted. Allowable initial characters are:
-
-`NUMBER'
- A line beginning with a number denotes an entry. It may be
- followed by any number of lines, each beginning with whitespace,
- to denote the entry's account transactions. The format of the
- first line is:
-
- DATE[=EDATE] [*|!] [(CODE)] DESC
-
- If `*' appears after the date (with optional effective date), it
- indicates the entry is "cleared", which can mean whatever the user
- wants it t omean. If `!' appears after the date, it indicates d
- the entry is "pending"; i.e., tentatively cleared from the user's
- point of view, but not yet actually cleared. If a `CODE' appears
- in parentheses, it may be used to indicate a check number, or the
- type of the transaction. Following these is the payee, or a
- description of the transaction.
-
- The format of each following transaction is:
-
- ACCOUNT AMOUNT [; NOTE]
-
- The `ACCOUNT' may be surrounded by parentheses if it is a virtual
- transactions, or square brackets if it is a virtual transactions
- that must balance. The `AMOUNT' can be followed by a per-unit
- transaction cost, by specifying ` AMOUNT', or a complete
- transaction cost with `@ AMOUNT'. Lastly, the `NOTE' may specify
- an actual and/or effective date for the transaction by using the
- syntax `[ACTUAL_DATE]' or `[=EFFECTIVE_DATE]' or
- `[ACTUAL_DATE=EFFECtIVE_DATE]'.
-
-`='
- An automated entry. A value expression must appear after the equal
- sign.
-
- After this initial line there should be a set of one or more
- transactions, just as if it were normal entry. If the amounts of
- the transactions have no commodity, they will be applied as
- modifiers to whichever real transaction is matched by the value
- expression.
-
-`~'
- A period entry. A period expression must appear after the tilde.
-
- After this initial line there should be a set of one or more
- transactions, just as if it were normal entry.
-
-`!'
- A line beginning with an exclamation mark denotes a command
- directive. It must be immediately followed by the command word.
- The supported commands are:
-
- `!include'
- Include the stated ledger file.
-
- `!account'
- The account name is given is taken to be the parent of all
- transactions that follow, until `!end' is seen.
-
- `!end'
- Ends an account block.
-
-`;'
- A line beginning with a colon indicates a comment, and is ignored.
-
-`Y'
- If a line begins with a capital Y, it denotes the year used for all
- subsequent entries that give a date without a year. The year
- should appear immediately after the Y, for example: `Y2004'. This
- is useful at the beginning of a file, to specify the year for that
- file. If all entries specify a year, however, this command has no
- effect.
-
-`P'
- Specifies a historical price for a commodity. These are usually
- found in a pricing history file (see the `-Q' option). The syntax
- is:
- P DATE SYMBOL PRICE
-
-`N SYMBOL'
- Indicates that pricing information is to be ignored for a given
- symbol, nor will quotes ever be downloaded for that symbol. Useful
- with a home currency, such as the dollar ($). It is recommended
- that these pricing options be set in the price database file, which
- defaults to `~/.pricedb'. The syntax for this command is:
- N SYMBOL
-
-`D AMOUNT'
- Specifies the default commodity to use, by specifying an amount in
- the expected format. The `entry' command will use this commodity
- as the default when none other can be determined. This command
- may be used multiple times, to set the default flags for different
- commodities; whichever is seen last is used as the default
- commodity. For example, to set US dollars as the default
- commodity, while also setting the thousands flag and decimal flag
- for that commodity, use:
- D $1,000.00
-
-`C AMOUNT1 = AMOUNT2'
- Specifies a commodity conversion, where the first amount is given
- to be equivalent to the second amount. The first amount should
- use the decimal precision desired during reporting:
- C 1.00 Kb = 1024 bytes
-
-`i, o, b, h'
- These four relate to timeclock support, which permits ledger to
- read timelog files. See the timeclock's documentation for more
- info on the syntax of its timelog files.
-
-
-File: ledger.info, Node: Some typical queries, Next: Budgeting and forecasting, Prev: File format, Up: Running Ledger
-
-2.8 Some typical queries
-========================
-
-A query such as the following shows all expenses since last October,
-sorted by total:
-
- ledger -b "last oct" -s -S T bal ^expenses
-
- From left to right the options mean: Show entries since October,
-2003; show all sub-accounts; sort by the absolute value of the total;
-and report the balance for all expenses.
-
-2.8.1 Reporting monthly expenses
---------------------------------
-
-The following query makes it easy to see monthly expenses, with each
-month's expenses sorted by the amount:
-
- ledger -M --period-sort t reg ^expenses
-
- Now, you might wonder where the money came from to pay for these
-things. To see that report, add `-r', which shows the "related
-account" transactions:
-
- ledger -M --period-sort t -r reg ^expenses
-
- But maybe this prints too much information. You might just want to
-see how much you're spending with your MasterCard. That kind of query
-requires the use of a display predicate, since the transactions
-calculated must match `^expenses', while the transactions displayed
-must match `mastercard'. The command would be:
-
- ledger -M -r -d /mastercard/ reg ^expenses
-
- This query says: Report monthly subtotals; report the "related
-account" transactions; display only related transactions whose account
-matches `mastercard', and base the calculation on transactions matching
-`^expenses'.
-
- This works just as well for report the overall total, too:
-
- ledger -s -r -d /mastercard/ reg ^expenses
-
- The `-s' option subtotals all transactions, just as `-M' subtotaled
-by the month. The running total in both cases is off, however, since a
-display expression is being used.
-
-2.8.2 Visualizing with Gnuplot
-------------------------------
-
-If you have `Gnuplot' installed, you can graph any of the above
-register reports. The script to do this is included in the ledger
-distribution, and is named `scripts/report'. Install `report' anywhere
-along your `PATH', and then use `report' instead of `ledger' when doing
-a register report. The only thing to keep in mind is that you must
-specify `-j' or `-J' to indicate whether Gnuplot should plot the
-amount, or the running total. For example, this command plots total
-monthly expenses made on your MasterCard.
-
- report -j -M -r -d /mastercard/ reg ^expenses
-
- The `report' script is a very simple Bourne shell script, that
-passes a set of scripted commands to Gnuplot. Feel free to modify the
-script to your liking, since you may prefer histograms to line plots,
-for example.
-
-2.8.2.1 Typical plots
-.....................
-
-Here are some useful plots:
-
- report -j -M reg ^expenses # monthly expenses
- report -J reg checking # checking account balance
- report -J reg ^income ^expenses # cash flow report
-
- # net worth report, ignoring non-$ transactions
-
- report -J -l "Ua>={\$0.01}" reg ^assets ^liab
-
- # net worth report starting last February. the use of a display
- # predicate (-d) is needed, otherwise the balance will start at
- # zero, and thus the y-axis will not reflect the true balance
-
- report -J -l "Ua>={\$0.01}" -d "d>=[last feb]" reg ^assets ^liab
-
- The last report uses both a calculation predicate (`-l') and a
-display predicate (`-d'). The calculation predicates limits the report
-to transactions whose amount is greater than $1 (which can only happen
-if the transaction amount is in dollars). The display predicate limits
-the entries _displayed_ to just those since last February, even those
-entries from before then will be computed as part of the balance.
-
-
-File: ledger.info, Node: Budgeting and forecasting, Prev: Some typical queries, Up: Running Ledger
-
-2.9 Budgeting and forecasting
-=============================
-
-2.9.1 Budgeting
----------------
-
-Keeping a budget allows you to pay closer attention to your income and
-expenses, by reporting how far your actual financial activity is from
-your expectations.
-
- To start keeping a budget, put some period entries at the top of your
-ledger file. A period entry is almost identical to a regular entry,
-except that it begins with a tilde and has a period expression in place
-of a payee. For example:
-
- ~ Monthly
- Expenses:Rent $500.00
- Expenses:Food $450.00
- Expenses:Auto:Gas $120.00
- Expenses:Insurance $150.00
- Expenses:Phone $125.00
- Expenses:Utilities $100.00
- Expenses:Movies $50.00
- Expenses $200.00 ; all other expenses
- Assets
-
- ~ Yearly
- Expenses:Auto:Repair $500.00
- Assets
-
- These two period entries give the usual monthly expenses, as well as
-one typical yearly expense. For help on finding out what your average
-monthly expense is for any category, use a command like:
-
- ledger -p "this year" -MAs bal ^expenses
-
- The reported totals are the current year's average for each account.
-
- Once these period entries are defined, creating a budget report is as
-easy as adding `--budget' to the command-line. For example, a typical
-monthly expense report would be:
-
- ledger -M reg ^exp
-
- To see the same report balanced against your budget, use:
-
- ledger --budget -M reg ^exp
-
- A budget report includes only those accounts that appear in the
-budget. To see all expenses balanced against the budget, use
-`--add-budget'. You can even see only the unbudgeted expenses using
-`--unbudgeted':
-
- ledger --unbudgeted -M reg ^exp
-
- You can also use these flags with the `balance' command.
-
-2.9.2 Forecasting
------------------
-
-Sometimes it's useful to know what your finances will look like in the
-future, such as determining when an account will reach zero. Ledger
-makes this easy to do, using the same period entries as are used for
-budgeting. An example forecast report can be generated with:
-
- ledger --forecast "T>{\$-500.00}" register ^assets ^liabilities
-
- This report continues outputting transactions until the running total
-is greater than $-500.00. A final transaction is always output, to
-show you what the total afterwards would be.
-
- Forecasting can also be used with the balance report, but by date
-only, and not against the running total:
-
- ledger --forecast "d<[2010]" bal ^assets ^liabilities
-
-
-File: ledger.info, Node: Keeping a ledger, Next: Using XML, Prev: Running Ledger, Up: Top
-
-3 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 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 GnuCash to maintain
-your ledger, in which case the Ledger program will read GnuCash's data
-files directly. In that case, read the GnuCash manual now, and skip to
-the next chapter.
-
- If you are not using GnuCash, but a text editor to maintain your
-ledger, read on. 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 Ledger about the accounts you
-use. Any time Ledger sees a transaction involving an account it knows
-nothing about, it will create it. If you use a commodity that is new
-to 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 Ledger
-transaction:
-
- 9/29 (100) Pacific Bell
- Expenses:Utilities:Phone $23.00
- Assets:Checking $-23.00
-
- 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 Ledger's scheme of things. In fact, since Ledger is
-smart about many things, you don't need to specify the balanced amount,
-if it is the same as the first line:
-
- 9/29 (100) Pacific Bell
- Expenses:Utilities:Phone $23.00
- Assets:Checking
-
- For this entry, Ledger will figure out that $-23.00 must come from
-`Assets:Checking' in order to balance the entry.
-
-* Menu:
-
-* Stating where money goes::
-* Assets and Liabilities::
-* Commodities and Currencies::
-* Accounts and Inventories::
-* Understanding Equity::
-* Dealing with Petty Cash::
-* Working with multiple funds and accounts::
-* Archiving previous years::
-* Virtual transactions::
-* Automated transactions::
-* Using Emacs to Keep Your Ledger::
-* Using GnuCash to Keep Your Ledger::
-* Using timeclock to record billable time::
-
-
-File: ledger.info, Node: Stating where money goes, Next: Assets and Liabilities, Prev: Keeping a ledger, Up: Keeping a ledger
-
-3.1 Stating where money goes
-============================
-
-Accountants will talk of "credits" and "debits", but the meaning is
-often different from the layman's understanding. To avoid confusion,
-Ledger uses only subtractions and additions, although the underlying
-intent is the same as standard accounting principles.
-
- Recall that every transaction will involve two or more accounts.
-Money is transferred from one or more accounts to one or more other
-accounts. To record the transaction, an amount is _subtracted_ from
-the source accounts, and _added_ to the target accounts.
-
- In order to write a Ledger entry correctly, you must determine where
-the money comes from and where it goes to. For example, when you are
-paid a salary, you must add money to your bank account and also
-subtract it from an income account:
-
- 9/29 My Employer
- Assets:Checking $500.00
- Income:Salary $-500.00
-
- Why is the Income a negative figure? When you look at the balance
-totals for your ledger, you may be surprised to see that Expenses are a
-positive figure, and Income is a negative figure. It may take some
-getting used to, but to properly use a general ledger you must think in
-terms of how money moves. Rather than Ledger "fixing" the minus signs,
-let's understand why they are there.
-
- When you earn money, the money has to come from somewhere. Let's
-call that somewhere "society". In order for society to give you an
-income, you must take money away (withdraw) from society in order to
-put it into (make a payment to) your bank. When you then spend that
-money, it leaves your bank account (a withdrawal) and goes back to
-society (a payment). This is why Income will appear negative--it
-reflects the money you have drawn from society--and why Expenses will
-be positive--it is the amount you've given back. These additions and
-subtractions will always cancel each other out in the end, because you
-don't have the ability to create new money: it must always come from
-somewhere, and in the end must always leave. This is the beginning of
-economy, after which the explanation gets terribly difficult.
-
- Based on that explanation, here's another way to look at your balance
-report: every negative figure means that that account or person or
-place has less money now than when you started your ledger; and every
-positive figure means that that account or person or place has more
-money now that when you started your ledger. Make sense?
-
-
-File: ledger.info, Node: Assets and Liabilities, Next: Commodities and Currencies, Prev: Stating where money goes, Up: Keeping a ledger
-
-3.2 Assets and Liabilities
-==========================
-
-Assets are money that you have, and Liabilities are money that you owe.
-"Liabilities" is just a more inclusive name for Debts.
-
- An Asset is typically increased by transferring money from an Income
-account, such as when you get paid. Here is a typical entry:
-
- 2004/09/29 My Employer
- Assets:Checking $500.00
- Income:Salary
-
- Money, here, comes from an Income account belonging to "My
-Employer", and is transferred to your checking account. The money is
-now yours, which makes it an Asset.
-
- Liabilities track money owed to others. This can happen when you
-borrow money to buy something, or if you owe someone money. Here is an
-example of increasing a MasterCard liability by spending money with it:
-
- 2004/09/30 Restaurant
- Expenses:Dining $25.00
- Liabilities:MasterCard
-
- The Dining account balance now shows $25 spent on Dining, and a
-corresponding $25 owed on the MasterCard--and therefore shown as
-$-25.00. The MasterCard liability shows up as negative because it
-offsets the value of your assets.
-
- The combined total of your Assets and Liabilities is your net worth.
-So to see your current net worth, use this command:
-
- ledger balance ^assets ^liabilities
-
- Relatedly, your Income accounts show up negative, because they
-transfer money _from_ an account in order to increase your assets.
-Your Expenses show up positive because that is where the money went to.
-The combined total of Income and Expenses is your cash flow. A
-positive cash flow means you are spending more than you make, since
-income is always a negative figure. To see your current cash flow, use
-this command:
-
- ledger balance ^income ^expenses
-
- Another common question to ask of your expenses is: How much do I
-spend each month on X? Ledger provides a simple way of displaying
-monthly totals for any account. Here is an example that summarizes
-your monthly automobile expenses:
-
- ledger -M register expenses:auto
-
- This assumes, of course, that you use account names like
-`Expenses:Auto:Gas' and `Expenses:Auto:Repair'.
-
-3.2.1 Tracking reimbursable expenses
-------------------------------------
-
-Sometimes you will want to spend money on behalf of someone else, which
-will eventually get repaid. Since the money is still "yours", it is
-really an asset. And since the expenditure was for someone else, you
-don't want it contaminating your Expenses reports. You will need to
-keep an account for tracking reimbursements.
-
- This is fairly easy to do in ledger. When spending the money, spend
-it _to_ your Assets:Reimbursements, using a different account for each
-person or business that you spend money for. For example:
-
- 2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard
-
- This shows $100.00 spent on a MasterCard at Circuit City, with the
-expense was made on behalf of Company XYZ. Later, when Company XYZ
-pays the amount back, the money will transfer from that reimbursement
-account back to a regular asset account:
-
- 2004/09/29 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ
-
- This deposits the money owed from Company XYZ into a checking
-account, presumably because they paid the amount back with a check.
-
- But what to do if you run your own business, and you want to keep
-track of expenses made on your own behalf, while still tracking
-everything in a single ledger file? This is more complex, because you
-need to track two separate things: 1) The fact that the money should be
-reimbursed to you, and 2) What the expense account was, so that you can
-later determine where your company is spending its money.
-
- This kind of transaction is best handled with mirrored transactions
-in two different files, one for your personal accounts, and one for your
-company accounts. But keeping them in one file involves the same kinds
-of transactions, so those are what is shown here. First, the personal
-entry, which shows the need for reimbursement:
-
- 2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard
-
- This is the same as above, except that you own Company XYZ, and are
-keeping track of its expenses in the same ledger file. This entry
-should be immediately followed by an equivalent entry, which shows the
-kind of expense, and also notes the fact that $100.00 is now payable to
-you:
-
- 2004/09/29 Circuit City
- Company XYZ:Expenses:Computer:Software $100.00
- Company XYZ:Accounts Payable:Your Name
-
- This second entry shows that Company XYZ has just spent $100.00 on
-software, and that this $100.00 came from Your Name, which must be paid
-back.
-
- These two entries can also be merged, to make things a little
-clearer. Note that all amounts must be specified now:
-
- 2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard $-100.00
- Company XYZ:Expenses:Computer:Software $100.00
- Company XYZ:Accounts Payable:Your Name $-100.00
-
- To "pay back" the reimbursement, just reverse the order of
-everything, except this time drawing the money from a company asset,
-paying it to accounts payable, and then drawing it again from the
-reimbursement account, and paying it to your personal asset account.
-It's easier shown than said:
-
- 2004/10/15 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ $-100.00
- Company XYZ:Accounts Payable:Your Name $100.00
- Company XYZ:Assets:Checking $-100.00
-
- And now the reimbursements account is paid off, accounts payable is
-paid off, and $100.00 has been effectively transferred from the
-company's checking account to your personal checking account. The
-money simply "waited"--in both `Assets:Reimbursements:Company XYZ', and
-`Company XYZ:Accounts Payable:Your Name'--until such time as it could
-be paid off.
-
- The value of tracking expenses from both sides like that is that you
-do not contaminate your personal expense report with expenses made on
-behalf of others, while at the same time making it possible to generate
-accurate reports of your company's expenditures. It is more verbose
-than just paying for things with your personal assets, but it gives you
-a very accurate information trail.
-
- The advantage to keep these doubled entries together is that they
-always stay in sync. The advantage to keeping them apart is that it
-clarifies the transfer's point of view. To keep the transactions in
-separate files, just separate the two entries that were joined above.
-For example, for both the expense and the pay-back shown above, the
-following four entries would be created. Two in your personal ledger
-file:
-
- 2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard $-100.00
-
- 2004/10/15 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ $-100.00
-
- And two in your company ledger file:
-
- !account Company XYZ
-
- 2004/09/29 Circuit City
- Expenses:Computer:Software $100.00
- Accounts Payable:Your Name $-100.00
-
- 2004/10/15 Company XYZ
- Accounts Payable:Your Name $100.00
- Assets:Checking $-100.00
-
- !end
-
- (Note: The `!account' above means that all accounts mentioned in the
-file are children of that account. In this case it means that all
-activity in the file relates to Company XYZ).
-
- After creating these entries, you will always know that $100.00 was
-spent using your MasterCard on behalf of Company XYZ, and that Company
-XYZ spent the money on computer software and paid it back about two
-weeks later.
-
-
-File: ledger.info, Node: Commodities and Currencies, Next: Accounts and Inventories, Prev: Assets and Liabilities, Up: Keeping a ledger
-
-3.3 Commodities and Currencies
-==============================
-
-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 appearing after the amount refer to
-commodities. Here are some valid currency and commodity specifiers:
-
- $20.00 ; currency: twenty US dollars
- 40 AAPL ; commodity: 40 shares of Apple stock
- 60 DM ; currency: 60 Deutsch Mark
- £50 ; currency: 50 British pounds
- 50 EUR ; currency: 50 Euros (or use appropriate symbol)
-
- 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 brokerage account
-contains both cash, gold, and several stock quantities, the balance
-might look like:
-
- $200.00
- 100.00 AU
- AAPL 40
- BORL 100
- FEQTX 50 Assets:Brokerage
-
- 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
-any commodity, in which case the balance will be computed in terms of
-that commodity. The usual way to specify prices is with a price
-history file, which might look like this:
-
- P 2004/06/21 02:18:01 FEQTX $22.49
- P 2004/06/21 02:18:01 BORL $6.20
- P 2004/06/21 02:18:02 AAPL $32.91
- P 2004/06/21 02:18:02 AU $400.00
-
- Specify the price history to use with the `--price-db' option, with
-the `-V' option to report in terms of current market value:
-
- ledger --price-db prices.db -V balance brokerage
-
- The balance for your brokerage account will be reported in US
-dollars, since the prices database uses that currency.
-
- $40880.00 Assets:Brokerage
-
- 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, in terms of the
-current price of gold:
-
- ledger -T "{1 AU}*(O/P{1 AU})" balance checking
-
- Although the total expression appears complex, it is simply saying
-that the reported total should be in multiples of AU units, where the
-quantity is the account total divided by the price of one AU. Without
-the initial multiplication, the reported total would still use the
-dollars commodity, since multiplying or dividing amounts always keeps
-the left value's commodity. The result of this command might be:
-
- 14.01 AU Assets:Checking
-
-3.3.1 Commodity price histories
--------------------------------
-
-Whenever a commodity is purchased using a different commodity (such as
-a share of common stock using dollars), it establishes a price for that
-commodity on that day. It is also possible, by recording price details
-in a ledger file, to specify other prices for commodities at any given
-time. Such price entries might look like those below:
-
- P 2004/06/21 02:17:58 TWCUX $27.76
- P 2004/06/21 02:17:59 AGTHX $25.41
- P 2004/06/21 02:18:00 OPTFX $39.31
- P 2004/06/21 02:18:01 FEQTX $22.49
- P 2004/06/21 02:18:02 AAPL $32.91
-
- By default, ledger will not consider commodity prices when generating
-its various reports. It will always report balances in terms of the
-commodity total, rather than the current value of those commodities.
-To enable pricing reports, use one of the commodity reporting options.
-
-3.3.2 Commodity equivalencies
------------------------------
-
-Sometimes a commodity has several forms which are all equivalent. An
-example of this is time. Whether tracked in terms of minutes, hours or
-days, it should be possible to convert between the various forms.
-Doing this requires the use of commodity equivalencies.
-
- For example, you might have the following two transactions, one which
-transfers an hour of time into a `Billable' account, and another which
-decreases the same account by ten minutes. The resulting report will
-indicate that fifty minutes remain:
-
- 2005/10/01 Work done for company
- Billable:Client 1h
- Project:XYZ
-
- 2005/10/02 Return ten minutes to the project
- Project:XYZ 10m
- Billable:Client
-
- Reporting the balance for this ledger file produces:
-
- 50.0m Billable:Client
- -50.0m Project:XYZ
-
- This example works because ledger already knows how to handle
-seconds, minutes and hours, as part of its time tracking support.
-Defining other equivalencies is simple. The following is an example
-that creates data equivalencies, helpful for tracking bytes, kilobytes,
-megabytes, and more:
-
- C 1.00 Kb = 1024 b
- C 1.00 Mb = 1024 Kb
- C 1.00 Gb = 1024 Mb
- C 1.00 Tb = 1024 Gb
-
- Each of these definitions correlates a commodity (such as `Kb') and
-a default precision, with a certain quantity of another commodity. In
-the above example, kilobytes are reporetd with two decimal places of
-precision and each kilobyte is equal to 1024 bytes.
-
- Equivalency chains can be as long as desired. Whenever a commodity
-would report as a decimal amount (less than `1.00'), the next smallest
-commodity is used. If a commodity could be reported in terms of a
-higher commodity without resulting to a partial fraction, then the
-larger commodity is used.
-
-
-File: ledger.info, Node: Accounts and Inventories, Next: Understanding Equity, Prev: Commodities and Currencies, Up: Keeping a ledger
-
-3.4 Accounts and Inventories
-============================
-
-Since 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:
-
- 9/29 Get some stuff at the Inn
- Places:Black's Tavern -3 Apples
- Places:Black's Tavern -5 Steaks
- EverQuest:Inventory
-
- Now your EverQuest:Inventory has 3 apples and 5 steaks in it. The
-amounts are negative, because you are taking _from_ Black's Tavern in
-order to add to 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:
-
- 10/2 Sturm Brightblade
- EverQuest:Inventory -2 Steaks
- EverQuest:Inventory 15 Gold
-
- Now you've turned 2 steaks into 15 gold, courtesy of your customer,
-Sturm Brightblade.
-
-
-File: ledger.info, Node: Understanding Equity, Next: Dealing with Petty Cash, Prev: Accounts and Inventories, Up: Keeping a ledger
-
-3.5 Understanding Equity
-========================
-
-The most confusing entry in any ledger will be your equity account--
-because starting balances can't come out of nowhere.
-
- When you first start your ledger, you will likely already have money
-in some of your accounts. Let's say there's $100 in your checking
-account; then add an entry to your ledger to reflect this amount.
-Where will money come from? The answer: your equity.
-
- 10/2 Opening Balance
- Assets:Checking $100.00
- Equity:Opening Balances
-
- But what is equity? You may have heard of equity when people talked
-about house mortgages, as "the part of the house that you own".
-Basically, equity is like the value of something. If you own a car
-worth $5000, then you have $5000 in equity in that car. In order to
-turn that car (a commodity) into a cash flow, or a credit to your bank
-account, you will have to debit the equity by selling it.
-
- When you start a ledger, you are probably already worth something.
-Your net worth is your current equity. By transferring the money in
-the ledger from your equity to your bank accounts, you are crediting
-the ledger account based on your prior equity. That is why, when you
-look at the balance report, you will see a large negative number for
-Equity that never changes: Because that is what you were worth (what
-you debited from yourself in order to start the ledger) before the
-money started moving around. If the total positive value of your
-assets is greater than the absolute value of your starting equity, it
-means you are making money.
-
- Clear as mud? Keep thinking about it. Until you figure it out, put
-`-Equity' at the end of your balance command, to remove the confusing
-figure from the total.
-
-
-File: ledger.info, Node: Dealing with Petty Cash, Next: Working with multiple funds and accounts, Prev: Understanding Equity, Up: Keeping a ledger
-
-3.6 Dealing with Petty Cash
-===========================
-
-Something that stops many people from keeping a ledger at all is the
-insanity of tracking small cash expenses. They rarely generate a
-receipt, and there are often a lot of small transactions, rather than a
-few large ones, as with checks.
-
- One solution is: don't bother. Move your spending to a debit card,
-but in general ignore cash. Once you withdraw it from the ATM, mark it
-as already spent to an `Expenses:Cash' category:
-
- 2004/03/15 ATM
- Expenses:Cash $100.00
- Assets:Checking
-
- If at some point you make a large cash expense that you want to
-track, just "move" the amount of the expense from `Expenses:Cash' into
-the target account:
-
- 2004/03/20 Somebody
- Expenses:Food $65.00
- Expenses:Cash
-
- This way, you can still track large cash expenses, while ignoring all
-of the smaller ones.
-
-
-File: ledger.info, Node: Working with multiple funds and accounts, Next: Archiving previous years, Prev: Dealing with Petty Cash, Up: Keeping a ledger
-
-3.7 Working with multiple funds and accounts
-============================================
-
-There are situations when the accounts you're tracking are different
-between your clients and the financial institutions where money is
-kept. An example of this is working as the treasurer for a religious
-institution. From the secular point of view, you might be working with
-three different accounts:
-
- * Checking
-
- * Savings
-
- * Credit Card
-
- From a religious point of view, the community expects to divide its
-resources into multiple "funds", from which it makes purchases or
-reserves resources for later:
-
- * School fund
-
- * Building fund
-
- * Community fund
-
- The problem with this kind of setup is that when you spend money, it
-comes from two or more places at once: the account and the fund. And
-yet, the correlation of amounts between funds and accounts is rarely
-one-to-one. What if the school fund has `$500.00', but `$400.00' of
-that comes from Checking, and `$100.00' from Savings?
-
- Traditional finance packages require that the money reside in only
-one place. But there are really two "views" of the data: from the
-account point of view and from the fund point of view - yet both sets
-should reflect the same overall expenses and cash flow. It's simply
-where the money resides that differs.
-
- This situation can be handled one of two ways. The first is using
-virtual transactions to represent the fact that money is moving to and
-from two kind of accounts at the same time:
-
- 2004/03/20 Contributions
- Assets:Checking $500.00
- Income:Donations
-
- 2004/03/25 Distribution of donations
- [Funds:School] $300.00
- [Funds:Building] $200.00
- [Assets:Checking] $-500.00
-
- The use of square brackets in the second entry ensures that the
-virtual transactions balance to zero. Now money can be spent directly
-from a fund at the same time as money is drawn from a physical account:
-
- 2004/03/25 Payment for books (paid from Checking)
- Expenses:Books $100.00
- Assets:Checking $-100.00
- (Funds:School) $-100.00
-
- When reports are generated, by default they'll appear in terms of the
-funds. In this case, you will likely want to mask out your `Assets'
-account, because otherwise the balance won't make much sense:
-
- ledger bal -^Assets
-
- If the `--real' option is used, the report will be in terms of the
-real accounts:
-
- ledger --real bal
-
- If more asset accounts are needed as the source of a transaction,
-just list them as you would normally, for example:
-
- 2004/03/25 Payment for books (paid from Checking)
- Expenses:Books $100.00
- Assets:Checking $-50.00
- Liabilities:Credit Card $-50.00
- (Funds:School) $-100.00
-
- The second way of tracking funds is to use entry codes. In this
-respect the codes become like virtual accounts that embrace the entire
-set of transactions. Basically, we are associating an entry with a
-fund by setting its code. Here are two entries that desposit money
-into, and spend money from, the `Funds:School' fund:
-
- 2004/03/25 (Funds:School) Donations
- Assets:Checking $100.00
- Income:Donations
-
- 2004/04/25 (Funds:School) Payment for books
- Expenses:Books $50.00
- Assets:Checking
-
- Note how the accounts now relate only to the real accounts, and any
-balance or registers reports will reflect this. That the entries
-relate to a particular fund is kept only in the code.
-
- How does this become a fund report? By using the `--code-as-payee'
-option, you can generate a register report where the payee for each
-transaction shows the code. Alone, this is not terribly interesting;
-but when combined with the `--by-payee' option, you will now see
-account subtotals for any transactions related to a specific fund. So,
-to see the current monetary balances of all funds, the command would be:
-
- ledger --code-as-payee -P reg ^Assets
-
- Or to see a particular funds expenses, the `School' fund in this
-case:
-
- ledger --code-as-payee -P reg ^Expenses -- School
-
- Both approaches yield different kinds of flexibility, depending on
-how you prefer to think of your funds: as virtual accounts, or as tags
-associated with particular entries. Your own tastes will decide which
-is best for your situation.
-
-
-File: ledger.info, Node: Archiving previous years, Next: Virtual transactions, Prev: Working with multiple funds and accounts, Up: Keeping a ledger
-
-3.8 Archiving previous years
-============================
-
-After a while, your ledger can get to be pretty large. While this will
-not slow down the ledger program much--it's designed to process ledger
-files very quickly--things can start to feel "messy"; and it's a
-universal complaint that when finances feel messy, people avoid them.
-
- Thus, archiving the data from previous years into their own files can
-offer a sense of completion, and freedom from the past. But how to
-best accomplish this with the ledger program? There are two commands
-that make it very simple: `print', and `equity'.
-
- Let's take an example file, with data ranging from year 2000 until
-2004. We want to archive years 2000 and 2001 to their own file,
-leaving just 2003 and 2004 in the current file. So, use `print' to
-output all the earlier entries to a file called `ledger-old.dat':
-
- ledger -f ledger.dat -b 2000 -e 2001 print > ledger-old.dat
-
- To delete older data from the current ledger file, use `print'
-again, this time specifying year 2002 as the starting date:
-
- ledger -f ledger.dat -b 2002 print > x
- mv x ledger.dat
-
- However, now the current file contains _only_ transactions from 2002
-onward, which will not yield accurate present-day balances, because the
-net income from previous years is no longer being tallied. To
-compensate for this, we must append an equity report for the old ledger
-at the beginning of the new one:
-
- ledger -f ledger-old.dat equity > equity.dat
- cat equity.dat ledger.dat > x
- mv x ledger.dat
- rm equity.dat
-
- Now the balances reported from `ledger.dat' are identical to what
-they were before the data was split.
-
- How often should you split your ledger? You never need to, if you
-don't want to. Even eighty years of data will not slow down ledger
-much--and that's just using present day hardware! Or, you can keep the
-previous and current year in one file, and each year before that in its
-own file. It's really up to you, and how you want to organize your
-finances. For those who also keep an accurate paper trail, it might be
-useful to archive the older years to their own files, then burn those
-files to a CD to keep with the paper records--along with any electronic
-statements received during the year. In the arena of organization,
-just keep in mind this maxim: Do whatever keeps you doing it.
-
-
-File: ledger.info, Node: Virtual transactions, Next: Automated transactions, Prev: Archiving previous years, Up: Keeping a ledger
-
-3.9 Virtual transactions
-========================
-
-A virtual transaction is when you, in your mind, see money as moving to
-a certain place, when in reality that money has not moved at all.
-There are several scenarios in which this type of tracking comes in
-handy, and each of them will be discussed in detail.
-
- To enter a virtual transaction, surround the account name in
-parentheses. This form of usage does not need to balance. However, if
-you want to ensure the virtual transaction balances with other virtual
-transactions in the same entry, use square brackets. For example:
-
- 10/2 Paycheck
- Assets:Checking $1000.00
- Income:Salary $-1000.00
- (Debt:Alimony) $200.00
-
- In this example, after receiving a paycheck an alimony debt is
-increased--even though no money has moved around yet.
-
- 10/2 Paycheck
- Assets:Checking $1000.00
- Income:Salary $-1000.00
- [Savings:Trip] $200.00
- [Assets:Checking] $-200.00
-
- In this example, $200 has been deducted from checking toward savings
-for a trip. It will appear as though the money has been moved from the
-account into `Savings:Trip', although no money has actually moved
-anywhere.
-
- When balances are displayed, virtual transactions will be factored
-in. To view balances without any virtual balances factored in, using
-the `-R' flag, for "reality".
-
-
-File: ledger.info, Node: Automated transactions, Next: Using Emacs to Keep Your Ledger, Prev: Virtual transactions, Up: Keeping a ledger
-
-3.10 Automated transactions
-===========================
-
-As a Bahá'í, I need to compute Huqúqu'lláh whenever I acquire
-assets. It is similar to tithing for Jews and Christians, or to Zakát
-for Muslims. The exact details of computing Huqúqu'lláh are somewhat
-complex, but if you have further interest, please consult the Web.
-
- Ledger makes this otherwise difficult law very easy. Just set up an
-automated transaction at the top of your ledger file:
-
- ; This automated entry will compute Huqúqu'lláh based on this
- ; journal's transactions. Any that match will affect the
- ; Liabilities:Huququ'llah account by 19% of the value of that
- ; transaction.
-
- = /^(?:Income:|Expenses:(?:Business|Rent$|Furnishings|Taxes|Insurance))/
- (Liabilities:Huququ'llah) 0.19
-
- This automated transaction works by looking at each transaction in
-the ledger file. If any match the given value expression, 19% of the
-transaction's value is applied to the `Liabilities:Huququ'llah'
-account. So, if $1000 is earned from `Income:Salary', $190 is added to
-`Liabilities:Huqúqu'lláh'; if $1000 is spent on Rent, $190 is
-subtracted. The ultimate balance of Huqúqu'lláh reflects how much is
-owed in order to fulfill one's obligation to Huqúqu'lláh. When ready
-to pay, just write a check to cover the amount shown in
-`Liabilities:Huququ'llah'. That entry would look like:
-
- 2003/01/01 (101) Baha'i Huqúqu'lláh Trust
- Liabilities:Huququ'llah $1,000.00
- Assets:Checking
-
- That's it. To see how much Huqúq is currently owed based on your
-ledger entries, use:
-
- ledger balance Liabilities:Huquq
-
- This works fine, but omits one aspect of the law: that Huquq is only
-due once the liability exceeds the value of 19 mithqáls of gold (which
-is roughly 2.22 ounces). So what we want is for the liability to
-appear in the balance report only when it exceeds the present day value
-of 2.22 ounces of gold. This can be accomplished using the command:
-
- ledger -Q -t "/Liab.*Huquq/?(a/P{2.22 AU}<={-1.0}&a):a" -s bal liab
-
- With this command, the current price for gold is downloaded, and the
-Huqúqu'lláh is reported only if its value exceeds that of 2.22 ounces
-of gold. If you wish the liability to be reflected in the parent
-subtotal either way, use this instead:
-
- ledger -Q -T "/Liab.*Huquq/?(O/P{2.22 AU}<={-1.0}&O):O" -s bal liab
-
- In some cases, you may wish to refer to the account of whichever
-transaction matched your automated entry's value expression. To do
-this, use the special account name `$account':
-
- = /^Some:Long:Account:Name/
- [$account] -0.10
- [Savings] 0.10
-
- This example causes 10% of the matching account's total to be
-deferred to the `Savings' account--as a balanced virtual transaction,
-which may be excluded from reports by using `--real'.
-
-
-File: ledger.info, Node: Using Emacs to Keep Your Ledger, Next: Using GnuCash to Keep Your Ledger, Prev: Automated transactions, Up: Keeping a ledger
-
-3.11 Using Emacs to Keep Your Ledger
-====================================
-
-In the Ledger tarball is an Emacs module, `ledger.el'. This module
-makes the process of keeping a text ledger much easier for Emacs users.
-I recommend putting this at the top of your ledger file:
-
- ; -*-ledger-*-
-
- And this in your `.emacs' file, after copying `ledger.el' to your
-`site-lisp' directory:
-
- (load "ledger")
-
- Now when you edit your ledger file, it will be in `ledger-mode'.
-`ledger-mode' adds these commands:
-
-*C-c C-a*
- For quickly adding new entries based on the form of older ones (see
- previous section).
-
-*C-c C-c*
- Toggles the "cleared" flag of the transaction under point.
-
-*C-c C-d*
- Delete the entry under point.
-
-*C-c C-r*
- Reconciles an account by displaying the transactions in another
- buffer, where simply hitting the spacebar will toggle the pending
- flag of the transaction in the ledger. Once all the appropriate
- transactions have been marked, press C-c C-c in the reconcile
- buffer to "commit" the reconciliation, which will mark all of the
- entries as cleared, and display the new cleared balance in the
- minibuffer.
-
-*C-c C-m*
- Set the default month for new entries added with C-c C-a. This is
- handy if you have a large number of transactions to enter from a
- previous month.
-
-*C-c C-y*
- Set the default year for new entries added with C-c C-a. This is
- handy if you have a large number of transactions to enter from a
- previous year.
-
- Once you enter the reconcile buffer, there are several key commands
-available:
-
-*RET*
- Visit the ledger file entry corresponding to the reconcile entry.
-
-*C-c C-c*
- Commit the reconcialation. This marks all of the marked
- transactions as "cleared", saves the ledger file, and then
- displays the new cleared balance.
-
-*C-l*
- Refresh the reconcile buffer by re-reading transactions from the
- ledger data file.
-
-*SPC*
- Toggle the transaction under point as cleared.
-
-*a*
- Add a new entry to the ledger data file, and refresh the reconcile
- buffer to include its transactions (if the entry is added to the
- same account as the one being reconciled).
-
-*d*
- Delete the entry related to the transaction under point. Note:
- This may result in multiple transactions being deleted.
-
-*n*
- Move to the next line.
-
-*p*
- Move to the previous line.
-
-*C-c C-r*
-
-*r*
- Attempt to auto-reconcile the transactions to the entered balance.
- If it can do so, it will mark all those transactions as pending
- that would yield the specified balance.
-
-*C-x C-s*
-
-*s*
- Save the ledger data file, and show the current cleared balance for
- the account being reconciled.
-
-*q*
- Quit the reconcile buffer.
-
- There is also an `emacs' command which can be used to output reports
-in a format directly `read'-able from Emacs Lisp.
-
-
-File: ledger.info, Node: Using GnuCash to Keep Your Ledger, Next: Using timeclock to record billable time, Prev: Using Emacs to Keep Your Ledger, Up: Keeping a ledger
-
-3.12 Using GnuCash to Keep Your Ledger
-======================================
-
-The Ledger tool is fast and simple, but it offers no custom method for
-actually editing the ledger. It assumes you know how to use a text
-editor, and like doing so. Perhaps an Emacs mode will appear someday
-soon to make editing Ledger's data files much easier.
-
- Until then, you are free to use GnuCash to maintain your ledger, and
-the Ledger program for querying and reporting on the contents of that
-ledger. It takes a little longer to parse the XML data format that
-GnuCash uses, but the end result is identical.
-
- Then again, why would anyone use a Gnome-centric, 35 megabyte
-behemoth to edit their data, and a one megabyte binary to query it?
-
-
-File: ledger.info, Node: Using timeclock to record billable time, Prev: Using GnuCash to Keep Your Ledger, Up: Keeping a ledger
-
-3.13 Using timeclock to record billable time
-============================================
-
-The timeclock tool makes it easy to track time events, like clocking
-into and out of a particular job. These events accumulate in a timelog
-file.
-
- Each in/out event may have an optional description. If the "in"
-description is a ledger account name, these in/out pairs may be viewed
-as virtual transactions, adding time commodities (hours) to that
-account.
-
- For example, the command-line version of the timeclock tool could be
-used to begin a timelog file like:
-
- export TIMELOG=$HOME/.timelog
- ti ClientOne category
- sleep 10
- to waited for ten seconds
-
- The `.timelog' file now contains:
-
- i 2004/10/06 15:21:00 ClientOne category
- o 2004/10/06 15:21:10 waited for ten seconds
-
- Ledger parses this directly, as if it had seen the following entry:
-
- 2004/10/06 category
- (ClientOne) 10s
-
- In other words, the timelog event pair is seen as adding 0.00277h
-(ten seconds) worth of time to the `ClientOne' account. This would be
-considered billable time, which later could be invoiced and credited to
-accounts receivable:
-
- 2004/11/01 (INV#1) ClientOne, Inc.
- Receivable:ClientOne $0.10
- ClientOne -0.00277h @ $35.00
-
- The above transaction converts the clocked time into an invoice for
-the time spent, at an hourly rate of $35. Once the invoice is paid,
-the money is deposited from the receivable account into a checking
-account:
-
- 2004/12/01 ClientOne, Inc.
- Assets:Checking $0.10
- Receivable:ClientOne
-
- And now the time spent has been turned into hard cash in the checking
-account.
-
- The advantage to using timeclock and invoicing to bill time is that
-you will always know, by looking at the balance report, exactly how
-much unbilled and unpaid time you've spent working for any particular
-client.
-
- I like to `!include' my timelog at the top of my company's
-accounting ledger, with the attached prefix `Billable':
-
- ; -*-ledger-*-
-
- ; This is the ledger file for my company. But first, include the
- ; timelog data, entering all of the time events within the umbrella
- ; account "Billable".
-
- !account Billable
- !include /home/johnw/.timelog
- !end
-
- ; Here follows this fiscal year's transactions for the company.
-
- 2004/11/01 (INV#1) ClientOne, Inc.
- Receivable:ClientOne $0.10
- Billable:ClientOne -0.00277h @ $35.00
-
- 2004/12/01 ClientOne, Inc.
- Assets:Checking $0.10
- Receivable:ClientOne
-
-
-File: ledger.info, Node: Using XML, Prev: Keeping a ledger, Up: Top
-
-4 Using XML
-***********
-
-By default, Ledger uses a human-readable data format, and displays its
-reports in a manner meant to be read on screen. For the purpose of
-writing tools which use Ledger, however, it is possible to read and
-display data using XML. This chapter documents that format.
-
- The general format used for Ledger data is:
-
- <?xml version="1.0"?>
- <ledger>
- <entry>...</entry>
- <entry>...</entry>
- <entry>...</entry>...
- </ledger>
-
- The data stream is enclosed in a `ledger' tag, which contains a
-series of one or more entries. Each `entry' describes the entry and
-contains a series of one or more transactions:
-
- <entry>
- <en:date>2004/03/01</en:date>
- <en:cleared/>
- <en:code>100</en:code>
- <en:payee>John Wiegley</en:payee>
- <en:transactions>
- <transaction>...</transaction>
- <transaction>...</transaction>
- <transaction>...</transaction>...
- </en:transactions>
- </entry>
-
- The date format for `en:date' is always `YYYY/MM/DD'. The
-`en:cleared' tag is optional, and indicates whether the transaction has
-been cleared or not. There is also an `en:pending' tag, for marking
-pending transactions. The `en:code' and `en:payee' tags both contain
-whatever text the user wishes.
-
- After the initial entry data, there must follow a set of transactions
-marked with `en:transactions'. Typically these transactions will all
-balance each other, but if not they will be automatically balanced into
-an account named `<Unknown>'.
-
- Within the `en:transactions' tag is a series of one or more
-`transaction''s, which have the following form:
-
- <transaction>
- <tr:account>Expenses:Computer:Hardware</tr:account>
- <tr:amount>
- <value type="amount">
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
- </value>
- </tr:amount>
- </transaction>
-
- This is a basic transaction. It may also be begin with `tr:virtual'
-and/or `tr:generated' tags, to indicate virtual and auto-generated
-transactions. Then follows the `tr:account' tag, which contains the
-full name of the account the transaction is related to. Colons
-separate parent from child in an account name.
-
- Lastly follows the amount of the transaction, indicated by
-`tr:amount'. Within this tag is a `value' tag, of which there are four
-different kinds, each with its own format:
-
- 1. boolean
-
- 2. integer
-
- 3. amount
-
- 4. balance
-
- The format of a boolean value is `true' or `false' surrounded by a
-`boolean' tag, for example:
-
- <boolean>true</boolean>
-
- The format of an integer value is the numerical value surrounded by
-an `integer' tag, for example:
-
- <integer>12036</integer>
-
- The format of an amount contains two members, the commodity and the
-quantity. The commodity can have a set of flags that indicate how to
-display it. The meaning of the flags (all of which are optional) are:
-
-*P*
- The commodity is prefixed to the value.
-
-*S*
- The commodity is separated from the value by a space.
-
-*T*
- Thousands markers are used to display the amount.
-
-*E*
- The format of the amount is European, with period used as a
- thousands marker, and comma used as the decimal point.
-
- The actual quantity for an amount is an integer of arbitrary size.
-Ledger uses the GNU multi-precision math library to handle such values.
-The XML format assumes the reader to be equally capable. Here is an
-example amount:
-
- <value type="amount">
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
- </value>
-
- Lastly, a balance value contains a series of amounts, each with a
-different commodity. Unlike the name, such a value does need to
-balance. It is called a balance because it sums several amounts. For
-example:
-
- <value type="balance">
- <balance>
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
- <amount>
- <commodity flags="TE">DM</commodity>
- <quantity>200.00</quantity>
- </amount>
- </balance>
- </value>
-
- That is the extent of the XML data format used by Ledger. It will
-output such data if the `xml' command is used, and can read the same
-data as long as the `expat' library was available when Ledger was built.
-
-
-
-Tag Table:
-Node: Top1762
-Node: Introduction3440
-Ref: Introduction-Footnote-19380
-Node: Building the program9457
-Node: Getting help10004
-Node: Running Ledger10414
-Node: Usage overview11934
-Ref: Usage overview-Footnote-145404
-Ref: Usage overview-Footnote-245522
-Node: Commands45627
-Node: Options50856
-Node: Basic options51717
-Node: Report filtering53902
-Node: Output customization57782
-Node: Commodity reporting62687
-Node: Environment variables64785
-Node: Format strings65433
-Node: Value expressions70805
-Node: Period expressions77136
-Node: File format78724
-Node: Some typical queries83592
-Node: Budgeting and forecasting87314
-Node: Keeping a ledger90054
-Node: Stating where money goes92763
-Node: Assets and Liabilities95416
-Node: Commodities and Currencies103561
-Node: Accounts and Inventories109722
-Node: Understanding Equity111317
-Node: Dealing with Petty Cash113224
-Node: Working with multiple funds and accounts114321
-Node: Archiving previous years119037
-Node: Virtual transactions121561
-Node: Automated transactions123237
-Node: Using Emacs to Keep Your Ledger126257
-Node: Using GnuCash to Keep Your Ledger129328
-Node: Using timeclock to record billable time130237
-Node: Using XML132997
-
-End Tag Table
diff --git a/docs/ledger.texi b/docs/ledger.texi
deleted file mode 100644
index bd42a3b0..00000000
--- a/docs/ledger.texi
+++ /dev/null
@@ -1,3960 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-
-@setfilename ledger.info
-@settitle Ledger: Command-Line Accounting
-
-@dircategory User Applications
-@copying
-Copyright (c) 2003-2006, John Wiegley. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-- Neither the name of New Artisans LLC nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-@end copying
-
-@documentencoding iso-8859-1
-
-@iftex
-@finalout
-@end iftex
-
-@titlepage
-@title Ledger: Command-Line Accounting
-@author John Wiegley
-@end titlepage
-
-@direntry
-* Ledger: (ledger). Command Line Accounting
-@end direntry
-
-@contents
-
-@ifnottex
-@node Top, Introduction, (dir), (dir)
-@top Overview
-
-@insertcopying
-@end ifnottex
-
-@menu
-* Introduction::
-* Running Ledger::
-* Keeping a ledger::
-* Using XML::
-@end menu
-
-@node Introduction, Running Ledger, Top, Top
-@chapter Introduction
-
-Ledger is an accounting tool with the moxie to exist. It provides no
-bells or whistles, and returns the user to the days before user
-interfaces were even a twinkling in their father's CRT.
-
-What it does offer is a double-entry accounting ledger with all the
-flexibility and muscle of its modern day cousins, without any of the
-fat. Think of it as the Bran Muffin of accounting tools.
-
-To use it, you need to start keeping a ledger. This is the basis of
-all accounting, and if you haven't started yet, now is the time to
-learn. The little booklet that comes with your checkbook is a ledger,
-so we'll describe double-entry accounting in terms of that.
-
-A checkbook ledger records debits (subtractions, or withdrawals) and
-credits (additions, or deposits) with reference to a single account:
-the checking account. Where the money comes from, and where it goes
-to, are described in the payee field, where you write the person or
-company's name. The ultimate aim of keeping a checkbook ledger is to
-know how much money is available to spend. That's really the aim of
-all ledgers.
-
-What computers add is the ability to walk through these transactions,
-and tell you things about your spending habits; to let you devise
-budgets and get control over your spending; to squirrel away money
-into virtual savings account without having to physically move money
-around; etc. As you keep your ledger, you are recording information
-about your life and habits, and sometimes that information can start
-telling you things you aren't aware of. Such is the aim of all good
-accounting tools.
-
-The next step up from a checkbook ledger, is a ledger that keeps track
-of all your accounts, not just checking. In such a ledger, you record
-not only who gets paid---in the case of a debit---but where the money
-came from. In a checkbook ledger, its assumed that all the money
-comes from your checking account. But in a general ledger, you write
-transaction two-lines: the source account and target account.
-@emph{There must always be a debit from at least one account for every
-credit made to another account}. This is what is meant by
-``double-entry'' accounting: the ledger must always balance to zero,
-with an equal number of debits and credits.
-
-For example, let's say you have a checking account and a brokerage
-account, and you can write checks from both of them. Rather than keep
-two checkbooks, you decide to use one ledger for both. In this
-general ledger you need to record a payment to Pacific Bell for your
-monthly phone bill. The cost is $23.00, let's say, and you want to
-pay it from your checking account. In the general ledger you need to
-say where the money came from, in addition to where it's going to.
-The entry might look like this:
-
-@smallexample
-9/29 BAL Pacific Bell $-200.00 $-200.00
- Equity:Opening Balances $200.00
-9/29 BAL Checking $100.00 $100.00
- Equity:Opening Balances $-100.00
-9/29 100 Pacific Bell $23.00 $223.00
- Checking $-23.00 $77.00
-@end smallexample
-
-The first line shows a payment to Pacific Bell for $23.00. Because
-there is no ``balance'' in a general ledger---it's always zero---we
-write in the total balance of all payments to ``Pacific Bell'', which
-now is $223.00 (previously the balance was $200.00). This is done by
-looking at the last entry for ``Pacific Bell'' in the ledger, adding
-$23.00 to that amount, and writing the total in the balance column.
-And the money came from ``Checking''---a withdrawal of $23.00---which
-leaves the ending balance in ``Checking'' at $77.00. This is a very
-manual procedure; but that's where computers come in...
-
-The transaction must balance to $0: $23 went to Pacific Bell, $23 came
-from Checking. There is nothing left over to be accounted for, since
-the money has simply moved from one account to another. This is the
-basis of double-entry accounting: that money never pops in or out of
-existence; it is always a transaction from one account 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 a
-payment is written into one, you write a corresponding withdrawal into
-the other. This makes it easier to write in a ``running balance'',
-since you don't have to look back at the last time the account was
-referenced---but it also means having a lot of ledger books, if you
-deal with multiple accounts.
-
-Enter the beauty of computerized accounting. The purpose of the
-Ledger program is to make general ledger accounting simple, by keeping
-track of the balances for you. Your only job is to enter the
-transactions. If a transaction does not balance, Ledger displays an
-error and indicates the incorrect transaction.@footnote{In some
-special cases, it automatically balances this entry for you.}
-
-In summary, there are two aspects of Ledger use: updating the ledger
-data file, and using the Ledger tool to view the summarized result of
-your entries.
-
-And just for the sake of example---as a starting point for those who
-want to dive in head-first---here are the ledger entries from above,
-formatting as the ledger program wishes to see them:
-
-@smallexample
-2004/09/29 Pacific Bell
- Payable:Pacific Bell $-200.00
- Equity:Opening Balances
-
-2004/09/29 Checking
- Accounts:Checking $100.00
- Equity:Opening Balances
-
-2004/09/29 Pacific Bell
- Payable:Pacific Bell $23.00
- Accounts:Checking
-@end smallexample
-
-The account balances and registers in this file, if saved as
-@file{ledger.dat}, could be reported using:
-
-@example
-$ ledger -f ledger.dat balance
-$ ledger -f ledger.dat register checking
-$ ledger -f ledger.dat register bell
-@end example
-
-@menu
-* Building the program::
-* Getting help::
-@end menu
-
-@node Building the program, Getting help, Introduction, Introduction
-@section Building the program
-
-Ledger is written in ANSI C++, and should compile on any platform. It
-depends on the GNU multiprecision integer library (libgmp), and the
-Perl regular expression library (libpcre). It was developed using GNU
-make and gcc 3.3, on a PowerBook running OS/X.
-
-To build and install once you have these libraries on your system,
-enter these commands:
-
-@example
-./configure && make install
-@end example
-
-@node Getting help, , Building the program, Introduction
-@section Getting help
-
-If you need help on how to use Ledger, or run into problems, you can
-just the Ledger mailing list at the following Web address:
-
-@example
-https://lists.sourceforge.net/lists/listinfo/ledger-discuss
-@end example
-
-You can also find help at the @samp{#ledger} channel on the IRC server
-@samp{irc.freenode.net}.
-
-@node Running Ledger, Keeping a ledger, Introduction, Top
-@chapter Running Ledger
-
-Ledger has a very simple command-line interface, named---enticing
-enough---@command{ledger}. It supports a few reporting commands, and
-a large number of options for refining the output from those commands.
-The basic syntax of any ledger command is:
-
-@example
-ledger [OPTIONS...] COMMAND [ARGS...]
-@end example
-
-Command options must always precede the command word. After the
-command word there may appear any number of arguments. For most
-commands, these arguments are regular expressions that cause the
-output to relate only to transactions matching those regular
-expressions. For the @command{entry} command, the arguments have a
-special meaning, described below.
-
-The regular expressions arguments always match the account name that a
-transaction refers to. To match on the payee of the entry instead,
-precede the regular expression with @samp{--}. For example, the
-following balance command reports account totals for rent, food and
-movies, but only those whose payee matches Freddie:
-
-@example
-ledger bal rent food movies -- freddie
-@end example
-
-There are many, many command options available with the
-@command{ledger} command, and it takes a while to master them.
-However, none of them are required to use the basic reporting
-commands.
-
-@menu
-* Usage overview::
-* Commands::
-* Options::
-* Format strings::
-* Value expressions::
-* Period expressions::
-* File format::
-* Some typical queries::
-* Budgeting and forecasting::
-@end menu
-
-@node Usage overview, Commands, Running Ledger, Running Ledger
-@section Usage overview
-
-Before getting into the details of how to run Ledger, it will be
-easier to introduce the features in the context of their typical
-usage. To that end, this section presents a series of recipes,
-gradually introducing all of the command-line features of Ledger.
-
-For the purpose of these examples, assume the environment variable
-@var{LEDGER} is set to the file @file{sample.dat} (which is included
-in the distribution), and that the contents of that file are:
-
-@smallexample
-= /^Expenses:Books/
- (Liabilities:Taxes) -0.10
-
-~ Monthly
- Assets:Bank:Checking $500.00
- Income:Salary
-
-2004/05/01 * Checking balance
- Assets:Bank:Checking $1,000.00
- Equity:Opening Balances
-
-2004/05/01 * Investment balance
- Assets:Brokerage 50 AAPL @ $30.00
- Equity:Opening Balances
-
-2004/05/14 * Pay day
- Assets:Bank:Checking $500.00
- Income:Salary
-
-2004/05/27 Book Store
- Expenses:Books $20.00
- Liabilities:MasterCard
-
-2004/05/27 (100) Credit card company
- Liabilities:MasterCard $20.00
- Assets:Bank:Checking
-@end smallexample
-
-This sample file demonstrates a basic principle of accounting which it
-is recommended you follow: Keep all of your accounts under five parent
-Assets, Liabilities, Income, Expenses and Equity. It is important to
-do so in order to make sense out of the following examples.
-
-@subsection Checking balances
-
-Ledger has seven basic commands, but by far the most often used are
-@command{balance} and @command{register}. To see a summary balance of
-all accounts, use:
-
-@example
-ledger bal
-@end example
-
-@command{bal} is a short-hand for @command{balance}. This command
-prints out the summary totals of the five parent accounts used in
-@file{sample.dat}:
-
-@smallexample
- $1,480.00
- 50 AAPL Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
- $-2.00 Liabilities
---------------------
- $-1,502.00
- 50 AAPL
-@end smallexample
-
-None of the child accounts are shown, just the parent account totals.
-We can see that in @samp{Assets} there is $1,480.00, and 50 shares of
-Apple stock. There is also a negative grand total. Usually the grand
-total is zero, which means that all accounts balance@footnote{It is
-impossible for accounts not to balance in ledger; it reports an error
-if a transaction does not balance}. In this case, since the 50 shares
-of Apple stock cost $1,500.00 dollars, then these two amounts balance
-each other in the grand total. The extra $2.00 comes from a virtual
-transaction being added by the automatic entry at the top of the file.
-The entry is virtual because the account name was surrounded by
-parentheses in an automatic entry. Automatic entries will be
-discussed later, but first let's remove the virtual transaction from
-the balance report by using the @option{--real} option:
-
-@example
-ledger --real bal
-@end example
-
-Now the report is:
-
-@smallexample
- $1,480.00
- 50 AAPL Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
---------------------
- $-1,500.00
- 50 AAPL
-@end smallexample
-
-Since the liability was a virtual transaction, it has dropped from the
-report and we see that final total is balanced.
-
-But we only know that it balances because @file{sample.dat} is quite
-simple, and we happen to know that the 50 shares of Apple stock cost
-$1,500.00. We can verify that things really balance by reporting the
-Apple shares in terms of their cost, instead of their quantity. To do
-this requires the @option{--basis}, or @option{-B}, option:
-
-@example
-ledger --real -B bal
-@end example
-
-This command reports:
-
-@smallexample
- $2,980.00 Assets
- $-2,500.00 Equity
- $20.00 Expenses
- $-500.00 Income
-@end smallexample
-
-With the basis cost option, the grand total has disappeared, as it is
-now zero. The confirms that the cost of everything balances to zero,
-@emph{which must always be true}. Reporting the real basis cost
-should never yield a remainder@footnote{If it ever does, then
-generated transactions are involved, which can be removed using
-@option{--actual}}.
-
-@subsubsection Sub-account balances
-
-The totals reported by the balance command are only the topmost parent
-accounts. To see the totals of all child accounts as well, use the
-@option{-s} option:
-
-@example
-ledger --real -B -s bal
-@end example
-
-This reports:
-
-@smallexample
- $2,980.00 Assets
- $1,480.00 Bank:Checking
- $1,500.00 Brokerage
- $-2,500.00 Equity:Opening Balances
- $20.00 Expenses:Books
- $-500.00 Income:Salary
-@end smallexample
-
-This shows that the @samp{Assets} total is made up from two child
-account, but that the total for each of the other accounts comes from
-one child account.
-
-Sometimes you may have a lot of children, nested very deeply, but only
-want to report the first two levels. This can be done with a display
-predicate, using a value expression. In the value expression,
-@code{T} represents the reported total, and @code{l} is the display
-level for the account:
-
-@example
-ledger --real -B -d "T&l<=2" bal
-@end example
-
-This reports:
-
-@smallexample
- $2,980.00 Assets
- $1,480.00 Bank
- $1,500.00 Brokerage
- $-2,500.00 Equity:Opening Balances
- $20.00 Expenses:Books
- $-500.00 Income:Salary
-@end smallexample
-
-Instead of reporting @samp{Bank:Checking} as a child of @samp{Assets},
-it report only @samp{Bank}, since that account is a nesting level of
-2, while @samp{Checking} is at level 3.
-
-To review the display predicate used---@code{T&l<=2}---this rather
-terse expression means: Display an account only if it has a non-zero
-total (@code{T}), and its nesting level is less than or equal to 2
-(@code{l<=2}).
-
-@subsubsection Specific account balances
-
-While reporting the totals for all accounts can be useful, most often
-you will want to check the balance of a specific account or accounts.
-To do this, put one or more account names after the balance command.
-Since these names are really regular expressions, you can use partial
-names if you wish:
-
-@example
-ledger bal checking
-@end example
-
-Reports:
-
-@smallexample
- $1,480.00 Assets:Bank:Checking
-@end smallexample
-
-Any number of names may be used:
-
-@example
-ledger bal checking broker liab
-@end example
-
-Reports:
-
-@smallexample
- $1,480.00 Assets:Bank:Checking
- 50 AAPL Assets:Brokerage
- $-2.00 Liabilities
-@end smallexample
-
-In this case no grand total is reported, because you are asking for
-specific account balances.
-
-For those comfortable with regular expressions, any Perl regexp is
-allowed:
-
-@example
-ledger bal ^assets.*checking ^liab
-@end example
-
-Reports:
-
-@smallexample
- $1,480.00 Assets:Bank:Checking
- $-2.00 Liabilities:Taxes
-@end smallexample
-
-@subsection The register report
-
-While the @command{balance} command can be very handy for checking
-account totals, by far the most powerful of Ledger's reporting tools
-is the @command{register} command. In fact, internally both commands
-use the same logic, but report the results differently:
-@command{balance} shows the summary totals, while @command{register}
-reports each transaction and how it contributes to that total.
-
-Paradoxically, the most basic form of @command{register} is almost
-never used, since it displays every transaction:
-
-@example
-ledger reg
-@end example
-
-@command{reg} is a short-hand for @command{register}. This command
-reports:
-
-@smallexample
-2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
- Equity:Opening Balan.. $-1,000.00 0
-2004/05/01 Investment balance Assets:Brokerage 50 AAPL 50 AAPL
- Equity:Opening Balan.. $-1,500.00 $-1,500.00
- 50 AAPL
-2004/05/14 Pay day Assets:Bank:Checking $500.00 $-1,000.00
- 50 AAPL
- Income:Salary $-500.00 $-1,500.00
- 50 AAPL
-2004/05/27 Book Store Expenses:Books $20.00 $-1,480.00
- 50 AAPL
- Liabilities:MasterCard $-20.00 $-1,500.00
- 50 AAPL
- (Liabilities:Taxes) $-2.00 $-1,502.00
- 50 AAPL
-2004/05/27 Credit card company Liabilities:MasterCard $20.00 $-1,482.00
- 50 AAPL
- Assets:Bank:Checking $-20.00 $-1,502.00
- 50 AAPL
-@end smallexample
-
-This rather verbose output shows every account transaction in
-@file{sample.dat}, and how it affects the running total. The final
-total is identical to what we saw with the plain @command{balance}
-command. To see how things really balance, we can use @samp{--real
--B}, just as we did with @command{balance}:
-
-@example
-ledger --real -B reg
-@end example
-
-Reports:
-
-@smallexample
-2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
- Equity:Opening Balan.. $-1,000.00 0
-2004/05/01 Investment balance Assets:Brokerage $1,500.00 $1,500.00
- Equity:Opening Balan.. $-1,500.00 0
-2004/05/14 Pay day Assets:Bank:Checking $500.00 $500.00
- Income:Salary $-500.00 0
-2004/05/27 Book Store Expenses:Books $20.00 $20.00
- Liabilities:MasterCard $-20.00 0
-2004/05/27 Credit card company Liabilities:MasterCard $20.00 $20.00
- Assets:Bank:Checking $-20.00 0
-@end smallexample
-
-Here we see that everything balances to zero in the end, as it must.
-
-@subsubsection Specific register queries
-
-The most common use of the register command is to summarize
-transactions based on the account(s) they affect. Using
-@file{sample.dat} as as example, we could look at all book purchases
-using:
-
-@example
-ledger reg books
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 Book Store Expenses:Books $20.00 $20.00
-@end smallexample
-
-If a double-dash (@samp{--}) occurs in the list of regular
-expressions, any following arguments are matched against payee names,
-instead of account names:
-
-@example
-ledger reg ^liab -- credit
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 Credit card company Liabilities:MasterCard $20.00 $20.00
-@end smallexample
-
-There are many reporting options for tailoring which transactions are
-found, and also how to summarize the various amounts and totals that
-result. These are plumbed in greater depth below.
-
-@subsection Selecting transactions
-
-Although the easiest way to use the register is to report all the
-transactions affecting a set of accounts, it can often result in more
-information than you want. To cope with an ever-growing amount of
-data, there are several options which can help you pinpoint your
-report to exactly the transactions that interest you most. This is
-called the ``calculation'' phase of Ledger. All of its related
-options are documented under @option{--help-calc}.
-
-@subsubsection By date
-
-@c -c, --current show only current and past entries (not future)
-
-@option{--current}(@option{-c}) displays entries occurring on or
-before the current date. Any entry recorded for a future date will be
-ignored, as if it had not been seen. This is useful if you happen to
-pre-record entries, but still wish to view your balances in terms of
-what is available today.
-
-@c -b, --begin DATE set report begin date
-@c -e, --end DATE set report end date
-
-@option{--begin DATE} (@option{-b DATE}) limits the report to only
-those entries occurring on or after @var{DATE}. The running total in
-the register will start at zero with the first transaction, even if
-there are earlier entries.
-
-To limit the display only, but still add earlier transactions to the
-running total, use the display expression @samp{-d 'd>=[DATE]'}):
-
-@example
-ledger --basis -b may -d 'd>=[5/14]' reg ^assets
-@end example
-
-Reports:
-
-@smallexample
-2004/05/14 Pay day Assets:Bank:Checking $500.00 $3,000.00
-2004/05/27 Credit card company Assets:Bank:Checking $-20.00 $2,980.00
-@end smallexample
-
-In this example, the displayed transactions start from @samp{5/14},
-but the calculated total starts from the beginning of @samp{may}.
-
-@option{--end DATE} (@option{-e DATE}) states when reporting should
-end, both calculation and display. The ending date is inclusive.
-
-The @var{DATE} argument to the @option{-b} and @option{-e} options can
-be rather flexible. Assuming the current date to be November 15,
-2004, then all of the following are equivalent:
-
-@example
-ledger -b oct bal
-ledger -b "this oct" bal
-ledger -b 2004/10 bal
-ledger -b 10 bal
-ledger -b last bal
-ledger -b "last month" bal
-@end example
-
-@c -p, --period STR report using the given period
-@c --period-sort EXPR sort each report period's entries by EXPR
-
-To constrain the report to a specific time period, use
-@option{--period} (@option{-p}). A time period may have both a
-beginning and an end, or neither, as well as a specified interval.
-Here are a few examples:
-
-@example
-ledger -p 2004 bal
-ledger -p august bal
-ledger -p "from aug to oct" bal
-ledger -p "daily from 8/1 to 8/15" bal
-ledger -p "weekly since august" bal
-ledger -p "monthly from feb to oct" bal
-ledger -p "quarterly in 2004" bal
-ledger -p yearly bal
-@end example
-
-See @ref{Period expressions} for more on syntax. Also, all of the
-options @option{-b}, @option{-e} and @option{-p} may be used together,
-but whatever information occurs last takes priority. An example of
-such usage (in a script, perhaps) would be:
-
-@example
-ledger -b 2004 -e 2005 -p monthly reg ^expenses
-@end example
-
-This command is identical to:
-
-@example
-ledger -p "monthly in 2004" reg ^expenses
-@end example
-
-The transactions within a period may be sorted using
-@option{--period-sort}, which takes a value expression. This is
-similar to the @option{--sort} option, except that it sorts within
-each period entry, rather than sorting all transactions in the report.
-See the documentation on @option{--sort} below for more details.
-
-@subsubsection By status
-
-By default, all regular transactions are included in each report. To
-limit the report to certain kinds of transactions, use one or more of
-the following options:
-
-@table @option
-@item -C, --cleared
-Consider only cleared transactions.
-@item -U, --uncleared
-Consider only uncleared and pending transactions.
-@item -R, --real
-Consider only real (non-virtual) transactions.
-@item -L, --actual
-Consider only actual (non-automated) transactions.
-@end table
-
-Cleared transactions are indicated by an asterix placed just before
-the payee name in a transaction. The meaning of this flag is up to
-the user, but typically it means that an entry has been seen on a
-financial statement. Pending transactions use an exclamation mark in
-the same position, but are mainly used only by reconciling software.
-Uncleared transactions are for things like uncashed checks, credit
-charges that haven't appeared on a statement yet, etc.
-
-Real transactions are all non-virtual transactions, where the account
-name is not surrounded by parentheses or square brackets. Virtual
-transactions are useful for showing a transfer of money that never
-really happened, like money set aside for savings without actually
-transferring it from the parent account.
-
-Actual transactions are those not generated, either as part of an
-automated entry, or a budget or forecast report. A useful of when you
-might like to filter out generated transactions is with a budget:
-
-@example
-ledger --budget --actual reg ^expenses
-@end example
-
-This command outputs all transactions affecting a budgeted account,
-but without subtracting the budget amount (because the generated
-transactions are suppressed with @option{--actual}). The report shows
-how much you actually spent on budgeted items.
-
-@subsubsection By relationship
-
-@c -r, --related calculate report using related transactions
-
-Normally, a register report includes only the transactions that match
-the regular expressions specified after the command word. For
-example, to report all expenses:
-
-@example
-ledger reg ^expenses
-@end example
-
-This reports:
-
-@smallexample
-2004/05/29 Book Store Expenses:Books $20.00 $20.00
-@end smallexample
-
-Using @option{--related} (@option{-r}) reports the transactions that
-did not match your query, but only in entries that otherwise would
-have matched. This has the effect of indicating where money came
-from, or when to:
-
-@example
-ledger -r reg ^expenses
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 Book Store Liabilities:MasterCard $20.00 $20.00
-@end smallexample
-
-@subsubsection By budget
-
-@c --budget generate budget entries based on FILE
-
-There is more information about budgeting and forecasting in
-@ref{Budgeting and forecasting}. Basically, if you have any period
-entries in your ledger file, you can use these options. A period
-entry looks like:
-
-@example
-~ Monthly
- Assets:Bank:Checking $500.00
- Income:Salary
-@end example
-
-The difference from a regular entry is that the first line begins with
-a tilde (~), and instead of a payee there's a period expression
-(@ref{Period expressions}). Otherwise, a period entry is in every
-other way the same as a regular entry.
-
-With such an entry in your ledger file, the @option{--budget} option
-will report only transactions that match a budgeted account. Using
-@file{sample.dat} from above:
-
-@example
-ledger --budget reg ^income
-@end example
-
-Reports:
-
-@smallexample
-2004/05/01 Budget entry Income:Salary $500.00 $500.00
-2004/05/14 Pay day Income:Salary $-500.00 0
-@end smallexample
-
-The final total is zero, indicating that the budget matched exactly
-for the reported period. Budgeting is most often helpful with period
-reporting; for example, to show monthly budget results use
-@option{--budget -p monthly}.
-
-@c --add-budget show all transactions plus the budget
-@c --unbudgeted show only unbudgeted transactions
-
-The @option{--add-budget} option reports all matching transactions in
-addition to budget transactions; while @option{--unbudgeted} shows
-only those that don't match a budgeted account. To summarize:
-
-@table @option
-@item --budget
-Show transactions matching budgeted accounts.
-@item --unbudgeted
-Show transactions matching unbudgeted accounts.
-@item --add-budget
-Show both budgeted and unbudgeted transactions together (i.e., add the
-generated budget transactions to the regular report).
-@end table
-
-@c --forecast EXPR generate forecast entries while EXPR is true
-
-A report with the @option{--forecast} option will add budgeted
-transactions while the specified value expression is true. For
-example:
-
-@example
-ledger --forecast 'd<[2005] reg ^income
-@end example
-
-Reports:
-
-@smallexample
-2004/05/14 Pay day Income:Salary $-500.00 $-500.00
-2004/12/01 Forecast entry Income:Salary $-500.00 $-1,000.00
-2005/01/01 Forecast entry Income:Salary $-500.00 $-1,500.00
-@end smallexample
-
-The date this report was made was November 5, 2004; the reason the
-first forecast entry is in december is that forecast entries are only
-added for the future, and they only stop after the value expression
-has matched at least once, which is why the January entry appears. A
-forecast report can be very useful for determining when money will run
-out in an account, or for projecting future cash flow:
-
-@example
-ledger --forecast 'd<[2008]' -p yearly reg ^inc ^exp
-@end example
-
-This reports balances projected income against projected expenses,
-showing the resulting total in yearly intervals until 2008. For the
-case of @file{sample.dat}, which has no budgeted expenses, the result
-of the above command (in November 2004) is:
-
-@smallexample
-2004/01/01 - 2004/12/31 Income:Salary $-1,000.00 $-1,000.00
- Expenses:Books $20.00 $-980.00
-2005/01/01 - 2005/12/31 Income:Salary $-6,000.00 $-6,980.00
-2006/01/01 - 2006/12/31 Income:Salary $-6,000.00 $-12,980.00
-2007/01/01 - 2007/12/31 Income:Salary $-6,000.00 $-18,980.00
-2008/01/01 - 2008/01/01 Income:Salary $-500.00 $-19,480.00
-@end smallexample
-
-@subsubsection By value expression
-
-@c -l, --limit EXPR calculate only transactions matching EXPR
-
-Value expressions can be quite complex, and are treated more fully in
-@ref{Value expressions}. They can be used for limiting a report with
-@option{--limit} (@option{-l}). The following command report income
-since august, but expenses since october:
-
-@example
-ledger -l '(/income/&d>=[aug])|(/expenses/&d>=[oct])' reg
-@end example
-
-The basic form of this value expression is @samp{(A&B)|(A&B)}. The
-@samp{A} in each part matches against an account name with
-@samp{/name/}, while each @samp{B} part compares the date of the
-transaction (@samp{d}) with a specified month. The resulting report
-will contain only transactions which match the value expression.
-
-@c -t, --amount EXPR use EXPR to calculate the displayed amount
-@c -T, --total EXPR use EXPR to calculate the displayed total
-
-Another use of value expressions is to calculate the amount reported
-for each line of a register report, or for computing the subtotal of
-each account shown in a balance report. This example divides each
-transaction amount by two:
-
-@example
-ledger -t 'a/2' reg ^exp
-@end example
-
-The @option{-t} option doesn't affect the running total, only how the
-transaction amount is displayed. To change the running total, use
-@option{-T}. In that case, you will likely want to use the total
-(@samp{O}) instead of the amount (@samp{a}):
-
-@example
-ledger -T 'O/2' reg ^exp
-@end example
-
-@subsection Massaging register output
-
-Even after filtering down your data to just the transactions you're
-interested in, the default reporting method of one transaction per
-line is often still too much. To combat this complexity, it is
-possible to ask Ledger to report the details to you in many different
-forms, summarized in various ways. This is the ``display'' phase of
-Ledger, and is documented under @option{--help-disp}.
-
-@subsubsection Summarizing
-
-@c -n, --collapse register: collapse entries with multiple transactions
-
-When multiple transactions relate to a single entry, they are reported
-as part of that entry. For example, in the case of @file{sample.dat}:
-
-@example
-ledger reg -- book
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 Book Store Expenses:Books $20.00 $20.00
- Liabilities:MasterCard $-20.00 0
- (Liabilities:Taxes) $-2.00 $-2.00
-@end smallexample
-
-All three transactions are part of one entry, and as such the entry
-details are printed only once. To report every entry on a single
-line, use @option{-n} to collapse entries with multiple transactions:
-
-@example
-ledger -n reg -- book
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 Book Store <Total> $-2.00 $-2.00
-@end smallexample
-
-In the balance report, @option{-n} causes the grand total not to be
-displayed at the bottom of the report.
-
-@c -s, --subtotal balance: show sub-accounts; other: show subtotals
-
-If an account occurs more than once in a report, it is possible to
-combine them all and report the total per-account, using @option{-s}.
-For example, this command:
-
-@example
-ledger -B reg ^assets
-@end example
-
-Reports:
-
-@smallexample
-2004/05/01 Checking balance Assets:Bank:Checking $1,000.00 $1,000.00
-2004/05/01 Investment balance Assets:Brokerage $1,500.00 $2,500.00
-2004/05/14 Pay day Assets:Bank:Checking $500.00 $3,000.00
-2004/05/27 Credit card company Assets:Bank:Checking $-20.00 $2,980.00
-@end smallexample
-
-But if the @option{-s} option is added, the result becomes:
-
-@smallexample
-2004/05/01 - 2004/05/29 Assets:Bank:Checking $1,480.00 $1,480.00
- Assets:Brokerage $1,500.00 $2,980.00
-@end smallexample
-
-When account subtotaling is used, only one entry is printed, and the
-date and name reflect the range of the combined transactions.
-
-@c -P, --by-payee show summarized totals by payee
-
-With @option{-P}, transactions relating to the same payee are
-combined. In this case, the date of the combined entry is that of the
-latest transaction.
-
-@c -x, --comm-as-payee set commodity name as the payee, for reporting
-
-@option{-x} changes the payee name for each transaction to be the same
-as the commodity it uses. This can be especially useful combined with
-other options, like @option{-P}. For example:
-
-@example
-ledger -Px reg ^assets
-@end example
-
-Reports:
-
-@smallexample
-2004/05/29 $ Assets:Bank:Checking $1,480.00 $1,480.00
-2004/05/01 AAPL Assets:Brokerage 50 AAPL $1,480.00
- 50 AAPL
-@end smallexample
-
-This reports shows the subtotal for each commodity held, and where it
-is located. To see the basis cost, or initial investment, add
-@option{-B}. Applied to the example above:
-
-@smallexample
-2004/05/29 $ Assets:Bank:Checking $1,480.00 $1,480.00
-2004/05/01 AAPL Assets:Brokerage $1,500.00 $2,980.00
-@end smallexample
-
-@c -E, --empty balance: show accounts with zero balance
-
-The only other options which affect summarized totals is @option{-E},
-which works only in the balance report. In this case, it shows
-matching accounts with a zero a balance, which are ordinarily
-excluded. This can be useful to see all the accounts involved in a
-report, even if some have no total.
-
-@subsubsection Quick periods
-
-Although the @option{-p} option (also @option{--period}) is much more
-versatile, there are other options to make the most common period
-reports easier:
-
-@table @option
-@item -W, --weekly
-Show weekly sub-totals. Same as @samp{-p weekly}.
-@item -M, --monthly
-Show monthly sub-totals. Same as @samp{-p monthly}.
-@item -Y, --yearly
-Show yearly sub-totals. Same as @samp{-p yearly}.
-@end table
-
-@c --dow show a days-of-the-week report
-
-There is one kind of period report cannot be done with @option{-p}.
-This is the @option{--dow}, or ``days of the week'' report, which
-shows summarized totals for each day of the week. The following
-examples shows a ``day of the week'' report of income and expenses:
-
-@example
-ledger --dow reg ^inc ^exp
-@end example
-
-Reports:
-
-@smallexample
-2004/05/27 Thursdays Expenses:Books $20.00 $20.00
-2004/05/14 Fridays Income:Salary $-500.00 $-480.00
-@end smallexample
-
-@subsubsection Ordering and width
-
-@c -S, --sort EXPR sort report according to the value expression EXPR
-
-The transactions displayed in a report are shown in the same order as
-they appear in the ledger file. To change the order and sort a
-report, use the @option{--sort} option. @option{--sort} takes a value
-expression to determine the value to sort against, making it possible
-to sort according to complex criteria. Here are some simple and
-useful examples:
-
-@example
-ledger --sort d reg ^exp # sort by date
-ledger --sort t reg ^exp # sort by amount total
-ledger --sort -t reg ^exp # reverse sort by amount total
-ledger --sort Ut reg ^exp # sort by abs amount total
-@end example
-
-For the balance report, you will want to use @samp{T} instead of
-@samp{t}:
-
-@example
-ledger --sort T reg ^exp # sort by amount total
-ledger --sort -T reg ^exp # reverse sort by amount total
-ledger --sort UT reg ^exp # sort by abs amount total
-@end example
-
-The @option{--sort} options sorts all transactions in a report. If
-periods are used (such as @option{--monthly}), this can get somewhat
-confusing. In that case, you'll probably want to sort within periods
-using @option{--period-sort} instead of @option{--sort}.
-
-@c -w, --wide for the default register report, use 132 columns
-
-And if the register seems too cramped, and you have a lot of screen
-real estate, you can use @option{-w} to format the report within 132
-acolumns, instead of 80. You are more likely then to see full payee
-and account names, as well as properly formatted totals when
-long-named commodities are used.
-
-If you want only the first or last N entries to be printed---which can
-be very useful for viewing the last 10 entries in your checking
-account, while also showing the cumulative balance from all
-entries---use the @option{--head} and/or @option{--tail} options. The
-two options may be used simultaneously, for example:
-
-@example
-ledger --tail 20 reg checking
-@end example
-
-If the output from your command is very long, Ledger can output the
-data to a pager utility, such as @command{more} or @command{less}:
-
-@example
-ledger --pager /usr/bin/less reg checking
-@end example
-
-@subsubsection Averages and percentages
-
-@c -A, --average report average transaction amount
-
-To see the running total changed to a running average, use
-@option{-A}. The final transaction's total will be the overall
-average of all displayed transactions. The works in conjunction with
-period reporting, so that you can see your monthly average expenses
-with:
-
-@example
-ledger -AM reg ^expenses:food
-ledger -AMn reg ^expenses
-@end example
-
-This works in the balance report too:
-
-@example
-ledger -AM bal ^expenses:food
-ledger -AMs bal ^expenses
-@end example
-
-@c -D, --deviation report deviation from the average
-
-The @option{-D} option changes the running average into a deviation
-from the running average. This only makes sense in the register
-report, however.
-
-@example
-ledger -DM reg ^expenses:food
-@end example
-
-@c -%, --percentage report balance totals as a percentile of the parent
-
-In the balance report only, @option{-%} changes the reported totals
-into a percentage of the parent account. This kind of report is
-confusing if negative amounts are involved, and doesn't work at all if
-multiple commodities occur in an account's history. It has a somewhat
-limited usefulness, therefore, but in certain cases it can be handy,
-such as reviewing overall expenses:
-
-@example
-ledger -%s -S T bal ^expenses
-@end example
-
-@subsubsection Reporting total data
-
-@c --totals in the "xml" report, include running total
-
-Normally in the @command{xml} report, only transaction amounts are
-printed. To include the running total under a @samp{<total>} tag, use
-@option{--totals}. This does not affect any other report.
-
-@c -j, --amount-data print only raw amount data (useful for scripting)
-@c -J, --total-data print only raw total data
-
-In the register report only, the output can be changed with
-@option{-j} to show only the date and the amount---without
-commodities. This only makes sense if a single commodity appears in
-the report, but can be quite useful for scripting, or passing the data
-to Gnuplot. To show only the date and running total, use @option{-J}.
-
-@subsubsection Display by value expression
-
-@c -d, --display EXPR display only transactions matching EXPR
-
-With @option{-d} you can decide which transactions (or accounts in the
-balance report) are displayed, according to a value expression. The
-computed total is not affected, only the display. This can be very
-useful for shortening a report without changing the running total:
-
-@example
-ledger -d 'd>=[last month]' reg checking
-@end example
-
-This command shows the checking account's register, beginning from
-last month, but with the running total reflecting the entire history
-of the account.
-
-@subsubsection Change report format
-
-@c -y, --date-format STR use STR as the date format (default: %Y/%m/%d)
-
-When dates are printed in any report, the default format is
-@samp{%Y/%m/%d}, which yields dates of the form @samp{YYYY/mm/dd}.
-This can be changed with @option{-y}, whose argument is a
-@code{strftime} string---see your system's C library documentation for
-the allowable codes. Mostly you will want to use @samp{%Y}, @samp{%m}
-and @samp{%d}, in whatever combination is convenient for your locale.
-
-@c -F, --format STR use STR as the format; for each report type, use:
-@c --balance-format --register-format --print-format
-@c --plot-amount-format --plot-total-format --equity-format
-@c --prices-format --wide-register-format
-
-To change the format of the entire reported line, use @option{-F}. It
-supports quite a large number of options, which are all documented in
-@ref{Format strings}. In addition, each specific kind of report
-(except for @command{xml}) can be changed using one of the following
-options:
-
-@table @option
-@item --balance-format
-@command{balance} report. Default:
-@smallexample
-%20T %2_%-a\n
-@end smallexample
-
-@item --register-format
-@command{register} report. Default:
-@smallexample
-%D %-.20P %-.22A %12.66t %12.80T\n%/%32|%-.22A %12.66t %12.80T\n
-@end smallexample
-
-@item --print-format
-@command{print} report. Default:
-@smallexample
-%D %-.35P %-.38A %22.108t %22.132T\n%/%48|%-.38A %22.108t %22.132T\n
-@end smallexample
-
-@item --plot-amount-format
-@command{register} report when @option{-j} (plot amount) is used. Default:
-@smallexample
-%D %(St)\n
-@end smallexample
-
-@item --plot-total-format
-@command{register} report when @option{-J} (plot total) is used. Default:
-@smallexample
-%D %(ST)\n
-@end smallexample
-
-@item --equity-format
-@command{equity} report. Default:
-@smallexample
-\n%D %Y%C%P\n %-34W %12o%n\n%/ %-34W %12o%n\n
-@end smallexample
-
-@item --prices-format
-@command{prices} report. Default:
-@smallexample
-\n%D %Y%C%P\n%/ %-34W %12t\n
-@end smallexample
-
-@item --wide-register-format
-@command{register} report when @option{-w} (wide) is used. Default:
-@smallexample
-%D %-.35P %-.38A %22.108t %22.132T\n%/%48|%-.38A %22.108t %22.132T\n
-@end smallexample
-@end table
-
-@subsection Standard queries
-
-If your ledger file uses the standard top-level accounts: Assets,
-Liabilities, Income, Expenses, Equity: then the following queries will
-enable you to generate some typical accounting reports from your data.
-
-Your @emph{net worth} can be determined by balancing assets against
-liabilities:
-
-@example
-ledger bal ^assets ^liab
-@end example
-
-By removing long-term investment and loan accounts, you can see your
-current net liquidity (or liquid net worth):
-
-@example
-ledger bal ^assets ^liab -retirement -brokerage -loan
-@end example
-
-Balancing expenses against income yields your @emph{cash flow}, or net
-profit/loss:
-
-@example
-ledger bal ^exp ^inc
-@end example
-
-In this case, if the number is positive it means you spent more than
-you earned during the report period.
-
-@c ----------------------------------------------------------------------
-
-The most often used command is the ``balance'' command:
-
-@example
-export LEDGER=/home/johnw/doc/ledger.dat
-ledger balance
-@end example
-
-Here I've set my Ledger environment variable to point to where my
-ledger file is hiding. Thereafter, I needn't specify it again.
-
-@subsection Reporting balance totals
-
-The balance command prints out the summarized balances of all my
-top-level accounts, excluding sub-accounts. In order to see the
-balances for a specific account, just specify a regular expression
-after the balance command:
-
-@example
-ledger balance expenses:food
-@end example
-
-This will show all the money that's been spent on food, since the
-beginning of the ledger. For food spending just this month
-(September), use:
-
-@example
-ledger -p sep balance expenses:food
-@end example
-
-Or maybe you want to see all of your assets, in which case the -s
-(show sub-accounts) option comes in handy:
-
-@example
-ledger -s balance ^assets
-@end example
-
-To exclude a particular account, use a regular expression with a
-leading minus sign. The following will show all expenses, but without
-food spending:
-
-@example
-ledger balance expenses -food
-@end example
-
-@subsection Reporting percentages
-
-There is no built-in way to report transaction amounts or account
-balances in terms of percentages
-
-@node Commands, Options, Usage overview, Running Ledger
-@section Commands
-
-@subsection balance
-
-The @command{balance} command reports the current balance of all
-accounts. It accepts a list of optional regexps, which confine the
-balance report to the matching accounts. If an account contains
-multiple types of commodities, each commodity's total is reported
-separately.
-
-@subsection register
-
-The @command{register} command displays all the transactions occurring
-in a single account, line by line. The account regexp must be
-specified as the only argument to this command. If any regexps occur
-after the required account name, the register will contain only those
-transactions that match. Very useful for hunting down a particular
-transaction.
-
-The output from @command{register} is very close to what a typical
-checkbook, or single-account ledger, would look like. It also shows a
-running balance. The final running balance of any register should
-always be the same as the current balance of that account.
-
-If you have Gnuplot installed, you may plot the amount or running
-total of any register by using the script @file{report}, which is
-included in the Ledger distribution. The only requirement is that you
-add either @option{-j} or @option{-J} to your register command, in
-order to plot either the amount or total column, respectively.
-
-@subsection print
-
-The @command{print} command prints out ledger entries in a textual
-format that can be parsed by Ledger. They will be properly formatted,
-and output in the most economic form possible. The ``print'' command
-also takes a list of optional regexps, which will cause only those
-transactions which match in some way to be printed.
-
-The @command{print} command can be a handy way to clean up a ledger
-file whose formatting has gotten out of hand.
-
-@subsection output
-
-The @command{output} command is very similar to the @command{print}
-command, except that it attempts to replicate the specified ledger
-file exactly. The format of the command is:
-
-@example
-ledger -f FILENAME output FILENAME
-@end example
-
-Where @file{FILENAME} is the name of the ledger file to output. The
-reason for specifying this command is that only entries contained
-within that file will be output, and not an included entries (as can
-happen with the @command{print} command).
-
-@subsection xml
-
-The @command{xml} command outputs results similar to what
-@command{print} and @command{register} display, but as an XML form.
-This data can then be read in and processed. Use the
-@option{--totals} option to include the running total with each
-transaction.
-
-@subsection emacs
-
-The @command{emacs} command outputs results in a form that can be read
-directly by Emacs Lisp. The format of the sexp is:
-
-@example
-((BEG-POS CLEARED DATE CODE PAYEE
- (ACCOUNT AMOUNT)...) ; list of transactions
- ...) ; list of entries
-@end example
-
-@subsection equity
-
-The @command{equity} command prints out accounts balances as if they
-were entries. This makes it easy to establish the starting balances
-for an account, such as when @ref{Archiving previous years}.
-
-@subsection prices
-
-The @command{prices} command displays the price history for matching
-commodities. The @option{-A} flag is useful with this report, to
-display the running average price, or @option{-D} to show each price's
-deviation from that average.
-
-There is also a @command{pricesdb} command which outputs the same
-information as @command{prices}, but does in a format that can be
-parsed by Ledger.
-
-@subsection entry
-
-The @command{entry} commands simplifies the creation of new entries.
-It works on the principle that 80% of all transactions are variants of
-earlier transactions. Here's how it works:
-
-Say you currently have this transaction in your ledger file:
-
-@smallexample
-2004/03/15 * Viva Italiano
- Expenses:Food $12.45
- Expenses:Tips $2.55
- Liabilities:MasterCard $-15.00
-@end smallexample
-
-Now it's @samp{2004/4/9}, and you've just eating at @samp{Viva
-Italiano} again. The exact amounts are different, but the overall
-form is the same. With the @command{entry} command you can type:
-
-@example
-ledger entry 2004/4/9 viva food 11 tips 2.50
-@end example
-
-This produces the following output:
-
-@smallexample
-2004/04/09 Viva Italiano
- Expenses:Food $11.00
- Expenses:Tips $2.50
- Liabilities:MasterCard $-13.50
-@end smallexample
-
-It works by finding a past transaction matching the regular expression
-@samp{viva}, and assuming that any accounts or amounts specified will
-be similar to that earlier transaction. If Ledger does not succeed in
-generating a new entry, an error is printed and the exit code is set
-to @samp{1}.
-
-There is a shell script in the distribution's @file{scripts} directory
-called @file{entry}, which simplifies the task of adding a new entry
-to your ledger. It launches @command{vi} to confirm that the entry
-looks appropriate.
-
-Here are a few more examples of the @command{entry} command, assuming
-the above journal entry:
-
-@example
-ledger entry 4/9 viva 11.50
-ledger entry 4/9 viva 11.50 checking # (from `checking')
-ledger entry 4/9 viva food 11.50 tips 8
-ledger entry 4/9 viva food 11.50 tips 8 cash
-ledger entry 4/9 viva food $11.50 tips $8 cash
-ledger entry 4/9 viva dining "DM 11.50"
-@end example
-
-@node Options, Format strings, Commands, Running Ledger
-@section Options
-
-With all of the reports, command-line options are useful to modify the
-output generated. These command-line options always occur before the
-command word. This is done to distinguish options from exclusive
-regular expressions, which also begin with a dash. The basic form for
-most commands is:
-
-@example
-ledger [OPTIONS] COMMAND [REGEXPS...] [-- [REGEXPS...]]
-@end example
-
-The @var{OPTIONS} and @var{REGEXPS} expressions are both optional.
-You could just use @samp{ledger balance}, without any options---which
-prints a summary of all accounts. But for more specific reporting, or
-to change the appearance of the output, options are needed.
-
-@menu
-* Basic options::
-* Report filtering::
-* Output customization::
-* Commodity reporting::
-* Environment variables::
-@end menu
-
-@node Basic options, Report filtering, Options, Options
-@subsection Basic options
-
-These are the most basic command options. Most likely, the user will
-want to set them using @ref{Environment variables}, instead of using
-actual command-line options:
-
-@option{--help} (@option{-h}) prints a summary of all the options, and
-what they are used for. This can be a handy way to remember which
-options do what. This help screen is also printed if ledger is run
-without a command.
-
-@option{--version} (@option{-v}) prints the current version of ledger
-and exits. This is useful for sending bug reports, to let the author
-know which version of ledger you are using.
-
-@option{--file FILE} (@option{-f FILE}) reads FILE as a ledger file.
-This command may be used multiple times. FILE may also be a list of
-file names separated by colons. Typically, the environment variable
-@env{LEDGER_FILE} is set, rather than using this command-line option.
-
-@option{--output FILE} (@option{-o FILE}) redirects output from any
-command to @var{FILE}. By default, all output goes to standard
-output.
-
-@option{--init-file FILE} (@option{-i FILE}) causes FILE to be read by
-ledger before any other ledger file. This file may not contain any
-transactions, but it may contain option settings. To specify options
-in the init file, use the same syntax as the command-line. Here's an
-example init file:
-
-@smallexample
---price-db ~/finance/.pricedb
-
-; ~/.ledgerrc ends here
-@end smallexample
-
-Option settings on the command-line or in the environment always take
-precedence over settings in the init file.
-
-@option{--cache FILE} identifies FILE as the default binary cache
-file. That is, if the ledger files to be read are specified using the
-environment variable @env{LEDGER_FILE}, then whenever a command is
-finished a binary copy will be written to the specified cache, to
-speed up the loading time of subsequent queries. This filename can
-also be given using the environment variable @env{LEDGER_CACHE}, or by
-putting the option into your init file. The @option{--no-cache}
-option causes Ledger to always ignore the binary cache.
-
-@option{--account NAME} (@option{-a NAME}) specifies the default
-account which QIF file transactions are assumed to relate to.
-
-@node Report filtering, Output customization, Basic options, Options
-@subsection Report filtering
-
-These options change which transactions affect the outcome of a
-report, in ways other than just using regular expressions:
-
-@option{--current}(@option{-c}) displays only entries occurring on or
-before the current date.
-
-@option{--begin DATE} (@option{-b DATE}) constrains the report to
-entries on or after @var{DATE}. Only entries after that date will be
-calculated, which means that the running total in the balance report
-will always start at zero with the first matching entry. (Note: This
-is different from using @option{--display} to constrain what is
-displayed).
-
-@option{--end DATE} (@option{-e DATE}) constrains the report so that
-entries on or after @var{DATE} are not considered. The ending date
-is inclusive.
-
-@option{--period STR} (@option{-p STR}) sets the reporting period
-to @var{STR}. This will subtotal all matching entries within each
-period separately, making it easy to see weekly, monthly, quarterly,
-etc., transaction totals. A period string can even specify the
-beginning and end of the report range, using simple terms like ``last
-june'' or ``next month''. For more using period expressions, see
-@ref{Period expressions}.
-
-@option{--period-sort EXPR} sorts the transactions within each
-reporting period using the value expression @var{EXPR}. This is most
-often useful when reporting monthly expenses, in order to view the
-highest expense categories at the top of each month:
-
-@example
-ledger -M --period-sort -At reg ^Expenses
-@end example
-
-@option{--cleared} (@option{-C}) displays only transactions whose entry
-has been marked ``cleared'' (by placing an asterix to the right of the
-date).
-
-@option{--uncleared} (@option{-U}) displays only transactions whose
-entry has not been marked ``cleared'' (i.e., if there is no asterix to
-the right of the date).
-
-@option{--real} (@option{-R}) displays only real transactions, not
-virtual. (A virtual transaction is indicated by surrounding the
-account name with parentheses or brackets; see the section on using
-virtual transactions for more information).
-
-@option{--actual} (@option{-L}) displays only actual transactions, and
-not those created due to automated transactions.
-
-@option{--related} (@option{-r}) displays transactions that are
-related to whichever transactions would otherwise have matched the
-filtering criteria. In the register report, this shows where money
-went to, or the account it came from. In the balance report, it shows
-all the accounts affected by entries having a related transaction.
-For example, if a file had this entry:
-
-@smallexample
-2004/03/20 Safeway
- Expenses:Food $65.00
- Expenses:Cash $20.00
- Assets:Checking $-85.00
-@end smallexample
-
-And the register command was:
-
-@example
-ledger -r register food
-@end example
-
-The following would be output, showing the transactions related to the
-transaction that matched:
-
-@smallexample
-2004/03/20 Safeway Expenses:Cash $-20.00 $-20.00
- Assets:Checking $85.00 $65.00
-@end smallexample
-
-@option{--budget} is useful for displaying how close your transactions
-meet your budget. @option{--add-budget} also shows unbudgeted
-transactions, while @option{--unbudgeted} shows only those.
-@option{--forecast} is a related option that projects your budget into
-the future, showing how it will affect future balances.
-@xref{Budgeting and forecasting}.
-
-@option{--limit EXPR} (@option{-l EXPR}) limits which transactions
-take part in the calculations of a report.
-
-@option{--amount EXPR} (@option{-t EXPR}) changes the value expression
-used to calculate the ``value'' column in the @command{register}
-report, the amount used to calculate account totals in the
-@command{balance} report, and the values printed in the
-@command{equity} report. @xref{Value expressions}.
-
-@option{--total EXPR} (@option{-T EXPR}) sets the value expression
-used for the ``totals'' column in the @command{register} and
-@command{balance} reports.
-
-@node Output customization, Commodity reporting, Report filtering, Options
-@subsection Output customization
-
-These options affect only the output, but not which transactions are
-used to create it:
-
-@option{--collapse} (@option{-n}) causes entries in a
-@command{register} report with multiple transactions to be collapsed
-into a single, subtotaled entry.
-
-@option{--subtotal} (@option{-s}) causes all entries in a
-@command{register} report to be collapsed into a single, subtotaled
-entry.
-
-@option{--by-payee} (@option{-P}) reports subtotals by payee.
-
-@option{--comm-as-payee} (@option{-x}) changes the payee of every
-transaction to be the commodity used in that transaction. This can be
-useful when combined with other options, such as @option{-s}.
-
-@option{--empty} (@option{-E}) includes even empty accounts in the
-@command{balance} report.
-
-@option{--weekly} (@option{-W}) reports transaction totals by the
-week. The week begins on whichever day of the week begins the month
-containing that transaction. To set a specific begin date, use a
-period string, such as @samp{weekly from DATE}. @option{--monthly}
-(@option{-M}) reports transaction totals by month; @option{--yearly}
-(@option{-Y}) reports transaction totals by year. For more complex
-period, using the @option{--period} option described above.
-
-@option{--dow} reports transactions totals for each day of the week.
-This is an easy way to see if weekend spending is more than on
-weekdays.
-
-@option{--sort EXPR} (@option{-S EXPR}) sorts a report by comparing
-the values determined using the value expression @var{EXPR}. For
-example, using @option{-S -UT} in the balance report will sort account
-balances from greatest to least, using the absolute value of the
-total. For more on how to use value expressions, see @ref{Value
-expressions}.
-
-@option{--wide} (@option{-w}) causes the default @command{register}
-report to assume 132 columns instead of 80.
-
-@option{--head} causes only the first N entries to be printed. This
-is different from using the command-line utility @command{head}, which
-would limit to the first N transactions. @option{--tail} outputs only
-the last N entries. Both options may be used simultaneously. If a
-negative amount is given, it will invert the meaning of the flag
-(instead of the first five entries being printed, for example, it
-would print all but the first five).
-
-@option{--pager} tells Ledger to pass its output to the given pager
-program---very useful when the output is especially long. This
-behavior can be made the default by setting the @env{LEDGER_PAGER}
-environment variable.
-
-@option{--average} (@option{-A}) reports the average transaction
-value.
-
-@option{--deviation} (@option{-D}) reports each transaction's
-deviation from the average. It is only meaningful in the
-@command{register} and @command{prices} reports.
-
-@option{--percentage} (@option{-%}) shows account subtotals in the
-@command{balance} report as percentages of the parent account.
-
-@option{--totals} include running total information in the
-@command{xml} report.
-
-@option{--amount-data} (@option{-j}) changes the @command{register}
-report so that it output nothing but the date and the value column,
-and the latter without commodities. This is only meaningful if the
-report uses a single commodity. This data can then be fed to other
-programs, which could plot the date, analyze it, etc.
-
-@option{--total-data} (@option{-J}) changes the @command{register}
-report so that it output nothing but the date and totals column,
-without commodities.
-
-@option{--display EXPR} (@option{-d EXPR}) limits which transactions
-or accounts or actually displayed in a report. They might still be
-calculated, and be part of the running total of a register report, for
-example, but they will not be displayed. This is useful for seeing
-last month's checking transactions, against a running balance which
-includes all transaction values:
-
-@example
-ledger -d "d>=[last month]" reg checking
-@end example
-
-The output from this command is very different from the following,
-whose running total includes only transactions from the last month
-onward:
-
-@example
-ledger -p "last month" reg checking
-@end example
-
-Which is more useful depends on what you're looking to know: the total
-amount for the reporting range (@option{-p}), or simply a display
-restricted to the reporting range (using @option{-d}).
-
-@option{--date-format STR} (@option{-y STR}) changes the basic date
-format used by reports. The default uses a date like 2004/08/01,
-which represents the default date format of @samp{%Y/%m/%d}. To
-change the way dates are printed in general, the easiest way is to put
-@option{--date-format FORMAT} in the Ledger initialization file
-@file{~/.ledgerrc} (or the file referred to by @env{LEDGER_INIT}).
-
-@option{--format STR} (@option{-F STR}) sets the reporting format for
-whatever report ledger is about to make. @xref{Format strings}.
-There are also specific format commands for each report type:
-
-@itemize
-@item @option{--balance-format STR}
-@item @option{--register-format STR}
-@item @option{--print-format STR}
-@item @option{--plot-amount-format STR} (-j @command{register})
-@item @option{--plot-total-format STR} (-J @command{register})
-@item @option{--equity-format STR}
-@item @option{--prices-format STR}
-@item @option{--wide-register-format STR} (-w @command{register})
-@end itemize
-
-@node Commodity reporting, Environment variables, Output customization, Options
-@subsection Commodity reporting
-
-These options affect how commodity values are displayed:
-
-@option{--price-db FILE} sets the file that is used for recording
-downloaded commodity prices. It is always read on startup, to
-determine historical prices. Other settings can be placed in this
-file manually, to prevent downloading quotes for a specific, for
-example. This is done by adding a line like the following:
-
-@example
-; Don't download quotes for the dollar, or timelog values
-N $
-N h
-@end example
-
-@option{--price-exp MINS} (@option{-L MINS}) sets the expected
-freshness of price quotes, in minutes. That is, if the last known
-quote for any commodity is older than this value---and if
-@option{--download} is being used---then the Internet will be
-consulted again for a newer price. Otherwise, the old price is still
-considered to be fresh enough.
-
-@option{--download} (@option{-Q}) causes quotes to be automagically
-downloaded, as needed, by running a script named @command{getquote}
-and expecting that script to return a value understood by ledger. A
-sample implementation of a @command{getquote} script, implemented in
-Perl, is provided in the distribution. Downloaded quote price are
-then appended to the price database, usually specified using the
-environment variable @env{LEDGER_PRICE_DB}.
-
-There are several different ways that ledger can report the totals it
-displays. The most flexible way to adjust them is by using value
-expressions, and the @option{-t} and @option{-T} options. However,
-there are also several ``default'' reports, which will satisfy most
-users basic reporting needs:
-
-@table @code
-@item -O, --quantity
-Reports commodity totals (this is the default)
-
-@item -B, --basis
-Reports the cost basis for all transactions.
-
-@item -V, --market
-Reports the last known market value for all commodities.
-
-@item -g, --performance
-Reports the net gain/loss for each transaction in a @command{register}
-report.
-
-@item -G --gain
-Reports the net gain/loss for all commodities in the report that have
-a price history.
-@end table
-
-@node Environment variables, , Commodity reporting, Options
-@subsection Environment variables
-
-Every option to ledger may be set using an environment variable. If
-an option has a long name such @option{--this-option}, setting the
-environment variable @env{LEDGER_THIS_OPTION} will have the same
-affect as specifying that option on the command-line. Options on the
-command-line always take precedence over environment variable
-settings, however.
-
-Note that you may also permanently specify option values by placing
-option settings in the file @file{~/.ledgerrc}, for example:
-
-@example
---cache /tmp/.mycache
-@end example
-
-@node Format strings, Value expressions, Options, Running Ledger
-@section Format strings
-
-Format strings may be used to change the output format of reports.
-They are specified by passing a formatting string to the
-@option{--format} (@option{-F}) option. Within that string,
-constructs are allowed which make it possible to display the various
-parts of an account or transaction in custom ways.
-
-Within a format strings, a substitution is specified using a percent
-character (@samp{%}). The basic format of all substitutions is:
-
-@example
-%[-][MIN WIDTH][.MAX WIDTH]EXPR
-@end example
-
-If the optional minus sign (@samp{-}) follows the percent character,
-whatever is substituted will be left justified. The default is right
-justified. If a minimum width is given next, the substituted text
-will be at least that wide, perhaps wider. If a period and a maximum
-width is given, the substituted text will never be wider than this,
-and will be truncated to fit. Here are some examples:
-
-@example
-%-P An entry's payee, left justified
-%20P The same, right justified, at least 20 chars wide
-%.20P The same, no more than 20 chars wide
-%-.20P Left justified, maximum twenty chars wide
-@end example
-
-The expression following the format constraints can be a single
-letter, or an expression enclosed in parentheses or brackets. The
-allowable expressions are:
-
-@table @code
-@item %
-Inserts a percent sign.
-
-@item t
-Inserts the results of the value expression specified by @option{-t}.
-If @option{-t} was not specified, the current report style's value
-expression is used.
-
-@item T
-Inserts the results of the value expression specified by @option{-T}.
-If @option{-T} was not specified, the current report style's value
-expression is used.
-
-@item |
-Inserts a single space. This is useful if a width is specified, for
-inserting a certain number of spaces.
-
-@item _
-Inserts a space for each level of an account's depth. That is, if an
-account has two parents, this construct will insert two spaces. If a
-minimum width is specified, that much space is inserted for each level
-of depth. Thus @samp{%5_}, for an account with four parents, will
-insert twenty spaces.
-
-@item (EXPR)
-Inserts the amount resulting from the value expression given in
-parentheses. To insert five times the total value of an account, for
-example, one could say @samp{%12(5*O)}. Note: It's important to put
-the five first in that expression, so that the commodity doesn't get
-stripped from the total.
-
-@item [DATEFMT]
-Inserts the result of formatting a transaction's date with a date
-format string, exactly like those supported by @code{strftime}. For
-example: @samp{%[%Y/%m/%d %H:%M:%S]}.
-
-@item S
-Insert the pathname of the file from which the entry's data was read.
-
-@item B
-Inserts the beginning character position of that entry within the file.
-
-@item b
-Inserts the beginning line of that entry within the file.
-
-@item E
-Inserts the ending character position of that entry within the file.
-
-@item e
-Inserts the ending line of that entry within the file.
-
-@item D
-By default, this is the same as @samp{%[%Y/%m%/d]}. The date format
-used can be changed at any time with the @option{-y} flag, however.
-Using @samp{%D} gives the user more control over the way dates are
-output.
-
-@item d
-This is the same as the @samp{%D} option, unless the entry has an
-effective date, in which case it prints
-@samp{[ACTUAL_DATE=EFFECtIVE_DATE]}.
-
-@item X
-If a transaction has been cleared, this inserts @samp{*} followed by a
-space; otherwise nothing is inserted.
-
-@item Y
-This is the same as @samp{%X}, except that it only displays a state
-character if all of the member transactions have the same state.
-
-@item C
-Inserts the checking number for an entry, in parentheses, followed by
-a space; if none was specified, nothing is inserted.
-
-@item P
-Inserts the payee related to a transaction.
-
-@item a
-Inserts the optimal short name for an account. This is normally used
-in balance reports. It prints a parent account's name if that name
-has not been printed yet, otherwise it just prints the account's name.
-
-@item A
-Inserts the full name of an account.
-
-@item W
-This is the same as @samp{%A}, except that it first displays the
-transaction's state @emph{if the entry's transaction states are not
-all the same}, followed by the full account name. This is offered as
-a printing optimization, so that combined with @samp{%Y}, only the
-minimum amount of state detail is printed.
-
-@item o
-Inserts the ``optimized'' form of a transaction's amount. This is
-used by the print report. In some cases, this inserts nothing; in
-others, it inserts the transaction amount and its cost. It's use is
-not recommend unless you are modifying the print report.
-
-@item n
-Inserts the note associated with a transaction, preceded by two spaces
-and a semi-colon, if it exists. Thus, no none becomes an empty
-string, while the note @samp{foo} is substituted as @samp{ ; foo}.
-
-@item N
-Inserts the note associated with a transaction, if one exists.
-
-@item /
-The @samp{%/} construct is special. It separates a format string
-between what is printed for the first transaction of an entry, and
-what is printed for all subsequent transactions. If not used, the
-same format string is used for all transactions.
-@end table
-
-@node Value expressions, Period expressions, Format strings, Running Ledger
-@section Value expressions
-
-Value expressions are an expression language used by Ledger to
-calculate values used by the program for many different purposes:
-
-@enumerate
-@item
-The values displayed in reports
-@item
-For predicates (where truth is anything non-zero), to determine which
-transactions are calculated (@option{-l}) or displayed (@option{-d}).
-@item
-For sorting criteria, to yield the sort key.
-@item
-In the matching criteria used by automated transactions.
-@end enumerate
-
-Value expressions support most simple math and logic operators, in
-addition to a set of one letter functions and variables. A function's
-argument is whatever follows it. The following is a display predicate
-that I use with the @command{balance} command:
-
-@example
-ledger -d /^Liabilities/?T<0:UT>100 balance
-@end example
-
-The effect is that account totals are displayed only if: 1) A
-Liabilities account has a total less than zero; or 2) the absolute
-value of the account's total exceeds 100 units of whatever commodity
-contains. If it contains multiple commodities, only one of them must
-exceed 100 units.
-
-Display predicates are also very handy with register reports, to
-constrain which entries are printed. For example, the following
-command shows only entries from the beginning of the current month,
-while still calculating the running balance based on all entries:
-
-@example
-ledger -d "d>[this month]" register checking
-@end example
-
-This advantage to this command's complexity is that it prints the
-running total in terms of all entries in the register. The following,
-simpler command is similar, but totals only the displayed
-transactions:
-
-@example
-ledger -b "this month" register checking
-@end example
-
-@subsection Variables
-
-Below are the one letter variables available in any value expression.
-For the register and print commands, these variables relate to
-individual transactions, and sometimes the account affected by a
-transaction. For the balance command, these variables relate to
-accounts---often with a subtle difference in meaning. The use of each
-variable for both is specified.
-
-@table @code
-@item t
-This maps to whatever the user specified with @option{-t}. In a
-register report, @option{-t} changes the value column; in a balance
-report, it has no meaning by default. If @option{-t} was not
-specified, the current report style's value expression is used.
-
-@item T
-This maps to whatever the user specified with @option{-T}. In a
-register report, @option{-T} changes the totals column; in a balance
-report, this is the value given for each account. If @option{-T} was
-not specified, the current report style's value expression is used.
-
-@item m
-This is always the present moment/date.
-@end table
-
-@subsubsection Transaction/account details
-
-@table @code
-@item d
-A transaction's date, as the number of seconds past the epoch. This
-is always ``today'' for an account.
-
-@item a
-The transaction's amount; the balance of an account, without
-considering children.
-
-@item b
-The cost of a transaction; the cost of an account, without its
-children.
-
-@item v
-The market value of a transaction, or an account without its children.
-
-@item g
-The net gain (market value minus cost basis), for a transaction or an
-account without its children. It is the same as @samp{v-b}.
-
-@item l
-The depth (``level'') of an account. If an account has one parent,
-it's depth is one.
-
-@item n
-The index of a transaction, or the count of transactions affecting an
-account.
-
-@item X
-1 if a transaction's entry has been cleared, 0 otherwise.
-
-@item R
-1 if a transaction is not virtual, 0 otherwise.
-
-@item Z
-1 if a transaction is not automated, 0 otherwise.
-@end table
-
-@subsubsection Calculated totals
-
-@table @code
-@item O
-The total of all transactions seen so far, or the total of an account
-and all its children.
-
-@item N
-The total count of transactions affecting an account and all its
-children.
-
-@item B
-The total cost of all transactions seen so far; the total cost of an
-account and all its children.
-
-@item V
-The market value of all transactions seen so far, or of an account and
-all its children.
-
-@item G
-The total net gain (market value minus cost basis), for a series of
-transactions, or an account and its children. It is the same as
-@samp{V-B}.
-@end table
-
-@subsection Functions
-
-The available one letter functions are:
-
-@table @code
-@item -
-Negates the argument.
-
-@item U
-The absolute (unsigned) value of the argument.
-
-@item S
-Strips the commodity from the argument.
-
-@item A
-The arithmetic mean of the argument; @samp{Ax} is the same as
-@samp{x/n}.
-
-@item P
-The present market value of the argument. The syntax @samp{P(x,d)} is
-supported, which yields the market value at time @samp{d}. If no date
-is given, then the current moment is used.
-@end table
-
-@subsection Operators
-
-The binary and ternary operators, in order of precedence, are:
-
-@enumerate
-@item @samp{* /}
-@item @samp{+ -}
-@item @samp{! < > =}
-@item @samp{& | ?:}
-@end enumerate
-
-@subsection Complex expressions
-
-More complicated expressions are possible using:
-
-@table @code
-@item NUM
-A plain integer represents a commodity-less amount.
-
-@item @{AMOUNT@}
-An amount in braces can be any kind of amount supported by ledger,
-with or without a commodity. Use this for decimal values.
-
-@item /REGEXP/
-@item W/REGEXP/
-A regular expression that matches against an account's full name. If
-a transaction, this will match against the account affected by the
-transaction.
-
-@item //REGEXP/
-@item p/REGEXP/
-A regular expression that matches against an entry's payee name.
-
-@item ///REGEXP/
-@item w/REGEXP/
-A regular expression that matches against an account's base name. If
-a transaction, this will match against the account affected by the
-transaction.
-
-@item c/REGEXP/
-A regular expression that matches against the entry code (the text
-that occurs between parentheses before the payee name).
-
-@item e/REGEXP/
-A regular expression that matches against a transaction's note, or
-comment field.
-
-@item (EXPR)
-A sub-expression is nested in parenthesis. This can be useful passing
-more complicated arguments to functions, or for overriding the natural
-precedence order of operators.
-
-@item [DATE]
-Useful specifying a date in plain terms. For example, you could say
-@samp{[2004/06/01]}.
-@end table
-
-@node Period expressions, File format, Value expressions, Running Ledger
-@section Period expressions
-
-A period expression indicates a span of time, or a reporting interval,
-or both. The full syntax is:
-
-@example
-[INTERVAL] [BEGIN] [END]
-@end example
-
-The optional @var{INTERVAL} part may be any one of:
-
-@example
-every day
-every week
-every monthly
-every quarter
-every year
-every N days # N is any integer
-every N weeks
-every N months
-every N quarters
-every N years
-daily
-weekly
-biweekly
-monthly
-bimonthly
-quarterly
-yearly
-@end example
-
-After the interval, a begin time, end time, both or neither may be
-specified. As for the begin time, it can be either of:
-
-@example
-from <SPEC>
-since <SPEC>
-@end example
-
-The end time can be either of:
-
-@example
-to <SPEC>
-until <SPEC>
-@end example
-
-Where @var{SPEC} can be any of:
-
-@example
-2004
-2004/10
-2004/10/1
-10/1
-october
-oct
-this week # or day, month, quarter, year
-next week
-last week
-@end example
-
-The beginning and ending can be given at the same time, if it spans a
-single period. In that case, just use @var{SPEC} by itself. In that
-case, the period @samp{oct}, for example, will cover all the days in
-october. The possible forms are:
-
-@example
-<SPEC>
-in <SPEC>
-@end example
-
-Here are a few examples of period expressions:
-
-@example
-monthly
-monthly in 2004
-weekly from oct
-weekly from last month
-from sep to oct
-from 10/1 to 10/5
-monthly until 2005
-from apr
-until nov
-last oct
-weekly last august
-@end example
-
-@node File format, Some typical queries, Period expressions, Running Ledger
-@section File format
-
-The ledger file format is quite simple, but also very flexible. It
-supports many options, though typically the user can ignore most of
-them. They are summarized below.
-
-The initial character of each line determines what the line means, and
-how it should be interpreted. Allowable initial characters are:
-
-@table @code
-@item NUMBER
-A line beginning with a number denotes an entry. It may be followed
-by any number of lines, each beginning with whitespace, to denote the
-entry's account transactions. The format of the first line is:
-
-@example
-DATE[=EDATE] [*|!] [(CODE)] DESC
-@end example
-
-If @samp{*} appears after the date (with optional effective date), it
-indicates the entry is ``cleared'', which can mean whatever the user
-wants it t omean. If @samp{!} appears after the date, it indicates d
-the entry is ``pending''; i.e., tentatively cleared from the user's
-point of view, but not yet actually cleared. If a @samp{CODE} appears
-in parentheses, it may be used to indicate a check number, or the type
-of the transaction. Following these is the payee, or a description of
-the transaction.
-
-The format of each following transaction is:
-
-@example
- ACCOUNT AMOUNT [; NOTE]
-@end example
-
-The @samp{ACCOUNT} may be surrounded by parentheses if it is a virtual
-transactions, or square brackets if it is a virtual transactions that
-must balance. The @samp{AMOUNT} can be followed by a per-unit
-transaction cost, by specifying @samp{@ AMOUNT}, or a complete
-transaction cost with @samp{@@ AMOUNT}. Lastly, the @samp{NOTE} may
-specify an actual and/or effective date for the transaction by using
-the syntax @samp{[ACTUAL_DATE]} or @samp{[=EFFECTIVE_DATE]} or
-@samp{[ACTUAL_DATE=EFFECtIVE_DATE]}.
-
-@item =
-An automated entry. A value expression must appear after the equal
-sign.
-
-After this initial line there should be a set of one or more
-transactions, just as if it were normal entry. If the amounts of the
-transactions have no commodity, they will be applied as modifiers to
-whichever real transaction is matched by the value expression.
-
-@item ~
-A period entry. A period expression must appear after the tilde.
-
-After this initial line there should be a set of one or more
-transactions, just as if it were normal entry.
-
-@item !
-A line beginning with an exclamation mark denotes a command directive.
-It must be immediately followed by the command word. The supported
-commands are:
-
-@table @samp
-@item !include
-Include the stated ledger file.
-
-@item !account
-The account name is given is taken to be the parent of all
-transactions that follow, until @samp{!end} is seen.
-
-@item !end
-Ends an account block.
-@end table
-
-@item ;
-A line beginning with a colon indicates a comment, and is ignored.
-
-@item Y
-If a line begins with a capital Y, it denotes the year used for all
-subsequent entries that give a date without a year. The year should
-appear immediately after the Y, for example: @samp{Y2004}. This is
-useful at the beginning of a file, to specify the year for that file.
-If all entries specify a year, however, this command has no effect.
-
-@item P
-Specifies a historical price for a commodity. These are usually found
-in a pricing history file (see the @option{-Q} option). The syntax
-is:
-@example
-P DATE SYMBOL PRICE
-@end example
-
-@item N SYMBOL
-Indicates that pricing information is to be ignored for a given
-symbol, nor will quotes ever be downloaded for that symbol. Useful
-with a home currency, such as the dollar ($). It is recommended that
-these pricing options be set in the price database file, which
-defaults to @file{~/.pricedb}. The syntax for this command is:
-@example
-N SYMBOL
-@end example
-
-@item D AMOUNT
-Specifies the default commodity to use, by specifying an amount in the
-expected format. The @command{entry} command will use this commodity
-as the default when none other can be determined. This command may be
-used multiple times, to set the default flags for different
-commodities; whichever is seen last is used as the default commodity.
-For example, to set US dollars as the default commodity, while also
-setting the thousands flag and decimal flag for that commodity, use:
-@example
-D $1,000.00
-@end example
-
-@item C AMOUNT1 = AMOUNT2
-Specifies a commodity conversion, where the first amount is given to
-be equivalent to the second amount. The first amount should use the
-decimal precision desired during reporting:
-@example
-C 1.00 Kb = 1024 bytes
-@end example
-
-@item i, o, b, h
-These four relate to timeclock support, which permits ledger to read
-timelog files. See the timeclock's documentation for more info on the
-syntax of its timelog files.
-@end table
-
-@node Some typical queries, Budgeting and forecasting, File format, Running Ledger
-@section Some typical queries
-
-A query such as the following shows all expenses since last
-October, sorted by total:
-
-@example
-ledger -b "last oct" -s -S T bal ^expenses
-@end example
-
-From left to right the options mean: Show entries since October, 2003;
-show all sub-accounts; sort by the absolute value of the total; and
-report the balance for all expenses.
-
-@subsection Reporting monthly expenses
-
-The following query makes it easy to see monthly expenses, with each
-month's expenses sorted by the amount:
-
-@example
-ledger -M --period-sort t reg ^expenses
-@end example
-
-Now, you might wonder where the money came from to pay for these
-things. To see that report, add @option{-r}, which shows the
-``related account'' transactions:
-
-@example
-ledger -M --period-sort t -r reg ^expenses
-@end example
-
-But maybe this prints too much information. You might just want to
-see how much you're spending with your MasterCard. That kind of query
-requires the use of a display predicate, since the transactions
-calculated must match @samp{^expenses}, while the transactions
-displayed must match @samp{mastercard}. The command would be:
-
-@example
-ledger -M -r -d /mastercard/ reg ^expenses
-@end example
-
-This query says: Report monthly subtotals; report the ``related
-account'' transactions; display only related transactions whose
-account matches @samp{mastercard}, and base the calculation on
-transactions matching @samp{^expenses}.
-
-This works just as well for report the overall total, too:
-
-@example
-ledger -s -r -d /mastercard/ reg ^expenses
-@end example
-
-The @option{-s} option subtotals all transactions, just as @option{-M}
-subtotaled by the month. The running total in both cases is off,
-however, since a display expression is being used.
-
-@subsection Visualizing with Gnuplot
-
-If you have @command{Gnuplot} installed, you can graph any of the
-above register reports. The script to do this is included in the
-ledger distribution, and is named @file{scripts/report}. Install
-@file{report} anywhere along your @env{PATH}, and then use
-@command{report} instead of @command{ledger} when doing a register
-report. The only thing to keep in mind is that you must specify
-@option{-j} or @option{-J} to indicate whether Gnuplot should plot the
-amount, or the running total. For example, this command plots total
-monthly expenses made on your MasterCard.
-
-@example
-report -j -M -r -d /mastercard/ reg ^expenses
-@end example
-
-The @command{report} script is a very simple Bourne shell script, that
-passes a set of scripted commands to Gnuplot. Feel free to modify the
-script to your liking, since you may prefer histograms to line plots,
-for example.
-
-@subsubsection Typical plots
-
-Here are some useful plots:
-
-@smallexample
-report -j -M reg ^expenses # monthly expenses
-report -J reg checking # checking account balance
-report -J reg ^income ^expenses # cash flow report
-
-# net worth report, ignoring non-$ transactions
-
-report -J -l "Ua>=@{\$0.01@}" reg ^assets ^liab
-
-# net worth report starting last February. the use of a display
-# predicate (-d) is needed, otherwise the balance will start at
-# zero, and thus the y-axis will not reflect the true balance
-
-report -J -l "Ua>=@{\$0.01@}" -d "d>=[last feb]" reg ^assets ^liab
-@end smallexample
-
-The last report uses both a calculation predicate (@option{-l}) and a
-display predicate (@option{-d}). The calculation predicates limits
-the report to transactions whose amount is greater than $1 (which can
-only happen if the transaction amount is in dollars). The display
-predicate limits the entries @emph{displayed} to just those since last
-February, even those entries from before then will be computed as part
-of the balance.
-
-@node Budgeting and forecasting, , Some typical queries, Running Ledger
-@section Budgeting and forecasting
-
-@subsection Budgeting
-
-Keeping a budget allows you to pay closer attention to your income and
-expenses, by reporting how far your actual financial activity is from
-your expectations.
-
-To start keeping a budget, put some period entries at the top of your
-ledger file. A period entry is almost identical to a regular entry,
-except that it begins with a tilde and has a period expression in
-place of a payee. For example:
-
-@smallexample
-~ Monthly
- Expenses:Rent $500.00
- Expenses:Food $450.00
- Expenses:Auto:Gas $120.00
- Expenses:Insurance $150.00
- Expenses:Phone $125.00
- Expenses:Utilities $100.00
- Expenses:Movies $50.00
- Expenses $200.00 ; all other expenses
- Assets
-
-~ Yearly
- Expenses:Auto:Repair $500.00
- Assets
-@end smallexample
-
-These two period entries give the usual monthly expenses, as well as
-one typical yearly expense. For help on finding out what your average
-monthly expense is for any category, use a command like:
-
-@example
-ledger -p "this year" -MAs bal ^expenses
-@end example
-
-The reported totals are the current year's average for each account.
-
-Once these period entries are defined, creating a budget report is as
-easy as adding @option{--budget} to the command-line. For example, a
-typical monthly expense report would be:
-
-@example
-ledger -M reg ^exp
-@end example
-
-To see the same report balanced against your budget, use:
-
-@example
-ledger --budget -M reg ^exp
-@end example
-
-A budget report includes only those accounts that appear in the
-budget. To see all expenses balanced against the budget, use
-@option{--add-budget}. You can even see only the unbudgeted expenses
-using @option{--unbudgeted}:
-
-@example
-ledger --unbudgeted -M reg ^exp
-@end example
-
-You can also use these flags with the @command{balance} command.
-
-@subsection Forecasting
-
-Sometimes it's useful to know what your finances will look like in the
-future, such as determining when an account will reach zero. Ledger
-makes this easy to do, using the same period entries as are used for
-budgeting. An example forecast report can be generated with:
-
-@example
-ledger --forecast "T>@{\$-500.00@}" register ^assets ^liabilities
-@end example
-
-This report continues outputting transactions until the running total
-is greater than $-500.00. A final transaction is always output, to
-show you what the total afterwards would be.
-
-Forecasting can also be used with the balance report, but by date
-only, and not against the running total:
-
-@example
-ledger --forecast "d<[2010]" bal ^assets ^liabilities
-@end example
-
-@node Keeping a ledger, Using XML, Running Ledger, Top
-@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 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 GnuCash to maintain
-your ledger, in which case the Ledger program will read GnuCash's data
-files directly. In that case, read the GnuCash manual now, and skip
-to the next chapter.
-
-If you are not using GnuCash, but a text editor to maintain your
-ledger, read on. 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 Ledger about the accounts you
-use. Any time Ledger sees a transaction involving an account it knows
-nothing about, it will create it. If you use a commodity that is new
-to 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 Ledger
-transaction:
-
-@smallexample
-9/29 (100) Pacific Bell
- Expenses:Utilities:Phone $23.00
- Assets:Checking $-23.00
-@end smallexample
-
-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 Ledger's scheme of things. In fact, since Ledger is
-smart about many things, you don't need to specify the balanced
-amount, if it is the same as the first line:
-
-@smallexample
-9/29 (100) Pacific Bell
- Expenses:Utilities:Phone $23.00
- Assets:Checking
-@end smallexample
-
-For this entry, Ledger will figure out that $-23.00 must come from
-@samp{Assets:Checking} in order to balance the entry.
-
-@menu
-* Stating where money goes::
-* Assets and Liabilities::
-* Commodities and Currencies::
-* Accounts and Inventories::
-* Understanding Equity::
-* Dealing with Petty Cash::
-* Working with multiple funds and accounts::
-* Archiving previous years::
-* Virtual transactions::
-* Automated transactions::
-* Using Emacs to Keep Your Ledger::
-* Using GnuCash to Keep Your Ledger::
-* Using timeclock to record billable time::
-@end menu
-
-@node Stating where money goes, Assets and Liabilities, Keeping a ledger, Keeping a ledger
-@section Stating where money goes
-
-Accountants will talk of ``credits'' and ``debits'', but the meaning
-is often different from the layman's understanding. To avoid
-confusion, Ledger uses only subtractions and additions, although the
-underlying intent is the same as standard accounting principles.
-
-Recall that every transaction will involve two or more accounts.
-Money is transferred from one or more accounts to one or more other
-accounts. To record the transaction, an amount is @emph{subtracted}
-from the source accounts, and @emph{added} to the target accounts.
-
-In order to write a Ledger entry correctly, you must determine where
-the money comes from and where it goes to. For example, when you are
-paid a salary, you must add money to your bank account and also
-subtract it from an income account:
-
-@smallexample
-9/29 My Employer
- Assets:Checking $500.00
- Income:Salary $-500.00
-@end smallexample
-
-Why is the Income a negative figure? When you look at the balance
-totals for your ledger, you may be surprised to see that Expenses are
-a positive figure, and Income is a negative figure. It may take some
-getting used to, but to properly use a general ledger you must think
-in terms of how money moves. Rather than Ledger ``fixing'' the minus
-signs, let's understand why they are there.
-
-When you earn money, the money has to come from somewhere. Let's call
-that somewhere ``society''. In order for society to give you an
-income, you must take money away (withdraw) from society in order to
-put it into (make a payment to) your bank. When you then spend that
-money, it leaves your bank account (a withdrawal) and goes back to
-society (a payment). This is why Income will appear negative---it
-reflects the money you have drawn from society---and why Expenses will
-be positive---it is the amount you've given back. These additions and
-subtractions will always cancel each other out in the end, because you
-don't have the ability to create new money: it must always come from
-somewhere, and in the end must always leave. This is the beginning of
-economy, after which the explanation gets terribly difficult.
-
-Based on that explanation, here's another way to look at your balance
-report: every negative figure means that that account or person or
-place has less money now than when you started your ledger; and every
-positive figure means that that account or person or place has more
-money now that when you started your ledger. Make sense?
-
-@node Assets and Liabilities, Commodities and Currencies, Stating where money goes, Keeping a ledger
-@section Assets and Liabilities
-
-Assets are money that you have, and Liabilities are money that you
-owe. ``Liabilities'' is just a more inclusive name for Debts.
-
-An Asset is typically increased by transferring money from an Income
-account, such as when you get paid. Here is a typical entry:
-
-@smallexample
-2004/09/29 My Employer
- Assets:Checking $500.00
- Income:Salary
-@end smallexample
-
-Money, here, comes from an Income account belonging to ``My
-Employer'', and is transferred to your checking account. The money is
-now yours, which makes it an Asset.
-
-Liabilities track money owed to others. This can happen when you
-borrow money to buy something, or if you owe someone money. Here is
-an example of increasing a MasterCard liability by spending money with
-it:
-
-@smallexample
-2004/09/30 Restaurant
- Expenses:Dining $25.00
- Liabilities:MasterCard
-@end smallexample
-
-The Dining account balance now shows $25 spent on Dining, and a
-corresponding $25 owed on the MasterCard---and therefore shown as
-$-25.00. The MasterCard liability shows up as negative because it
-offsets the value of your assets.
-
-The combined total of your Assets and Liabilities is your net worth.
-So to see your current net worth, use this command:
-
-@example
-ledger balance ^assets ^liabilities
-@end example
-
-Relatedly, your Income accounts show up negative, because they
-transfer money @emph{from} an account in order to increase your
-assets. Your Expenses show up positive because that is where the
-money went to. The combined total of Income and Expenses is your cash
-flow. A positive cash flow means you are spending more than you make,
-since income is always a negative figure. To see your current cash
-flow, use this command:
-
-@example
-ledger balance ^income ^expenses
-@end example
-
-Another common question to ask of your expenses is: How much do I
-spend each month on X? Ledger provides a simple way of displaying
-monthly totals for any account. Here is an example that summarizes
-your monthly automobile expenses:
-
-@example
-ledger -M register expenses:auto
-@end example
-
-This assumes, of course, that you use account names like
-@samp{Expenses:Auto:Gas} and @samp{Expenses:Auto:Repair}.
-
-@subsection Tracking reimbursable expenses
-
-Sometimes you will want to spend money on behalf of someone else,
-which will eventually get repaid. Since the money is still ``yours'',
-it is really an asset. And since the expenditure was for someone
-else, you don't want it contaminating your Expenses reports. You will
-need to keep an account for tracking reimbursements.
-
-This is fairly easy to do in ledger. When spending the money, spend
-it @emph{to} your Assets:Reimbursements, using a different account for
-each person or business that you spend money for. For example:
-
-@smallexample
-2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard
-@end smallexample
-
-This shows $100.00 spent on a MasterCard at Circuit City, with the
-expense was made on behalf of Company XYZ. Later, when Company XYZ
-pays the amount back, the money will transfer from that reimbursement
-account back to a regular asset account:
-
-@smallexample
-2004/09/29 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ
-@end smallexample
-
-This deposits the money owed from Company XYZ into a checking account,
-presumably because they paid the amount back with a check.
-
-But what to do if you run your own business, and you want to keep
-track of expenses made on your own behalf, while still tracking
-everything in a single ledger file? This is more complex, because you
-need to track two separate things: 1) The fact that the money should
-be reimbursed to you, and 2) What the expense account was, so that you
-can later determine where your company is spending its money.
-
-This kind of transaction is best handled with mirrored transactions in
-two different files, one for your personal accounts, and one for your
-company accounts. But keeping them in one file involves the same
-kinds of transactions, so those are what is shown here. First, the
-personal entry, which shows the need for reimbursement:
-
-@smallexample
-2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard
-@end smallexample
-
-This is the same as above, except that you own Company XYZ, and are
-keeping track of its expenses in the same ledger file. This entry
-should be immediately followed by an equivalent entry, which shows the
-kind of expense, and also notes the fact that $100.00 is now payable
-to you:
-
-@smallexample
-2004/09/29 Circuit City
- Company XYZ:Expenses:Computer:Software $100.00
- Company XYZ:Accounts Payable:Your Name
-@end smallexample
-
-This second entry shows that Company XYZ has just spent $100.00 on
-software, and that this $100.00 came from Your Name, which must be
-paid back.
-
-These two entries can also be merged, to make things a little clearer.
-Note that all amounts must be specified now:
-
-@smallexample
-2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard $-100.00
- Company XYZ:Expenses:Computer:Software $100.00
- Company XYZ:Accounts Payable:Your Name $-100.00
-@end smallexample
-
-To ``pay back'' the reimbursement, just reverse the order of
-everything, except this time drawing the money from a company asset,
-paying it to accounts payable, and then drawing it again from the
-reimbursement account, and paying it to your personal asset account.
-It's easier shown than said:
-
-@smallexample
-2004/10/15 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ $-100.00
- Company XYZ:Accounts Payable:Your Name $100.00
- Company XYZ:Assets:Checking $-100.00
-@end smallexample
-
-And now the reimbursements account is paid off, accounts payable is
-paid off, and $100.00 has been effectively transferred from the
-company's checking account to your personal checking account. The
-money simply ``waited''---in both @samp{Assets:Reimbursements:Company
-XYZ}, and @samp{Company XYZ:Accounts Payable:Your Name}---until such
-time as it could be paid off.
-
-The value of tracking expenses from both sides like that is that you
-do not contaminate your personal expense report with expenses made on
-behalf of others, while at the same time making it possible to
-generate accurate reports of your company's expenditures. It is more
-verbose than just paying for things with your personal assets, but it
-gives you a very accurate information trail.
-
-The advantage to keep these doubled entries together is that they
-always stay in sync. The advantage to keeping them apart is that it
-clarifies the transfer's point of view. To keep the transactions in
-separate files, just separate the two entries that were joined above.
-For example, for both the expense and the pay-back shown above, the
-following four entries would be created. Two in your personal ledger
-file:
-
-@smallexample
-2004/09/29 Circuit City
- Assets:Reimbursements:Company XYZ $100.00
- Liabilities:MasterCard $-100.00
-
-2004/10/15 Company XYZ
- Assets:Checking $100.00
- Assets:Reimbursements:Company XYZ $-100.00
-@end smallexample
-
-And two in your company ledger file:
-
-@smallexample
-!account Company XYZ
-
-2004/09/29 Circuit City
- Expenses:Computer:Software $100.00
- Accounts Payable:Your Name $-100.00
-
-2004/10/15 Company XYZ
- Accounts Payable:Your Name $100.00
- Assets:Checking $-100.00
-
-!end
-@end smallexample
-
-(Note: The @samp{!account} above means that all accounts mentioned in
-the file are children of that account. In this case it means that all
-activity in the file relates to Company XYZ).
-
-After creating these entries, you will always know that $100.00 was
-spent using your MasterCard on behalf of Company XYZ, and that Company
-XYZ spent the money on computer software and paid it back about two
-weeks later.
-
-@node Commodities and Currencies, Accounts and Inventories, Assets and Liabilities, Keeping a ledger
-@section Commodities and Currencies
-
-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 appearing after the amount refer
-to commodities. Here are some valid currency and commodity
-specifiers:
-
-@example
-$20.00 ; currency: twenty US dollars
-40 AAPL ; commodity: 40 shares of Apple stock
-60 DM ; currency: 60 Deutsch Mark
-£50 ; currency: 50 British pounds
-50 EUR ; currency: 50 Euros (or use appropriate symbol)
-@end example
-
-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 brokerage account
-contains both cash, gold, and several stock quantities, the balance
-might look like:
-
-@smallexample
- $200.00
-100.00 AU
- AAPL 40
- BORL 100
- FEQTX 50 Assets:Brokerage
-@end smallexample
-
-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 any commodity, in which case the balance will be computed in terms
-of that commodity. The usual way to specify prices is with a price
-history file, which might look like this:
-
-@smallexample
-P 2004/06/21 02:18:01 FEQTX $22.49
-P 2004/06/21 02:18:01 BORL $6.20
-P 2004/06/21 02:18:02 AAPL $32.91
-P 2004/06/21 02:18:02 AU $400.00
-@end smallexample
-
-Specify the price history to use with the @option{--price-db} option,
-with the @option{-V} option to report in terms of current market
-value:
-
-@example
-ledger --price-db prices.db -V balance brokerage
-@end example
-
-The balance for your brokerage account will be reported in US dollars,
-since the prices database uses that currency.
-
-@smallexample
-$40880.00 Assets:Brokerage
-@end smallexample
-
-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, in terms of the
-current price of gold:
-
-@example
-ledger -T "@{1 AU@}*(O/P@{1 AU@})" balance checking
-@end example
-
-Although the total expression appears complex, it is simply saying
-that the reported total should be in multiples of AU units, where the
-quantity is the account total divided by the price of one AU. Without
-the initial multiplication, the reported total would still use the
-dollars commodity, since multiplying or dividing amounts always keeps
-the left value's commodity. The result of this command might be:
-
-@smallexample
-14.01 AU Assets:Checking
-@end smallexample
-
-@subsection Commodity price histories
-
-Whenever a commodity is purchased using a different commodity (such as
-a share of common stock using dollars), it establishes a price for
-that commodity on that day. It is also possible, by recording price
-details in a ledger file, to specify other prices for commodities at
-any given time. Such price entries might look like those below:
-
-@smallexample
-P 2004/06/21 02:17:58 TWCUX $27.76
-P 2004/06/21 02:17:59 AGTHX $25.41
-P 2004/06/21 02:18:00 OPTFX $39.31
-P 2004/06/21 02:18:01 FEQTX $22.49
-P 2004/06/21 02:18:02 AAPL $32.91
-@end smallexample
-
-By default, ledger will not consider commodity prices when generating
-its various reports. It will always report balances in terms of the
-commodity total, rather than the current value of those commodities.
-To enable pricing reports, use one of the commodity reporting options.
-
-@subsection Commodity equivalencies
-
-Sometimes a commodity has several forms which are all equivalent. An
-example of this is time. Whether tracked in terms of minutes, hours
-or days, it should be possible to convert between the various forms.
-Doing this requires the use of commodity equivalencies.
-
-For example, you might have the following two transactions, one which
-transfers an hour of time into a @samp{Billable} account, and another
-which decreases the same account by ten minutes. The resulting report
-will indicate that fifty minutes remain:
-
-@smallexample
-2005/10/01 Work done for company
- Billable:Client 1h
- Project:XYZ
-
-2005/10/02 Return ten minutes to the project
- Project:XYZ 10m
- Billable:Client
-@end smallexample
-
-Reporting the balance for this ledger file produces:
-
-@smallexample
- 50.0m Billable:Client
- -50.0m Project:XYZ
-@end smallexample
-
-This example works because ledger already knows how to handle seconds,
-minutes and hours, as part of its time tracking support. Defining
-other equivalencies is simple. The following is an example that
-creates data equivalencies, helpful for tracking bytes, kilobytes,
-megabytes, and more:
-
-@smallexample
-C 1.00 Kb = 1024 b
-C 1.00 Mb = 1024 Kb
-C 1.00 Gb = 1024 Mb
-C 1.00 Tb = 1024 Gb
-@end smallexample
-
-Each of these definitions correlates a commodity (such as @samp{Kb})
-and a default precision, with a certain quantity of another commodity.
-In the above example, kilobytes are reporetd with two decimal places
-of precision and each kilobyte is equal to 1024 bytes.
-
-Equivalency chains can be as long as desired. Whenever a commodity
-would report as a decimal amount (less than @samp{1.00}), the next
-smallest commodity is used. If a commodity could be reported in terms
-of a higher commodity without resulting to a partial fraction, then
-the larger commodity is used.
-
-@node Accounts and Inventories, Understanding Equity, Commodities and Currencies, Keeping a ledger
-@section Accounts and Inventories
-
-Since 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:
-
-@smallexample
-9/29 Get some stuff at the Inn
- Places:Black's Tavern -3 Apples
- Places:Black's Tavern -5 Steaks
- EverQuest:Inventory
-@end smallexample
-
-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 add to your Inventory account. Note that you don't
-have to use @samp{Places:Black's Tavern} as the source account. You
-could use @samp{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:
-
-@smallexample
-10/2 Sturm Brightblade
- EverQuest:Inventory -2 Steaks
- EverQuest:Inventory 15 Gold
-@end smallexample
-
-Now you've turned 2 steaks into 15 gold, courtesy of your customer,
-Sturm Brightblade.
-
-@node Understanding Equity, Dealing with Petty Cash, Accounts and Inventories, Keeping a ledger
-@section Understanding Equity
-
-The most confusing entry in any ledger will be your equity account---
-because starting balances can't come out of nowhere.
-
-When you first start your ledger, you will likely already have money
-in some of your accounts. Let's say there's $100 in your checking
-account; then add an entry to your ledger to reflect this amount.
-Where will money come from? The answer: your equity.
-
-@smallexample
-10/2 Opening Balance
- Assets:Checking $100.00
- Equity:Opening Balances
-@end smallexample
-
-But what is equity? You may have heard of equity when people talked
-about house mortgages, as ``the part of the house that you own''.
-Basically, equity is like the value of something. If you own a car
-worth $5000, then you have $5000 in equity in that car. In order to
-turn that car (a commodity) into a cash flow, or a credit to your bank
-account, you will have to debit the equity by selling it.
-
-When you start a ledger, you are probably already worth something.
-Your net worth is your current equity. By transferring the money in
-the ledger from your equity to your bank accounts, you are crediting
-the ledger account based on your prior equity. That is why, when you
-look at the balance report, you will see a large negative number for
-Equity that never changes: Because that is what you were worth (what
-you debited from yourself in order to start the ledger) before the
-money started moving around. If the total positive value of your
-assets is greater than the absolute value of your starting equity, it
-means you are making money.
-
-Clear as mud? Keep thinking about it. Until you figure it out, put
-@samp{-Equity} at the end of your balance command, to remove the
-confusing figure from the total.
-
-@node Dealing with Petty Cash, Working with multiple funds and accounts, Understanding Equity, Keeping a ledger
-@section Dealing with Petty Cash
-
-Something that stops many people from keeping a ledger at all is the
-insanity of tracking small cash expenses. They rarely generate a
-receipt, and there are often a lot of small transactions, rather than
-a few large ones, as with checks.
-
-One solution is: don't bother. Move your spending to a debit card,
-but in general ignore cash. Once you withdraw it from the ATM, mark
-it as already spent to an @samp{Expenses:Cash} category:
-
-@smallexample
-2004/03/15 ATM
- Expenses:Cash $100.00
- Assets:Checking
-@end smallexample
-
-If at some point you make a large cash expense that you want to track,
-just ``move'' the amount of the expense from @samp{Expenses:Cash} into
-the target account:
-
-@smallexample
-2004/03/20 Somebody
- Expenses:Food $65.00
- Expenses:Cash
-@end smallexample
-
-This way, you can still track large cash expenses, while ignoring all
-of the smaller ones.
-
-@node Working with multiple funds and accounts, Archiving previous years, Dealing with Petty Cash, Keeping a ledger
-@section Working with multiple funds and accounts
-
-There are situations when the accounts you're tracking are different
-between your clients and the financial institutions where money is
-kept. An example of this is working as the treasurer for a religious
-institution. From the secular point of view, you might be working
-with three different accounts:
-
-@itemize
-@item Checking
-@item Savings
-@item Credit Card
-@end itemize
-
-From a religious point of view, the community expects to divide its
-resources into multiple ``funds'', from which it makes purchases or
-reserves resources for later:
-
-@itemize
-@item School fund
-@item Building fund
-@item Community fund
-@end itemize
-
-The problem with this kind of setup is that when you spend money, it
-comes from two or more places at once: the account and the fund. And
-yet, the correlation of amounts between funds and accounts is rarely
-one-to-one. What if the school fund has @samp{$500.00}, but
-@samp{$400.00} of that comes from Checking, and @samp{$100.00} from
-Savings?
-
-Traditional finance packages require that the money reside in only one
-place. But there are really two ``views'' of the data: from the
-account point of view and from the fund point of view -- yet both sets
-should reflect the same overall expenses and cash flow. It's simply
-where the money resides that differs.
-
-This situation can be handled one of two ways. The first is using
-virtual transactions to represent the fact that money is moving to and
-from two kind of accounts at the same time:
-
-@smallexample
-2004/03/20 Contributions
- Assets:Checking $500.00
- Income:Donations
-
-2004/03/25 Distribution of donations
- [Funds:School] $300.00
- [Funds:Building] $200.00
- [Assets:Checking] $-500.00
-@end smallexample
-
-The use of square brackets in the second entry ensures that the
-virtual transactions balance to zero. Now money can be spent directly
-from a fund at the same time as money is drawn from a physical
-account:
-
-@smallexample
-2004/03/25 Payment for books (paid from Checking)
- Expenses:Books $100.00
- Assets:Checking $-100.00
- (Funds:School) $-100.00
-@end smallexample
-
-When reports are generated, by default they'll appear in terms of the
-funds. In this case, you will likely want to mask out your
-@samp{Assets} account, because otherwise the balance won't make much
-sense:
-
-@example
-ledger bal -^Assets
-@end example
-
-If the @option{--real} option is used, the report will be in terms of
-the real accounts:
-
-@example
-ledger --real bal
-@end example
-
-If more asset accounts are needed as the source of a transaction, just
-list them as you would normally, for example:
-
-@smallexample
-2004/03/25 Payment for books (paid from Checking)
- Expenses:Books $100.00
- Assets:Checking $-50.00
- Liabilities:Credit Card $-50.00
- (Funds:School) $-100.00
-@end smallexample
-
-The second way of tracking funds is to use entry codes. In this
-respect the codes become like virtual accounts that embrace the entire
-set of transactions. Basically, we are associating an entry with a
-fund by setting its code. Here are two entries that desposit money
-into, and spend money from, the @samp{Funds:School} fund:
-
-@smallexample
-2004/03/25 (Funds:School) Donations
- Assets:Checking $100.00
- Income:Donations
-
-2004/04/25 (Funds:School) Payment for books
- Expenses:Books $50.00
- Assets:Checking
-@end smallexample
-
-Note how the accounts now relate only to the real accounts, and any
-balance or registers reports will reflect this. That the entries
-relate to a particular fund is kept only in the code.
-
-How does this become a fund report? By using the
-@option{--code-as-payee} option, you can generate a register report
-where the payee for each transaction shows the code. Alone, this is
-not terribly interesting; but when combined with the
-@option{--by-payee} option, you will now see account subtotals for any
-transactions related to a specific fund. So, to see the current
-monetary balances of all funds, the command would be:
-
-@smallexample
-ledger --code-as-payee -P reg ^Assets
-@end smallexample
-
-Or to see a particular funds expenses, the @samp{School} fund in this
-case:
-
-@smallexample
-ledger --code-as-payee -P reg ^Expenses -- School
-@end smallexample
-
-Both approaches yield different kinds of flexibility, depending on how
-you prefer to think of your funds: as virtual accounts, or as tags
-associated with particular entries. Your own tastes will decide which
-is best for your situation.
-
-@node Archiving previous years, Virtual transactions, Working with multiple funds and accounts, Keeping a ledger
-@section Archiving previous years
-
-After a while, your ledger can get to be pretty large. While this
-will not slow down the ledger program much---it's designed to process
-ledger files very quickly---things can start to feel ``messy''; and
-it's a universal complaint that when finances feel messy, people avoid
-them.
-
-Thus, archiving the data from previous years into their own files can
-offer a sense of completion, and freedom from the past. But how to
-best accomplish this with the ledger program? There are two commands
-that make it very simple: @command{print}, and @command{equity}.
-
-Let's take an example file, with data ranging from year 2000 until
-2004. We want to archive years 2000 and 2001 to their own file,
-leaving just 2003 and 2004 in the current file. So, use
-@command{print} to output all the earlier entries to a file called
-@file{ledger-old.dat}:
-
-@smallexample
-ledger -f ledger.dat -b 2000 -e 2001 print > ledger-old.dat
-@end smallexample
-
-To delete older data from the current ledger file, use @command{print}
-again, this time specifying year 2002 as the starting date:
-
-@example
-ledger -f ledger.dat -b 2002 print > x
-mv x ledger.dat
-@end example
-
-However, now the current file contains @emph{only} transactions from
-2002 onward, which will not yield accurate present-day balances,
-because the net income from previous years is no longer being tallied.
-To compensate for this, we must append an equity report for the old
-ledger at the beginning of the new one:
-
-@example
-ledger -f ledger-old.dat equity > equity.dat
-cat equity.dat ledger.dat > x
-mv x ledger.dat
-rm equity.dat
-@end example
-
-Now the balances reported from @file{ledger.dat} are identical to what
-they were before the data was split.
-
-How often should you split your ledger? You never need to, if you
-don't want to. Even eighty years of data will not slow down ledger
-much---and that's just using present day hardware! Or, you can keep
-the previous and current year in one file, and each year before that
-in its own file. It's really up to you, and how you want to organize
-your finances. For those who also keep an accurate paper trail, it
-might be useful to archive the older years to their own files, then
-burn those files to a CD to keep with the paper records---along with
-any electronic statements received during the year. In the arena of
-organization, just keep in mind this maxim: Do whatever keeps you
-doing it.
-
-@node Virtual transactions, Automated transactions, Archiving previous years, Keeping a ledger
-@section Virtual transactions
-
-A virtual transaction is when you, in your mind, see money as moving
-to a certain place, when in reality that money has not moved at all.
-There are several scenarios in which this type of tracking comes in
-handy, and each of them will be discussed in detail.
-
-To enter a virtual transaction, surround the account name in
-parentheses. This form of usage does not need to balance. However,
-if you want to ensure the virtual transaction balances with other
-virtual transactions in the same entry, use square brackets. For
-example:
-
-@smallexample
-10/2 Paycheck
- Assets:Checking $1000.00
- Income:Salary $-1000.00
- (Debt:Alimony) $200.00
-@end smallexample
-
-In this example, after receiving a paycheck an alimony debt is
-increased---even though no money has moved around yet.
-
-@smallexample
-10/2 Paycheck
- Assets:Checking $1000.00
- Income:Salary $-1000.00
- [Savings:Trip] $200.00
- [Assets:Checking] $-200.00
-@end smallexample
-
-In this example, $200 has been deducted from checking toward savings
-for a trip. It will appear as though the money has been moved from
-the account into @samp{Savings:Trip}, although no money has actually
-moved anywhere.
-
-When balances are displayed, virtual transactions will be factored in.
-To view balances without any virtual balances factored in, using the
-@option{-R} flag, for ``reality''.
-
-@node Automated transactions, Using Emacs to Keep Your Ledger, Virtual transactions, Keeping a ledger
-@section Automated transactions
-
-As a Bahá'í, I need to compute Huqúqu'lláh whenever I acquire assets.
-It is similar to tithing for Jews and Christians, or to Zakát for
-Muslims. The exact details of computing Huqúqu'lláh are somewhat
-complex, but if you have further interest, please consult the Web.
-
-Ledger makes this otherwise difficult law very easy. Just set up an
-automated transaction at the top of your ledger file:
-
-@smallexample
-; This automated entry will compute Huqúqu'lláh based on this
-; journal's transactions. Any that match will affect the
-; Liabilities:Huququ'llah account by 19% of the value of that
-; transaction.
-
-= /^(?:Income:|Expenses:(?:Business|Rent$|Furnishings|Taxes|Insurance))/
- (Liabilities:Huququ'llah) 0.19
-@end smallexample
-
-This automated transaction works by looking at each transaction in the
-ledger file. If any match the given value expression, 19% of the
-transaction's value is applied to the @samp{Liabilities:Huququ'llah}
-account. So, if $1000 is earned from @samp{Income:Salary}, $190 is
-added to @samp{Liabilities:Huqúqu'lláh}; if $1000 is spent on Rent,
-$190 is subtracted. The ultimate balance of Huqúqu'lláh reflects how
-much is owed in order to fulfill one's obligation to Huqúqu'lláh.
-When ready to pay, just write a check to cover the amount shown in
-@samp{Liabilities:Huququ'llah}. That entry would look like:
-
-@smallexample
-2003/01/01 (101) Baha'i Huqúqu'lláh Trust
- Liabilities:Huququ'llah $1,000.00
- Assets:Checking
-@end smallexample
-
-That's it. To see how much Huqúq is currently owed based on your
-ledger entries, use:
-
-@example
-ledger balance Liabilities:Huquq
-@end example
-
-This works fine, but omits one aspect of the law: that Huquq is only
-due once the liability exceeds the value of 19 mithqáls of gold (which
-is roughly 2.22 ounces). So what we want is for the liability to
-appear in the balance report only when it exceeds the present day
-value of 2.22 ounces of gold. This can be accomplished using the
-command:
-
-@smallexample
-ledger -Q -t "/Liab.*Huquq/?(a/P@{2.22 AU@}<=@{-1.0@}&a):a" -s bal liab
-@end smallexample
-
-With this command, the current price for gold is downloaded, and the
-Huqúqu'lláh is reported only if its value exceeds that of 2.22 ounces
-of gold. If you wish the liability to be reflected in the parent
-subtotal either way, use this instead:
-
-@smallexample
-ledger -Q -T "/Liab.*Huquq/?(O/P@{2.22 AU@}<=@{-1.0@}&O):O" -s bal liab
-@end smallexample
-
-In some cases, you may wish to refer to the account of whichever
-transaction matched your automated entry's value expression. To do
-this, use the special account name @samp{$account}:
-
-@smallexample
-= /^Some:Long:Account:Name/
- [$account] -0.10
- [Savings] 0.10
-@end smallexample
-
-This example causes 10% of the matching account's total to be deferred
-to the @samp{Savings} account---as a balanced virtual transaction,
-which may be excluded from reports by using @option{--real}.
-
-@node Using Emacs to Keep Your Ledger, Using GnuCash to Keep Your Ledger, Automated transactions, Keeping a ledger
-@section Using Emacs to Keep Your Ledger
-
-In the Ledger tarball is an Emacs module, @file{ledger.el}. This
-module makes the process of keeping a text ledger much easier for
-Emacs users. I recommend putting this at the top of your ledger file:
-
-@example
-; -*-ledger-*-
-@end example
-
-And this in your @file{.emacs} file, after copying @file{ledger.el} to
-your @file{site-lisp} directory:
-
-@example
-(load "ledger")
-@end example
-
-Now when you edit your ledger file, it will be in
-@command{ledger-mode}. @command{ledger-mode} adds these commands:
-
-@table @strong
-@item C-c C-a
-For quickly adding new entries based on the form of older ones (see
-previous section).
-
-@item C-c C-c
-Toggles the ``cleared'' flag of the transaction under point.
-
-@item C-c C-d
-Delete the entry under point.
-
-@item C-c C-r
-Reconciles an account by displaying the transactions in another
-buffer, where simply hitting the spacebar will toggle the pending flag
-of the transaction in the ledger. Once all the appropriate
-transactions have been marked, press C-c C-c in the reconcile buffer
-to ``commit'' the reconciliation, which will mark all of the entries
-as cleared, and display the new cleared balance in the minibuffer.
-
-@item C-c C-m
-Set the default month for new entries added with C-c C-a. This is
-handy if you have a large number of transactions to enter from a
-previous month.
-
-@item C-c C-y
-Set the default year for new entries added with C-c C-a. This is
-handy if you have a large number of transactions to enter from a
-previous year.
-@end table
-
-Once you enter the reconcile buffer, there are several key commands
-available:
-
-@table @strong
-@item RET
-Visit the ledger file entry corresponding to the reconcile entry.
-
-@item C-c C-c
-Commit the reconcialation. This marks all of the marked transactions
-as ``cleared'', saves the ledger file, and then displays the new
-cleared balance.
-
-@item C-l
-Refresh the reconcile buffer by re-reading transactions from the
-ledger data file.
-
-@item SPC
-Toggle the transaction under point as cleared.
-
-@item a
-Add a new entry to the ledger data file, and refresh the reconcile
-buffer to include its transactions (if the entry is added to the same
-account as the one being reconciled).
-
-@item d
-Delete the entry related to the transaction under point. Note: This
-may result in multiple transactions being deleted.
-
-@item n
-Move to the next line.
-
-@item p
-Move to the previous line.
-
-@item C-c C-r
-@item r
-Attempt to auto-reconcile the transactions to the entered balance. If
-it can do so, it will mark all those transactions as pending that
-would yield the specified balance.
-
-@item C-x C-s
-@item s
-Save the ledger data file, and show the current cleared balance for
-the account being reconciled.
-
-@item q
-Quit the reconcile buffer.
-@end table
-
-There is also an @command{emacs} command which can be used to output
-reports in a format directly @code{read}-able from Emacs Lisp.
-
-@node Using GnuCash to Keep Your Ledger, Using timeclock to record billable time, Using Emacs to Keep Your Ledger, Keeping a ledger
-@section Using GnuCash to Keep Your Ledger
-
-The Ledger tool is fast and simple, but it offers no custom method for
-actually editing the ledger. It assumes you know how to use a text
-editor, and like doing so. Perhaps an Emacs mode will appear someday
-soon to make editing Ledger's data files much easier.
-
-Until then, you are free to use GnuCash to maintain your ledger, and
-the Ledger program for querying and reporting on the contents of that
-ledger. It takes a little longer to parse the XML data format that
-GnuCash uses, but the end result is identical.
-
-Then again, why would anyone use a Gnome-centric, 35 megabyte behemoth
-to edit their data, and a one megabyte binary to query it?
-
-@node Using timeclock to record billable time, , Using GnuCash to Keep Your Ledger, Keeping a ledger
-@section Using timeclock to record billable time
-
-The timeclock tool makes it easy to track time events, like clocking
-into and out of a particular job. These events accumulate in a
-timelog file.
-
-Each in/out event may have an optional description. If the ``in''
-description is a ledger account name, these in/out pairs may be viewed
-as virtual transactions, adding time commodities (hours) to that
-account.
-
-For example, the command-line version of the timeclock tool could be
-used to begin a timelog file like:
-
-@example
-export TIMELOG=$HOME/.timelog
-ti ClientOne category
-sleep 10
-to waited for ten seconds
-@end example
-
-The @file{.timelog} file now contains:
-
-@smallexample
-i 2004/10/06 15:21:00 ClientOne category
-o 2004/10/06 15:21:10 waited for ten seconds
-@end smallexample
-
-Ledger parses this directly, as if it had seen the following entry:
-
-@smallexample
-2004/10/06 category
- (ClientOne) 10s
-@end smallexample
-
-In other words, the timelog event pair is seen as adding 0.00277h (ten
-seconds) worth of time to the @samp{ClientOne} account. This would be
-considered billable time, which later could be invoiced and credited
-to accounts receivable:
-
-@smallexample
-2004/11/01 (INV#1) ClientOne, Inc.
- Receivable:ClientOne $0.10
- ClientOne -0.00277h @@ $35.00
-@end smallexample
-
-The above transaction converts the clocked time into an invoice for
-the time spent, at an hourly rate of $35. Once the invoice is paid,
-the money is deposited from the receivable account into a checking
-account:
-
-@smallexample
-2004/12/01 ClientOne, Inc.
- Assets:Checking $0.10
- Receivable:ClientOne
-@end smallexample
-
-And now the time spent has been turned into hard cash in the checking
-account.
-
-The advantage to using timeclock and invoicing to bill time is that
-you will always know, by looking at the balance report, exactly how
-much unbilled and unpaid time you've spent working for any particular
-client.
-
-I like to @samp{!include} my timelog at the top of my company's
-accounting ledger, with the attached prefix @samp{Billable}:
-
-@smallexample
-; -*-ledger-*-
-
-; This is the ledger file for my company. But first, include the
-; timelog data, entering all of the time events within the umbrella
-; account "Billable".
-
-!account Billable
-!include /home/johnw/.timelog
-!end
-
-; Here follows this fiscal year's transactions for the company.
-
-2004/11/01 (INV#1) ClientOne, Inc.
- Receivable:ClientOne $0.10
- Billable:ClientOne -0.00277h @@ $35.00
-
-2004/12/01 ClientOne, Inc.
- Assets:Checking $0.10
- Receivable:ClientOne
-@end smallexample
-
-@node Using XML, , Keeping a ledger, Top
-@chapter Using XML
-
-By default, Ledger uses a human-readable data format, and displays its
-reports in a manner meant to be read on screen. For the purpose of
-writing tools which use Ledger, however, it is possible to read and
-display data using XML. This chapter documents that format.
-
-The general format used for Ledger data is:
-
-@smallexample
-<?xml version="1.0"?>
-<ledger>
- <entry>...</entry>
- <entry>...</entry>
- <entry>...</entry>...
-</ledger>
-@end smallexample
-
-The data stream is enclosed in a @samp{ledger} tag, which contains a
-series of one or more entries. Each @samp{entry} describes the entry
-and contains a series of one or more transactions:
-
-@smallexample
-<entry>
- <en:date>2004/03/01</en:date>
- <en:cleared/>
- <en:code>100</en:code>
- <en:payee>John Wiegley</en:payee>
- <en:transactions>
- <transaction>...</transaction>
- <transaction>...</transaction>
- <transaction>...</transaction>...
- </en:transactions>
-</entry>
-@end smallexample
-
-The date format for @samp{en:date} is always @samp{YYYY/MM/DD}. The
-@samp{en:cleared} tag is optional, and indicates whether the
-transaction has been cleared or not. There is also an
-@samp{en:pending} tag, for marking pending transactions. The
-@samp{en:code} and @samp{en:payee} tags both contain whatever text the
-user wishes.
-
-After the initial entry data, there must follow a set of transactions
-marked with @samp{en:transactions}. Typically these transactions will
-all balance each other, but if not they will be automatically balanced
-into an account named @samp{<Unknown>}.
-
-Within the @samp{en:transactions} tag is a series of one or more
-@samp{transaction}'s, which have the following form:
-
-@smallexample
-<transaction>
- <tr:account>Expenses:Computer:Hardware</tr:account>
- <tr:amount>
- <value type="amount">
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
- </value>
- </tr:amount>
-</transaction>
-@end smallexample
-
-This is a basic transaction. It may also be begin with
-@samp{tr:virtual} and/or @samp{tr:generated} tags, to indicate virtual
-and auto-generated transactions. Then follows the @samp{tr:account}
-tag, which contains the full name of the account the transaction is
-related to. Colons separate parent from child in an account name.
-
-Lastly follows the amount of the transaction, indicated by
-@samp{tr:amount}. Within this tag is a @samp{value} tag, of which
-there are four different kinds, each with its own format:
-
-@enumerate
-@item boolean
-@item integer
-@item amount
-@item balance
-@end enumerate
-
-The format of a boolean value is @samp{true} or @samp{false}
-surrounded by a @samp{boolean} tag, for example:
-
-@smallexample
-<boolean>true</boolean>
-@end smallexample
-
-The format of an integer value is the numerical value surrounded by an
-@samp{integer} tag, for example:
-
-@smallexample
-<integer>12036</integer>
-@end smallexample
-
-The format of an amount contains two members, the commodity and the
-quantity. The commodity can have a set of flags that indicate how to
-display it. The meaning of the flags (all of which are optional) are:
-
-@table @strong
-@item P
-The commodity is prefixed to the value.
-@item S
-The commodity is separated from the value by a space.
-@item T
-Thousands markers are used to display the amount.
-@item E
-The format of the amount is European, with period used as a thousands
-marker, and comma used as the decimal point.
-@end table
-
-The actual quantity for an amount is an integer of arbitrary size.
-Ledger uses the GNU multi-precision math library to handle such
-values. The XML format assumes the reader to be equally capable.
-Here is an example amount:
-
-@smallexample
-<value type="amount">
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
-</value>
-@end smallexample
-
-Lastly, a balance value contains a series of amounts, each with a
-different commodity. Unlike the name, such a value does need to
-balance. It is called a balance because it sums several amounts. For
-example:
-
-@smallexample
-<value type="balance">
- <balance>
- <amount>
- <commodity flags="PT">$</commodity>
- <quantity>90.00</quantity>
- </amount>
- <amount>
- <commodity flags="TE">DM</commodity>
- <quantity>200.00</quantity>
- </amount>
- </balance>
-</value>
-@end smallexample
-
-That is the extent of the XML data format used by Ledger. It will
-output such data if the @command{xml} command is used, and can read
-the same data as long as the @file{expat} library was available
-when Ledger was built.
-
-@bye
diff --git a/docs/sample.dat b/docs/sample.dat
deleted file mode 100644
index 4856a6e2..00000000
--- a/docs/sample.dat
+++ /dev/null
@@ -1,26 +0,0 @@
-;= acct =~ /^Expenses:Books/
-; (Liabilities:Taxes) -0.10
-
-;~ Monthly
-; Assets:Bank:Checking $500.00
-; Income:Salary
-
-2004/05/01 * (22:15) Checking balance
- Assets:Bank:Checking $1,000.00
- Equity:Opening Balances
-
-2004/05/01 * Investment balance
- Assets:Brokerage 50 AAPL @ $30.00
- Equity:Opening Balances
-
-2004/05/14 * Pay day
- Assets:Bank:Checking $500.00
- Income:Salary
-
-2004/05/27 Book Store
- Expenses:Books $20.00
- Liabilities:MasterCard
-
-2004/05/27 (100) Credit card company
- Liabilities:MasterCard $20.00
- Assets:Bank:Checking