Python/Flask application for generating and/or serving HTML reports from ledger-cli data
Go to file
RunasSudo 3fa8f8a829
Centralise commodity tracking logic
Per Ledger behaviour, commodities considered equivalent if same name regardless of whether prefix or suffix
Commodity display drawn from Ledger data, no longer explicitly specified in config
2020-04-04 04:28:43 +11:00
demo Centralise commodity tracking logic 2020-04-04 04:28:43 +11:00
ledger_pyreport Centralise commodity tracking logic 2020-04-04 04:28:43 +11:00
.gitignore Update documentation 2020-04-01 11:57:29 +11:00
config.example.yml Centralise commodity tracking logic 2020-04-04 04:28:43 +11:00
COPYING Initial commit 2020-01-14 00:06:22 +11:00
README.md Update README.md 2020-04-03 23:48:37 +11:00
requirements.txt Update documentation 2020-04-01 11:57:29 +11:00

ledger-pyreport

ledger-pyreport is a lightweight Flask webapp for generating interactive and printable accounting reports from ledger-cli data.

Reports

  • Trial balance, and comparative trial balance
  • Balance sheet, and comparative balance sheet
  • Income statement, and comparative income statement
  • Cash flow statement, and comparative cash flow statement (direct and indirect methods)
  • General ledger
  • Account transactions, with or without itemisation of commodities
  • Transaction detail, with or without itemisation of commodities

Features

  • Correctly values:
  • Correctly computes unrealised gains (even when Ledger does not)
  • Accounts for both profit and loss, and other comprehensive income
  • Simulates annual closing of books, with presentation of income/expenses on the balance sheet as retained earnings and current year earnings
  • Can simulate cash basis accounting, using FIFO methodology to recode transactions involving liabilities and non-cash assets

Background, demo and screenshots

See https://yingtongli.me/blog/2020/03/31/ledger-pyreport.html for further discussion.

Usage

Install the dependencies from PyPI, optionally in a virtual environment: (Commands presented for Linux/Mac)

virtualenv venv
. venv/bin/activate
pip install -r requirements.txt

Copy config.example.yml to config.yml (or set the LEDGER_PYREPORT_CONFIG environment variable to the path to the config file).

Run as per a usual Flask app, for example:

FLASK_APP=ledger_pyreport python -m flask run

Notes on Ledger setup

ledger-pyreport expects each of assets, liabilities, equity, income and expenses to be setup in Ledger as a separate top-level account. These accounts should contain a zero balance, with all transactions in child accounts.

Additionally, ledger-pyreport expects the next level of assets and liabilities to be categories of asset and liability (e.g. Assets:Current, Liabilities:Non-current). These, too, should contain a zero balance.

Ledger-pyreport by default observes the convention that positive amounts in Ledger represent debits, and negative amounts in Ledger represent credits.

A commodity which has any price data in Ledger (including those specified through @ or @@, or explicitly through P) will be regarded as a commodity measured at fair market value, and automatically revalued accordingly. A commodity which has no price data in Ledger (i.e. lot prices through {…} or {{…}} only) will be regarded as a commodity measured at historical cost, and will not be subsequently revalued.