Skip to content

Estonia

Estonia is the shipping jurisdiction — every component runs end-to-end against an Estonian OÜ's books today. Other countries are on the roadmap (see the marketing landing page).

The platform: e-Financials

Run by RIK (the Centre of Registers and Information Systems). Free for small companies. Owns:

  • The chart of accounts (defaultable from the Estonian standard)
  • VAT registrations (vat_info endpoint exposes our company's status)
  • KMD INF declarations (monthly VAT report; the agent does NOT file this — operator submits via e-Fin's web UI)
  • TSD declarations (employer tax; monthly; same — manual via UI)
  • Annual report filing (yearly; manual via UI)

The agent owns: writing purchase_invoice + sale_invoice + journal entries via the API. Everything else, the operator does in e-Fin's web UI once a month. Total monthly UI time: ~10 minutes.

Demo API: https://demo-rmp-api.rik.ee. Live API: https://rmp-api.rik.ee. Auth: HMAC-SHA-384 signed requests via X-AUTH-* headers.

Account mappings used

Default expense articles (from the seed chart of accounts):

Article id Account Description
24 4140 Services purchased from EU (fallback default for unmatched expenses)
23 4130 Services purchased domestically
25 4210 Electricity
30 4700 Rent
... ... See /v1/purchase_articles for the full list

The fallback article (24) handles ~80% of the typical single-person OÜ's expense profile (EU SaaS, hosting, contractors).

Liability default: 2310 (Accounts Payable). Fringe benefit default: 1 ("no fringe benefit").

VAT rates we handle

Rate Code Used for
24% 24 Estonian standard rate (post-2025)
22% 22 Estonian standard rate (pre-2025)
9% 9 Reduced rate (books, accommodation, certain medicines)
0% 0 EU reverse-charge, OSS exports, exemptions
exempt (omitted on item) Financial services, education, real estate

The vat_decision reasoner picks one per booking. See VAT decisioning for the logic.

Reverse-charge (EU B2B services)

The most common case for an Estonian OÜ — supplier in another EU member state, customer is us (B2B). The agent:

  1. Sees supplier_country=DE (or similar), customer_country=EE, customer_type=B2B
  2. vat_decision retrieves the reverse-charge rule from the tax_rules table (id #4 in the demo company seed)
  3. Returns rate='reverse-charge', confidence='high'
  4. _decision_to_efin_rate maps reverse-charge → '0'
  5. The line item lands with vat_rate_dropdown='0'; e-Fin's journal entry is Debit <expense account> / Credit 2310 for the gross — no VAT line, exactly right for reverse-charge

Stamped on the booking log: booker: recon #N vat_decision rate='reverse-charge' confidence=high rules=[4].

Small business scheme

If the operator's OÜ is not VAT-registered (turnover < €40k), the agent's behaviour changes:

  • is_vat_registered=False (set via config or env)
  • Purchase invoices don't claim input VAT (account 1510 stays empty)
  • Items get project_no_vat_gross_price set so e-Fin still tracks the VAT for reporting purposes

This is iseppo/e-arveldaja-mcp's normalizeItemsForNonVat pattern, ported. Most one-person OÜs cross the €40k threshold in their second or third year; until then the small-business scheme applies.

Documents the agent reads to learn

For Estonia the canonical sources:

  • e-MTA VAT 2025 guide (the EMTA / Estonian Tax Authority's annual VAT guidance PDF) — uploaded once per year as kind=tax-rule; the ingest pipeline extracts both rules + KG triples
  • e-Fin's own openapi.yaml (lives at the demo URL; we use it as the source of truth for payload shapes)

Tax law changes? Operator uploads the new PDF; agent re-extracts; next booking reasons against the updated rules. No code change needed.

What's still manual

  • KMD INF submission (monthly VAT report). e-Fin's web UI; ~3 minutes.
  • TSD submission (employer tax). e-Fin's web UI; ~2 minutes if no salary changes.
  • Annual report. Once a year; e-Fin's web UI; ~30 minutes.

These all read from the books the agent has already built. The agent's contract is: "your books are clean and complete by the time you log into e-Fin to file." That's where it ends.