A/R, A/P, Invoicing features

Derek Atkins warlord@MIT.EDU
05 Nov 2001 13:02:48 -0500


I've been trying to wrap my measly brain around some features
for Home Business (consulting) use.  I've spent most of this
weekend reading what I can find about basic accounting (I never
took an accounting class) and trying to figure out how A/R,
A/P, and Invoicing should work in practice.  Then I've been trying
to figure out how this would all fit into the current Gnucash
architecture.

My brain hurts, now.

I took a look at JobTracker -- it's really just a time reporting and
job-based invoicing system.  You setup a list of users (employees) and
customers.  A user charges their time to a customer, and a user can
charge materials to a customer.  Then the customer is invoiced for all
the billable items in the period (and those items are marked as
'billed' and linked to the invoice number).  There really isn't any
double-entry here, as far as I can tell.

Next I looked at SQL-Ledger -- it's really a double-entry accounting
system with invoicing but doesn't really keep track of individual
projects like JobTracker does.  It seems more for a point-of-sale
system where you have a bunch of widgets that you acquire, build, and
sell. What SL provides, however, is a real A/R + aging system.
Unfortunately the interface is not very intuitive and you have to
manually remember lots of stuff instead of being able to just
click-and-go.  There is no Druid to help you perform tasks; everything
is entered manually, over and over again.

What I'd like to do is combine these two sets of features into
Gnucash, but I'm not sure how to map all this onto the Gnucash
"account" architecture.

The biggest question I've not been able to answer is whether Employees
(for time billing), Customers, and Vendors should each have their own
account (or set of accounts), or if lists of Employees, Customers, and
Vendors should exist similarly to the list of Commodities.  I'm
ignoring inventory for the moment.

The next big question is how to treat billable items between the time
they are "charged" and the time they are "invoiced"?  For example,
let's say that employee E spends 16 hours this week on project P,
being charged to Customer C.  The customer wont be billed (invoiced)
until next week, but somehow we need to record the charges without
actually posting to A/R.

One approach is to have an asset account "Billable" and then have a
sub-account for each customer.  When you bill time, you xfer "hours"
from employees to the Billable:Customer.  But then what do you do when
you invoice?  It would seem like you would need to have a sub-account
of A/R for each Customer, so when you invoice you would xfer the
invoice amount from Billable:Customer to A/R:Customer.  And then when
the customer pays you, your receipt is a xfer from A/R:Customer to
"Bank".

The problem with this approach is that it's just too klunky.  You need
to create 'N' different accounts for each customer you add (one under
Billable, one under A/R, etc.).  Moreover, what do these separate
accounts really _mean_?  Do they have a real-world equivalent or are
they just there to make Gnucash happy?

One change to this approach would be to have the customer list be it's
own database list instead of a GC Account.  Then you don't need
separate Customer accounts under Billable and A/R, you can just tie
the customer into the transaction itself.

Both of these approaches, however, don't let you easily report values
like "how much has this project charged this customer".  The problem
I'm reaching is that I'm not sure how to keep this system balanced
within a double-entry system.  So, I could really use some help.

What I'd like is the job entry and invoicing simplicity of JobTracker
but the A/R maintenence and aging of SQL-Ledger.

But first I need to come up with a design, and quite frankly I'm at a
loss.  My lack-of-accounting background is hurting me, I think,
because I really don't know how the system _should_ work.  Moreover,
I'm trying to fit it into the GC framework, but I'm not convinced that
all of these entries really fall into the double-entry methodology,
and if they do, I'm not sure how or what it means.

Anyways, that's where I am to date.  I've come up with object
definitions for the information required to maintain a Customer/Vendor
list, etc.  But I'm stuck on the core functionality and how it fits
into GC.

Ok, I've rambled enough here.  Let me know what you think.

Thanks,

-derek

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord@MIT.EDU                        PGP key available