When I'm not working for someone full time, I run a small consulting business. To keep my records straight, I've been developing a books and records system in Postgres and PERL, with a dash of Ruby. It currently supports, to varying degrees of completeness:
- Bank account records for multiple accounts (works very well)
- Expense report tracking
- Customizable CSV generation from any table in the database using arbitrary SQL filters in the form of a quick-n-dirty extract script.
- A data loader that can load schedules of days worked, invoices, and bank transactions using a CSV file. This makes it easy to format everything in a spreadsheet and then just load it all into the system.
- Simple PDF invoice generation.
- Multiple concurrent contracts at daily or hourly rates.
- Multiple employees
- Running calculation of bank account balance by posting date
- Simple time clock web app that can be hit from mobile phones to "punch in" or "punch out". This page can be put on a public web server, and there's a script to download the punches from the server to the main database.
- Automatic categorization of income and expenses based on patterns. As bank statements are loaded, the description is scanned for patterns, and a category is assigned if the pattern is recognized. For example, if the description contains "Shell Oil", the category would be assigned to "Fuel Expenses".
It's not complete by any stretch, but what it does, it does pretty well. The core functionality, invoicing and tracking bank accounts and credit cards, it does very well. There's no user interface apart from scripts, and parts of it definitely need some TLC.
That said, I think it's a great start for someone who's running a services-based shop who wants to have a books and records system that is totally open and expandable to their needs. If you think you'd be interested in trying out some software along these lines, please let me know. I can put the code up on Google Code for you to try out.