# `Beancount.Engine.Elixir`
[🔗](https://github.com/thanos/beancount_ex/blob/v0.6.0/lib/beancount/engine/elixir.ex#L1)

Native Elixir engine: parse, render, booking-aware check, and canned reports.

Full parity with the CLI oracle is asserted on the golden fixtures via
`Beancount.Compare.compare/3`.

# `check`

Parse and validate `.bean` text with the native booking engine.

## Examples

    iex> text = """
    ...> 2026-01-01 open Assets:Bank USD
    ...> 2026-01-01 open Income:Salary USD
    ...> 2026-01-01 open Equity:Opening USD
    ...>
    ...> 2026-01-31 * "Employer" "Salary"
    ...>   Assets:Bank     100 USD
    ...>   Income:Salary  -100 USD
    ...> """
    iex> {:ok, %Beancount.Result{status: :ok}} = Beancount.Engine.Elixir.check(text)

# `check_file`

Read and validate a `.bean` file from disk.

## Examples

    path = Path.join(System.tmp_dir!(), "elixir_check.bean")

    File.write!(path, """
    2026-01-01 open Assets:Bank USD
    2026-01-01 open Income:Salary USD
    2026-01-01 open Equity:Opening USD

    2026-01-31 * "Employer" "Salary"
      Assets:Bank     100 USD
      Income:Salary  -100 USD
    """)

    {:ok, %Beancount.Result{status: :ok}} = Beancount.Engine.Elixir.check_file(path)

# `query`

Parse the ledger and run a canned report query.

## Examples

    iex> text = """
    ...> 2026-01-01 open Assets:Bank USD
    ...> 2026-01-01 open Income:Salary USD
    ...> 2026-01-01 open Equity:Opening USD
    ...>
    ...> 2026-01-31 * "Employer" "Salary"
    ...>   Assets:Bank     100 USD
    ...>   Income:Salary  -100 USD
    ...> """
    iex> {:ok, %Beancount.Query.Result{columns: cols}} =
    ...>   Beancount.Engine.Elixir.query(text, "SELECT account, sum(position) AS balance GROUP BY account ORDER BY account")
    iex> cols
    ["account", "balance"]

# `render`

Render directives to `.bean` text via `Beancount.Renderer`.

## Examples

    iex> Beancount.Engine.Elixir.render([Beancount.open(~D[2026-01-01], "Assets:Bank", ["USD"])])
    "2026-01-01 open Assets:Bank USD\n"

---

*Consult [api-reference.md](api-reference.md) for complete listing*
