I want to build a general ledger that uses Core
Components as its
native data representation for all business data.
The goal is to serve as a "secretary" that
maintains a comprehensive
history of economic commitment and event information.
SMEs are, today,
manually entering most of their documents. The goal of
my project is
to get information in and out of the computer, and
exchange it with
trading partners--that is all. THe goal is to provide
usable
interfaces, not to automate any action or decision.
Bluntly, if
you give SMEs an accounting system with reliable
messaging and a
public standard vocabulary, they will have *no problem*
understanding
what to do with any invoice, PO, ship notice, etc.
The AR/AP project published some draft information
entities for general
ledgers in December at http://www.arapxml.net/GLcoreComponentsV091.htm
The goals for this are http://www.arapxml.net/requirements.htm
The December GLIEs are being reformulated because
they used unapproved
CCTs. I invented two CCTs. That was bad.
So, we have now created ACC's (Aggregate Core
Components) for our
identifier and document. (formerly Id.Type and Doc.Type,
now they are
Id.Details and Doc.Details. These are for internal use
by the owner so
I have excused myself from Oxford spelling. I'm
principally interested
in aligning internal data dictionary with the standard
external CC
vocabulary, and in using ebXML runtimes as the
processing platform for
local transactions. That means, when we see the whites
of the e-
business documents' eyes we need this GL schema to map
them into. (when
BCPMC BOTLs happen, presumably my application will be
well positioned as
an accounting provider. That is the whole point.)
Reformulating the GLIEs (General Ledger Information
Entities) for GL
Entry to use our ACC's (Aggregate Core Components)
Doc.Details and Id.
Details, instead of our unapproved CCT's, Doc.Type and
Id.Type is not
so easy.
Our thinking is utterly simple. We just want to have
flat "GL Entry"
rows, with dates/amounts and a bunch of specifically
named attributes on
each row for the most common classifications that occur
in small
business systems.
We really need to reuse a lower-level class in a
natural way, by
referring to it in the third term of the Dictionary
Entry Name (DEN)
But the 3rd term is reserved exclusively for one of the
16
Representation Term in Core Components specification,
or, the word
"Details" if the component is an Aggregate.
If we do not create our own CCTs and Representation
terms, it is quite
restrictive. There is a Glass Floor. you cannot change
the design
below.
So the only direction to achieve more levels (without
getting into
Constraints Language) is just to copy the "Id.
Details" multiple times,
and rename them:
GL.OrganizationUnit.Id becomes OrganizationUnit.
Details
GL.Party.Id becomes Party. Details
GL.ProductService.Id becomes ProductService. Details
GL.Project.Id becomes Project. Details
GL.Job.Id becomes Job. Details
GL.CostCenter.Id becomes CostCenter. Details
GL.Employee.Id becomes Employee. Details
GL.Fund.Id becomes Fund. Details
GL.Program.Id becomes Program. Details
This may be reasonably compliant the definition of a
Core Component,
because, although it uses exactly the same Core
Component with different
names, they have different semantic meanings.
But we are screwing ourselves by making these
entirely separate classes
in the ARAP software --there would be no indication
whatsoever in the
GLIEs registry that these are the same component, that
they are
inheriting the same class. The XML Schema representation
of GL Entry
would be much bigger, and so would the UML and
executable code of the
ARAP Submission.
Another possibility is just to make these Identifiers
a text field.
GL.OrganizationUnit.Id becomes GL.OrganizationUnit
Id. Text
GL.Party.Id becomes GL.Party Id. Text
GL.ProductService.Id becomes GL.ProductService Id. Text
GL.Project.Id becomes GL.Project Id. Text
GL.Job.Id becomes GL.Job Id. Text
GL.CostCenter.Id becomes GL.CostCenter Id. Text
GL.Employee.Id becomes GL.Employee Id. Text
GL.Fund.Id becomes GL.Fund Id. Text
GL.Program.Id becomes GL.Program Id. Text
However, if you then have an XML instance document
containing GL
Entries, it could no longer stand alone. For every
informational
need such as Party, Product/service, etc., only an
identifier
could be included in the GL Entry XML document. You
would need
a supporting message with all the reference data.
Applications
that don't work this way, for example, needing to
literally put
the name of Customer in the transaction line, may be
unable to
use the GL Entry aggregate.
So, we might just use the new, native CCT for
Identifier.Type,
which now has URI's for internal value domains.
GL.OrganizationUnit.Id becomes GL.OrganizationUnit.
Identifier
GL.Party.Id becomes GL.Party. Identifier
GL.ProductService.Id becomes GL.ProductService.
Identifier
GL.Project.Id becomes GL.Project. Identifier
GL.Job.Id becomes GL.Job. Identifier
GL.CostCenter.Id becomes GL.CostCenter. Identifier
GL.Employee.Id becomes GL.Employee. Identifier
GL.Fund.Id becomes GL.Fund. Identifier
GL.Program.Id becomes GL.Program. Identifier
That's fine but then, you have just lost the
capability of the additional
4 elements we invented for our ID. Details, which are
not adopted by
the Core Components group:
Id. Entity. Name ;0;1;3;30
Id. Version. Text ;0;1;4;30
Id. Parent Id. Text ;0;1;5;30
Id. Balance. Amount ;0;1;6;30
In other words you could not put the name of the
customer or product in
the GL Entry instance anymore. It would have to go into
a lookup table.
No choice would be available, in the GL Entry document
format.
And you could not use Parent ID to express where an
OrganizationUnit or
Project Identifier exists in a hierarchy, or include the
balance of the
Customer or Product, etc., in the message. And, there
would be not even
the slight flexibility to accommodate changing
dimensions, which is
possible with a version id.
So, we are back to the kinds of hard questions that
plagued the ARAPXML
effort last year. Obviously there is no magic bullet,
that can maximize
every objective.
ArapXML creates specifically-named entities on the
entry line, because
it has a particular application in mind (ARAP and small
business
accounting). ArapXML places a high priority on immediate
ease of use
and familiarity that can come from specifically named
elements. We know
that Quickbooks, Peachtree have predominant market
shares with only a
very few dimensions like customer, vendor and employees,
and project,
inventory items.
XBRL GL does *not* create specifically named
entities, perhaps, because
XBRL places a higher value on a universal, global
structure than on
immediate ease of use or readability. Here is what XBRL
GL puts on
their GL entry line:
identifierReference - Identification for customer,
vendor, employee.
identifierCode - Internal ID Number associated w
identifierReference
identifierTaxCode - Tax ID Number associated with
identifierReference
identifierDescription - Textual description of
identifierReference.
identifierType - Entity type: e.g., customer,
vendor, employee.
identifierAddress
identifierStreet
identifierCity
identifierStateOrProvince
identifierCountry
identifierZipOrPostalCode
I honestly think we should break the "GLass
Floor" and use the illegal
CCT's for