fix: Correctly infer Cash accounts using accountNameInferType.

This commit is contained in:
Stephen Morgan 2022-02-01 16:04:03 +11:00 committed by Simon Michael
parent 4aa06d7920
commit e17cd1540d

View File

@ -99,16 +99,16 @@ revenueAccountRegex = toRegexCI' "^(income|revenue)s?(:|$)"
expenseAccountRegex = toRegexCI' "^expenses?(:|$)" expenseAccountRegex = toRegexCI' "^expenses?(:|$)"
-- | Try to guess an account's type from its name, -- | Try to guess an account's type from its name,
-- matching common english top-level account names. -- matching common English top-level account names.
accountNameInferType :: AccountName -> Maybe AccountType accountNameInferType :: AccountName -> Maybe AccountType
accountNameInferType a accountNameInferType a
| regexMatchText cashAccountRegex a = Just Cash | a == "asset" || a == "assets" = Just Asset
| regexMatchText assetAccountRegex a = Just Asset | regexMatchText assetAccountRegex a = Just $ if regexMatchText cashAccountRegex a then Asset else Cash
| regexMatchText liabilityAccountRegex a = Just Liability | regexMatchText liabilityAccountRegex a = Just Liability
| regexMatchText equityAccountRegex a = Just Equity | regexMatchText equityAccountRegex a = Just Equity
| regexMatchText revenueAccountRegex a = Just Revenue | regexMatchText revenueAccountRegex a = Just Revenue
| regexMatchText expenseAccountRegex a = Just Expense | regexMatchText expenseAccountRegex a = Just Expense
| otherwise = Nothing | otherwise = Nothing
accountNameLevel :: AccountName -> Int accountNameLevel :: AccountName -> Int
accountNameLevel "" = 0 accountNameLevel "" = 0
@ -283,5 +283,15 @@ tests_AccountName = testGroup "AccountName" [
"assets:bank" `isSubAccountNameOf` "assets" @?= True "assets:bank" `isSubAccountNameOf` "assets" @?= True
"assets:bank:checking" `isSubAccountNameOf` "assets" @?= False "assets:bank:checking" `isSubAccountNameOf` "assets" @?= False
"assets:bank" `isSubAccountNameOf` "my assets" @?= False "assets:bank" `isSubAccountNameOf` "my assets" @?= False
,testCase "accountNameInferType" $ do
accountNameInferType "assets" @?= Just Asset
accountNameInferType "assets:cash" @?= Just Cash
accountNameInferType "assets:A/R" @?= Just Asset
accountNameInferType "liabilities" @?= Just Liability
accountNameInferType "equity" @?= Just Equity
accountNameInferType "expenses" @?= Just Expense
accountNameInferType "revenues" @?= Just Revenue
accountNameInferType "revenue" @?= Just Revenue
accountNameInferType "income" @?= Just Revenue
] ]