!imp: type: Change the default account inference for Cash accounts to only match
^assets?(:.+)?:(cash|bank|che(ck|que?)(ing)?|savings?|current)(:|$) This should have no effect outside the cash report. The rule for auto-detecting "Cash" (liquid assets) from account names has changed in this release - see [Account types]. This is to simplify how account types are detected and configured. If you use the cashflow report without explicitly declaring accounts as Cash, you might notice a change, and might need to add explicit account type: tags.
This commit is contained in:
		
							parent
							
								
									2e4cfccf1b
								
							
						
					
					
						commit
						31fdcdb8ef
					
				@ -96,7 +96,7 @@ accountSummarisedName a
 | 
			
		||||
-- | Regular expressions matching common English top-level account names,
 | 
			
		||||
-- used as a fallback when account types are not declared.
 | 
			
		||||
assetAccountRegex      = toRegexCI' "^assets?(:|$)"
 | 
			
		||||
cashAccountRegex       = toRegexCI' "(investment|receivable|:A/R|:fixed)"
 | 
			
		||||
cashAccountRegex       = toRegexCI' "^assets?(:.+)?:(cash|bank|che(ck|que?)(ing)?|savings?|current)(:|$)"
 | 
			
		||||
liabilityAccountRegex  = toRegexCI' "^(debts?|liabilit(y|ies))(:|$)"
 | 
			
		||||
equityAccountRegex     = toRegexCI' "^equity(:|$)"
 | 
			
		||||
conversionAccountRegex = toRegexCI' "^equity:(trad(e|ing)|conversion)s?(:|$)"
 | 
			
		||||
@ -107,8 +107,8 @@ expenseAccountRegex    = toRegexCI' "^expenses?(:|$)"
 | 
			
		||||
-- matching common English top-level account names.
 | 
			
		||||
accountNameInferType :: AccountName -> Maybe AccountType
 | 
			
		||||
accountNameInferType a
 | 
			
		||||
  | a == "asset" || a == "assets"           = Just Asset
 | 
			
		||||
  | regexMatchText assetAccountRegex      a = Just $ if regexMatchText cashAccountRegex a then Asset else Cash
 | 
			
		||||
  | regexMatchText cashAccountRegex       a = Just Cash
 | 
			
		||||
  | regexMatchText assetAccountRegex      a = Just Asset
 | 
			
		||||
  | regexMatchText liabilityAccountRegex  a = Just Liability
 | 
			
		||||
  | regexMatchText conversionAccountRegex a = Just Conversion
 | 
			
		||||
  | regexMatchText equityAccountRegex     a = Just Equity
 | 
			
		||||
 | 
			
		||||
@ -466,41 +466,27 @@ journalAccountTypeQuery atypes fallbackregex Journal{jdeclaredaccounttypes} =
 | 
			
		||||
-- or otherwise for accounts with names matched by the case-insensitive 
 | 
			
		||||
-- regular expression @^assets?(:|$)@.
 | 
			
		||||
journalAssetAccountQuery :: Journal -> Query
 | 
			
		||||
journalAssetAccountQuery j = 
 | 
			
		||||
journalAssetAccountQuery j =
 | 
			
		||||
  Or [
 | 
			
		||||
     journalAccountTypeQuery [Asset] assetAccountRegex j
 | 
			
		||||
    ,journalCashAccountOnlyQuery j
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
-- | A query for accounts in this journal which have been
 | 
			
		||||
-- declared as Asset (and not Cash) by account directives, 
 | 
			
		||||
-- or otherwise for accounts with names matched by the case-insensitive 
 | 
			
		||||
-- regular expression @^assets?(:|$)@.
 | 
			
		||||
journalAssetNonCashAccountQuery :: Journal -> Query
 | 
			
		||||
journalAssetNonCashAccountQuery = journalAccountTypeQuery [Asset] assetAccountRegex
 | 
			
		||||
 | 
			
		||||
-- | A query for Cash (liquid asset) accounts in this journal, ie accounts
 | 
			
		||||
-- declared as Cash by account directives, or otherwise Asset accounts whose 
 | 
			
		||||
-- names do not include the case-insensitive regular expression 
 | 
			
		||||
-- @(investment|receivable|:A/R|:fixed)@.
 | 
			
		||||
journalCashAccountQuery  :: Journal -> Query
 | 
			
		||||
journalCashAccountQuery j =
 | 
			
		||||
  case M.lookup Cash (jdeclaredaccounttypes j) of
 | 
			
		||||
    Just _  -> journalCashAccountOnlyQuery j
 | 
			
		||||
    Nothing ->
 | 
			
		||||
      -- no Cash accounts are declared; query for Asset accounts and exclude some of them
 | 
			
		||||
      And [ journalAssetNonCashAccountQuery j, Not $ Acct cashAccountRegex ]
 | 
			
		||||
-- declared as Cash by account directives, or otherwise accounts whose
 | 
			
		||||
-- names match the case-insensitive regular expression
 | 
			
		||||
-- @(^assets:(.+:)?(cash|bank)(:|$)@.
 | 
			
		||||
journalCashAccountQuery :: Journal -> Query
 | 
			
		||||
journalCashAccountQuery = journalAccountTypeQuery [Cash] cashAccountRegex
 | 
			
		||||
 | 
			
		||||
-- | A query for accounts in this journal specifically declared as Cash by 
 | 
			
		||||
-- account directives, or otherwise the None query.
 | 
			
		||||
journalCashAccountOnlyQuery  :: Journal -> Query
 | 
			
		||||
journalCashAccountOnlyQuery j = 
 | 
			
		||||
  case M.lookup Cash (jdeclaredaccounttypes j) of
 | 
			
		||||
    Just _  -> 
 | 
			
		||||
      -- Cash accounts are declared; get a query for them (the fallback regex won't be used)
 | 
			
		||||
      journalAccountTypeQuery [Cash] notused j
 | 
			
		||||
        where notused = error' "journalCashAccountOnlyQuery: this should not have happened!"  -- PARTIAL:
 | 
			
		||||
    Nothing -> None
 | 
			
		||||
journalCashAccountOnlyQuery :: Journal -> Query
 | 
			
		||||
journalCashAccountOnlyQuery j
 | 
			
		||||
  -- Cash accounts are declared; get a query for them (the fallback regex won't be used)
 | 
			
		||||
  | Cash `M.member` jdeclaredaccounttypes j = journalAccountTypeQuery [Cash] notused j
 | 
			
		||||
  | otherwise = None
 | 
			
		||||
  where notused = error' "journalCashAccountOnlyQuery: this should not have happened!"  -- PARTIAL:
 | 
			
		||||
 | 
			
		||||
-- | A query for accounts in this journal which have been
 | 
			
		||||
-- declared as Liability by account directives, or otherwise for
 | 
			
		||||
@ -1319,7 +1305,7 @@ tests_Journal = testGroup "Journal" [
 | 
			
		||||
      namesfrom qfunc = journalAccountNamesMatching (qfunc j) j
 | 
			
		||||
    in [testCase "assets"      $ assertEqual "" ["assets","assets:bank","assets:bank:checking","assets:bank:saving","assets:cash"]
 | 
			
		||||
         (namesfrom journalAssetAccountQuery)
 | 
			
		||||
       ,testCase "cash"        $ assertEqual "" ["assets","assets:bank","assets:bank:checking","assets:bank:saving","assets:cash"]
 | 
			
		||||
       ,testCase "cash"        $ assertEqual "" ["assets:bank","assets:bank:checking","assets:bank:saving","assets:cash"]
 | 
			
		||||
         (namesfrom journalCashAccountQuery)
 | 
			
		||||
       ,testCase "liabilities" $ assertEqual "" ["liabilities","liabilities:debts"]
 | 
			
		||||
         (namesfrom journalLiabilityAccountQuery)
 | 
			
		||||
 | 
			
		||||
@ -1,150 +1,86 @@
 | 
			
		||||
# 1.
 | 
			
		||||
hledger -f - cashflow
 | 
			
		||||
<<<
 | 
			
		||||
<
 | 
			
		||||
2016/1/1
 | 
			
		||||
  assets  1
 | 
			
		||||
  assets:cash  1
 | 
			
		||||
  b
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow
 | 
			
		||||
Cashflow Statement 2016-01-01
 | 
			
		||||
 | 
			
		||||
            || 2016-01-01 
 | 
			
		||||
============++============
 | 
			
		||||
 Cash flows ||            
 | 
			
		||||
------------++------------
 | 
			
		||||
 assets     ||          1 
 | 
			
		||||
------------++------------
 | 
			
		||||
            ||          1 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
             || 2016-01-01 
 | 
			
		||||
=============++============
 | 
			
		||||
 Cash flows  ||            
 | 
			
		||||
-------------++------------
 | 
			
		||||
 assets:cash ||          1 
 | 
			
		||||
-------------++------------
 | 
			
		||||
             ||          1 
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
<
 | 
			
		||||
2015/10/10 Client A | Invoice #1
 | 
			
		||||
    assets:receivables      $10,000.00
 | 
			
		||||
    revenue:clients:A      -$10,000.00
 | 
			
		||||
 | 
			
		||||
2015/11/02 Deposit | Invoice #1
 | 
			
		||||
    assets:bank:checking    $10,000.00
 | 
			
		||||
    assets:receivables     -$10,000.00
 | 
			
		||||
 | 
			
		||||
2016/02/01 Client B | Invoice #2
 | 
			
		||||
    assets:receivables          $10.00
 | 
			
		||||
    revenue:clients:B          -$10.00
 | 
			
		||||
 | 
			
		||||
2016/02/15 ACME | Hosting Costs
 | 
			
		||||
    expense:hosting             $50.00
 | 
			
		||||
    assets:bank:checking       -$50.00
 | 
			
		||||
 | 
			
		||||
2016/03/01 Deposit | Invoice #2
 | 
			
		||||
    assets:bank:checking        $10.00
 | 
			
		||||
    assets:receivables         -$10.00
 | 
			
		||||
 | 
			
		||||
# 2. Period reporting works for a specific year
 | 
			
		||||
hledger -f - cashflow -b 2016 -e 2017
 | 
			
		||||
<<<
 | 
			
		||||
2015/10/10 Client A | Invoice #1
 | 
			
		||||
    assets:receivables      $10,000.00
 | 
			
		||||
    revenue:clients:A      -$10,000.00
 | 
			
		||||
 | 
			
		||||
2015/11/02 Deposit | Invoice #1
 | 
			
		||||
    assets:checking         $10,000.00
 | 
			
		||||
    assets:receivables     -$10,000.00
 | 
			
		||||
 | 
			
		||||
2016/02/01 Client B | Invoice #2
 | 
			
		||||
    assets:receivables          $10.00
 | 
			
		||||
    revenue:clients:B          -$10.00
 | 
			
		||||
 | 
			
		||||
2016/02/15 ACME | Hosting Costs
 | 
			
		||||
    expense:hosting             $50.00
 | 
			
		||||
    assets:checking            -$50.00
 | 
			
		||||
 | 
			
		||||
2016/03/01 Deposit | Invoice #2
 | 
			
		||||
    assets:checking             $10.00
 | 
			
		||||
    assets:receivables         -$10.00
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow -b 2016 -e 2017
 | 
			
		||||
Cashflow Statement 2016
 | 
			
		||||
 | 
			
		||||
                 ||    2016 
 | 
			
		||||
=================++=========
 | 
			
		||||
 Cash flows      ||         
 | 
			
		||||
-----------------++---------
 | 
			
		||||
 assets:checking || $-40.00 
 | 
			
		||||
-----------------++---------
 | 
			
		||||
                 || $-40.00 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
                      ||    2016 
 | 
			
		||||
======================++=========
 | 
			
		||||
 Cash flows           ||         
 | 
			
		||||
----------------------++---------
 | 
			
		||||
 assets:bank:checking || $-40.00 
 | 
			
		||||
----------------------++---------
 | 
			
		||||
                      || $-40.00 
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 3. Period reporting works for two years
 | 
			
		||||
hledger -f - cashflow -b 2015 -e 2017
 | 
			
		||||
<<<
 | 
			
		||||
2015/10/10 Client A | Invoice #1
 | 
			
		||||
    assets:receivables      $10,000.00
 | 
			
		||||
    revenue:clients:A      -$10,000.00
 | 
			
		||||
 | 
			
		||||
2015/11/02 Deposit | Invoice #1
 | 
			
		||||
    assets:checking         $10,000.00
 | 
			
		||||
    assets:receivables     -$10,000.00
 | 
			
		||||
 | 
			
		||||
2016/02/01 Client B | Invoice #2
 | 
			
		||||
    assets:receivables          $10.00
 | 
			
		||||
    revenue:clients:B          -$10.00
 | 
			
		||||
 | 
			
		||||
2016/02/15 ACME | Hosting Costs
 | 
			
		||||
    expense:hosting             $50.00
 | 
			
		||||
    assets:checking            -$50.00
 | 
			
		||||
 | 
			
		||||
2016/03/01 Deposit | Invoice #2
 | 
			
		||||
    assets:checking             $10.00
 | 
			
		||||
    assets:receivables         -$10.00
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow -b 2015 -e 2017
 | 
			
		||||
Cashflow Statement 2015-01-01..2016-12-31
 | 
			
		||||
 | 
			
		||||
                 || 2015-01-01..2016-12-31 
 | 
			
		||||
=================++========================
 | 
			
		||||
 Cash flows      ||                        
 | 
			
		||||
-----------------++------------------------
 | 
			
		||||
 assets:checking ||              $9,960.00 
 | 
			
		||||
-----------------++------------------------
 | 
			
		||||
                 ||              $9,960.00 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
                      || 2015-01-01..2016-12-31 
 | 
			
		||||
======================++========================
 | 
			
		||||
 Cash flows           ||                        
 | 
			
		||||
----------------------++------------------------
 | 
			
		||||
 assets:bank:checking ||              $9,960.00 
 | 
			
		||||
----------------------++------------------------
 | 
			
		||||
                      ||              $9,960.00 
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 4. Period reporting works for one month
 | 
			
		||||
hledger -f - cashflow -b 2015/11 -e 2015/12
 | 
			
		||||
<<<
 | 
			
		||||
2015/10/10 Client A | Invoice #1
 | 
			
		||||
    assets:receivables      $10,000.00
 | 
			
		||||
    revenue:clients:A      -$10,000.00
 | 
			
		||||
 | 
			
		||||
2015/11/02 Deposit | Invoice #1
 | 
			
		||||
    assets:checking         $10,000.00
 | 
			
		||||
    assets:receivables     -$10,000.00
 | 
			
		||||
 | 
			
		||||
2016/02/01 Client B | Invoice #2
 | 
			
		||||
    assets:receivables          $10.00
 | 
			
		||||
    revenue:clients:B          -$10.00
 | 
			
		||||
 | 
			
		||||
2016/02/15 ACME | Hosting Costs
 | 
			
		||||
    expense:hosting             $50.00
 | 
			
		||||
    assets:checking            -$50.00
 | 
			
		||||
 | 
			
		||||
2016/03/01 Deposit | Invoice #2
 | 
			
		||||
    assets:checking             $10.00
 | 
			
		||||
    assets:receivables         -$10.00
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow -b 2015/11 -e 2015/12
 | 
			
		||||
Cashflow Statement 2015-11
 | 
			
		||||
 | 
			
		||||
                 ||        Nov 
 | 
			
		||||
=================++============
 | 
			
		||||
 Cash flows      ||            
 | 
			
		||||
-----------------++------------
 | 
			
		||||
 assets:checking || $10,000.00 
 | 
			
		||||
-----------------++------------
 | 
			
		||||
                 || $10,000.00 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
                      ||        Nov 
 | 
			
		||||
======================++============
 | 
			
		||||
 Cash flows           ||            
 | 
			
		||||
----------------------++------------
 | 
			
		||||
 assets:bank:checking || $10,000.00 
 | 
			
		||||
----------------------++------------
 | 
			
		||||
                      || $10,000.00 
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 5. Period reporting works for one month in another year
 | 
			
		||||
hledger -f - cashflow -b 2016/10 -e 2016/11
 | 
			
		||||
<<<
 | 
			
		||||
2015/10/10 Client A | Invoice #1
 | 
			
		||||
    assets:receivables      $10,000.00
 | 
			
		||||
    revenue:clients:A      -$10,000.00
 | 
			
		||||
 | 
			
		||||
2015/11/02 Deposit | Invoice #1
 | 
			
		||||
    assets:checking         $10,000.00
 | 
			
		||||
    assets:receivables     -$10,000.00
 | 
			
		||||
 | 
			
		||||
2016/02/01 Client B | Invoice #2
 | 
			
		||||
    assets:receivables          $10.00
 | 
			
		||||
    revenue:clients:B          -$10.00
 | 
			
		||||
 | 
			
		||||
2016/02/15 ACME | Hosting Costs
 | 
			
		||||
    expense:hosting             $50.00
 | 
			
		||||
    assets:checking            -$50.00
 | 
			
		||||
 | 
			
		||||
2016/03/01 Deposit | Invoice #2
 | 
			
		||||
    assets:checking             $10.00
 | 
			
		||||
    assets:receivables         -$10.00
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow -b 2016/10 -e 2016/11
 | 
			
		||||
Cashflow Statement 2016-10
 | 
			
		||||
 | 
			
		||||
            || Oct 
 | 
			
		||||
@ -153,12 +89,11 @@ Cashflow Statement 2016-10
 | 
			
		||||
------------++-----
 | 
			
		||||
------------++-----
 | 
			
		||||
            ||     
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 6. Multicolumn test
 | 
			
		||||
hledger -f sample.journal cashflow -p 'monthly in 2008'
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f sample.journal cashflow -p 'monthly in 2008'
 | 
			
		||||
Cashflow Statement 2008
 | 
			
		||||
 | 
			
		||||
                      || Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec 
 | 
			
		||||
@ -170,11 +105,10 @@ Cashflow Statement 2008
 | 
			
		||||
 assets:cash          ||   0    0    0    0    0  $-2    0    0    0    0    0    0 
 | 
			
		||||
----------------------++------------------------------------------------------------
 | 
			
		||||
                      ||  $1    0    0    0    0  $-1    0    0    0    0    0  $-1 
 | 
			
		||||
>>>= 0
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 7. Multicolumn test (historical)
 | 
			
		||||
hledger -f sample.journal cashflow -p 'monthly in 2008' -A --historical
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f sample.journal cashflow -p 'monthly in 2008' -A --historical
 | 
			
		||||
Cashflow Statement 2008-01-31..2008-12-31 (Historical Ending Balances)
 | 
			
		||||
 | 
			
		||||
                      || 2008-01-31  2008-02-29  2008-03-31  2008-04-30  2008-05-31  2008-06-30  2008-07-31  2008-08-31  2008-09-30  2008-10-31  2008-11-30  2008-12-31  Average 
 | 
			
		||||
@ -186,11 +120,10 @@ Cashflow Statement 2008-01-31..2008-12-31 (Historical Ending Balances)
 | 
			
		||||
 assets:cash          ||          0           0           0           0           0         $-2         $-2         $-2         $-2         $-2         $-2         $-2      $-1 
 | 
			
		||||
----------------------++---------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
                      ||         $1          $1          $1          $1          $1           0           0           0           0           0           0         $-1        0 
 | 
			
		||||
>>>= 0
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 8. without -N/--no-total
 | 
			
		||||
hledger -f sample.journal cf 
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f sample.journal cf 
 | 
			
		||||
Cashflow Statement 2008
 | 
			
		||||
 | 
			
		||||
                    || 2008 
 | 
			
		||||
@ -201,12 +134,11 @@ Cashflow Statement 2008
 | 
			
		||||
 assets:cash        ||  $-2 
 | 
			
		||||
--------------------++------
 | 
			
		||||
                    ||  $-1 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 9. with -N
 | 
			
		||||
hledger -f sample.journal cf -N
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f sample.journal cf -N
 | 
			
		||||
Cashflow Statement 2008
 | 
			
		||||
 | 
			
		||||
                    || 2008 
 | 
			
		||||
@ -215,28 +147,27 @@ Cashflow Statement 2008
 | 
			
		||||
--------------------++------
 | 
			
		||||
 assets:bank:saving ||   $1 
 | 
			
		||||
 assets:cash        ||  $-2 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
# 10. exclude fixed assets from cashflow
 | 
			
		||||
hledger -f - cashflow
 | 
			
		||||
<<<
 | 
			
		||||
<
 | 
			
		||||
2016/1/1
 | 
			
		||||
  assets  1
 | 
			
		||||
  assets:cash  1
 | 
			
		||||
  b
 | 
			
		||||
 | 
			
		||||
2016/1/1
 | 
			
		||||
  assets:fixed assets:equipment  1
 | 
			
		||||
  b
 | 
			
		||||
>>>
 | 
			
		||||
$ hledger -f - cashflow
 | 
			
		||||
Cashflow Statement 2016-01-01
 | 
			
		||||
 | 
			
		||||
            || 2016-01-01 
 | 
			
		||||
============++============
 | 
			
		||||
 Cash flows ||            
 | 
			
		||||
------------++------------
 | 
			
		||||
 assets     ||          1 
 | 
			
		||||
------------++------------
 | 
			
		||||
            ||          1 
 | 
			
		||||
>>>2
 | 
			
		||||
>>>= 0
 | 
			
		||||
             || 2016-01-01 
 | 
			
		||||
=============++============
 | 
			
		||||
 Cash flows  ||            
 | 
			
		||||
-------------++------------
 | 
			
		||||
 assets:cash ||          1 
 | 
			
		||||
-------------++------------
 | 
			
		||||
             ||          1 
 | 
			
		||||
>2
 | 
			
		||||
>= 0
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user