summaryrefslogtreecommitdiff
path: root/ledger.texi
diff options
context:
space:
mode:
Diffstat (limited to 'ledger.texi')
-rw-r--r--ledger.texi153
1 files changed, 151 insertions, 2 deletions
diff --git a/ledger.texi b/ledger.texi
index a5fc7b3e..3d5300a9 100644
--- a/ledger.texi
+++ b/ledger.texi
@@ -58,6 +58,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* Introduction::
* Running Ledger::
* Keeping a ledger::
+* Using XML::
* Extending with Python::
@end menu
@@ -2549,7 +2550,7 @@ only, and not against the running total:
ledger --forecast "d<[2010]" bal ^assets ^liabilities
@end example
-@node Keeping a ledger, Extending with Python, Running Ledger, Top
+@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
@@ -3560,7 +3561,155 @@ accounting ledger, with the attached prefix @samp{Billable}:
Receivable:ClientOne
@end smallexample
-@node Extending with Python, , Keeping a ledger, Top
+@node Using XML, Extending with Python, 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}. Within this 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 it can read
+such data as long as the @file{xmlparse} library was available at the
+time Ledger was built.
+
+@node Extending with Python, , Using XML, Top
@chapter Extending with Python
Ledger fully supports Python as an extension language. It may be used