expense_type: Revamp expense-allocation metadata.

* Change the name for symmetry with income-type.
* Standardize on "management" value because that's what it's called in the 990.
This commit is contained in:
Brett Smith 2020-07-28 11:46:00 -04:00
parent a27d68beab
commit 123508ef88
5 changed files with 24 additions and 20 deletions

View file

@ -55,7 +55,7 @@ class HookRegistry:
INCLUDED_HOOKS: Dict[str, Optional[List[str]]] = {
'.meta_approval': None,
'.meta_entity': None,
'.meta_expense_allocation': None,
'.meta_expense_type': None,
'.meta_income_type': None,
'.meta_invoice': None,
# Enforcing this hook would be premature as of May 2020. --brett

View file

@ -1,4 +1,4 @@
"""meta_expense_allocation - Validate expense-allocation metadata"""
"""meta_expense_type - Validate expense-type metadata"""
# Copyright © 2020 Brett Smith
#
# This program is free software: you can redistribute it and/or modify
@ -21,17 +21,19 @@ from ..beancount_types import (
Transaction,
)
class MetaExpenseAllocation(core._NormalizePostingMetadataHook):
VALUES_ENUM = core.MetadataEnum('expense-allocation', {
'administration',
class MetaExpenseType(core._NormalizePostingMetadataHook):
VALUES_ENUM = core.MetadataEnum('expense-type', {
'fundraising',
'management',
'program',
}, {
'admin': 'administration',
'admin': 'management',
'administration': 'management',
'mgmt': 'management',
})
DEFAULT_VALUES = {
'Expenses:Services:Accounting': VALUES_ENUM['administration'],
'Expenses:Services:Administration': VALUES_ENUM['administration'],
'Expenses:Services:Accounting': VALUES_ENUM['management'],
'Expenses:Services:Administration': VALUES_ENUM['management'],
'Expenses:Services:Fundraising': VALUES_ENUM['fundraising'],
}

View file

@ -100,7 +100,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
]
ACCOUNT_COLUMNS: Dict[str, Sequence[str]] = collections.OrderedDict([
('Income', ['project', 'rt-id', 'receipt', 'income-type', 'memo']),
('Expenses', ['project', 'rt-id', 'receipt', 'approval', 'expense-allocation']),
('Expenses', ['project', 'rt-id', 'receipt', 'approval', 'expense-type']),
('Equity', ['rt-id']),
('Assets:Receivable', ['project', 'rt-id', 'invoice', 'approval', 'contract', 'purchase-order']),
('Liabilities:Payable', ['project', 'rt-id', 'invoice', 'approval', 'contract', 'purchase-order']),

View file

@ -5,7 +5,7 @@ from setuptools import setup
setup(
name='conservancy_beancount',
description="Plugin, library, and reports for reading Conservancy's books",
version='1.6.0',
version='1.6.1',
author='Software Freedom Conservancy',
author_email='info@sfconservancy.org',
license='GNU AGPLv3+',

View file

@ -1,4 +1,4 @@
"""Test handling of expense-allocation metadata"""
"""Test handling of expense-type metadata"""
# Copyright © 2020 Brett Smith
#
# This program is free software: you can redistribute it and/or modify
@ -18,29 +18,31 @@ import pytest
from . import testutil
from conservancy_beancount.plugin import meta_expense_allocation
from conservancy_beancount.plugin import meta_expense_type
VALID_VALUES = {
'program': 'program',
'administration': 'administration',
'fundraising': 'fundraising',
'admin': 'administration',
'management': 'management',
'admin': 'management',
'administration': 'management',
'mgmt': 'management',
}
INVALID_VALUES = {
'invalid',
'porgram',
'adimn',
'mangement',
'fundrasing',
'',
*testutil.NON_STRING_METADATA_VALUES,
}
TEST_KEY = 'expense-allocation'
TEST_KEY = 'expense-type'
@pytest.fixture(scope='module')
def hook():
config = testutil.TestConfig()
return meta_expense_allocation.MetaExpenseAllocation(config)
return meta_expense_type.MetaExpenseType(config)
@pytest.mark.parametrize('src_value,set_value', VALID_VALUES.items())
def test_valid_values_on_postings(hook, src_value, set_value):
@ -101,8 +103,8 @@ def test_non_expense_accounts_skipped(hook, account):
testutil.check_post_meta(txn, None, meta)
@pytest.mark.parametrize('account,set_value', [
('Expenses:Services:Accounting', 'administration'),
('Expenses:Services:Administration', 'administration'),
('Expenses:Services:Accounting', 'management'),
('Expenses:Services:Administration', 'management'),
('Expenses:Services:Advocacy', 'program'),
('Expenses:Services:Development', 'program'),
('Expenses:Services:Fundraising', 'fundraising'),