{ "info": { "author": "David Stephens", "author_email": "dstephens99@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Financial and Insurance Industry", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Utilities" ], "description": "# beancount-plugins\n\nVarious user contributed plugins for [Beancount] (http://furius.ca/beancount/),\na double-entry bookkeeping computer language.\n\n## Installation\n\nInstall via pip\n\n```shell\n\n $ pip install beancount-plugins\n```\n\n## Plugins\n\n\n## Automatic Depreciation\n\nThis plugin looks at postings that have the 'depreciation' metadata, and\ngenerates new entries until the closing of the previous year to depreciate the\nvalue of the account on which the metadata was placed.\n\nCurrently, the following methods of depreciation are supported:\n\n WDV: Written Down Value\n CRA: Canadian Revenue Agency method (assets purchased in current year are allowed 50% of normal rate)\n\nExample:\n```\nplugin \"beancount-plugins.plugins.flexible_depreciation.depreciate\" \"{\n 'method': 'WDV',\n 'year_closing_month': 12, # Could be 3 for the fiscal year ending Mar 31.\n 'halfdepr': True, # Assets used less than 180 days will be depreciated at half the allowed rate that year\n 'account': 'Expenses:Depreciation', # Account to post depreciation entries to.\n '2010': 0.5, # Business only open for half year in 2010, adjust depreciation rate down.\n 'expense_subaccount': True, #If true, will use subaccount for depreciation expense using first word in Narration.\n #ie: Expenses:Depreciation:Printer\n 'asset_subaccount': True, #If true, will use asset subaccount for depreciation expense.\n #ie: Assets:Fixed:Comp:Depreciation.\n}\"\n\n2014-03-02 * \"\" | \"Printer Purchase\"\n Assets:Cash -100.00 INR\n Assets:Fixed:Comp 100.00 INR\n depreciation: \"Printer Depreciation @0.60\"\n```\n\nThe \"depreciation\" metadata has this format:\n\n```\n \"NARRATION STRING @RATE\"\n```\n\nThe narration string here will be used in the newly generated entries.\nRate should be a number, not percentage. Use \"0.60\" to mean \"60%\".\n\n\n## Zero Sum\n\nPlugin for accounts that should sum up to zero. Determines transactions\nthat when taken together, sum up to zero, and move them to a specified\naccount. The remaining entries are the 'unmatched' ones, that need attention\nfrom the user.\n\n#### Motivation:\n\nReal-world transfers frequently occur between accounts. For example, between a\nchecking account and an investment account. When double entry bookkeeping is\nused to track such transfers, we end up with two problems:\n\n a) when account statements are converted to double-entry format, the user\n has to manually match the transfers on account statements from the two\n institutions involved, and remove one of the entries since they are\n redundant.\n\n b) even when (a) is done, the transfer might take a day or more to\n complete: the two accounts involved would then reflect the transfer on\n different dates.\n\nSince the money is truly missing from all the physical accounts for the period\nof transfer, they can be accounted for as shown in this example:\n\n```\n2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount:Transfers\n\n2005-01-03 Transfer\n Assets:TB_Trading 20 USD\n ZeroSumAccount:Transfers\n```\nDoing so has a few advantages:\n\n a) on 2005-01-02, your assets are accurately represented:\n Bank_of_Ameriplus is short by $20, TB_Trading still doesn't have it, and\n the ZeroSumAccount:Transfers account captures that the money is still\n yours, but is \"in flight.\"\n\n b) One can convert each bank's transactions directly into double-entry\n ledger statements. No need to remove the transaction from one of the\n banks. When you look at your journal files for each account, they match\n your account statements exactly.\n\n c) Import/conversion (from say, a bank .csv or .ofx) is easier, because\n your import scripts don't have to figure out where a transfer goes, and\n can simply assign transfers to ZeroSumAccount:Transfers\n\n d) If there is a problem, your ZeroSumAccount:Transfers will sum to a\n non-zero value. Errors can therefore be found easily.\n\n\n#### What this plugin does:\n\nAccount statements from institutions can be directly converted to double-entry\nformat, with transfers simply going to a special transfers account (eg:\nAssets:ZeroSumAccount:Transfers).\n\nIn this plugin, we identify sets of postings in the specified ZeroSum accounts\nthat sum up to zero, and move them to a specified target account. This target\naccount will always sum up to zero and needs no further attention. The\npostings remaining in the original ZeroSum accounts were the ones that could\nnot be matched, and potentially need attention.\n\nThe plugin operates on postings (not transactions) in the ZeroSum accounts.\nThis way, transactions with multiple postings to a ZeroSum account are still\nmatched without special handling.\n\nThe following examples will be matched and moved by this plugin:\n\n Example 1:\n ----------\n Input:\n 2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount:Transfers\n\n 2005-01-03 Transfer\n Assets:TB_Trading 20 USD\n ZeroSumAccount:Transfers\n Output:\n 2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount-Matched:Transfers\n\n 2005-01-03 Transfer\n Assets:TB_Trading 20 USD\n ZeroSumAccount-Matched:Transfers\n\n Example 2 (Only input shown):\n -----------------------------\n 2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount:Transfers 10 USD\n ZeroSumAccount:Transfers 10 USD\n\n 2005-01-03 Transfer\n Assets:TB_Trading_A 10 USD\n ZeroSumAccount:Transfers\n\n 2005-01-04 Transfer\n Assets:TB_Trading_B 10 USD\n ZeroSumAccount:Transfers\n\nThe following examples will NOT be matched:\n\n Example A:\n ----------\n 2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount:Transfers 10 USD\n ZeroSumAccount:Transfers 10 USD\n\n 2005-01-03 Transfer\n Assets:TB_Trading 20 USD\n ZeroSumAccount:Transfers\n\n Example B:\n ----------\n 2005-01-01 Transfer\n Assets:Bank_of_Ameriplus -20 USD\n ZeroSumAccount:Transfers\n\n 2005-01-03 Transfer\n Assets:TB_Trading_A 10 USD\n ZeroSumAccount:Transfers\n\n 2005-01-03 Transfer\n Assets:TB_Trading_B 10 USD\n ZeroSumAccount:Transfers\n\n\nThe plugin does not append/remove the original set of input transaction\nentries. It only changes the accounts to which postings are made. The plugin\nalso automatically adds \"Open\" directives for the target accounts to which\nmatched transactions are moved.\n\n#### Invoking the plugin:\n\nFirst, an example:\n\n plugin \"beancount-plugins.plugins.zero_sum.zerosum\" \"{\n 'zerosum_accounts' : {\n 'Assets:Zero-Sum-Accounts:Bank-Account-Transfers' : ('Assets:ZSA-Matched:Bank-Account-Transfers', 30),\n 'Assets:Zero-Sum-Accounts:Credit-Card-Payments' : ('Assets:ZSA-Matched:Credit-Card-Payments' , 6),\n 'Assets:Zero-Sum-Accounts:Temporary' : ('Assets:ZSA-Matched:Temporary' , 90),\n }\n }\"\n\nAs the example shows, the argument is a dictionary where the keys are the set\nof accounts on which the plugin should operate. The values are\n(target_account, date_range), where the target_account is the account to which\nthe plugin should move matched postings, and the date_range is the range over\nwhich to check for matches for that account.\n\n## Split Transactions\n\n```\nplugin \"beancount-plugins.plugins.split_transactions.split_transactions\"\n```\nDocumentation to come.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/davidastephens/beancount-plugins", "keywords": null, "license": "BSD License", "maintainer": null, "maintainer_email": null, "name": "beancount-plugins", "package_url": "https://pypi.org/project/beancount-plugins/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/beancount-plugins/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/davidastephens/beancount-plugins" }, "release_url": "https://pypi.org/project/beancount-plugins/0.0.4/", "requires_dist": null, "requires_python": null, "summary": "Library of user contributed plugins for beancount", "version": "0.0.4" }, "last_serial": 1686889, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c24d9b5f4457310a17d8610d32167831", "sha256": "7e8e357e6a09f8838fa98c255e2695518682b8e8f1691a166bf0b178f8f0aacf" }, "downloads": -1, "filename": "beancount-plugins-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c24d9b5f4457310a17d8610d32167831", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8792, "upload_time": "2015-08-16T03:56:56", "url": "https://files.pythonhosted.org/packages/79/b8/765a4afb0b28f780e7fbd5cd144616be5811cb2314a088a3ad5dc1c772c3/beancount-plugins-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "ca671120d867390e8474f4cde3682552", "sha256": "5ea997ddcb6835dd83ccbca0ffbf5588aaa34a860b636cf7bd0ad9adc9786d35" }, "downloads": -1, "filename": "beancount-plugins-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ca671120d867390e8474f4cde3682552", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10859, "upload_time": "2015-08-20T04:57:59", "url": "https://files.pythonhosted.org/packages/8b/dc/9d11e78a858f36d4b8e74459674c14f78bc72843f6fd8f956db22f48823d/beancount-plugins-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "3ea2c568c160b01c22be47bd4b770e62", "sha256": "1b1ae2506bbbda5011a1ebed468f54e2f6374464280b1be647d1611258da5e93" }, "downloads": -1, "filename": "beancount-plugins-0.0.3.tar.gz", "has_sig": false, "md5_digest": "3ea2c568c160b01c22be47bd4b770e62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10985, "upload_time": "2015-08-21T05:25:15", "url": "https://files.pythonhosted.org/packages/de/cf/ea7f7a8981712f37e4580d71285d114300bf56dd56515b6ec862b9ec0413/beancount-plugins-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "04f00478316ef8ab3befcf5cefac3c36", "sha256": "56e25e985fa7b3523cd46b93882a2a8619a402366cb10d4c7e242f2533efeb2d" }, "downloads": -1, "filename": "beancount-plugins-0.0.4.tar.gz", "has_sig": false, "md5_digest": "04f00478316ef8ab3befcf5cefac3c36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11432, "upload_time": "2015-08-21T05:30:15", "url": "https://files.pythonhosted.org/packages/2d/05/d5a3cfa151c5172b42bd1e1ade2fff363f07be0f2fabff0f1fbcf480fa1d/beancount-plugins-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "04f00478316ef8ab3befcf5cefac3c36", "sha256": "56e25e985fa7b3523cd46b93882a2a8619a402366cb10d4c7e242f2533efeb2d" }, "downloads": -1, "filename": "beancount-plugins-0.0.4.tar.gz", "has_sig": false, "md5_digest": "04f00478316ef8ab3befcf5cefac3c36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11432, "upload_time": "2015-08-21T05:30:15", "url": "https://files.pythonhosted.org/packages/2d/05/d5a3cfa151c5172b42bd1e1ade2fff363f07be0f2fabff0f1fbcf480fa1d/beancount-plugins-0.0.4.tar.gz" } ] }