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_infoendpoint 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:
- Sees
supplier_country=DE(or similar),customer_country=EE,customer_type=B2B vat_decisionretrieves the reverse-charge rule from thetax_rulestable (id #4 in the demo company seed)- Returns
rate='reverse-charge',confidence='high' _decision_to_efin_ratemapsreverse-charge→'0'- The line item lands with
vat_rate_dropdown='0'; e-Fin's journal entry isDebit <expense account> / Credit 2310for 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_priceset 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 askind=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.