arapXML 
Home  XML Schema OMG submission Use Cases Discussion  Requirements Research About arapXML
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;>