Overview
of Intuit's QBXML format For General Ledger Data
QBXML consists of two
schemas- roughly speaking, one is for data structures and
the other is for actions. The schemas match the
functionality of Quickbooks, the leading desktop accounting
software in US. Accordingly, QBXML is fairly complex.
The GL portion of QBXML is
relatively small. The GL is a classic double entry (CDEA)
header/rows structure and has interesting innovations.
TimeModified and EditSequence as core elements of a Journal
entry are innovative. DebitAmount and CreditAmount as
subclasses of the AMTTYPE which is evidently the currency
type. Interestingly the QBXML EntityRef appears to
represent party in particular Roles, rather than a pure
party reference. The ClassRef attribute is a general
purpose, user-defined attribute used pervasively throughout
Quickbooks for categorizing income and expense. Its
presence in the Journal transaction type vastly improves the
potential functionality of this transaction type.
In the autumn 2001, Intuit
issued ver. 0.8 of its QBXML draft schema (below) which
introduces a number of significant changes: a
transaction number which seems to track the whole set of
debit / credit lines, and the use of separately named
elements for journal debits versus journal
credits.
What leaps out at you, is
that Quickbooks has many transaction types (journal types).
These tables have been documented on Datablox.com
as well as the QBXML. The QBXML Journal Entry is not
even used as a container for payments or cash receipts;
accordingly it has little direct bearing into the goals of
ARAPXML which include transporting AR/AP entries, and GLs
which store all transaction types comprehensively in the GL.
|
|
<?xml version="1.0"
encoding="UTF-8"?>
<!-- QBXML:ver. 0.6 http://developer.intuit.com/quickbooks/tools/qbxmldtd.txt
-->
<!-- edited by Todd Apr. 2001 - this seems to be the GL JE portion of QBXML) -->
<!ELEMENT JournalLine (AccountRef, (DebitAmount | CreditAmount), Memo?,
EntityRef?, ClassRef?)>
<!ELEMENT JournalEntry (%TxnCoreMacro;, TxnDate, EntryNumber?, Memo?,
JournalLine+)>
<!ELEMENT JournalEntryAdd (TxnDate, EntryNumber?, Memo?, JournalLine+)>
<!ENTITY % TxnCoreMacro "(TxnID , TimeCreated , TimeModified ,
EditSequence)">
<!ELEMENT EntityRef (%ListRefMacro;)>
<!ENTITY % IDTYPE "(#PCDATA)">
<!ENTITY % STRTYPE "(#PCDATA)">
<!ENTITY % DATETYPE "(#PCDATA)">
<!ENTITY % AMTTYPE "(#PCDATA)">
<!ELEMENT TxnID %IDTYPE;>
<!ELEMENT EntryNumber %STRTYPE;>
<!ELEMENT TimeCreated %DATETYPE;>
<!ELEMENT TimeModified %DATETYPE;>
<!ELEMENT Memo %STRTYPE;>
<!ELEMENT TxnDate %DATETYPE;>
<!ELEMENT FullName %STRTYPE;>
<!ELEMENT ListID %IDTYPE;>
<!ENTITY % ListRefMacro "(FullName , ListID?)">
<!ELEMENT AccountRef (%ListRefMacro;)>
<!ENTITY % INTTYPE "(#PCDATA)">
<!ELEMENT EditSequence %INTTYPE;>
<!ELEMENT CreditAmount %AMTTYPE;>
<!ELEMENT DebitAmount %AMTTYPE;>
<!ELEMENT ClassRef (%ListRefMacro;)>
<!ELEMENT QbxmlGLportion EMPTY>
<?xml version="1.0" encoding="UTF-8"?>
<!-- QBXML:ver. 0.8 http://developer.intuit.com/quickbooks/ -->
<!-- edited by Todd Nov. 2001 - this seems to be the GL JE portion of QBXML) -->
<!ENTITY % AMTTYPE "(#PCDATA)">
<!ENTITY % DATETIMETYPE "(#PCDATA)">
<!ENTITY % DATETYPE "(#PCDATA)">
<!ENTITY % IDTYPE "(#PCDATA)">
<!ENTITY % INTTYPE "(#PCDATA)">
<!ENTITY % STRTYPE "(#PCDATA)">
<!ENTITY % CustomerListRefMacro "(ListID? , FullName?)">
<!ENTITY % ListRefMacro "(ListID? , FullName?)">
<!ENTITY % TxnCoreMacro "(TxnID , TimeCreated , TimeModified , EditSequence , TxnNumber)">
<!ELEMENT ROOTofQbxmlJournalStuff EMPTY>
<!ELEMENT AccountRef (%CustomerListRefMacro;)>
<!ELEMENT Amount %AMTTYPE;>
<!ELEMENT ClassRef (%ListRefMacro;)>
<!ELEMENT EditSequence %INTTYPE;>
<!ELEMENT EntityRef (%CustomerListRefMacro;)>
<!ELEMENT EntryNumber %STRTYPE;>
<!ELEMENT FullName %STRTYPE;>
<!ELEMENT JournalCreditLine (AccountRef, Amount, Memo?, EntityRef?, ClassRef?)>
<!ELEMENT JournalDebitLine (AccountRef, Amount, Memo?, EntityRef?, ClassRef?)>
<!ELEMENT JournalEntryAdd (TxnDate, EntryNumber?, Memo?, JournalDebitLine+, JournalCreditLine+)>
<!ELEMENT JournalEntryRet (%TxnCoreMacro;, TxnDate, EntryNumber?, Memo?, JournalDebitLine+, JournalCreditLine+)>
<!ELEMENT ListID %IDTYPE;>
<!ELEMENT Memo %STRTYPE;>
<!ELEMENT TimeCreated %DATETIMETYPE;>
<!ELEMENT TimeModified %DATETIMETYPE;>
<!ELEMENT TxnDate %DATETYPE;>
<!ELEMENT TxnID %IDTYPE;>
<!ELEMENT TxnNumber %INTTYPE;>
|
|
|