!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 | ||||
|  | ||||
| @ -472,35 +472,21 @@ journalAssetAccountQuery 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