diff --git a/conservancy_beancount/data.py b/conservancy_beancount/data.py index f044fab4e1770b4dadbb9e35a152cca0504c943e..6475f83d0a683bce088926391485df47b6e0763b 100644 --- a/conservancy_beancount/data.py +++ b/conservancy_beancount/data.py @@ -35,6 +35,12 @@ from .beancount_types import ( class Account(str): SEP = bc_account.sep + def is_real_asset(self) -> bool: + return ( + self.is_under('Assets:') + and not self.is_under('Assets:PrepaidExpenses') + ) + def is_under(self, acct_s: str) -> bool: return self.startswith(acct_s) and ( acct_s.endswith(self.SEP) diff --git a/tests/test_data_account.py b/tests/test_data_account.py index a3a619dcf139cc056b42c89501c67f41e1342fa3..622c4996563cc2131f2600dfb2f370c7debd2a4c 100644 --- a/tests/test_data_account.py +++ b/tests/test_data_account.py @@ -30,3 +30,16 @@ from conservancy_beancount import data ]) def test_is_under(acct_name, under_arg, expected): assert data.Account(acct_name).is_under(under_arg) == expected + +@pytest.mark.parametrize('acct_name,expected', [ + ('Accrued:AccountsPayable', False), + ('Accrued:AccountsReceivable', False), + ('Assets:Cash', True), + ('Assets:Cash:EUR', True), + ('Assets:PrepaidExpenses', False), + ('Assets:Bank:Checking', True), + ('Expenses:General', False), + ('Income:Donations', False), +]) +def test_is_real_asset(acct_name, expected): + assert data.Account(acct_name).is_real_asset() == expected