diff --git a/conservancy_beancount/reports/balance_sheet.py b/conservancy_beancount/reports/balance_sheet.py index 1ca21db74336f986605e1571039c65cdd8fabea8..a6ef0f00155242d9e0e1f296a85597477c000e9f 100644 --- a/conservancy_beancount/reports/balance_sheet.py +++ b/conservancy_beancount/reports/balance_sheet.py @@ -87,6 +87,12 @@ class BalanceKey(NamedTuple): class Balances: + ACCOUNT_REWRITES: Mapping[str, data.Account] = { + # Normalize the chart of accounts from prior FYs to the current one. + 'Expenses:CurrencyConversion': data.Account('Income:CurrencyConversion'), + 'Income:Donations:Released': data.Account('Equity:Funds:Restricted'), + } + def __init__(self, postings: Iterable[data.Posting], start_date: datetime.date, @@ -123,14 +129,11 @@ class Balances: period = Period.PRIOR else: period = Period.OPENING - if post.account == 'Expenses:CurrencyConversion': - account = data.Account('Income:CurrencyConversion') - else: - account = post.account if post.meta.get(fund_key) == unrestricted_fund_value: fund = Fund.UNRESTRICTED else: fund = Fund.RESTRICTED + account = self.ACCOUNT_REWRITES.get(post.account, post.account) try: classification_s = account.meta['classification'] if isinstance(classification_s, str): @@ -216,7 +219,6 @@ class Balances: class Report(core.BaseODS[Sequence[None], None]): C_CASH = 'Cash' - C_SATISFIED = 'Satisfaction of program restrictions' NO_BALANCE = core.Balance() SPACE = ' ' * 4 @@ -425,23 +427,21 @@ class Report(core.BaseODS[Sequence[None], None]): self.add_row(self.string_cell("Support and Revenue", stylename=self.style_bold)) self.add_row() - income_totals = self.write_classifications_by_account( - 'Income', bal_kwargs, (self.C_SATISFIED,), - ) + income_totals = self.write_classifications_by_account('Income', bal_kwargs) self.write_totals_row("", income_totals, stylename=self.style_subtotline) self.add_row() self.add_row( self.string_cell("Net Assets released from restrictions:"), ) released = self.balances.total( - account='Expenses', period=Period.PERIOD, fund=Fund.RESTRICTED, - ) - self.balances.total( - classification=self.C_SATISFIED, period=Period.PERIOD, fund=Fund.UNRESTRICTED, + account=('Expenses', 'Equity'), + period=Period.PERIOD, + fund=Fund.RESTRICTED, ) other_totals = [core.MutableBalance() for _ in bal_kwargs] other_totals[0] += released other_totals[1] -= released - self.write_totals_row(self.C_SATISFIED, other_totals) + self.write_totals_row("Satisfaction of program restrictions", other_totals) self.write_totals_row( "Total Support and Revenue", income_totals, other_totals, diff --git a/setup.py b/setup.py index 28e2a7448b71e50bc4c978ad17354718d64614e4..bab6ee30e78f06d6b5007efb7324fee444907fd4 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ from setuptools import setup setup( name='conservancy_beancount', description="Plugin, library, and reports for reading Conservancy's books", - version='1.8.5', + version='1.8.6', author='Software Freedom Conservancy', author_email='info@sfconservancy.org', license='GNU AGPLv3+',