diff --git a/doc/html/C/projects.html b/doc/html/C/projects.html index c2778cf708..b0e61c20f0 100644 --- a/doc/html/C/projects.html +++ b/doc/html/C/projects.html @@ -9,7 +9,7 @@ "linux, OFX, accounting, finance, financial, ledger, double entry, GPL, gnu"> - +

GnuCash Project Goals

The people behind GnuCash aim @@ -79,14 +79,16 @@

  1. Architectural Goals
  2. -
  3. Feature Requirements
  4. +
  5. Requirements
  6. +
  7. Sizings
  8. Features
-
+
+

Architectural Goals

-
There are some over-reaching design principles + There are some over-reaching design principles and philosophies that we intend to maintain. Some of these concepts and terms are introduced in this section. @@ -155,10 +157,10 @@
  • Transactions, which consist of a set of journal entries (JE's) whose values sum to zero. -
  • Journal Entries (internally refered to as 'splits') +
  • Journal Entries (internally refered to as 'splits') which record prices and values. -
  • Accounts +
  • Accounts, which consist of a list of journal entries.
  • Chart of Accounts, which is a heirarchical tree of accounts. @@ -198,24 +200,28 @@

    The above structure should leads us to view GnuCash not so much as a tightly integrated application, but rather as a loose confederation of component objects, libraries and - interfaces.

    + interfaces. -

    In order to facilitate the gluing together of these parts, + In order to facilitate the gluing together of these parts, as well as simplify the questions of customizability, change - and rapid development, GnuCash makes use of an extension - language to glue the pieces together.

    - -

    The extension language that is most central to Gnucash is - - Scheme, and in particular, the FSF implementation, Guile, - although some of the interfaces are also available through Perl.

    - -

    Markets and Users

    + and rapid development, GnuCash makes use of the + + Scheme extension language (as implemented in the FSF + Guile + interpreter), to glue the pieces together. + (Note that the engine interface is also available with + Perl interfaces, thanks + to a + + SWIG wrapper. +

    + +
    + +

    Requirements

    Implicit in this desire for extensibility is the need to build financial applications supporting two major classes of users: +
    • Home Users
    • @@ -232,12 +238,12 @@ include:

        -
      • Needs to be approachable to occasional users that are not - terribly knowledgeable about accounting.
      • +
      • Needs to be approachable and usable by occasional users + who are not knowledgeable about accounting.
      • -
      • Ease of use by the naive is critical.
      • +
      • Ease of use and simplicity is critical.
      • -
      • There is a need for a profligate set of reports, graphs, +
      • A reasonable selection of reports, graphs, charts, and tools for personal finance, such as mortgage calculations.
      • @@ -264,6 +270,10 @@
      • Business systems require network support, and the ability to support multiple simultaneous users.
      • +
      • Some business users may want access to the system from an + MS Windows 95/98/NT box. For these folks, a web-based + interface could be just handy. Web interfaces are also + nice for ASP type deployment.
      • Small businesses do not often have sophisticated investment portfolios; they instead need support for additional @@ -303,8 +313,7 @@ A home user does not generally require most of the sophistication (sophistry?) of accrual accounting that is required by business enterprises. - -

        Thus, home users don't need much of the + Thus, home users don't need much of the sophistication of an Accounts Receivable or Payable system, or the bizarre depreciation policies that crop up in Asset Management systems.

        @@ -328,12 +337,32 @@
      + Another set of contradictory requirements has to do with the + back-end, and interfacing to other systems: +
        +
      • Home users need a simple-to-install, simple-to-maintain system. + This essentially rules out the use of SQL for the storage + medium/back-end for home users. (That is, the current state + of the art for SQL on Linux does not offer any simple, + fool-proof management for data). +
      • By contrast, non-SQL systems for business use are almost + unimaginable. SQL provides a high degree of data integrity + and storage robustness, and also simplifies tremendously the + import and export of data. Powerful SQL tools exist that can + work magic in the hands of a good DB admin. +
      +

      It may be that these will require completely different systems, and that GnuCash cannot be "all things to all people." This remains to be seen.

      -

      Feature Requirements

      - + +
      + +

      Sizings

      + This section attempts to guesss how hard it would be to implement + certain features. +

      Personal Financial Application

      Below are listed the technical work items needed to implement @@ -341,7 +370,10 @@ listed in approximate order of priority.

      The right hand column shows a sizing guesstimate. pm == - person-months

      + person-months. These sizings are meant to show 'effort needed to + complete', rather than 'total effort required'. Thus, half-finished + items have smaller sizings. +

      • Small 0 to 4 pm
      • @@ -371,7 +403,13 @@ - Graphs, Reports + Reports + + Small + + + + Graphs Medium @@ -451,7 +489,13 @@ - Quicken(TM) Export + Quicken(TM) Import + + Small + + + + Quicken(TM) Export Small @@ -574,7 +618,15 @@ -

        Features and Functions

        +
        + + +

        Features and Functions

        +This section reviews the current status of various features. +Some of these are 'in process', some are 'almost done', some are +'completely done'. This section thus provides status on both where +we've been, and where we're going. +
        @@ -587,38 +639,38 @@ country. This would include the printing of currency values in the local country conventions. -

        Current status:

        +

        Current status:

          -
        • Most English-language messages have been - #defined and moved to a single header file - include/messages_en.h
        • +
        • All GUI messages currently use GNU gettext() for + the message catalogs. Translations exist for + English, British, French, Sweedish and German.
        • -
        • Plan to use gnu gettext() for the message - catalogs.
        • +
        • Help pages available only in English and French. -
        • Looking for routines that can parse and print - monetary values in different formats, as well as - date/time parsing/printing routines. (gnucash contains - such parsing routines, but they're not very powerful or - i18n'ed.)
        • - -
        • Henning Spruth has translated the README into - German.
        • +
        • Monetary and string handling done through glibc. + The latest glibc (2.2.3) is nedded to get the correct + functions.
        • Yannick Le Ny <y-le-ny@ifrance.com> traduction - en francais et include/messages_fr.h
        • + en francais +
        • Most GUI input elements use the gtk text widget, and + thus use the XIM input method in asian locales. This + allows e.g. Kanji, Katakana support. However, the + register does *not* use XIM, and thus doesn't currently + support the asian languages. This needs fixing.
        +

        -
        Graphs, Reports
        +
        Reports
        - Add a variety of reports, including Net Worth, Balance + A variety of reports, including Net Worth, Balance Sheets, and Profit and 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 customize. Ideally, even novice users + printable: that is, exportable as HTML as well as print-ready + postscript. + These should be easy to customize. Ideally, even novice users should be able to create custom reports.

        Other output format possibilities include DSSSL tools such as Jade (James DSSSL Engine) can be used to convert to RTF, Postscript, - etc.

        - -

        Add to this the consideration that XML is the basis for + etc. + Add to this the consideration that XML is the basis for the Document Object Model, which is being integrated into many web-based applications, and we can see that XML is an increasingly significant format as we look to the future.

        The Report Generator should be a separate but - "dockable" subsystem of the whole.

        - -

        Thus, it should be possible to run the report generator + "dockable" subsystem of the whole. + That is, 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

        + up the main application. It should be possible to run reports + nightly from a command-line and/or cron job.

        One difficult aspect of reporting is designing a configurable interface, so that people can build custom @@ -656,24 +701,56 @@ Reporting Infrastructure is seeking to build this up using Guile.

        +

        Generated reports should be exportable to other gnome + systems using bonbo. Reports should also be exportable to + the gnumeric spreadsheet (possibly by writing out gnumeric + file format??) + +

        Reports should make use of the 'action' field ...

        + Relationship to budgeting not clear ...

        Stock portfolio tools should include a Cost Averaging report, Market Index report, Stock Option values, Estimation of capital gains tax liabilities.

        + +

        Status: +

          - GUPPI +
        • A general reporting infrastrucutre was implemented in + Perl, in the form of html-embedded perl (ePerl). + However, this reporting mechanism was abondoned + in part because ongoing build and install problems related + to eperl and swig. Also, since eperl didn't poarticipate + in the interpreter even loop, the report generator + had to runn as a separate process, reading data via pipes. + This was uglier than some folks liked. +
        • A general reporting infrastructure has been + implemented in + Scheme. Currently, there are simple reports for + Profit/Loss, Balance Sheet, and portfolio valuation. +
        • Reports are currently displayed with the gtk-xmhtml widget + but are being ported to the gtk-html widget. The gtkhtml + widget should provide printing abilities through + gnome-print (right ????). +
        • There is currently no way (no longer any way??) to + generate reports from the command line ... +
        • A list of 'required reports' is needed. Then these need + to be implemented.
        +

        +
        +
        Graphs
        +
        +

        Graph portfolio value vs. cost

        +

        Graphs, charts, etc. too ...

        +

        Asset allocation pie chart.

        -

        Status:

        +

        Status:

          -
        • A simple HTML output form has been implemented; - GnuCash can act as a very simple web server.
        • - -
        • Reports for Profit/Loss, Balance Sheet, and portfolio - valuation implemented as HTML-embedded Perl scripts. Being re-written in - Scheme.
        • +
        • Evaluate different graphing packages, including + GUPPI
        +

        Simplified Stock Ledger
        @@ -700,33 +777,39 @@

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

        -

        +
        Themes, Icons, Glitz
        +
        A variety of finer touches need work: +

        • +

          Themes. - -

          A set of themes would be desirable for the Gnome - version.

          + Some theme testing required. The effect of themes on the + register window needs to be reviewed. +

        • +

          Button Bar - -

          A user-configurable button-bar would be nice - too.

          + A user-configurable button-bar would be nice + too. The button bar is the set of 'buttons' (open, edit...) + at the top of a register window and the main window. +

        • - Categories - -

          Provide a default list of "Categories" +

          + Categories/Default Chart of Accounts + Provide a default Chart of Accounts, which will mostly + consist of a default set 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 @@ -741,37 +824,35 @@

        • +

          Household Assets - -

          Add an example showing how regular 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 mnemonics exist, they seem to be - broken.

          + Menu navigation using the keyboard should be + possible. + Although menu mnemonics 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.

          + possible to tab over to the "Commit" button. + It should be.

        • +

          Folder Tabs - -

          Currently, Income/Expense accounts can be shown or + 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, @@ -779,71 +860,99 @@

        • +

          Fly-Over Help - -

          When the user pauses the mouse over a button, + 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 + Create grayed out entries in the ledger, titled "Memo", "Description", etc, helping users understand - what should be typed into each field.

          + what should be typed into each field. Status: Done, + as of version 1.3.2(?)

        • - emacs, vi, +

          + emacs, vi, motif, KDE, gnome Key Bindings for Text Fields - -

          Make sure that text fields can handle the vi and + Make sure that text fields can handle the vi and 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 + This consists of several steps: +

        +

          +
        • Permanently lock some transactions as non-editable. This should be straight-forward by using the reconciled field to indicate a locked - value, and not allowing the GUI to edit locked records.

          - -

          Also need to report closed books slightly differently. - Need to bring balances forward too...

          + value, and not allowing the GUI to edit locked records. +
        • Transfer the Income minus Expense for the book period + to an equity account, so that each new period starts with + zero income/expense balances. +
        • A mechanism to purge really old transactions from the + database. +
        • Extensions to reporting infrastructure ... +
        +

        -

        +
        Check Printing
        +
        -
        Create a check-printing ability.
        +
        Create a check-printing ability. +

        Status: +

          +
        • Bill Gribble has built a prototype based on the + gnome-print. Waiting for gnome-print to mature ... +
        +

        +
        User Preferences
        Create menu system and file format for manipulating user preferences. - -

        Preferences include things like showing/not showing - categories, forcing double-entry, etc.

        - -

        Current status:

        - + Preferences include things like default currency, + register layout and colors, etc. +

        + What are some of the comptitive preference-handling + technologies? Lets get some URL's here ... + Following the unix tradition, there is no global + prefernces registery. + Note that session management and preferences are related things + ... sort-of. Right now, we don't treat themn as such ... +

        + +

        Status:

          -
        • Rob Browning has put together a basic infrastructure - that unifies command-line flags with scheme-based config - files.
        • - -
        • Rob also is auto-generating the GUI ...
        • +
        • Works good; lots of preferences in the gui. + Implemented in home-grown scheme. +
        • These are saved in the '.gnucash/config.auto' file. + The current file format is raw scheme code, rather + delicate to tweak by hand ... +
        • Session management is not implemented; viz, we don't + remember where things were left at when the user shut down + the windowing system, and we don't restore the session + afterwords.
        +

        Extension Language Support
        @@ -873,7 +982,7 @@ some manner, import new modules without requiring that the application itself be recompiled and relinked.

        -

        Status:

        +

        Status:

        • Scheme/Guile is the central extension language.
        • @@ -885,11 +994,13 @@
        • Rob Browning is the reigning expert.
        +

        -

        +
        Bonds and Interest Bearing Instruments
        +
        Support should be added for Mortgages, Bonds, CD's and @@ -900,17 +1011,21 @@

        This should be handled by having a way of bouncing out to some Guile code to generate transactions with computed - values.

        + values. +

        -
        401(k), RRSP
        + +
        401(k), RSP
        +
        Retirement Savings Plans often do not put a high priority on tracking costs, as the tax implication is that amounts are taxable upon withdrawal, meaning that there is little - necessity to track capital gains.
        + necessity to track capital gains. + -
        Annotate with News Stories
        +
        Annotate with News Stories
        Download, save, annotate investment news and research. @@ -918,26 +1033,25 @@ possibly annotating individual transactions in the same way. -

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

        Status:

        +

        Status:

        • Not Started.
        +

        -

        -
        Alerts, Recurring Transactions
        +
        Alerts, Recurring Transactions
        Provide pop-up notification of deadlines, events, upcoming @@ -957,18 +1071,17 @@

        May need interfaces to email for emailed alerts.

        -

        Interfaces into calendaring systems? Current - status:

        +

        Interfaces into calendaring systems? +

        Status:

          -
        • April 1998 -- Design Doc contributed by Bob - Drzyzgula. See src/budget.txt
        • +
        • Duhh ...
        +

        -

        -
        Budgeting
        +
        Budgeting
        Ability to create a budget (i.e. estimates of future @@ -996,34 +1109,66 @@ a very very different GUI than what the budgeting system required for a small-business might look like.

        -

        Status:

        - +

        Status:

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

        -

        -
        Quicken(TM) Export
        +
        Quicken(TM) Import
        - Ability to export Quicken QIF files. Quicken import is - implemented and mostly works. + Ability to import Quicken QIF files. Both MSMoney and Quicken + use QIF files to export data. +

        Status: +

          +
        • Quicken import is implemented and mostly works. + Work needs to be done for recurring transactions, etc. +
        • QIF processing, as used for on-line banking, is *not* + implemented. That is, staged import isn't done. + Note that since banks use QIF, the *correct* way to + reconcile bank accounts on-line is through QIF. + On one side, we have existing recorded transactions; + on the other, the latest bank statement, in QIF format. + Now, just put them together ... +
        +

        -

        -
        Stock Quotes, Price Quotes
        +
        Quicken(TM) Export
        + +
        + Ability to export Quicken QIF files. +

        + Status: not started +

        +
        + +
        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:

        +

        + Right now, stock prices are stored with everything else, + in the main database, in the transaction table. This leads + to several aesthetic quandries. It bulks up the database + with 'less-than critical' information. Basically, transactions + are either 'critical' vix record the movement of money, or + are non-critical viz record things retreivable from the + historical record, e.g. prices. Shouldn't storage for + prices be moved to somewhere else? Hmmm ... what about + storage for valatility, shares traded, etc? Does indeed sound + like an alternate storage method would be useful. What about GUI + implications? + +

        Status:

        • Can obtain stock quotes from Yahoo (NYSE), Fidelity @@ -1033,18 +1178,20 @@ src/quotes/Quote.pm and src/quotes/gnc-price for details.
        • +
        • Quote.pm is now a separate development project at + source-forge.
        • Need to integrate with GUI. - -

          Right now, this is a stand-alone perl script run - from crontab.

          + Right now, this is a stand-alone perl script run + from crontab. This will be done by writing + scheme wrappers for the module (???)
        +

        -

        -
        OFX support
        +
        OFX support
        Provide the SGML DTD parsers to handle the OFX reports that @@ -1052,18 +1199,17 @@ providing, to retail customers. See below for OFX references. -

        OFX is an open spec from Microsoft, Intuit, and + OFX is an open spec from Microsoft, Intuit, and Checkfree, and which will be supported by Integrion. The OFX DTD's are included in the 1.1 distributions. See OFX Home Page for - details.

        + 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 + parser. + This approach was attempted and abandoned because it leads to fragile C code and a very large binary.

          @@ -1082,23 +1228,24 @@

          Run-time parsing may be slower, but on the OFX client side, this should not be a bottleneck.

          -

          Status:

          +

          Status:

          • A compile-time parser was developed and abandoned.
          +

          Note that the organizations developing OFX are looking to use XML as their "formats of the future;" this may encourage the use of one of the many XML parsers available - for UNIX.

          + for UNIX.
        Other on-line support
        - +
         >> the German T-Online
         >> homebanking system BTX.
         >>
        @@ -1136,10 +1283,10 @@
         >launch ZKA4BTX to get the data, export it to QIF, and then load
         >it in, all through one command.
         
        -
        +
        -
        Multiple Currencies
        +
        Multiple Currencies
        Need to support multiple currencies. Work is needed in the @@ -1154,8 +1301,7 @@

        -

        -
        Forced Double-Entry
        +
        Forced Double-Entry
        The system supports double-entry: every transaction @@ -1189,10 +1335,9 @@ transactions.
      -

      -
      Tab-delimited ASCII file format
      +
      Tab-delimited ASCII file format
      People like to be able to read file contents in @@ -1252,18 +1397,17 @@ etc ...
      There are Quicken-workalikes that run on the PalmComputing platform; it would be good to inter-operate with - this.
      + this. -
      Emergency Records Organizer
      +
      Emergency Records Organizer
      Put together a single-page report showing critical info about accounts, etc. -

      -
      Enriched Engine, Financial Objects
      +
      Enriched Engine, Financial Objects
      The current system makes a distinction between the data @@ -1354,10 +1498,9 @@ etc ... engine code.
    -

    -
    SQL I/O
    +
    SQL I/O
    A module is necessary to allow data to be fetched from an