From: Geoffrey K. <ge...@kn...> - 2005-04-04 10:29:16
|
I used JScheme this year to do my taxes, or rather, to help my accountant get the numbers he needed. My ledger is a big list of s-expressions, because there's a lot of flexibility available between parentheses (...). Taxes, for me, are nothing less than parenthetical statements about the year's activities. Each transaction looks like: (yymmdd opt-tag amount debit credit info) opt-tag is usually (), but sometimes it is a token useful to Unix `sort', for grouping transactions. amount is a non-negative amount in dollars and cents. debit is account-info. credit is account-info. account-info looks like: ([alerx] name reconciliation) [alerx] is one of a=asset, l=liability, e=equity, r=revenue, x=expense name is the name of the account, i.e., (a chk) is asset, checking reconciliation is a bit funky. using the checkbook account as an example: (a chk !) means the entry is in my computer but not my checkbook (a chk) means the entry is recorded in the checkbook (a chk 2) means the entry was seen in the February statement (a chk :) means the entry was seen in online recent activity but not yet in a statement (a chk !:) means the bank has seen the transaction already but I still haven't recorded it in the checkbook info, if it exists, is a list the first element is the payee the second element, if it exists, is descriptive information the third element, if it exists, is a reference number I have JScheme routines that do account summaries, balance statements, account reconciliations, etc. For tax preparation, I wrote routines to build and load MySQL tables from my ledger of s-expressions. For editing transactions, there's nothing quicker for me than Emacs and s-expressions. MySQL queries do what the accountant asked. JScheme, JDBC and JFreeChart draw pretty pictures. Geoffrey -- Geoffrey S. Knauth | http://knauth.org/gsk |