FinanceFerret/HyperMoney: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
m (update)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{stub:Woozle}}
'''HyperMoney''' is my attempt to write a money-management program (as in [[Quicken]] or [[Microsoft Money]]) that is actually usable and has no Stupid Features. It will be [[FOSS|Open Source]], as soon as I have source worth publishing (as of 2005-08-06, it's all written in Microsoft Access 97). The next step may be to convert it to web-based application, as HTML could possibly overcome many of the interface design issues I'm encountering.
[[Category:Software Projects]]
[[User:Woozle|Woozle]]: Projects: '''HyperMoney'''


[[HyperMoney]] is my attempt to write a money-management program (as in Quicken or Microsoft Money) that is actually usable and has no Stupid Features. It will be [[FOSS|Open Source]], as soon as I have source worth publishing (as of 2005-08-06, it's all written in Microsoft Access 97). The next step may be to convert it to web-based application, as HTML could possibly overcome many of the interface design issues I'm encountering.
'''2008-08-17''' Update: I'm renaming the project [[FinanceFerret]] <s>and moving the documentation over to [[htyp:FinanceFerret|HTYP]]</s> (this has been done, and is what you are looking at except [2020-10-10] that it is now on wooz.dev and is an old version).


==Project Goals==
*To avoid shortcomings in existing money manager software: see [[HyperMoney: Flaws in Other Software]]
*To minimize the "setup curve", i.e. the amount of preparatory work needed before any useful amounts of data can be entered
*To provide all basic functionality needed for the following:
**Tracking and balancing one's bank accounts, credit cards, and other basic types of money accounts
**Tracking debts and loans involving one or more other parties of varying levels of disorganization (they might or might not send you regular statements or even reliable itemizations)
*To make data entry as painless as possible:
**Easy identification of redundantly-entered transactions -- so you can Just Start Typing instead of worrying about where you left off last time
**Deferred data massaging -- so you can Just Start Typing, and worry about assigning proper accounts and categories to things later; the program should keep track of incomplete data massaging so you can take care of it when you have time
==Data Design==
==Data Design==
There are two main areas of concern: Accounts and Transactions.
There are two main areas of concern: Accounts and Transactions. All other tables are supporting either or both of those, sometimes mainly for user-friendliness and not part of the core data design. User-friendliness functions include Grouping and Pre-entry (deferred data massaging).
===Acccounts===
===Acccounts===
{| style="background: #eeeeff;"
{| style="background: #eeeeff;"
Line 22: Line 11:
!Field||Type||Description
!Field||Type||Description
|-
|-
|ID||int(4) autonumber
|'''ID'''||int(4) autonumber
|-
|-
|Name||text||short name for account
|'''Name'''||text||short name for account
|-
|-
|Descr||text||description and notes
|'''Descr'''||text||description and notes
|}
|}


Accounts are in a hierarchical tree, but this is mainly user-friendliness (though it can also be used for reports). The tree is in a separate table, Topics, and the mapping from Accounts to Topics is in [Account Topics].
Accounts are in a hierarchical tree, but this is mainly user-friendliness (though it can also be used for reports). The tree is in a separate table, Topics (see [[#Grouping]]), and the mapping from Accounts to Topics is in [Accounts x Topics].


{| style="background: #eeeeff;"
{| style="background: #eeeeff;"
|+'''Topics''' table
|+'''Accounts x Topics''' table
|-
|-
!Field||Type||Description
!Field||Type||Description
|-
|-
|ID||int(4) autonumber
|'''ID_Acct'''||int(4)||Accounts.ID
|-
|-
|Name||text||short name for topic
|'''ID_Topic'''||int(4)||Topics.ID
|-
|ID_Parent||int(4)||Topics.ID of parent topic; NULL = this is a root topic
|}
|}
===Transactions===
Every transaction consists of one or more [[TransPart]]s associated with a master Transaction record. Inforamation about balances will be stored separately.


{| style="background: #eeeeff;"
{| style="background: #eeeeff;"
|+'''Account Topics''' table
|+'''Trxacts''' table (Transactions)
|-
|-
!Field||Type||Description
!Field||Type||Description
|-
|-
|ID_Acct||int(4)||Accounts.ID
|'''ID'''||int(4) autonumber
|-
|-
|ID_Topic||int(4)||Topics.ID
|'''Descr'''||text||description of transaction
|-
|'''When'''||date||date when the transaction occurred, as recorded by user
|}
|}
===Transactions===
Every transaction consists of one or more [[TransPart]]s associated with a master Transaction record. Inforamation about balances will be stored separately.


{| style="background: #eeeeff;"
{| style="background: #eeeeff;"
|+'''Trxacts''' table (Transactions)
|+'''TrxParts''' table ([[TransPart]]s)
|-
|-
!Field||Type||Description
!Field||Type||Description
|-
|-
|ID||int(4) autonumber
||'''ID'''||int(4) key autonumber
|-
|-
|Descr||text||description of transaction
|'''ID_Trx'''||int(4)||Trxacts.ID of master transaction
|- valign=top
|'''ID_Mode'''||int(4)||TrxModes.ID of transaction mode (source, target, equity, topic)
|- valign=top
|'''ID_Acct'''||int(4)||Accts.ID of account for this part of the transaction
May be NULL to indicate that this is a "loose" piece of information
|-
|-
|When||date||date when the transaction occurred, as recorded by user
|'''Seq'''||int(4)||Order in which this transaction part appears, among others of the same mode
|-
|'''ID_Type'''||int(4)||TrxTypes.ID of transaction type for this part
|-
|'''When'''||date||date when the transaction occurred, according to the institution hosting the account
|- valign=top
|'''Amount'''||currency||amount of transaction; positive = deposit, negative = withdrawal.
*Sum of all source parts plus all target parts must equal zero.
*Sum of all equity parts must equal sum of all target parts.
|}
|}


===Grouping===
{| style="background: #eeeeff;"
{| style="background: #eeeeff;"
|+'''TrxParts''' table ([[TransParts]])
|+'''Topics''' table
|-
|-
!Field||Type||Description
!Field||Type||Description
|-
|-
|ID_Trx||int(4)||Trxacts.ID of master transaction
|'''ID'''||int(4) autonumber
|-
|-
|ID_Acct||int(4)||Accts.ID of account for this part of the transaction
|'''Name'''||text||short name for topic, as shown in tree
|-
|-
|ID_Type||int(4)||TrxTypes.ID of transaction type for this part
|'''NameFull'''||text||(optional) longer form of name for display outside of tree context
|-
|-
|ID_Mode||int(4)||TrxModes.ID of transaction mode (source, target, equity, topic)
|'''Descr'''||text||(optional) description of topic
|-
|-
|When||date||date when the transaction occurred, according to the institution hosting the account
|'''ID_Parent'''||int(4)||Topics.ID of parent topic; NULL = this is a root topic
|-
|Amount||currency||amount of transaction; positive = deposit, negative = withdrawal.
|-
|colspan=3|
*Sum of all source parts plus all target parts must equal zero.
*Sum of all equity parts must equal sum of all target parts.
|}
|}



Latest revision as of 13:54, 10 October 2020

HyperMoney is my attempt to write a money-management program (as in Quicken or Microsoft Money) that is actually usable and has no Stupid Features. It will be Open Source, as soon as I have source worth publishing (as of 2005-08-06, it's all written in Microsoft Access 97). The next step may be to convert it to web-based application, as HTML could possibly overcome many of the interface design issues I'm encountering.

2008-08-17 Update: I'm renaming the project FinanceFerret and moving the documentation over to HTYP (this has been done, and is what you are looking at except [2020-10-10] that it is now on wooz.dev and is an old version).

Data Design

There are two main areas of concern: Accounts and Transactions. All other tables are supporting either or both of those, sometimes mainly for user-friendliness and not part of the core data design. User-friendliness functions include Grouping and Pre-entry (deferred data massaging).

Acccounts

Accounts table
Field Type Description
ID int(4) autonumber
Name text short name for account
Descr text description and notes

Accounts are in a hierarchical tree, but this is mainly user-friendliness (though it can also be used for reports). The tree is in a separate table, Topics (see #Grouping), and the mapping from Accounts to Topics is in [Accounts x Topics].

Accounts x Topics table
Field Type Description
ID_Acct int(4) Accounts.ID
ID_Topic int(4) Topics.ID

Transactions

Every transaction consists of one or more TransParts associated with a master Transaction record. Inforamation about balances will be stored separately.

Trxacts table (Transactions)
Field Type Description
ID int(4) autonumber
Descr text description of transaction
When date date when the transaction occurred, as recorded by user
TrxParts table (TransParts)
Field Type Description
ID int(4) key autonumber
ID_Trx int(4) Trxacts.ID of master transaction
ID_Mode int(4) TrxModes.ID of transaction mode (source, target, equity, topic)
ID_Acct int(4) Accts.ID of account for this part of the transaction

May be NULL to indicate that this is a "loose" piece of information

Seq int(4) Order in which this transaction part appears, among others of the same mode
ID_Type int(4) TrxTypes.ID of transaction type for this part
When date date when the transaction occurred, according to the institution hosting the account
Amount currency amount of transaction; positive = deposit, negative = withdrawal.
  • Sum of all source parts plus all target parts must equal zero.
  • Sum of all equity parts must equal sum of all target parts.

Grouping

Topics table
Field Type Description
ID int(4) autonumber
Name text short name for topic, as shown in tree
NameFull text (optional) longer form of name for display outside of tree context
Descr text (optional) description of topic
ID_Parent int(4) Topics.ID of parent topic; NULL = this is a root topic

Interface Design

Links