ExLedger.Parser.Declarations (ex_ledger v0.5.6)

Extract and validate transaction element declarations (payees, commodities, tags).

Summary

Functions

Checks that all accounts in transactions are declared.

Checks that all commodities in transactions are declared.

Checks that all payees in transactions are declared.

Checks that all tags in transactions and comments are declared.

Extracts commodity declarations from input (symbols only).

Extracts full commodity definitions from input.

Extracts payee declarations from input.

Extracts tag declarations from input.

Returns the first transaction by date.

Returns the last transaction by date.

Lists all unique accounts from transactions.

Lists all unique commodities (currencies) from transactions.

Lists all unique payees from transactions.

Lists all unique tags from transaction postings.

Functions

check_accounts(transactions, accounts)

@spec check_accounts([map()], %{required(String.t()) => atom() | String.t()}) ::
  :ok | {:error, String.t()}

Checks that all accounts in transactions are declared.

check_commodities(transactions, declared_commodities)

@spec check_commodities([map()], MapSet.t(String.t())) :: :ok | {:error, String.t()}

Checks that all commodities in transactions are declared.

check_payees(transactions, declared_payees)

@spec check_payees([map()], MapSet.t(String.t())) :: :ok | {:error, String.t()}

Checks that all payees in transactions are declared.

check_tags(transactions, contents, declared_tags)

@spec check_tags([map()], String.t(), MapSet.t(String.t())) ::
  :ok | {:error, String.t()}

Checks that all tags in transactions and comments are declared.

extract_commodity_declarations(input)

@spec extract_commodity_declarations(String.t()) :: MapSet.t(String.t())

Extracts commodity declarations from input (symbols only).

extract_full_commodity_declarations(input)

@spec extract_full_commodity_declarations(String.t()) :: %{
  required(String.t()) => map()
}

Extracts full commodity definitions from input.

Parses commodity declarations with their subdirectives:

  • format: Display format string
  • note: Description
  • alias: Alternative symbol
  • default: Whether this is the default commodity
  • nomarket: Whether to exclude from market value calculations

Example

commodity CHF
    format CHF 1'000.00
    note Swiss Franc

Returns a map of symbol => commodity_definition.

extract_payee_declarations(input)

@spec extract_payee_declarations(String.t()) :: MapSet.t(String.t())

Extracts payee declarations from input.

extract_tag_declarations(input)

@spec extract_tag_declarations(String.t()) :: MapSet.t(String.t())

Extracts tag declarations from input.

first_transaction(transactions)

@spec first_transaction([map()]) :: map() | nil

Returns the first transaction by date.

last_transaction(transactions)

@spec last_transaction([map()]) :: map() | nil

Returns the last transaction by date.

list_accounts(transactions, account_map \\ %{})

@spec list_accounts([map()], %{required(String.t()) => atom() | String.t()}) :: [
  String.t()
]

Lists all unique accounts from transactions.

list_commodities(transactions)

@spec list_commodities([map()]) :: [String.t()]

Lists all unique commodities (currencies) from transactions.

list_payees(transactions)

@spec list_payees([map()]) :: [String.t()]

Lists all unique payees from transactions.

list_tags(transactions)

@spec list_tags([map()]) :: [String.t()]

Lists all unique tags from transaction postings.