Business Accounting Design Document, v0.1
Ben Stanley
bds02@uow.edu.au
Thu, 08 Nov 2001 08:30:49 +1100
Derek Atkins wrote
>Note that while most of these objects have an 'ID', the 'ID' is a
>counter and not a GnuCash GUID. This is because business processes
>seem to reference these objects by number (customer number, invoice
>number, sales order number), so having a GUID seemed superfluous and
>unnecessary. Also note that most objects state the ID should be
>unique -- by this I mean that there should only be one entry (row?)
>with that number.
>
The GUID is used with the file readers/writers to re-construct the
pointer relationships between objects. This is done by building a table
relating GUIDs to pointers to objects while reading in the file. If you
create objects without GUIDs but using IDs instead, you would have to
replicate this mechanism. I think it would be simpler for you to include
user-invisible GUIDs in your objects and use the existing
re-construction mechanism than to re-implement it in terms of IDs.
2. New Objects
On the subject of your object descriptions, there was some discussion of
using gnomecal or evolution to manage addresses. I suppose we need to
start somewhere... if we keep the implementation hidden behind some
opaque api, then this could be added later as an optional backend. I
just cringe when I see the fields of a form laid out in C. I think that
there needs to be a user-customisable capacity here, perhaps done with
key-value pairs, so that extra fields can be added by the user /
application customiser. A business system would be implemented by an IT
group (for a large organisation). For a small organisation, some default
setups could be provided along the same lines as what you have provided
in your struct defs. I see you mentioned storage in SQL database;
perhaps I don't know what I'm talking about.
I think that the address of the customer and of the vendor and even the
shipping address are all addresses, and perhaps should be stored as a
struct of their own kind. (employee address too...)
What if you have a close relationship with a particular company, and you
buy and sell things from/to them? Then you would need a customer and a
vendor object for them. Perhaps these two share more information than
this design currently exploits.
GST/VAT
Do you have any thoughts on simplifying business procedures for keeping
track of GST/VAT for invoicing?
That's my only thoughts so far.
Good work!
Ben.