GnuCash

VAGUE/VTLUG, 20 Apr 2006

Josh Sled (jsled, @asynchronous.org)

GnuCash Overview

  • Personal and small-business accounting.
  • Double-entry accounting.
  • Reporting, graphing.
  • Stocks/bonds/mutual-funds, multi-currency.
  • Scheduled/Recurring transactions; budgeting.
  • SMB accounting: Customers, Vendors, Jobs, Invoices, A/P, A/R.
  • Import
    • QIF, MT940, OFX.
  • Interactive
    • OFX, HBCI.
  • GPL

Details

  • Portable, vanilla C and Scheme (80%/20%)
    • autotools, libtool
    • Compiles widely: Linux distros, *BSD, Solaris, HP-UX, Windows (with ~2 partial-man-months, mostly meta-compilation)
  • (Too) Many lines of code
  • Core depends on basic, available libs (glib), front-ends on more...
  • Conservative dependency policy
    • library-version must be in release of major distros for ≥ 6 months.
    • Will probably relax post-2.0

History

  • 1997, Robin Clark (X-Accountant, Motif)
  • 1998..(~present), Linas Vepstas
  • 1998..2002, Gnumatic Incorporated
  • early 2003: 1.8.0 released
  • 2003..2005: the dark ages
  • 2005..present: resurgence, 2.0
    • Gnome2 port, new contributors
    • move to Subversion
    • move to wiki.gnucash.org (from gnomesupport.org)
    • updating www.gnucash.org

Project

  • Downloads direct, SourceForge, distros.
  • Mailing lists + archives + search.
  • Self-hosted Subversion.
  • GNOME Bugzilla.
  • Self-hosted (Media)Wiki for project content.
    • Will migrate most of website into here.
    • Experimenting with editing full documentation here.
  • Daily documentation builds.
  • Trac.
  • IRC channel.

Structure

  • Core financial-data engine
    • Accounts, Books, Commodities, Splits, Transactions
    • Scheduled Transaction (Frequency Specification)
    • Budget (Recurrence)
    • Price Database
    • Lots
  • Modular Application
    • First-class modularization scheme (broken)
    • Abstracted front-ends (somewhat)
    • MVC desire
    • Abstracted backends (mostly)
  • Sheet...Register...Ledger
  • Reporting
  • Business Support

Reporting

  • Reports implemented in Scheme
  • Overview:
    1. process data
    2. emit HTML
  • Graphing provided by GNOME-Office Graphing (GOG)
  • Will probably change post 2.0...
    • Architecture overhaul.
    • s/GtkHtml/Gecko/.

Business Features

  • Support for Vendors, Customers, Jobs, Invoicing.
    • Customizable tax tables.
    • Various payment terms.
  • Invoices generated as customizable report(s).
  • Invoices paid in FIFO order.

Other/Misc Features

  • PriceDb, Finance::Quote
    • up to date stock/currency quotes via screen-scraping.
  • QIF importer
  • AqBanking integration (OFX/HBCI)
  • QOF
    • Nifty, but under-baked

Basic Accounting

  • Accounting Equation
    • Assets - Liabilities = Equity
      • what you have - what you owe = net worth
    • Assets - Liabilities = Equity + (Income - Expenses)
      • have - owe = worth + (bring in - spend out)
  • Double-Entry Accounting
    • Changes must always balance.
    • Every transaction is a zero-sum event.
    • In order to do so, they must affect (at least) two accounts.

Double-Entry Example

Date Memo  
Num Description Account Expense Withdrawl
2006-04-18 Gas Bill  
315 Payment to Vermont Gas & Electric Assets:Bank of Example:Checking   $123.45
    Expenses:Utilities:Gas $82.30  
    Expenses:Utilities:Electric $41.15  

Data Model, Features

  • Book [contains] Accounts
  • Account [contains an] Account
    • Can't place Expense account in an Assets tree, Liabilities in Income, &c.
  • Account [is denominated in a] Commodity
  • Commodity [is a] Currency, Stock/Mutual-Fund/Bond shares
    • (or any other ... uh ... commodity)
  • Transaction [contains] Splits
  • Split [references an] Account
  • Split [is a tuple of] (date, memo, Account, value)

Basic Account Types

  • Assets, Liabilities, Equity, Income, Expenses
  • GnuCash specifics
    • Assets: Bank, Cash, Stock, Mutual
      • Currency, but deprecated ... just a Cash account with a different Commodity.
    • Liabilities: Credit (Cards and Loans)
  • Business accounts
    • Accounts Receivable (A/R): Assets-like
    • Accounts Payable (A/P): Liability-like

Expenses

  • Bulk of transactions are rooted in Expense accounts.
  • Rich Expense-hierarchy = reporting granularity/control.
  • E.g....
    • Expenses:Entertainment:{Books, Concerts, Magazines, Movies}
    • Expenses:Interest:{Savings, Checking, Money-Market}
    • Expenses:Automobile:{Gas, Repairs, Insurance}
    • Expenses:Utilities:{Internet, Gas, Electric, Water, Phone}
  • Pre-made account hierarchies included