# beancount_ex v0.6.0 - Table of Contents

> An idiomatic Elixir interface to Beancount that serves as the long-term behavioral oracle for a future native Elixir General Ledger.

## Pages

- [beancount_ex](readme.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)

- Accounting
  - [Accounting guides](index.md)
  - [Getting started](getting_started-1.md)
  - [Accounting in context](in_context.md)
  - [Accounting cookbook](cookbook.md)
  - [Running reports](running_reports.md)
  - [Getting started](getting_started-2.md)

- Library
  - [Library guides](library.md)
  - [Parsing](parsing-3.md)
  - [Rendering](rendering.md)
  - [Engines](engines.md)
  - [Querying](querying.md)
  - [Queries](queries.md)
  - [Reporting](reporting-4.md)
  - [Storage](storage.md)
  - [Golden Files](golden_files.md)
  - [Booking engine](booking.md)
  - [Reconciliation harness](reconciliation.md)
  - [Performance](performance.md)
  - [Property Testing](property_testing.md)
  - [Oracle Strategy](oracle_strategy.md)

- Livebooks
  - [Getting started with beancount_ex](getting_started-5.md)
  - [Accounting cookbook (Livebook)](accounting.md)
  - [Parsing and validation](parsing-6.md)
  - [Reporting with beancount_ex and Explorer](reporting-7.md)

## Modules

- [Beancount.CostSpec](Beancount.CostSpec.md): Beancount cost/lot specification for inventory postings.
- [Beancount.Property.Diff](Beancount.Property.Diff.md): Structured difference between oracle and native engine results.

- [Beancount.Value](Beancount.Value.md): Typed scalar values for `Beancount.Directives.Custom` and metadata.
- [Beancount.Value.Account](Beancount.Value.Account.md): An account name for `custom` directive values.
- [Beancount.Value.Amount](Beancount.Value.Amount.md): A commodity amount for `custom` directive values.
- [Beancount.Value.Tag](Beancount.Value.Tag.md): A tag for `custom` directive values.

- Public API
  - [Beancount](Beancount.md): Idiomatic Elixir interface to [Beancount](https://beancount.github.io/).
  - [Beancount.Compare](Beancount.Compare.md): Compare two engines on identical input within the v0.4 parity contract.
  - [Beancount.Parser](Beancount.Parser.md): Parse Beancount `.bean` text into typed directive structs.
  - [Beancount.Queries](Beancount.Queries.md): Ecto.Query-based queries against stored Beancount directives.
  - [Beancount.Storage](Beancount.Storage.md): Storage and import/export for Beancount directives via Ecto.

- Directives
  - [Beancount.Directives.Balance](Beancount.Directives.Balance.md): The `balance` directive asserts an account balance at a date.
  - [Beancount.Directives.Close](Beancount.Directives.Close.md): The `close` directive marks an account as inactive.
  - [Beancount.Directives.Commodity](Beancount.Directives.Commodity.md): The `commodity` directive declares a currency or commodity.
  - [Beancount.Directives.Custom](Beancount.Directives.Custom.md): The `custom` directive is a generic, user-defined directive.
  - [Beancount.Directives.Document](Beancount.Directives.Document.md): The `document` directive links a file to an account at a date.
  - [Beancount.Directives.Event](Beancount.Directives.Event.md): The `event` directive tracks the value of a named variable over time.
  - [Beancount.Directives.Include](Beancount.Directives.Include.md): The `include` directive pulls another ledger file into the current one.
  - [Beancount.Directives.Note](Beancount.Directives.Note.md): The `note` directive attaches a dated comment to an account.
  - [Beancount.Directives.Open](Beancount.Directives.Open.md): The `open` directive declares the start of an account's life.
  - [Beancount.Directives.Option](Beancount.Directives.Option.md): The `option` directive sets file-wide Beancount configuration.
  - [Beancount.Directives.Pad](Beancount.Directives.Pad.md): The `pad` directive inserts an automatic balancing transaction before the next
balance assertion on an account.
  - [Beancount.Directives.Plugin](Beancount.Directives.Plugin.md): The `plugin` directive loads a Beancount plugin module.
  - [Beancount.Directives.PopTag](Beancount.Directives.PopTag.md): The `poptag` directive pops a tag from Beancount's tag stack.
  - [Beancount.Directives.Posting](Beancount.Directives.Posting.md): A single posting (leg) of a `Beancount.Directives.Transaction`.
  - [Beancount.Directives.Price](Beancount.Directives.Price.md): The `price` directive records the price of a commodity in another currency.
  - [Beancount.Directives.PushTag](Beancount.Directives.PushTag.md): The `pushtag` directive pushes a tag onto Beancount's tag stack.
  - [Beancount.Directives.Query](Beancount.Directives.Query.md): The `query` directive stores a named BQL query in the ledger.
  - [Beancount.Directives.Transaction](Beancount.Directives.Transaction.md): The `transaction` directive records a balanced movement between accounts.

- Engine
  - [Beancount.Checker](Beancount.Checker.md): Low-level wrapper around the `bean-check` command-line tool.
  - [Beancount.Engine](Beancount.Engine.md): Behaviour that every Beancount execution backend must implement.
  - [Beancount.Engine.CLI](Beancount.Engine.CLI.md): The default engine: a thin wrapper around the Beancount `bean-check` and
`bean-query` CLI tools.
  - [Beancount.Engine.Elixir](Beancount.Engine.Elixir.md): Native Elixir engine: parse, render, booking-aware check, and canned reports.
  - [Beancount.Query](Beancount.Query.md): Low-level wrapper around the `bean-query` command-line tool.

- Rendering
  - [Beancount.Directive](Beancount.Directive.md): Protocol implemented by every Beancount directive struct.
  - [Beancount.Renderer](Beancount.Renderer.md): Deterministic rendering of directive streams into Beancount text.

- Reporting
  - [Beancount.Query.Result](Beancount.Query.Result.md): Neutral, engine-independent result of a BQL query.
  - [Beancount.Report](Beancount.Report.md): Higher-level reporting API built on top of `Beancount.query_text/2`.

- Results
  - [Beancount.Normalizer](Beancount.Normalizer.md): Normalizes raw engine output into a stable, engine-independent structure.
  - [Beancount.Result](Beancount.Result.md): Normalized result of running a Beancount check.

- Storage
  - [Beancount.Repo](Beancount.Repo.md): Ecto repository backing `Beancount.Storage` and `Beancount.Queries`.
  - [Beancount.Schemas](Beancount.Schemas.md): Ecto schemas for persisting Beancount directives.
  - [Beancount.Schemas.Balance](Beancount.Schemas.Balance.md): Persisted `balance` assertion (table `beancount_balances`).
  - [Beancount.Schemas.Close](Beancount.Schemas.Close.md): Persisted `close` directive (table `beancount_closes`).
  - [Beancount.Schemas.Commodity](Beancount.Schemas.Commodity.md): Persisted `commodity` directive (table `beancount_commodities`).
  - [Beancount.Schemas.CostSpec](Beancount.Schemas.CostSpec.md): Persisted cost/lot specification (embedded schema).
  - [Beancount.Schemas.Custom](Beancount.Schemas.Custom.md): Persisted `custom` directive (table `beancount_customs`).
  - [Beancount.Schemas.Document](Beancount.Schemas.Document.md): Persisted `document` directive (table `beancount_documents`).
  - [Beancount.Schemas.Event](Beancount.Schemas.Event.md): Persisted `event` directive (table `beancount_events`).
  - [Beancount.Schemas.Include](Beancount.Schemas.Include.md): Persisted `include` directive (table `beancount_includes`).
  - [Beancount.Schemas.Note](Beancount.Schemas.Note.md): Persisted `note` directive (table `beancount_notes`).
  - [Beancount.Schemas.Open](Beancount.Schemas.Open.md): Persisted `open` directive (table `beancount_opens`).
  - [Beancount.Schemas.Option](Beancount.Schemas.Option.md): Persisted `option` directive (table `beancount_options`).
  - [Beancount.Schemas.Pad](Beancount.Schemas.Pad.md): Persisted `pad` directive (table `beancount_pads`).
  - [Beancount.Schemas.Plugin](Beancount.Schemas.Plugin.md): Persisted `plugin` directive (table `beancount_plugins`).
  - [Beancount.Schemas.PopTag](Beancount.Schemas.PopTag.md): Persisted `poptag` directive (table `beancount_pop_tags`).
  - [Beancount.Schemas.Posting](Beancount.Schemas.Posting.md): Persisted transaction posting (embedded schema).
  - [Beancount.Schemas.Price](Beancount.Schemas.Price.md): Persisted `price` directive (table `beancount_prices`).
  - [Beancount.Schemas.PriceAnnotation](Beancount.Schemas.PriceAnnotation.md): Persisted posting price annotation (embedded schema).
  - [Beancount.Schemas.PushTag](Beancount.Schemas.PushTag.md): Persisted `pushtag` directive (table `beancount_push_tags`).
  - [Beancount.Schemas.Query](Beancount.Schemas.Query.md): Persisted `query` directive (table `beancount_queries`).
  - [Beancount.Schemas.Transaction](Beancount.Schemas.Transaction.md): Persisted `transaction` directive (table `beancount_transactions`).

- Testing
  - [Beancount.Golden](Beancount.Golden.md): Helpers for golden-file regression testing.
  - [Beancount.Property](Beancount.Property.md): StreamData generators and helpers for property-based testing.

- Exceptions
  - [Beancount.Checker.NotInstalledError](Beancount.Checker.NotInstalledError.md): Raised when the configured `bean-check` executable cannot be located.
  - [Beancount.Parser.Error](Beancount.Parser.Error.md): Structured parse error for Beancount input.
  - [Beancount.Query.NotInstalledError](Beancount.Query.NotInstalledError.md): Raised when the configured `bean-query` executable cannot be located.

## Mix Tasks

- [mix beancount.golden.update](Mix.Tasks.Beancount.Golden.Update.md): Regenerate the golden fixtures under `test/fixtures/golden/`.

