acm-uiuc/treasure-chest — Issue #1: Create a structure for basic account/transaction model
Author: Dylnuge
Created: 2012-02-12 06:29:05+00:00
State: open

We need a structure representing dual-entry accounts and transactions. (Please edit this comment as these models change)

### Authentication Structure:

* A **user** is an individual on the system
* A **group** is a collection of users with specific access privileges
** SIGs and special organizations like Conference and Admin are the kind of groups we care about here

### Account Structure:

* An **account** is a representation for a real-world source of money
** An account has a balance. I'm still not sure how I want to do these
** An account may be marked as *internal* or *external*
*** *Internal* accounts contain money we have available (for example, "Conference Business Account")
*** *External* accounts are sources of both income in and expenditures out (for example, "Conference Media Expenditures" and "Conference Corporate Income"). They do not have a formal balance, only a transactional balance
** Accounts may be *indirectly* or *directly* editable by a group, and may also be marked *visible*
*** *Direct* accessibility allows a group to update the balance of an account
*** *Indirect* accessibility means a group can only edit balances through the creation of transactions
*** *Visible* accessibility means a group may only see the balance, but not make changes
*** All other groups may not see account details
** An account may have multiple *tags* for organization

* A **transaction** represents a transition from one account into another
** The transaction has an *outgoing* and *incoming* account
** The transaction has an *amount* which is taken out of outgoing and put into incoming accounts
** The transaction has a group as its *owner*
** The transaction contains *details* specifying what it is for
** The transaction may have multiple *tags* for organization