Balances are never authoritative stored state. They are projections over immutable postings, computed by Logistiki.Projections.ProjectionEngine.

Balance

Logistiki.balance(account_or_code, opts \\ [])
Logistiki.balance(parent_account)
Logistiki.balance_for_entity(entity)
Logistiki.balance_for_entity_tree(entity)

A Logistiki.Projections.Balance carries debit_total, credit_total, net (debit - credit, signed), currency, and posting_count.

  • Parent balances aggregate descendants — the query uses the virtual_account_closure table to sum postings across the subtree.
  • Entity balances aggregate linked accounts — via entity_accounts.
  • Entity subtree balances aggregate across descendant entities — via the business_entity_closure table joined to entity_accounts.

Balance-counted journals are those with status in ["posted", "reversed"]. A reversed journal's postings still count because the reversal journal cancels them; both remain balance-counted and net to zero.

Statement

Logistiki.statement(account, opts \\ []) returns ordered Logistiki.Projections.StatementLine structs with a running balance. Each line includes journal_id, posting_id, event_id, date, description, account_code, debit, credit, signed amount, currency, running_balance, source_system, source_id, selected_policy, selected_template, and metadata.

Trial balance

Logistiki.trial_balance(opts \\ []) returns a Logistiki.Projections.TrialBalance with debit/credit totals per account per currency. Debits and credits must balance per currency (balanced flag).

General ledger

Logistiki.general_ledger(opts \\ []) returns all balance-counted postings ordered by effective date and journal.

Balance sheet

Logistiki.balance_sheet(opts \\ []) returns a Logistiki.Projections.BalanceSheet with assets, liabilities, and equity sections, each with balances and a per-currency section total. Account types map to sections:

  • Assets: asset, settlement
  • Liabilities: liability, client, suspense, clearing, tax
  • Equity: equity

Income statement

Logistiki.income_statement(opts \\ []) returns an Logistiki.Projections.IncomeStatement with income and expenses sections and a net_profit_by_currency map. Account types map to sections:

  • Income: income, fee
  • Expenses: expense