Hi. Thanks for downloading QHacc.

The one central tenet of QHacc was keeeping the saved files obvious. I
didn't want to use unprintable characters, or run all the data together
and let the program count bytes or something. The result is that the
program probably loads a bit slower than it otherwise could, but you can
change your data without running the program, if you like. In order to
facilitate this, here are the file formats for transactions for every
released version of QHacc. These tokens are separated by "||" in the
files, but to keep things more readable here, I'm separating fields with
spaces. 

VERSION 0.2
	A C E F G H I J

VERSION 0.2.1
	A C D E F G H I J

VERSION 0.2.5 and above
	A B C D E F G H I J (C and D repeat based on B)

VERSION 0.7 and above
	A B C D E F G H I J K (C and D repeat based on B)

VERSION 2.0 and above
	A E F G H J I L M

VERSION 2.5 and above
	A E F G H J I L M N

VERSION 2.9.2 and above
	Transaction: A E F G J N O
	Split:			 P A L H I Q

VERSION 2.9.7 and above
	Transaction: A E F G J N O R
	Split:			 P A L H I Q R

VERSION 3.3 and above
	Transaction: A E F G J N O R S
	Split:			 P A L H I Q R T

where
A: transaction id (unique)
B: number of splits
C: transaction pair's id (double entry transactions only)
D: transaction pair's owner account (double entry transactions only)
E: number
F: payee
G: memo
H: amount
I: reconciled? (No=0, Maybe=1, Yes=2 )
J: date (MM/DD/YYYY pre-3.0 release, YYYY-MM-DD post-3.0 release)
K: shares of equity (market transactions only)
L: transaction's (split's) parent account id
M: splitgroup
N: journal id
O: type (Regular=0, Memorized=1)
P: split id
Q: reconcile date
R: meta data (for future expansion)
S: void flag
T: taxable flag



VERY OLD SPLIT TRANSACTIONS (1.4 and down)
In QHacc, every transaction can be a split transaction. The load process
finds all transactions that are paired with each other, and links them
together. In previous releases, each split was comprised of one split
base transaction and one or more satellite transactions. For that
reason, if you had a split transaction comprised of five parts, four of
them would think they are regular doubly-entered transactions. Only the
split base would know they were all connected. That is, in the format
above, only one transaction would have a B>1. As of release 0.6,
however, every transaction knows if it is part of a split (in the above
terms, B>1 for everybody). I think this makes editing the transaction
files by hand slightly more difficult, but it simplifies the program,
and make split transactions easier to find in the files. 

OLD SPLIT TRANSACTIONS (2.0-2.9.1)
QHacc can no longer tell the difference between a split, nonsplit,
or paired transaction. All pairing occurs as necessary from the internal
tables the QHacc on which operates. Thus, adding or removing a split
transaction is as easy as adding or removing a line from the
transactions datafile, and giving the new line the appropriate
splitgroup designation. If you are interested in manually editing
splitgroups, try using the sort command on field 19 with '|' for the
delimiter. (That's "sort -n -k 19 -t \|" on my Slackware 9 linux system.)

NEW TRANSACTIONS (2.9.2 and up)
The theory behind split transactions hasn't changed since QHacc 2.9:
transactions themselves don't know if they're all alone or have a
million partners. What has changed is the format. What I used to call
transactions I now call Splits (or adjustments). The split contains the
account-specific information of the transaction. The transaction
contains the common information relating to it's "splitgroup."
Splitgroups were implemented in previous versions as a way of organizing
related transactions, but with different transactions and splits, this
organization can now be accomplished using the transaction id.

ryan bobko <ryan@ostrich-emulators.com>

