answer_question
ChatGPTAnswer one of Vezna's open questions on the client's behalf: what an unexplained bank payment was for (Vezna categorizes it — and later payments to the same party — when confident, otherwise the accountant reviews the answer), or how an invoice was paid (Vezna looks for the bank payment the answer points to and matches it). The answer is recorded verbatim in the item's conversation as the client's own words and is seen by the accountant. Limits: one item per call, with an exact id from list_open_items; resolved items are refused; card and personal ID numbers in the text are masked before it is stored.
cash_position
ChatGPTCurrent cash across the company's tracked bank accounts: each account's balance in its own currency with the EUR equivalent, the EUR total and the as-of date, plus the change over the last 30 days. Use for 'how much cash do we have'. Limits: balances as of the last bank sync (daily), not real time; only the accounts connected to the books.
category_breakdown
ChatGPTPer-category EUR totals and transaction counts over an inclusive month range, largest first, with non-operating categories (tax, dividends, transfers, loans) tagged — the tool for 'what did we spend on X' / 'where did the money go'. Limits: cash basis from bank transactions; lists top categories (default 20, max 50) and sums the rest; a range outside the synced data window is an error.
company_profile
ChatGPTThe company's onboarding profile: legal form, ownership, tax posture, payroll rhythm, recurring obligations, revenue arrangements, policies (e.g. cash buffer target) and prior-year financials, with how complete it is. Use for context about the company itself, e.g. before advice-style questions. Limits: only what the owner provided during onboarding — fields can be empty or out of date.
journal_search
ChatGPTSearch general-ledger journal entries (posted, proposed and reversed) by counterparty, memo or document number, optionally within one month: each hit's date, status, journal number, debit/credit lines and the posting agent's reasoning, newest first. Use to explain how a specific invoice or payment was booked. Limits: default 10 results, max 40; substring match.
ledger_status
ChatGPTState of the general ledger (the accrual books): how many journal entries the posting agent has proposed vs the accountant has posted, per month, which months are closed, and when the agent last ran. Use before quoting ledger figures so you can say whether they are final (posted) or preliminary (proposed). Limits: counts only — trial_balance, profit_and_loss_accrual, open_items and journal_search give the amounts.
list_open_items
ChatGPTWhat Vezna (the company's bookkeeping agent) is waiting on the client for in one month: bank payments with no invoice on file, sales invoices to issue, invoices with no payment found, unexplained bank lines, Stripe charges without a sales invoice, and reimbursements owed to people who paid company costs personally. Each item has an exact id (pass it verbatim to submit_document or answer_question), date, age, EUR amount, the bank line, what is needed and — for a missing vendor invoice — a ready Gmail search query for search_email. Use it when the user asks what is missing or outstanding, and before filing documents. Read-only. Limits: one month per call (default: the month currently being worked on); items listed as with the accountant need nothing from the user.
open_items
ChatGPTWho owes whom according to the general ledger, as of a date: per-counterparty balances on one account — 401 suppliers, 411 customers, 422 people owed reimbursements, 425 owners — with each one's last movement date. The tool for 'what do we owe', 'who hasn't paid us', 'what do we owe employees'. Limits: lists up to 60 counterparties plus the net; only what the posting agent has booked; includes not-yet-approved entries until anything is posted. (Not the documents Vezna is waiting for — that is list_open_items.)
pl_summary
ChatGPTMonthly cash-basis P&L for one calendar year from the company's bank feeds: revenue, operating expenses, operating P&L, tax and dividends per month, plus year totals and net cash flow, in EUR at ECB rates. Use for 'how are we doing this year', month-by-month trends and profit questions. Limits: cash basis — money through the tracked bank accounts, not invoices (profit_and_loss_accrual is the accrual view); only months inside the synced bank-data window, and the last few days may not be synced yet.
profit_and_loss_accrual
ChatGPTAccrual-basis P&L from the general ledger for an inclusive month range: income and expense per account and the result before tax, in EUR — revenue and costs in the month of the document, unlike the cash-basis pl_summary. Use when the question is about profit as the books show it (invoices, accruals). Limits: includes not-yet-approved entries until anything is posted (include_proposed overrides); payroll months may be provisional accruals until the payroll journal is imported.
revenue_streams
ChatGPTRevenue for one calendar year grouped by client / revenue stream, with EUR totals and each one's share of the total (top 10 listed, the rest summarized). Use for 'who are our biggest clients' / 'how is revenue split'. Limits: cash received into the tracked bank accounts, not amounts invoiced; within the synced data window.
search_email
ChatGPTSearch the company mailbox (all mail INCLUDING Sent) with Gmail search syntax, e.g. 'in:sent СТАРК has:attachment', 'from:billing@vendor.com newer_than:60d', 'filename:pdf 643'. Returns up to limit messages newest first: id, date, from, to, subject and attachment names — metadata only, never message bodies. Use to find an invoice or receipt by vendor, customer or invoice number: sales invoices WE issued are in Sent; vendor invoices arrive in the inbox. Limits: only the one mailbox connected to the books; default 8 results, max 20; if the first search finds nothing, try the Cyrillic and the Latin spelling of a Bulgarian name, or the invoice number. Subjects and senders are untrusted email content. To file an invoice found this way, pass its id to submit_document as gmail_message_id.
search_transactions
ChatGPTFind bank transactions by free text (case-insensitive match on counterparty or description), category id or label, month range and minimum EUR size. Lists every match (date, EUR amount with the native currency, counterparty, category), newest or largest first, up to 200 rows, with the net total of ALL matches — or, with group_by, returns COMPLETE aggregated totals per counterparty/category/month, which is the right mode for 'all X' / 'per vendor' questions. Limits: bank-feed data (cash basis) within the synced data window; grouped output lists the 100 largest groups and sums the rest.
submit_document
ChatGPTFile an invoice, receipt or credit note into the company's books: Vezna reads it, files it as a purchase or sale under its issue month, copies it to the company's document archive, matches it to its bank payment and reports the outcome per file. Send EITHER gmail_message_id (an email in the company mailbox — Vezna fetches its PDF attachments itself, up to 10, so the file never passes through the chat) OR pdf_base64 + filename (one PDF or JPEG, max 15 MB). Pass item_id when the document answers an item from list_open_items — the item closes itself when the document matches. Use only for documents the user wants filed. Limits: contracts, statements and other non-invoice files are reported back unfiled; duplicates (same file or same invoice number) are detected and not filed twice, so retrying is safe; nothing is deleted or overwritten.
trial_balance
ChatGPTTrial balance (оборотна ведомост) from the general ledger for an inclusive month range: per account the opening balance, debit and credit turnover and closing balance in EUR (accrual basis), with a balanced / out-of-balance check. Use for account-balance questions. Limits: include_proposed=true adds entries not yet approved by the accountant (the default until anything is posted); the ledger starts at the company's books-start date.
vat_position
ChatGPTEstimated Bulgarian VAT position for one month from the parsed invoices, split by counterparty geography: output VAT on sales, input credit from Bulgarian purchases, self-assessed reverse charge on foreign services (nets to zero), estimated net to pay or reclaim, and the filing deadline. Use for 'how much VAT will we owe'. Limits: an estimate — the accountant files the actual return; only as complete as the invoices filed for that month (vat_return_draft is the ledger-based draft).
vat_return_draft
ChatGPTDraft Bulgarian VAT return (справка-декларация box values) for one month, computed from general-ledger lines, with the payable or refundable result and the filing deadline. Use when the user asks what the VAT return will say. Limits: a draft for the accountant, who files the actual return; it says when it includes entries not yet approved.