diff --git a/Docs/projects.html b/Docs/projects.html index bfb2dd290e..b131ed0dee 100644 --- a/Docs/projects.html +++ b/Docs/projects.html @@ -31,18 +31,23 @@ available only via CVS. There are precompiled versions available, but these are usually only for the stable releases. Don't use the unstable versions unless you are looking for excitement and adventure.

-This document is divided into several sections. The first deals with -archititectural and philosophical design issues. The second deals with -interesting technologies. The third deals with desirable features and -functions. +This document is divided into several sections. +

    +
  1. Archititectural Goals +
  2. Feature Requirements +
  3. Features +

+


+

Architectural Goals

There are some over-reaching design principles and philosophies that we hope to maintain. Some of these concepts and terms are introduced in this section.

+

Separation of GUI and Data

First, one must maintain a clean separation between the data structures and the GUI that manipulates them, along the lines of a Model-View-Controller @@ -74,6 +79,7 @@ is immediately present and being displayed, reported, and manipulated. The Model is the abstraction of that data that the GUI (the controller) can act on.

+

The Financial Engine

In GnuCash, the Model is implemented via the Engine API, and the View is the data that is currently in the Engine. Thus, the Engine is a set of programming API's that the GUI (or a script, @@ -99,6 +105,7 @@ or closer to home, Linux Kontor. In particular, it should be possible to use GnuCash not only to view data from these sources, but also to manipulate it and send it back.

+

Modularity, Extensibility and Customization

The above structure then leads one to view GnuCash not so much as a tightly integrated application, but a loose federation of parts objects, libraries and interfaces. In order to facilitate the @@ -108,303 +115,90 @@ of an extension language to glue the pieces together. The extension language that is most central to Gnucash is Scheme, although some of the interfaces are also available through Perl.

- -


-
-
-

Under construction

-The stuff below dates back to Summer 1998 and is hrribly out of date. - -

Feature Requirements

-Create both a personal-financial accounting system, as well as a -business accounting framework. Although these two goals may seem at -odds with each other, there is no reason why they could not share -a considerable amount of framework. The goals of a personal finance -system is a system that is easy to use, has a simple yet powerful menu -system, provides graphs, charts, and interfaces to on-line banking and -stock systems. The goals of a business system is multi-user -capabilities built on an SQL database and/or CORBA objects for -multi-user use, with support for inventory control, shipping & -receiving, billing, accounts payable & receivable. A pie-in-the-sky -system might even include interfaces to on-line shopping carts, -credit-card clearing interfaces, or even a subset of SAP R/3 (TM) -functions. Note that all of these systems require at their base -both a strong model of a "financial transaction", as well as -a ledger window, and a report generation mechanism. The tools -created to allow one should be portable enough to be deployed in the -other application as well. +

Markets and Users

+Implicit in this desire for extensibility is the need to build +two different types of finacial applications: one for the home +user, and one for the small business. These two types of systems +use much of the same financial lingo, and can share a lot of code, +but in fact are quite different. +

+A personal finance system needs to be easy to use, have a simple +'intuitive', yet powerful, menu system, and provide graphs, charts, +net-worth reports, mortgage calculators, budget planners, and +and interfaces to on-line banking, shoping and stock systems. +

+A business system needs to run over the network, allowing multiple +simultaneous users. It needs support for payroll, inventory control, +shipping & receiving, billing, accounts payable & receivable. +Pie-in-the-sky might include interfaces to on-line shopping carts, +credit-card clearing interfaces, interfaces into ERP systems.

+ + + + +

Feature Requirements

+ + + +

Personal Financial Application

+Below are listed the technical work items needed to implement +the features that home might need or expect. They are listed +in approximate order of priority. + +
+ +

Small Business Features

+Features that small/medium businesses expect. + + + + + + + + + +

Features and Functions

-
Graphs, Reports -
Add the whole host of reports, including Net Worth statements, - Balance Sheets, and Profit & Loss statements. These should be - printable: it might be best to create them as ordinary HTML pages, - and use the printing abilities of the browser. In an ideal - situation, the user should be able to create custom reports. -

- Other output format possibilities include SGML and XML. In the - long run, these are preferable to HTML, since DSSSL and - Jade (James DSSSL Engine - can be used to convert to RTF, Postscript, etc. XML is the wave - of the future. -

- The Report Generator should be a "dockable" subsystem of the - whole. Thus, it should be possible to run the report generator - in a stand-alone, read-only fashion without having to start up the main - application. -

- Graphs, charts, etc. too ... -

- One hard part of reporting is designing a configurable interface, - so that people can build custom reports. -

- Status: -

-

- -

Web Site Maintenance & Marketing -
Put together an active, relevent web site. Mailing list archives. - Screen shots. Announces on c.o.l.a, freshmeat. Put minor news items, - etc. on web site news. Bug tracker. Maintain repository of - co-requisite tools & packages. -

- Status: -

-

- -

OFX support -
Provide the SGML DTD parsers to handle the OFX reports that many - banking institutions are providing, or will soon be providing, to - retail customers. See below for OFX references. OFX is an open spec - from Microsoft, Intuit, & Checkfree, and will be supported by Integrion. - The OFX DTD's are included in the 1.1 distributions. See - OFX HomePage for details. -

- Status: -

-

- -

Budgeting -
Ability to handle budgeted future transactions. -

- Status: -

-

More ...

- - -
-
User Interface Ports -
Port the package as a whole to gtk/gnome, Qt, Emacs. -

- Status: -

- -

- +

Internationalization
All menus, markup and help-text should be internationalized, so that GnuCash could be usable in any country. This @@ -427,13 +221,128 @@ other application as well.

-

Icons, Glitz, Icons, Glitz -
A set of pretty icons and button pixmaps should be created for - minimized windows, and for the various buttons. A user-configurable - button-bar would be nice too. This should probably be coupled with - the creation of an X resource file, which does not currently exist. + +
Graphs, Reports +
Add a variety of reports, including Net Worth, + Balance Sheets, and Profit & Loss statements. These should be + printable: it might be best to create them as ordinary HTML pages, + and use the printing abilities of the browser. These should be + easy to customoize. Ideally, even novice users should be able to + create custom reports. +

+ Other output format possibilities include SGML and XML. In the + long run, these are preferable to HTML, since DSSSL and + Jade (James DSSSL Engine + can be used to convert to RTF, Postscript, etc. XML is the wave + of the future. +

+ The Report Generator should be a "dockable" subsystem of the + whole. Thus, it should be possible to run the report generator + in a stand-alone, read-only fashion without having to start up the main + application. +

+ Graphs, charts, etc. too ... + Asset allocation pie chart. + Graph portfolio value vs. cost +

+ One hard part of reporting is designing a configurable interface, + so that people can build custom reports. +

+ Stock portfolio tools should include a cost-averaging report. + Market Index report. Stock Option values. Estimate capital gains taxes. +

+ Status: +

+ +

Simplified Stock Ledger +
Stocks and Mutual funds are handled by placing them each in their + own account. Each account can be viewed individually. If all of + the stock accounts are children of a master trading account, then + the trading account can be viewed and modified in a General Ledger + window. The current stock general ledger window is a bit obtuse, + and difficult to understand and use. A simplified but still + powerful ledger window is desperately needed. +

+ Question: how to most simply allow the user to enter loads and fees? + Answer: through splits. However, some users may not understand splits, + at least not initially. Thus, a little popup that allows the user to + type in the sales load or fee, & etc, and then auto-creates the needed + splits. +

+ Note the current transfer window does NOT allow a share price to + be specified !! Needs fixin ... +

+ + +

Themes, Icons, Glitz +
A variety of finer touches need work: +
    +
  • Themes. A set of themes for the gnome version. +
  • Button Bar A user-configurable button-bar would be nice too. +
  • Categories + Provide a default list of "Categories" (Income/Expense Accounts). + These are categories such as "Automobile Expense", "Bank Interest + Income", and "Employment Income". The user should be able to + select a default set of accounts, and have those be created. + To actually implement this, it might be best to simple create + a file with these in them, and load that file. A mechanism should + be provided to allow the user to weed-out the unwanted accounts + without hampering their ability to use them at a later date, if + desired. +
  • Household Assets + Add an example showing how regular household assets (house, car, + jewelry, etc.) should be treated. In particular, show how + appreciation and depreciation should be treated. +
  • Navigation + Menu navigation using the keyboard should be possible. + Although menu mnomenics exist, they seem to be broken. + Similarly, tab-key navigation should be possible. Currently, + it is possible to use the tab key to navigate from field to + field in the register window, to user arrow keys to navigate menus, + and quick-fill to automatically complete fields. However, + it is not possible to tab over to the "Commit" button. It should be. +
  • Folder Tabs + Currently, Income/Expense accounts can be shown or hidden by + selecting from a menu. It would be nice to be able to examine + different account types (Asset, Liability, Income, Expense, + Payables, Receivables, Inventory) by selecting a tab folder. +
  • Fly-Over Help + When the user pauses the mouse over a button, "fly-over" pop-up + help windows should appear. +
  • Grayed-out Form Help + Create grayed out entries in the ledger, titled "Memo", + "Description", etc, helping users understand what should be typed into + each field. +
  • emacs, vi, motif, kde, gnome Key Bindings for Text Fields + Make sure that text fields can handle the vi & emacs key bindings, + so that e.g. emacs-style ctrl-a, ctrl-k does the right thing. +
+

+ + +

Books, Accounting Periods +
Ability to close the book at end of the fiscal year. + I.E. Ability to permanently lock records as non-editable. This should + be straight-forward by using the "reconciled" field to hold + "locked", and not allowing the GUI to edit locked records. + Also need to report closed books slightly differently. Need + to bring balances forward too... +

+ + +

Check Printing +
Create a check-printing ability. +

+ +

User Preferences
Create menu system & file format for manipulating user preferences. Preferences include things like showing/not @@ -447,32 +356,84 @@ other application as well.

-

Categories -
Provide a default list of "Categories" (Income/Expense Accounts). - These are categories such as "Automobile Expense", "Bank Interest - Income", and "Employment Income". The user should be able to - select a default set of accounts, and have those be created. - To actually implement this, it might be best to simple create - a file with these in them, and load that file. A mechanism should - be provided to allow the user to weed-out the unwanted accounts - without hampering their ability to use them at a later date, if - desired. -

- Current status: + + +

Extension Language Support +
The application is wired together partly with C, partly + with Scheme. The architecture of the wiring and how scheme + is fit in needs to be reviewed, with a general overview + created so that additional extensions & etc. can be added + in a straightforward manner. +

+ The overall architecture is envisioned to be as so: + All code, including the transaction engine, the file I/O routines, + the menus, and the ledger, will be abstracted into + compact modules that can function independently of each other. + At the highest level, there will be a infrastructure with + extension language interfaces that will "wire together" the + various modules. +

+ Such "wiring together" will consist of a dispatch infrastructure + that will allow arbitrary menu entries to be hooked to arbitrary + modules. The configuration for menu entries, and thier associated + callbacks, will be specified in an ext-lang configuration file. + At the final stages, it is hoped that new modules can be imported + without requiring that the application itself be recompiled & relinked. +

+ Status:

-

Recurring Transactions -
Add support for automatic, recurring transactions, e.g. + +
Bonds & Interest Bearing Instruments +
Support should be added for Mortgages, Bonds, CD's and other + instruments (e.g. savings accounts) that pay interest on a regular + basis. It should be possible to specify the interest rate, + the payment schedule, and other regularly recurring transactions. +

+ + +

401K & etc. +
401K & etc. +

+ + +

Annotate with News Stories +
Download, save, annotate investment news & research. + Provide a way of storing news stories with accounts, and pssibly + annotating individual transactions in the same way. +

+ + +

Loan and Mortgage Calculators +
Provide a variety of simple GUI utilities to allow user to calculate + the future value of loans, mortgage payments, interst payments, etc. +

+ Status: +

    +
  • Not Started. +
+

+ + +

Alerts, Recurring Transactions +
Provide pup-up notification of deadlines, events, upcoming payments. + Add support for automatic, recurring transactions, e.g. mortgage payments, fixed-interest bonds, bank accounts, etc. Note that the design for this could be very different, depending on whether the multi-user functions are available or not. - Note also, maybe the engine needs to support two dates per - transaction: expected, and actual ?? +

+ Design/implementation for this is tricky. It should probably leverage + crontab, but this can lead to difficulties & bugs. + May need interfaces to email for emailed alerts. Interfaces into + calendering systems? Current status:

  • April 1998 -- Design Doc contributed by Bob Drzyzgula. See @@ -480,38 +441,93 @@ other application as well.

-

Navigation -
Menu navigation using the keyboard should be possible. - Although menu mnomenics exist, they seem to be broken. - Similarly, tab-key navigation should be possible. Currently, - it is possible to use the tab key to navigate from field to - field in the register window, to user arrow keys to navigate menus, - and quick-fill to automatically complete fields. However, - it is not possible to tab over to the "Commit" button. It should be. + +
Budgeting +
Ability to create a budget (i.e. estimates of future expenditures). + Reconcile actual expoenditures against future expenditures. + Create simple, step-by-step 'financial plan' budgeting GUI's: +
    +
  • Home purchase planner +
  • Retirement planner +
  • College tuition planner +
  • Debt reduction planner +
  • Scrimp-n-Save planner +
  • Special purchase planner (big ticket items) +
+ Create a summary budget/track-record budget report that a + professional financial planner/advisor could use. +

+ Note that the above 'step-by-step' budgeters will have a very + very different GUI than what e.g. a small-business budget might + look like. + +

+ Status: +

    +
  • A design doc has been submitted by Bob Drzyzgula. + Take a look at ./src/budget.txt in the source directory. +

-

Folder Tabs -
Currently, Income/Expense accounts can be shown or hidden by - selecting from a menu. It would be nice to be able to examine - different account types (Asset, Liability, Income, Expense, - Payables, Receivables, Inventory) by selecting a tab folder. + +
Quicken(TM) Export +
Ability to export Quicken QIF files. Quicken import is implemented + and mostly works.

-

Fly-Over Help -
When the user pauses the mouse over a button, "fly-over" pop-up - help windows should appear. + +
Stock Quotes, Price Quotes +
Add ability to download stock quotes, other price quotes. + Add ability to download historical prices as well. + (e.g. get 5-year history of mutual fund performance vs. djia). +

+ Status: +

    +
  • Can obtain stock quotes from Yahoo (NYSE), Fidelity Investments, + T.Rowe Price, and do automated update of GnuCash data files + (with the gnc-price perl script). Need to add more data sources. + See src/quotes/Quote.pm and src/quotes/gnc-price for details. +
  • Need to integrate with GUI. Right now, this is a stand-alone + perl script run from crontab. +

-

Simplified Stock Ledger -
Stocks and Mutual funds are handled by placing them each in their - own account. Each account can be viewed individually. If all of - the stock accounts are children of a master trading account, then - the trading account can be viewed and modified in a General Ledger - window. The current stock general ledger window is a bit obtuse, - and difficult to understand and use. A simplified but still - powerful ledger window is desperately needed. + +
OFX support +
Provide the SGML DTD parsers to handle the OFX reports that many + banking institutions are providing, or will soon be providing, to + retail customers. See below for OFX references. OFX is an open spec + from Microsoft, Intuit, & Checkfree, and will be supported by Integrion. + The OFX DTD's are included in the 1.1 distributions. See + OFX HomePage for details. +

+ There are two ways to build an OFX parser. One way is to build + a compile-time DTD parser that treats the DTD as if it were an IDL, + and generates C language stubs for a parser. This approach was + attempted and abandoned because it leads to fragile C code and + a very large binary. Its fragile because minor DTD non-compliances + are hard to parse, handle and recover from. Its huge because the + DTD results in hundreds of (C++) objects being generated. + The other way is to perform run-time DTD parsing. This is nice + because this is the more popular approach: there are a variety of + XML tools available that provide this function. Its slower, but + on the OFX client side, this is not a bottleneck. +

+ Status: +

+ +

Multiple Currencies +
Need to support multiple currencies. Work is needed in the + and the GUI. The engine currently supports multple currencies + by treating them as securities, and thus allowing currency trading. + The currency-trading register needs a complete overhaul. +

+ +

Forced Double-Entry
The system supports double-entry: every transaction indicates a pair of accounts: one is debited, and one is credited. @@ -530,86 +546,12 @@ other application as well. double-entry behaviour: it can be made lax, or strict: however, they are compiled in, there is no way to change them from the gui. -
  • Dec 1998 -- Scruber functions implemented to crawl through data, +
  • Dec 1998 -- Scruber functions implemented to crawl through data, and find all unbalanced or orphaned transactions.

    -

    emacs, vi, motif, kde, gnome Key Bindings for Text Fields -
    Make sure that text fields can handle the vi & emacs key bindings, - so that e.g. emacs-style ctrl-a, ctrl-k does the right thing. -

    - -

    Bonds & Interest Bearing Instruments -
    Support should be added for Mortgages, Bonds, CD's and other - instruments (e.g. savings accounts) that pay interest on a regular - basis. It should be possible to specify the interest rate, - the payment schedule, and other regularly recurring transactions. -

    - -

    Household Assets -
    Add an example showing how regular household assets (house, car, - jewelry, etc.) should be treated. In particular, show how - appreciation and depreciation should be treated. -

    - -

    Inventory, Job Costing -
    Add the business features needed to maintain a stock of items for - sale, estimating jobs. -

    - -

    Payables & Receivables -
    Add features to track sales receipts and other pending sources - of income, as well as owed sums. -

    - -

    Check Printing -
    Create a check-printing ability. -

    - -

    Locks -
    When splits are implemented, and the parent transaction has been - marked as cleared, the record should be locked, so that further - modifications to the amount can't be performed (or at least, a warning - is generated. This prevents accidental garbaging up of old - transactions.) -

    - -

    Grayed-out Form Help -
    Create grayed out entries in the ledger, titled "Memo", - "Description", etc, helping users understand what should be typed into - each field. -

    - -

    Accounting Periods -
    Ability to permanently lock records as non-editable. This should - be straight-forward by using the "reconciled" field to hold - "locked", and not allowing the GUI to edit locked records. -

    - -

    Quicken(TM) Export -
    Ability to export Quicken QIF files. Quicken import is implemented - and mostly works. - (Note: Quicken import worked in v 1.0, but got slightly broken in v 1.1 - It no longer merges duplicate transactions when importing two or - more QIF files. This should be easy to fix, as the "merge" routine - is there in the code somewhere; its just not called because it was - never restructured for the vv 1.1 engine.) -

    - -

    Transaction Window Fixes -
    The transaction window should allow the user to specify a share - price (when purchasing/selling shares) as well as the load - and/or fees associated with the purchase. Fees, of course, - are handled as separate transactions: however, it should - still be possible to specify the fees, the transfer, and other - details from a single window. -

    - Status: Some basic reorganization of register was done to - support mixed multi-line split display. However, the actual - display of such things remaions unimplemented. -

    - +

    Tab-delimited ASCII file format
    People *like* to be able to read file contents in ASCII. There are many Unix tools for manipulating ASCII. An ASCII equivalent of the @@ -627,32 +569,147 @@ other application as well. the SQL schemas in order to minimize I/O complexity and incompatibility.

    + +

    Tax Preparation +
    Gotta prepare those taxes. TurboTax -- categorize items according + to differnt tazx schedules -- VAT -- estimate income taxes -- + estimate itemized deductions -- find potential deductions, categorize + them -- +

    + + +

    Sync with Palm Pilot &c. organizers +
    Like it sez... +

    + + +

    Emergency Records Organizer +
    Put together a single-page report showing critical info about + accounts, etc. +

    + + +

    Enriched Engine, Financial Objects +
    The current system makes a distinction between the data (account, + transaction) and they GUI that displays it. The data is embeded + within and controlled by the "Engine", which is a set of routines + to access accounts, transactions, etc. The engine serves as a + kind of a dynamic cache between the permanent data repository + (file, sql db) and the GUI. +

    + The current engine is rather simple: it provides support for + accounts, account heirarchies and transactions consisting of + multiple entries. Many of the features described elsewhere + need the engine to have a far richer, more sophisticated data + model: parties (names, addresses), transaction id's & part numbers, + budgets, interest rates, A/R, A/P, etc. +

    + Note: it makes no sense to make the engine API richer than what + the GUI can currently support. +

      +
    • Locks + When splits are implemented, and the parent transaction has been + marked as cleared, the record should be locked, so that further + modifications to the amount can't be performed (or at least, a warning + is generated. This prevents accidental garbaging up of old + transactions.) +
    • Books + Ability to close a book at the end of the fiscal year. +
    + +

    + Current Status: +

      +
    • The basic engine has been detangled from + the GUI elements, as of version gnucash-1.1.4. +
    • Binary file I/O mostly detangled into a separate module. +
    • Crude transaction logging in place; should be suitable + for error/crash recovery but has not been tried by fire. +
    • Backup files automatically created & timestamped. +
    • BeginEdit()/RoolbackEdit()/CommitEdit() routines mostly in place, + These "Transaction processing constructs" + should simplify creation of an SQL back end. +
    • Multiple currency support is present but raw. +
    • Query engine is minimal/sparse in capabilities. +
    • Linas <linas@linas.org> is maintaining the engine code. +
    + +

    + + +

    SQL I/O +
    A module is necessary to allow data to be fetched from an SQL + database, and for that database to be updated. Some thoughts: + SQL databases do not need to be locked during editing: instead, + an optimistic approach, similar to that employed by CVS (concurrent + version system, a mechanism for storing versions of source code) + could be used: if the edits conflict with changes made by others, + the edit could be rejected en-masse, allowing the user to merge and + correct their changes. This is a very important note: updating + SQL does NOT require locks to be held for long periods of time! +

    + + +

    Multi-user Support +
    Multi-user support should be added with either an SQL backend + to the engine, and/or through CORBA interfaces to the engine. + Project Kontor and also FreeMoney is working on SQL schemas; + Kontor is also working on Java RMI/CORBA interfaces. + Another possibility is to create a web-application-server, and have + users do much/most of i/o with a web interface, possibly using + the register object as a browser plugin. +

    + The following industrial-strength features are needed: +

      +
    • transaction-oriented queuing of updates +
    • event subscription channel for updates +
    • user authentication +
    • user authorization +
    • non-repudiability +
    • encryption of network connections +
    +

    +

      +
    • Stephan Lichtenauer <s_lichtenauer@muenchen.org> + is working on corba interfaces. +
    • "Alexander L. Belikoff" <abel@bfr.co.il> may start work on corba +
    + +

    + + +

    Accounts Payable, Receivable +
    Add features to track sales receipts and other pending sources + of income, as well as owed sums. +

    + + +

    Payroll +
    Payroll. +

    + + +

    Invoicing +
    Invoicing. +

    + + +

    Job Costing +
    Ability to prepare estimates. +

    + + +

    Expense Accounts +
    Expense Account Automation, including air, car, hotel, dining. + Receipts, reservations, cancellations. +

  • -

    Volunteers

    -Your name here as project contributor! -
    -This list only mentions some of the recently active developers; many, -many others have contributed fixes and patches both large and small. -I've tried to credit them in the README. -

    -

    References


    -Draft version 0.25 -- October 1998
    +Draft version 0.35 -- November 1999
    Linas Vepstas linas@linas.org