epogrebnyak / abacus

A minimal yet valid double-entry accounting system in Python or command line.

Home Page:https://epogrebnyak.github.io/abacus/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Simplified set of types and rules for core

epogrebnyak opened this issue · comments

Work flow:

  • A chart of accounts defines a ledger: Chart -> Ledger
  • One can post entries to ledger, invalid entries are not posted Ledger -> List[Entry] -> (Ledger, List[Entry])
  • On ledger closing we close income and expense accounts, create income statement, and transfer current profit to retained earnings: Ledger -> (ClosedLedger, IncomeStatement)
  • Postclose entries may distribute dividend: ClosedLedger -> List[Entry] -> ClosedLedger
  • End of period account balances are saved for next period: ClosedLedger -> Balances
  • End of period balances create an opening entry for start of next period Balances -> Entry
  • We condense contra accounts and show balance sheet report ClosedLedger -> BalanceSheet

Obtain information about ledger:

  • Trial balance reflects state of ledger Ledger -> TrialBalance
  • We can calculate current profit based on state of income and expense accounts

Other:

  • Chart, [Entry], IncomeStatement, BalanceSheet and Balances are serialisable

Assumptions:

  • No contra accounts
  • Simplistic or no cash flow statement
  • One level of accounts
  • One currency
  • No negativity or overspending checks
  • Entry can touch any accounts
  • Must supply entries, not transactions

Chart:

  • required accounts are retained earnings account and income summary account
  • Asset, Expense, Capital, Liability, Income, IncomeSummaryAccount, RetainedEarnings