basic understanding of balance sheet vs. profit & loss accounts
This commit is contained in:
parent
51977f32e9
commit
a7ef0ba8dd
@ -34,6 +34,9 @@ module Hledger.Data.Journal (
|
|||||||
journalFilePath,
|
journalFilePath,
|
||||||
journalFilePaths,
|
journalFilePaths,
|
||||||
journalPostings,
|
journalPostings,
|
||||||
|
-- * Standard account types
|
||||||
|
journalBalanceSheetAccountMatcher,
|
||||||
|
journalProfitAndLossAccountMatcher,
|
||||||
-- * Misc
|
-- * Misc
|
||||||
groupPostings,
|
groupPostings,
|
||||||
matchpats,
|
matchpats,
|
||||||
@ -62,7 +65,7 @@ import Hledger.Data.AccountName
|
|||||||
import Hledger.Data.Amount
|
import Hledger.Data.Amount
|
||||||
import Hledger.Data.Commodity (canonicaliseCommodities)
|
import Hledger.Data.Commodity (canonicaliseCommodities)
|
||||||
import Hledger.Data.Dates (nulldatespan)
|
import Hledger.Data.Dates (nulldatespan)
|
||||||
import Hledger.Data.Transaction (journalTransactionWithDate,balanceTransaction)
|
import Hledger.Data.Transaction (journalTransactionWithDate,balanceTransaction) -- nulltransaction,
|
||||||
import Hledger.Data.Posting
|
import Hledger.Data.Posting
|
||||||
import Hledger.Data.TimeLog
|
import Hledger.Data.TimeLog
|
||||||
import Hledger.Data.Query
|
import Hledger.Data.Query
|
||||||
@ -154,6 +157,24 @@ journalAccountNames = sort . expandAccountNames . journalAccountNamesUsed
|
|||||||
journalAccountNameTree :: Journal -> Tree AccountName
|
journalAccountNameTree :: Journal -> Tree AccountName
|
||||||
journalAccountNameTree = accountNameTreeFrom . journalAccountNames
|
journalAccountNameTree = accountNameTreeFrom . journalAccountNames
|
||||||
|
|
||||||
|
-- standard account types
|
||||||
|
|
||||||
|
balanceSheetAccountRegex, profitAndLossAccountRegex :: String
|
||||||
|
balanceSheetAccountRegex = "^(assets?|liabilit(y|ies)|equity)(:|$)"
|
||||||
|
profitAndLossAccountRegex = "^(income|expenses?|profits?|loss(es)?)(:|$)"
|
||||||
|
|
||||||
|
-- | A matcher for Asset, Liability & Equity accounts in this journal.
|
||||||
|
-- Cf <http://en.wikipedia.org/wiki/Chart_of_accounts#Balance_Sheet_Accounts>.
|
||||||
|
-- This is currently hard-coded to the case-insensitive regex @^(assets?|liabilit(y|ies)|equity)(:|$)@.
|
||||||
|
journalBalanceSheetAccountMatcher :: Journal -> Matcher
|
||||||
|
journalBalanceSheetAccountMatcher _ = MatchAcct balanceSheetAccountRegex
|
||||||
|
|
||||||
|
-- | A matcher for Profit & Loss accounts in this journal.
|
||||||
|
-- Cf <http://en.wikipedia.org/wiki/Chart_of_accounts#Profit_.26_Loss_accounts>.
|
||||||
|
-- This is currently hard-coded to the case-insensitive regex @^(income|expenses?|profits?|loss(es)?)(:|$)@.
|
||||||
|
journalProfitAndLossAccountMatcher :: Journal -> Matcher
|
||||||
|
journalProfitAndLossAccountMatcher _ = MatchAcct profitAndLossAccountRegex
|
||||||
|
|
||||||
-- Various kinds of filtering on journals. We do it differently depending
|
-- Various kinds of filtering on journals. We do it differently depending
|
||||||
-- on the command.
|
-- on the command.
|
||||||
|
|
||||||
@ -298,7 +319,9 @@ journalApplyAliases aliases j@Journal{jtxns=ts} = j{jtxns=map fixtransaction ts}
|
|||||||
fixtransaction t@Transaction{tpostings=ps} = t{tpostings=map fixposting ps}
|
fixtransaction t@Transaction{tpostings=ps} = t{tpostings=map fixposting ps}
|
||||||
fixposting p@Posting{paccount=a} = p{paccount=accountNameApplyAliases aliases a}
|
fixposting p@Posting{paccount=a} = p{paccount=accountNameApplyAliases aliases a}
|
||||||
|
|
||||||
-- | Do post-parse processing on a journal, to make it ready for use.
|
-- | Do post-parse processing on a journal to make it ready for use: check
|
||||||
|
-- all transactions balance, canonicalise amount formats, close any open
|
||||||
|
-- timelog entries and so on.
|
||||||
journalFinalise :: ClockTime -> LocalTime -> FilePath -> String -> JournalContext -> Journal -> Either String Journal
|
journalFinalise :: ClockTime -> LocalTime -> FilePath -> String -> JournalContext -> Journal -> Either String Journal
|
||||||
journalFinalise tclock tlocal path txt ctx j@Journal{files=fs} =
|
journalFinalise tclock tlocal path txt ctx j@Journal{files=fs} =
|
||||||
journalBalanceTransactions $
|
journalBalanceTransactions $
|
||||||
@ -397,6 +420,8 @@ journalDateSpan j
|
|||||||
where
|
where
|
||||||
ts = sortBy (comparing tdate) $ jtxns j
|
ts = sortBy (comparing tdate) $ jtxns j
|
||||||
|
|
||||||
|
-- Misc helpers
|
||||||
|
|
||||||
-- | Check if a set of hledger account/description filter patterns matches the
|
-- | Check if a set of hledger account/description filter patterns matches the
|
||||||
-- given account name or entry description. Patterns are case-insensitive
|
-- given account name or entry description. Patterns are case-insensitive
|
||||||
-- regular expressions. Prefixed with not:, they become anti-patterns.
|
-- regular expressions. Prefixed with not:, they become anti-patterns.
|
||||||
@ -466,6 +491,39 @@ postingsByAccount ps = m'
|
|||||||
-- traceAmountPrecision a = trace (show $ map (precision . commodity) $ amounts a) a
|
-- traceAmountPrecision a = trace (show $ map (precision . commodity) $ amounts a) a
|
||||||
-- tracePostingsCommodities ps = trace (show $ map ((map (precision . commodity) . amounts) . pamount) ps) ps
|
-- tracePostingsCommodities ps = trace (show $ map ((map (precision . commodity) . amounts) . pamount) ps) ps
|
||||||
|
|
||||||
|
-- tests
|
||||||
|
|
||||||
tests_Hledger_Data_Journal = TestList [
|
tests_Hledger_Data_Journal = TestList [
|
||||||
|
-- "query standard account types" ~:
|
||||||
|
-- do
|
||||||
|
-- let j = journal1
|
||||||
|
-- journalBalanceSheetAccountNames j `is` ["assets","assets:a","equity","equity:q","equity:q:qq","liabilities","liabilities:l"]
|
||||||
|
-- journalProfitAndLossAccountNames j `is` ["expenses","expenses:e","income","income:i"]
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
-- journal1 =
|
||||||
|
-- Journal
|
||||||
|
-- []
|
||||||
|
-- []
|
||||||
|
-- [
|
||||||
|
-- nulltransaction{
|
||||||
|
-- tpostings=[
|
||||||
|
-- nullposting{paccount="liabilities:l"}
|
||||||
|
-- ,nullposting{paccount="expenses:e"}
|
||||||
|
-- ]
|
||||||
|
-- }
|
||||||
|
-- ,nulltransaction{
|
||||||
|
-- tpostings=[
|
||||||
|
-- nullposting{paccount="income:i"}
|
||||||
|
-- ,nullposting{paccount="assets:a"}
|
||||||
|
-- ,nullposting{paccount="equity:q:qq"}
|
||||||
|
-- ]
|
||||||
|
-- }
|
||||||
|
-- ]
|
||||||
|
-- []
|
||||||
|
-- []
|
||||||
|
-- ""
|
||||||
|
-- nullctx
|
||||||
|
-- []
|
||||||
|
-- (TOD 0 0)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user