clarify Types
This commit is contained in:
parent
f4b4fc98fe
commit
e2a753a36d
69
Types.hs
69
Types.hs
@ -6,34 +6,49 @@ where
|
|||||||
import Utils
|
import Utils
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
|
|
||||||
|
-- | a date
|
||||||
type Date = String
|
type Date = String
|
||||||
|
|
||||||
|
-- | a date and time
|
||||||
type DateTime = String
|
type DateTime = String
|
||||||
|
|
||||||
|
-- | the currency of an Amount. Rates are currently hardcoded.
|
||||||
data Currency = Currency {
|
data Currency = Currency {
|
||||||
symbol :: String,
|
symbol :: String,
|
||||||
rate :: Double -- relative to the dollar.. 0 rates not supported yet
|
rate :: Double -- ^ relative to the dollar.. 0 rates not supported yet
|
||||||
} deriving (Eq,Show)
|
} deriving (Eq,Show)
|
||||||
|
|
||||||
-- | some amount of money, time, stock, oranges, or whatever.
|
-- | some amount of money, shares, or anything else.
|
||||||
data Amount = Amount {
|
data Amount = Amount {
|
||||||
currency :: Currency,
|
currency :: Currency,
|
||||||
quantity :: Double,
|
quantity :: Double,
|
||||||
precision :: Int -- number of significant decimal places
|
precision :: Int -- ^ number of significant decimal places
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | AccountNames are strings like assets:cash:petty, from which we derive
|
-- | AccountNames are strings like assets:cash:petty, from which we derive
|
||||||
-- the chart of accounts
|
-- the chart of accounts
|
||||||
type AccountName = String
|
type AccountName = String
|
||||||
|
|
||||||
-- | a line item in a ledger entry
|
-- | a transaction line within a ledger entry.
|
||||||
data LedgerTransaction = LedgerTransaction {
|
data LedgerTransaction = LedgerTransaction {
|
||||||
taccount :: AccountName,
|
taccount :: AccountName,
|
||||||
tamount :: Amount,
|
tamount :: Amount,
|
||||||
tcomment :: String
|
tcomment :: String
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a ledger entry, containing two or more balanced transactions
|
-- | a ledger "modifier" entry. Currently ignored.
|
||||||
|
data ModifierEntry = ModifierEntry {
|
||||||
|
valueexpr :: String,
|
||||||
|
m_transactions :: [LedgerTransaction]
|
||||||
|
} deriving (Eq)
|
||||||
|
|
||||||
|
-- | a ledger "periodic" entry. Currently ignored.
|
||||||
|
data PeriodicEntry = PeriodicEntry {
|
||||||
|
periodexpr :: String,
|
||||||
|
p_transactions :: [LedgerTransaction]
|
||||||
|
} deriving (Eq)
|
||||||
|
|
||||||
|
-- | a regular ledger entry, containing two or more transactions which balance
|
||||||
data LedgerEntry = LedgerEntry {
|
data LedgerEntry = LedgerEntry {
|
||||||
edate :: Date,
|
edate :: Date,
|
||||||
estatus :: Bool,
|
estatus :: Bool,
|
||||||
@ -44,19 +59,16 @@ data LedgerEntry = LedgerEntry {
|
|||||||
epreceding_comment_lines :: String
|
epreceding_comment_lines :: String
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | an automated ledger entry
|
-- | a parsed ledger file. We call it raw to distinguish from the cached
|
||||||
data ModifierEntry = ModifierEntry {
|
-- version below.
|
||||||
valueexpr :: String,
|
data RawLedger = RawLedger {
|
||||||
m_transactions :: [LedgerTransaction]
|
modifier_entries :: [ModifierEntry],
|
||||||
|
periodic_entries :: [PeriodicEntry],
|
||||||
|
entries :: [LedgerEntry],
|
||||||
|
final_comment_lines :: String
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a periodic ledger entry
|
-- | a timelog entry in a timelog file (generated by timeclock.el)
|
||||||
data PeriodicEntry = PeriodicEntry {
|
|
||||||
periodexpr :: String,
|
|
||||||
p_transactions :: [LedgerTransaction]
|
|
||||||
} deriving (Eq)
|
|
||||||
|
|
||||||
-- | a timelog entry (we also parse timeclock.el timelogs)
|
|
||||||
data TimeLogEntry = TimeLogEntry {
|
data TimeLogEntry = TimeLogEntry {
|
||||||
tlcode :: Char,
|
tlcode :: Char,
|
||||||
tldatetime :: DateTime,
|
tldatetime :: DateTime,
|
||||||
@ -68,16 +80,9 @@ data TimeLog = TimeLog {
|
|||||||
timelog_entries :: [TimeLogEntry]
|
timelog_entries :: [TimeLogEntry]
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a parsed ledger file
|
-- | optimisations: these types provide some caching and are easier to work with.
|
||||||
data RawLedger = RawLedger {
|
-- A Transaction is a LedgerTransaction with some of its parent
|
||||||
modifier_entries :: [ModifierEntry],
|
-- LedgerEntry's data attached.
|
||||||
periodic_entries :: [PeriodicEntry],
|
|
||||||
entries :: [LedgerEntry],
|
|
||||||
final_comment_lines :: String
|
|
||||||
} deriving (Eq)
|
|
||||||
|
|
||||||
-- | we flatten LedgerEntries and LedgerTransactions into Transactions,
|
|
||||||
-- which are simpler to query at the cost of some data duplication
|
|
||||||
data Transaction = Transaction {
|
data Transaction = Transaction {
|
||||||
entryno :: Int,
|
entryno :: Int,
|
||||||
date :: Date,
|
date :: Date,
|
||||||
@ -86,14 +91,16 @@ data Transaction = Transaction {
|
|||||||
amount :: Amount
|
amount :: Amount
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | cached information for a particular account
|
-- | an Account stores an account name, all transactions in the account
|
||||||
|
-- (excluding subaccounts), and the total balance (including subaccounts).
|
||||||
data Account = Account {
|
data Account = Account {
|
||||||
aname :: AccountName, -- ^ the account name
|
aname :: AccountName,
|
||||||
atransactions :: [Transaction], -- ^ the transactions, excluding sub-accounts
|
atransactions :: [Transaction],
|
||||||
abalance :: Amount -- ^ the total balance, including sub-accounts
|
abalance :: Amount
|
||||||
}
|
}
|
||||||
|
|
||||||
-- | a ledger with account information cached for faster queries
|
-- | a raw ledger plus its tree of account names, a map from account names
|
||||||
|
-- to Accounts, and the preferred precision.
|
||||||
data Ledger = Ledger {
|
data Ledger = Ledger {
|
||||||
rawledger :: RawLedger,
|
rawledger :: RawLedger,
|
||||||
accountnametree :: Tree AccountName,
|
accountnametree :: Tree AccountName,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user