# Ekwo OS The documentation of Ekwo OS in one file, generated from the repository at https://github.com/Ekwo-ai/ekwo-os. Each section names the file it comes from; a relative link inside a section is relative to that file. --- # For an AI agent helping somebody use Ekwo OS Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/AGENTS.md — on the site: https://ekwo.ai/docs/agents/ You are an AI agent, and somebody asked you to help them install Ekwo OS or keep their books with it. This page is what you need to do that without guessing. Humans are welcome to read it too. ### What Ekwo OS is Ekwo OS is **open source software** (AGPL-3.0): a double-entry accounting data infrastructure that runs in a Postgres database the user owns, on their own [Supabase](https://supabase.com) project. It is the schema, the posting rules and the reports, plus one **country pack** per country — chart of accounts, tax codes, declaration boxes, financial statements — written as data. Somebody who simply wants to keep their books starts on **[Ekwo Cloud](https://cloud.ekwo.ai)**, the web application on the same core: an address and a six-digit code, and their own instance is ready. Installing Ekwo OS on their own Supabase project, the rest of this page, is for a technical team and for whoever wants to own every part of it. Ekwo keeps the books and prepares what the rules of the country ask for; the user decides, confirms every entry and files. Their accountant works in the same books with their own access, and accountants who work with Ekwo are listed at `https://ekwo.ai/partners/directory/`. Each pack carries its sources, its version and its status. What Ekwo is, and its limits: [`DISCLAIMER.md`](DISCLAIMER.md). Three ways in, all acting on the same functions of the schema: | Tool | For | Package | |---|---|---| | `ekwo` command line | installing, then keeping books from a terminal | [`ekwo-os`](packages/cli/README.md) on npm | | MCP server | you, the agent, keeping books through tools | [`@ekwo-ai/mcp`](packages/mcp/README.md) on npm | | REST API | anything else: Supabase generates it from the schema | — | ### Where to read what - **The whole site in one file for a model:** `https://ekwo.ai/llms.txt` (an index) and `https://ekwo.ai/llms-full.txt` (the text itself). Both are generated at every build from this repository. - **One country, step by step:** `https://ekwo.ai/countries//set-up/`, where `` is the lower-case ISO code of the pack. It gives the exact command, the account and tax codes a first invoice uses, what the pack carries and what it does not do yet. Also as Markdown at `https://ekwo.ai/countries//set-up.md`. - **What a pack holds:** the set-up page above; in a clone of this repository, `npm run build`, then `node packages/cli/dist/bin.js pack describe --json` (it reads `packs/`, so it needs the clone, and `npx` there finds the workspace, not the command); once installed, the MCP tool `describe_pack`. - **Every command and flag:** `npx -y ekwo-os@latest help --json` — the field `usage` is the whole reference, as text. - **The installation guide:** [`packages/cli/README.md`](packages/cli/README.md). - **The tools of the MCP server:** [`packages/mcp/README.md`](packages/mcp/README.md). - **A declaration from computing to correcting:** [`docs/filing.md`](docs/filing.md). - **A first session, once installed:** [`docs/agents.md`](docs/agents.md) — five steps, the MCP tool and the command for each. ### Installing for somebody What the user needs, and what only they can do: 1. **A Supabase project of their own.** The free plan is enough to start. You cannot create it for them: Ekwo does not create, pay for or access it. 2. **Three values from their dashboard**, which they type or paste into their own terminal — not into the conversation if you can avoid it: - the **connection string** — Connect → **Session pooler** (the direct `db..supabase.co` host is IPv6 only and fails on most networks); - the **Project URL**, `https://.supabase.co`; - the **secret key** (`sb_secret_…`, or the legacy `service_role` key; Project Settings → API Keys), used once to create the first administrator and never written to disk. 3. **Node 20 or later.** No Supabase CLI, no Docker, no clone. Then one command. Put the country on it: `--country` takes the ISO code of the pack, and there is no default. ```sh npx -y ekwo-os@latest init --country ``` It asks for the rest. Where the pack offers a choice of chart of accounts or of language, it asks — and with `--yes` it **refuses** rather than choosing, so pass `--chart` and `--language` when you script it. The non-interactive form is in [`packages/cli/README.md`](packages/cli/README.md#from-a-free-supabase-account-to-a-first-invoice). Companies in **several countries**, or no obvious first one: install with `--no-company` and no country, then one `ekwo company new "" --country ` per company — each in its own country, with the same questions and refusals. See [several countries](packages/cli/README.md#several-countries-in-one-installation-init---no-company). Choosing the pack: one per country, listed at `https://ekwo.ai/countries/` and under `packs/`. Each has a **status** — `community` (nobody has reviewed it), `maintained` (kept up by Ekwo, not reviewed by a professional), `proven` (maintained, and it reproduced the accepted filing of a real company whose books were imported — for the scopes its evidence names, never every regime of the country) or `reviewed` (read by a named professional on a date). Say which one the user is getting, and for a proven pack, what it was not tested on. No pack for their country: say so, and point at [`docs/packs.md`](docs/packs.md) — do not install a neighbour's pack as if it were theirs. After `init`, tell the user about the **four things** `init` prints and no installer can do on their project: turn off self sign-up, keep two administrators, keep the `service_role` key off other machines, read `DISCLAIMER.md`. They are in [`packages/cli/README.md`](packages/cli/README.md#before-you-go-live-four-things-on-your-project). ### Offering them an account Ekwo OS works **entirely without an account**, and that will not change: the licence (AGPL-3) forbids making one a condition of using the software. So an account is never asked for, never required to finish anything, and never a gate. It is offered — once, plainly, at a moment the person chose. The good moment is right after `init` succeeds, when they have books and are deciding what to do next. One sentence is enough, and it goes to [cloud.ekwo.ai](https://cloud.ekwo.ai): an address and a six-digit code, no password to invent. **What an account gives them today:** - **The web application**, which opens the same books whenever they would rather click than type. - **A daily backup of every instance they link**, restorable into an empty installation. - **A way to give you their books without handing you a secret**: one connector by URL, `https://mcp.ekwo.ai/mcp`, approved in their browser. No key, no password and no connection string in a file or in the conversation. This is the reason worth saying out loud: it is better for them and better for you. - **A choice of where the books live**: on the Supabase project they own, linked to the account, or on an instance Ekwo runs for them. Do not promise what is not delivered: bank connections, Peppol sending and receiving, and transmission to administrations are operated services that are not offered yet ([`docs/cloud-services.md`](docs/cloud-services.md)). ### Connecting yourself: the MCP server Keeping books acts **as a person**, never with the `service_role` key — the server refuses to start with one. The user gives their client this block (the MCP configuration of the agent — for many clients, `.mcp.json` at the root of a project): ```json { "mcpServers": { "ekwo": { "command": "npx", "args": ["-y", "@ekwo-ai/mcp@latest"], "env": { "SUPABASE_URL": "https://YOURREF.supabase.co", "SUPABASE_ANON_KEY": "the anon (publishable) key", "EKWO_EMAIL": "the administrator's address", "EKWO_PASSWORD": "their password" } } } } ``` From a terminal instead: `ekwo login`, then `ekwo use ""`. With the command line installed, `ekwo mcp` starts the same server: `"command": "ekwo", "args": ["mcp"]`, the same `env`. **The shorter way, for somebody with an account.** Everything above puts an address, a key and a password in a file. With an account there is one URL and nothing else — add `https://mcp.ekwo.ai/mcp` as a custom connector and approve it in the browser: ```sh claude mcp add --transport http ekwo https://mcp.ekwo.ai/mcp ``` In the Claude apps: Settings, Connectors, *Add custom connector*, the same URL including `/mcp`. On the approval screen the person chooses which instance you reach and whether you may write; without that box ticked, you read. ### Common tasks | Task | Command line | MCP tool | |---|---|---| | First company | `ekwo init` creates it | — | | Another company | `ekwo company new "" --country ` | `create_company` | | The companies of the installation | `ekwo company list` | `list_companies` | | Company details (address, VAT number) | — | `update_company_profile` | | A customer | `ekwo contact add "" --country --ref ` | `create_contact` | | The contacts that are probably one party | `ekwo contact duplicates` | `suggest_duplicate_contacts` | | One party created twice, joined | `ekwo contact merge ` | `merge_contacts` | | Accounts and tax codes | the country's set-up page | `list_accounts`, `describe_pack` | | A draft invoice | `ekwo doc new --contact --line "name=…,price=…,account=,tax=" --ref ` | `create_document` | | See the entry before booking | `ekwo post --dry-run` | — | | Book it | `ekwo post ` | `post_document` | | Undo it | `ekwo cancel ` | `cancel_document` | | Who an open line that names nobody is, and naming it | `ekwo line contacts suggest`, then `ekwo line contact set ` | `suggest_line_contacts`, then `set_line_contact` | | A line that names nobody on purpose | `ekwo line unnamed leave --reason …` (undo: `ekwo line unnamed undo `) | `leave_line_unnamed`, `undo_leave_line_unnamed` | | Which open items settle each other, and matching several at once | `ekwo line combinations suggest`, then `ekwo line match …` | `suggest_item_combinations`, then `reconcile_many` | | A small difference, booked with its reason and matched | `ekwo line differences list`, then `ekwo line match … --difference ` | `matching_difference_options`, then `reconcile_with_difference` | | A payment | `ekwo payment record --doc --amount … --date … --bank-account ` | `record_payment` | | Books kept elsewhere (FEC, journal items, a report, a trial balance) | `ekwo import --dry-run --save-mapping map.json`, then `--mapping map.json` | `import_books` (`dry_run` first) | | A bank statement file | `ekwo import camt.053 ` (or `coda`, `cfonb120`) | `import_bank_statement` | | A link the customer opens without an account | — | `share_document` | | The PDF of an invoice or a credit note, with the company's logo | `ekwo doc pdf [--factur-x] [--out file]` | `render_invoice_pdf` | | The electronic invoice of a posted sale (module `einvoicing`) | `ekwo einvoice validate `, then `ekwo einvoice issue ` | `einvoicing_validate`, then `einvoicing_issue` | | The record of a relationship: cards, segments, deals (module `crm`) | `ekwo crm search`, `ekwo crm card `, `ekwo crm board`, then `ekwo crm log …` / `ekwo crm deal move ` | `crm_search`, `crm_card`, `crm_board`, then `crm_log_activity` / `crm_move_deal` | | The contracts of the company, and the invoices they say are due (module `contracts`) | `ekwo contracts list`, `ekwo contracts deadlines`, then `ekwo contracts issue --on ` | `contracts_list`, `contracts_deadlines`, then `contracts_issue_due` | | A received Peppol file, or whether a recipient is on Peppol (no installation needed) | `ekwo peppol validate `, `ekwo peppol lookup ` | — | | The VAT return of a period | — | `vat_return` | | The VAT instalments a company's scheme asks for in a year | `ekwo status` | `instalment_plan` | | Trial balance, ledger | — | `trial_balance`, `general_ledger` | | The result by project, cost centre or site | `ekwo analytic report --axis --from … --to …` | `list_analytic_axes`, `analytic_report` | A line names its account and its tax by **code**, never by rate: several taxes share a rate. The codes are the country's: on its set-up page, and from `list_accounts` once installed. Amounts are decimal strings, `1500.00`, both ways. Pass `--ref` on anything that creates, so that a repeated call returns what the first one made instead of creating it twice. `--json` gives one JSON document per command; exit code 3 is the database refusing, and its sentence is the answer — do not work around it. A declaration is computed by `vat_return()` and frozen by `prepare_filing()`. Sending it to the administration is done **by the user**, on the portal, or by an operator they appoint — see [`docs/filing.md`](docs/filing.md). ### What you must never do - **Never post, cancel, pay or lock without the user's explicit confirmation of that specific action.** Show the draft, or the `--dry-run` entry, and wait. A posted entry is corrected with a credit note, not deleted. For a document the database enforces it: where the company's `agent_posting` is `review` — the default — your `post_document` is refused (`approval_required`) until the user approved that draft as it stands (`ekwo doc approve `); in `autopilot`, in a session the user started with `--autopilot`, or with a key they issued with `--autopilot`, you post directly and the audit trail says so. Autopilot is their choice, never yours: you may make the setting stricter when they ask, and you are refused the rest. - **Never invent a tax rule, a rate, an account or a deadline.** Use the codes the pack carries. Where the pack does not cover the case, say so and bring in the user's accountant; do not pick the nearest code. - **Never present yourself, or Ekwo, as an accountant, a tax adviser or an accounting firm**, and never say a return or a set of accounts is compliant. Ekwo computes from what is booked and from its reading of the rules; the user answers for what they file. Their accountant checks the set-up and the first declarations in the same books; a user without one finds accountants who work with Ekwo at `https://ekwo.ai/partners/directory/`. - **Never use or store the `service_role` key** beyond the one `init` run, and never write a password or a key into a file of a repository. - **Never load the demo company** (`--demo`, `ekwo demo`) into books that are meant to be real unless the user asks for it: it is fictional data. - **Never call a pack certified by Ekwo.** A pack's status is its own word, and there is no status that means certified. ### Working on this repository If the task is to change Ekwo OS rather than use it: [`CONTRIBUTING.md`](CONTRIBUTING.md) is the rules, `npm run typecheck && npm test` the checks, and every country fact belongs in a pack under `packs/`, never in code. --- # Ekwo OS, in one page Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/README.md — on the site: https://ekwo.ai/docs/overview/ **Ekwo** is open source accounting, ready to use on **[Ekwo Cloud](https://cloud.ekwo.ai)**: the web application for your invoices, your bank statements, your VAT returns and the electronic invoices your country uses, in your own instance, with an account opened in a minute. **Ekwo OS** is the free and open source core it runs on, under AGPL-3.0: install it on your own Supabase project and own your accounting data, forever. Built and maintained by **Ekwo**. Ekwo OS is a schema, the rules of each country as data, and the tools — a command line and an MCP server — with which you, your accountant and the AI agent you choose work in the same books, each with their own access. Ekwo reads any supplier invoice, in any language, with the AI model you choose, and every entry is posted on your confirmation. What Ekwo is, and its limits: [DISCLAIMER.md](DISCLAIMER.md). ![An empty Supabase project, npx ekwo-os init, ekwo status, a company, a sale invoice posted and its VAT return prepared, for two countries side by side](docs/demo/install.gif) *From an empty Supabase project to a prepared VAT return, for two countries side by side. How it was recorded: [`docs/demo/`](docs/demo/).* **Try it on your own books.** Already using Claude? [Start with Claude](docs/start-with-claude.md) goes from a free Supabase project to your own books taken over, questioned and your next VAT return prepared, in about twenty minutes. Or open the same books in the web application, [Ekwo Cloud](https://cloud.ekwo.ai). --- ### Why Ekwo > The long version — financial autonomy for every business, accounting as a > commons, a network rather than a vendor — is in [MANIFESTO.md](MANIFESTO.md). **The data belongs to the business, and the work of keeping the books can be done by software the business also owns.** So the whole accounting core is open, the data sits in a Postgres database you control, and the interface is designed for machines as much as for people. Supabase gives the schema a REST API for free, and an MCP server sits on top of it, so an AI agent can book a purchase, match a payment or prepare a VAT return on your own data — as you, under your own row level security, without the data leaving your account. What ships today: - **The core** — schema, posting rules, taxes, reports, financial statements, as migrations you apply to a database you control. - **A country pack for every country listed below**, each a versioned set of data with a year of books that proves it. - **`ekwo`, the command line** — one command installs everything on your own Supabase project; the same tool then keeps books from a terminal. - **The MCP server**, hosted at `https://mcp.ekwo.ai/mcp` or run locally with `npx @ekwo-ai/mcp`, so any AI agent can operate the books. - **Modules** for fixed assets, budgets, corporate income tax and electronic invoicing. - **The compass of the company** — `financial_analysis()` reads, from the posted entries, the aggregates a country pack defines (revenue, equity, cash, receivables, payables…), or, in a country whose pack defines none, thirteen of them read by account type through the generic framework, so that days of cash, net margin, current ratio, equity ratio, days of sales and of purchases outstanding and growth come from the books with nothing to set up. The Analysis screen of Ekwo Cloud and the `financial_analysis` tool of the MCP server read it; [`docs/analysis.md`](docs/analysis.md) says how, and how a pack adds the section. - **Format libraries** under MIT — the files administrations, banks and e-invoicing networks exchange, written and read. Who it is for: a company that wants to keep its own books with an AI at the keyboard, and a founder who wants to know, from those books, how long the cash lasts and how fast customers pay; an accounting firm that runs several companies inside one installation; a developer who needs a real double-entry core with tax rules as data rather than as code; and anyone who wants to leave a proprietary system with the books intact. ### What is in this repository A double-entry accounting core for Postgres. There is no server to run: Supabase turns the schema into a REST API with an OpenAPI description, and row level security decides who sees what. - **Double entry, enforced by the database.** An entry cannot be posted unless it balances, and a locked period refuses writes at the trigger — not in a form validator. - **Documents and entries are two layers.** An invoice answers to EN 16931 and Peppol; an entry answers to the chart of accounts. Keeping them apart keeps both honest. - **Country rules are data.** A tax points at the ledger accounts it posts to and at the boxes of the declaration it feeds. Adding a régime is a row, not a release. - **Every label is data, in every language a country pack publishes.** Identifiers stay English; what a person reads comes from the pack, in the language of the company or of the reader. See [`docs/languages.md`](docs/languages.md). - **Every country a pack, out of the box.** United Arab Emirates (`ae`), Antigua and Barbuda (`ag`), Albania (`al`), Հայաստան (`am`), Angola (`ao`), Argentina (`ar`), Austria (`at`), Australia (`au`), Azərbaycan (`az`), Bosna i Hercegovina (`ba`), Barbados (`bb`), Bangladesh (`bd`), Belgium (`be`), Burkina Faso (`bf`), България (`bg`), البحرين (`bh`), Burundi (`bi`), Bénin (`bj`), Bermuda (`bm`), Brunei Darussalam (`bn`), Bolivia (`bo`), Brasil (`br`), The Bahamas (`bs`), Bhutan (`bt`), Botswana (`bw`), Canada (`ca`), République démocratique du Congo (`cd`), Centrafrique (`cf`), Congo (`cg`), Schweiz (`ch`), Côte d’Ivoire (`ci`), Chile (`cl`), Cameroun (`cm`), 中国 (`cn`), Colombia (`co`), Costa Rica (`cr`), Cabo Verde (`cv`), Cyprus (`cy`), Czechia (`cz`), Germany (`de`), Djibouti (`dj`), Danmark (`dk`), Dominica (`dm`), Dominican Republic (`do`), Algérie (`dz`), Ecuador (`ec`), Estonia (`ee`), مصر (`eg`), España (`es`), Ethiopia (`et`), Finland (`fi`), Fiji (`fj`), France (`fr`), Gabon (`ga`), United Kingdom (`gb`), Grenada (`gd`), საქართველო (`ge`), Guernsey (`gg`), Ghana (`gh`), The Gambia (`gm`), Guinée (`gn`), Guinée équatoriale (`gq`), Ελλάδα (`gr`), Guatemala (`gt`), Guinée-Bissau (`gw`), Guyana (`gy`), Hong Kong (`hk`), Honduras (`hn`), Croatia (`hr`), Magyarország (`hu`), Indonesia (`id`), Ireland (`ie`), Israel (`il`), India (`in`), Ísland (`is`), Italia (`it`), Jersey (`je`), Jamaica (`jm`), Jordan (`jo`), 日本 (`jp`), Kenya (`ke`), Кыргызская Республика (`kg`), កម្ពុជា (`kh`), Comores (`km`), Saint Kitts and Nevis (`kn`), 대한민국 (`kr`), Kuwait (`kw`), Cayman Islands (`ky`), Қазақстан (`kz`), Lao PDR (`la`), Saint Lucia (`lc`), Liechtenstein (`li`), Sri Lanka (`lk`), Lesotho (`ls`), Lietuva (`lt`), Luxembourg (`lu`), Latvija (`lv`), Maroc (`ma`), Moldova (`md`), Crna Gora (`me`), Madagascar (`mg`), Северна Македонија (`mk`), Mali (`ml`), Монгол Улс (`mn`), 澳門 (`mo`), Mauritanie (`mr`), Malta (`mt`), Mauritius (`mu`), Malawi (`mw`), México (`mx`), Malaysia (`my`), Moçambique (`mz`), Namibia (`na`), Niger (`ne`), Nigeria (`ng`), Nicaragua (`ni`), Nederland (`nl`), Norge (`no`), Nepal (`np`), New Zealand (`nz`), Oman (`om`), Panamá (`pa`), Perú (`pe`), Philippines (`ph`), Pakistan (`pk`), Polska (`pl`), Portugal (`pt`), Paraguay (`py`), Qatar (`qa`), Romania (`ro`), Srbija (`rs`), Rwanda (`rw`), Saudi Arabia (`sa`), Seychelles (`sc`), Sverige (`se`), Singapore (`sg`), Slovenia (`si`), Slovensko (`sk`), Sierra Leone (`sl`), Sénégal (`sn`), Suriname (`sr`), El Salvador (`sv`), Eswatini (`sz`), Tchad (`td`), Togo (`tg`), ประเทศไทย (`th`), Ҷумҳурии Тоҷикистон (Республика Таджикистан) (`tj`), Туркменистан (`tm`), Tunisie (`tn`), Türkiye (`tr`), Trinidad and Tobago (`tt`), 臺灣 (`tw`), Tanzania (`tz`), Україна (`ua`), Uganda (`ug`), United States (`us`), Uruguay (`uy`), Ўзбекистон Республикаси (`uz`), Saint Vincent and the Grenadines (`vc`), British Virgin Islands (`vg`), Việt Nam (`vn`), Kosova (`xk`), South Africa (`za`), Zambia (`zm`) and Zimbabwe (`zw`) — each with its chart of accounts, its tax codes, its declaration boxes and its financial statements, and all of them installed by `ekwo init`, so one installation keeps companies in any of these countries. The version and review status of each are in [`docs/packs.md`](docs/packs.md#the-packs-of-this-checkout). - **Statutory files.** The French FEC, XBRL annual accounts, Peppol UBL and Factur-X invoices, recapitulative statements — written from the ledger by the format libraries. - **Tested on real Postgres.** The test suite runs the migrations, the seeds, the accounting scenarios, the installer and the MCP server against Postgres compiled to WebAssembly. ### Modules The core lives in the `public` schema. Beside it, a module is a schema of its own, with its own migrations, row level security and tests, enabled per company. | Module code | Schema | What it does | |---|---|---| | [`assets`](modules/fixed-assets/) | `fixed_assets` | Fixed assets, their depreciation schedule and their disposal. Durations and methods are country pack data. | | [`budgets`](modules/budgets/) | `budgets` | A budget per financial year and the variance against the ledger. | | [`tax`](modules/corporate-tax/) | `tax` | Corporate income tax estimated from the books: adjustments, losses and rates are country pack data. An estimate until an owner calls it final. | | [`einvoicing`](modules/einvoicing/) | `einvoicing` | The electronic invoice of a posted sale, in the format the company's country pack declares, checked against the rules of that format, and every sending with its state. | ```sh npx -y ekwo-os@latest module list # what is here, and what the database holds npx -y ekwo-os@latest module enable assets --company "…" # turn one on for a company ``` Then add the module's schema to the project's exposed schemas (Supabase dashboard → Project Settings → API); `ekwo module enable` prints the line. A module never writes the ledger directly: it hands its lines to the core, which applies the same balancing, numbering and lock rules as everywhere else. [`docs/modules.md`](docs/modules.md) is how to write one. ### Install on your own Supabase project Create a project at [supabase.com](https://supabase.com) — the free plan is enough to start — and point the installer at it. Node 20 or later is the only thing you need locally: no Supabase CLI, no Docker, no clone. ```sh npx -y ekwo-os@latest init ``` It asks for the connection string, the country, the chart of accounts and the language where the pack offers a choice, your organisation, the first company and the address of the first administrator. Then it applies the migrations, loads every country pack, creates that administrator in *your* Supabase Auth and opens the first financial year. Running it twice creates nothing twice. Ekwo does not create the project and does not pay for it: your books are on your account from the first row. The installation guide, with every flag and the four settings to change on your project before going live, is [`packages/cli`](packages/cli/README.md). Asking an AI agent to do it with you? Point it at [`AGENTS.md`](AGENTS.md). Each country also has its own step-by-step page on [ekwo.ai/countries](https://ekwo.ai/countries/), and the whole documentation is served to a model as `https://ekwo.ai/llms.txt`. #### Keeping it running ```sh npx -y ekwo-os@latest status # schema version installed against available, instance, companies npx -y ekwo-os@latest migrate # apply what a new release adds npx -y ekwo-os@latest doctor # every object this release defines, row level security, privileges ``` #### By hand, with the Supabase CLI The installer is a convenience, not a requirement: the migrations are ordinary SQL, and `supabase db push` writes the same history table `ekwo migrate` does. ```sh git clone https://github.com/Ekwo-ai/ekwo-os.git && cd ekwo-os supabase link --project-ref supabase db push # applies supabase/migrations in order ``` Then apply the reference seeds, all of them, in this order (the list is written from `packs/` and is the one `supabase/config.toml` declares):
The reference seeds ```sh psql "$DATABASE_URL" -f supabase/seed/00_currencies.sql psql "$DATABASE_URL" -f supabase/seed/00_territories.sql psql "$DATABASE_URL" -f supabase/seed/05_framework_generic.sql psql "$DATABASE_URL" -f supabase/seed/100_pack_uy.sql psql "$DATABASE_URL" -f supabase/seed/101_pack_ec.sql psql "$DATABASE_URL" -f supabase/seed/102_pack_bo.sql psql "$DATABASE_URL" -f supabase/seed/103_pack_py.sql psql "$DATABASE_URL" -f supabase/seed/104_pack_do.sql psql "$DATABASE_URL" -f supabase/seed/105_pack_cr.sql psql "$DATABASE_URL" -f supabase/seed/106_pack_gt.sql psql "$DATABASE_URL" -f supabase/seed/107_pack_pa.sql psql "$DATABASE_URL" -f supabase/seed/108_pack_in.sql psql "$DATABASE_URL" -f supabase/seed/109_pack_cn.sql psql "$DATABASE_URL" -f supabase/seed/10_pack_be.sql psql "$DATABASE_URL" -f supabase/seed/110_pack_ge.sql psql "$DATABASE_URL" -f supabase/seed/111_pack_md.sql psql "$DATABASE_URL" -f supabase/seed/112_pack_rs.sql psql "$DATABASE_URL" -f supabase/seed/113_pack_ba.sql psql "$DATABASE_URL" -f supabase/seed/114_pack_al.sql psql "$DATABASE_URL" -f supabase/seed/115_pack_mk.sql psql "$DATABASE_URL" -f supabase/seed/116_pack_me.sql psql "$DATABASE_URL" -f supabase/seed/117_pack_bh.sql psql "$DATABASE_URL" -f supabase/seed/118_pack_om.sql psql "$DATABASE_URL" -f supabase/seed/119_pack_gh.sql psql "$DATABASE_URL" -f supabase/seed/11_pack_fr.sql psql "$DATABASE_URL" -f supabase/seed/120_pack_tz.sql psql "$DATABASE_URL" -f supabase/seed/121_pack_ug.sql psql "$DATABASE_URL" -f supabase/seed/122_pack_rw.sql psql "$DATABASE_URL" -f supabase/seed/123_pack_xk.sql psql "$DATABASE_URL" -f supabase/seed/124_pack_kz.sql psql "$DATABASE_URL" -f supabase/seed/125_pack_pk.sql psql "$DATABASE_URL" -f supabase/seed/126_pack_bd.sql psql "$DATABASE_URL" -f supabase/seed/127_pack_lk.sql psql "$DATABASE_URL" -f supabase/seed/128_pack_am.sql psql "$DATABASE_URL" -f supabase/seed/129_pack_az.sql psql "$DATABASE_URL" -f supabase/seed/12_pack_lu.sql psql "$DATABASE_URL" -f supabase/seed/130_pack_hn.sql psql "$DATABASE_URL" -f supabase/seed/131_pack_sv.sql psql "$DATABASE_URL" -f supabase/seed/132_pack_ni.sql psql "$DATABASE_URL" -f supabase/seed/133_pack_et.sql psql "$DATABASE_URL" -f supabase/seed/134_pack_mu.sql psql "$DATABASE_URL" -f supabase/seed/135_pack_mz.sql psql "$DATABASE_URL" -f supabase/seed/136_pack_ao.sql psql "$DATABASE_URL" -f supabase/seed/137_pack_zm.sql psql "$DATABASE_URL" -f supabase/seed/138_pack_bm.sql psql "$DATABASE_URL" -f supabase/seed/139_pack_ky.sql psql "$DATABASE_URL" -f supabase/seed/13_pack_ee.sql psql "$DATABASE_URL" -f supabase/seed/140_pack_vg.sql psql "$DATABASE_URL" -f supabase/seed/141_pack_gg.sql psql "$DATABASE_URL" -f supabase/seed/142_pack_qa.sql psql "$DATABASE_URL" -f supabase/seed/143_pack_kw.sql psql "$DATABASE_URL" -f supabase/seed/144_pack_bn.sql psql "$DATABASE_URL" -f supabase/seed/145_pack_mo.sql psql "$DATABASE_URL" -f supabase/seed/146_pack_je.sql psql "$DATABASE_URL" -f supabase/seed/147_pack_zw.sql psql "$DATABASE_URL" -f supabase/seed/148_pack_br.sql psql "$DATABASE_URL" -f supabase/seed/14_pack_gb.sql psql "$DATABASE_URL" -f supabase/seed/15_pack_us.sql psql "$DATABASE_URL" -f supabase/seed/16_pack_ie.sql psql "$DATABASE_URL" -f supabase/seed/17_pack_nl.sql psql "$DATABASE_URL" -f supabase/seed/18_pack_de.sql psql "$DATABASE_URL" -f supabase/seed/19_pack_es.sql psql "$DATABASE_URL" -f supabase/seed/200_pack_jm.sql psql "$DATABASE_URL" -f supabase/seed/201_pack_bb.sql psql "$DATABASE_URL" -f supabase/seed/202_pack_dm.sql psql "$DATABASE_URL" -f supabase/seed/203_pack_gd.sql psql "$DATABASE_URL" -f supabase/seed/204_pack_lc.sql psql "$DATABASE_URL" -f supabase/seed/205_pack_sr.sql psql "$DATABASE_URL" -f supabase/seed/206_pack_kg.sql psql "$DATABASE_URL" -f supabase/seed/207_pack_sz.sql psql "$DATABASE_URL" -f supabase/seed/208_pack_ls.sql psql "$DATABASE_URL" -f supabase/seed/209_pack_mn.sql psql "$DATABASE_URL" -f supabase/seed/20_pack_sn.sql psql "$DATABASE_URL" -f supabase/seed/210_pack_tj.sql psql "$DATABASE_URL" -f supabase/seed/211_pack_uz.sql psql "$DATABASE_URL" -f supabase/seed/212_pack_bt.sql psql "$DATABASE_URL" -f supabase/seed/213_pack_la.sql psql "$DATABASE_URL" -f supabase/seed/214_pack_np.sql psql "$DATABASE_URL" -f supabase/seed/215_pack_bi.sql psql "$DATABASE_URL" -f supabase/seed/216_pack_dj.sql psql "$DATABASE_URL" -f supabase/seed/217_pack_mw.sql psql "$DATABASE_URL" -f supabase/seed/218_pack_sc.sql psql "$DATABASE_URL" -f supabase/seed/219_pack_jo.sql psql "$DATABASE_URL" -f supabase/seed/21_pack_ci.sql psql "$DATABASE_URL" -f supabase/seed/221_pack_li.sql psql "$DATABASE_URL" -f supabase/seed/222_pack_fj.sql psql "$DATABASE_URL" -f supabase/seed/22_pack_bj.sql psql "$DATABASE_URL" -f supabase/seed/23_pack_bf.sql psql "$DATABASE_URL" -f supabase/seed/24_pack_cm.sql psql "$DATABASE_URL" -f supabase/seed/25_pack_cf.sql psql "$DATABASE_URL" -f supabase/seed/26_pack_km.sql psql "$DATABASE_URL" -f supabase/seed/27_pack_cg.sql psql "$DATABASE_URL" -f supabase/seed/28_pack_ga.sql psql "$DATABASE_URL" -f supabase/seed/29_pack_gn.sql psql "$DATABASE_URL" -f supabase/seed/300_pack_gm.sql psql "$DATABASE_URL" -f supabase/seed/301_pack_sl.sql psql "$DATABASE_URL" -f supabase/seed/303_pack_bw.sql psql "$DATABASE_URL" -f supabase/seed/304_pack_na.sql psql "$DATABASE_URL" -f supabase/seed/30_pack_gw.sql psql "$DATABASE_URL" -f supabase/seed/31_pack_gq.sql psql "$DATABASE_URL" -f supabase/seed/32_pack_ml.sql psql "$DATABASE_URL" -f supabase/seed/33_pack_ne.sql psql "$DATABASE_URL" -f supabase/seed/34_pack_cd.sql psql "$DATABASE_URL" -f supabase/seed/35_pack_td.sql psql "$DATABASE_URL" -f supabase/seed/36_pack_tg.sql psql "$DATABASE_URL" -f supabase/seed/37_pack_it.sql psql "$DATABASE_URL" -f supabase/seed/38_pack_id.sql psql "$DATABASE_URL" -f supabase/seed/39_pack_my.sql psql "$DATABASE_URL" -f supabase/seed/400_pack_ag.sql psql "$DATABASE_URL" -f supabase/seed/401_pack_bs.sql psql "$DATABASE_URL" -f supabase/seed/402_pack_gy.sql psql "$DATABASE_URL" -f supabase/seed/403_pack_kn.sql psql "$DATABASE_URL" -f supabase/seed/404_pack_vc.sql psql "$DATABASE_URL" -f supabase/seed/405_pack_tt.sql psql "$DATABASE_URL" -f supabase/seed/406_pack_tm.sql psql "$DATABASE_URL" -f supabase/seed/407_pack_kh.sql psql "$DATABASE_URL" -f supabase/seed/408_pack_cv.sql psql "$DATABASE_URL" -f supabase/seed/409_pack_mg.sql psql "$DATABASE_URL" -f supabase/seed/40_pack_au.sql psql "$DATABASE_URL" -f supabase/seed/410_pack_mr.sql psql "$DATABASE_URL" -f supabase/seed/41_pack_nz.sql psql "$DATABASE_URL" -f supabase/seed/42_pack_mx.sql psql "$DATABASE_URL" -f supabase/seed/43_pack_pt.sql psql "$DATABASE_URL" -f supabase/seed/44_pack_ph.sql psql "$DATABASE_URL" -f supabase/seed/45_pack_ar.sql psql "$DATABASE_URL" -f supabase/seed/46_pack_cl.sql psql "$DATABASE_URL" -f supabase/seed/47_pack_co.sql psql "$DATABASE_URL" -f supabase/seed/48_pack_pe.sql psql "$DATABASE_URL" -f supabase/seed/49_pack_ng.sql psql "$DATABASE_URL" -f supabase/seed/50_pack_sg.sql psql "$DATABASE_URL" -f supabase/seed/51_pack_jp.sql psql "$DATABASE_URL" -f supabase/seed/52_pack_hk.sql psql "$DATABASE_URL" -f supabase/seed/53_pack_tw.sql psql "$DATABASE_URL" -f supabase/seed/54_pack_kr.sql psql "$DATABASE_URL" -f supabase/seed/55_pack_vn.sql psql "$DATABASE_URL" -f supabase/seed/56_pack_th.sql psql "$DATABASE_URL" -f supabase/seed/57_pack_ua.sql psql "$DATABASE_URL" -f supabase/seed/58_pack_ca.sql psql "$DATABASE_URL" -f supabase/seed/60_pack_ae.sql psql "$DATABASE_URL" -f supabase/seed/61_pack_se.sql psql "$DATABASE_URL" -f supabase/seed/62_pack_ch.sql psql "$DATABASE_URL" -f supabase/seed/63_pack_at.sql psql "$DATABASE_URL" -f supabase/seed/64_pack_pl.sql psql "$DATABASE_URL" -f supabase/seed/65_pack_dk.sql psql "$DATABASE_URL" -f supabase/seed/66_pack_no.sql psql "$DATABASE_URL" -f supabase/seed/67_pack_fi.sql psql "$DATABASE_URL" -f supabase/seed/68_pack_cz.sql psql "$DATABASE_URL" -f supabase/seed/69_pack_sk.sql psql "$DATABASE_URL" -f supabase/seed/70_pack_hu.sql psql "$DATABASE_URL" -f supabase/seed/71_pack_sa.sql psql "$DATABASE_URL" -f supabase/seed/72_pack_ro.sql psql "$DATABASE_URL" -f supabase/seed/73_pack_bg.sql psql "$DATABASE_URL" -f supabase/seed/74_pack_hr.sql psql "$DATABASE_URL" -f supabase/seed/75_pack_si.sql psql "$DATABASE_URL" -f supabase/seed/76_pack_gr.sql psql "$DATABASE_URL" -f supabase/seed/77_pack_lt.sql psql "$DATABASE_URL" -f supabase/seed/78_pack_lv.sql psql "$DATABASE_URL" -f supabase/seed/79_pack_cy.sql psql "$DATABASE_URL" -f supabase/seed/80_pack_mt.sql psql "$DATABASE_URL" -f supabase/seed/81_pack_is.sql psql "$DATABASE_URL" -f supabase/seed/82_pack_tr.sql psql "$DATABASE_URL" -f supabase/seed/83_pack_eg.sql psql "$DATABASE_URL" -f supabase/seed/84_pack_ma.sql psql "$DATABASE_URL" -f supabase/seed/85_pack_tn.sql psql "$DATABASE_URL" -f supabase/seed/86_pack_dz.sql psql "$DATABASE_URL" -f supabase/seed/87_pack_il.sql psql "$DATABASE_URL" -f supabase/seed/88_pack_za.sql psql "$DATABASE_URL" -f supabase/seed/89_pack_ke.sql ```
Skip `supabase/seed/90_demo_company.sql` unless you want sample data. Then, as a signed-in user: `init_instance()`, `claim_instance_admin()`, a `companies` row with yourself as `owner` in `company_members`, `install_country_template()` and a first `fiscal_years` row — the same steps the installer runs. ### The schema in twenty lines ``` instance one row: who installed it, where, which edition instance_admins instance administrators capabilities ── role_capabilities what may be done, and what each preset holds companies ─┬─ company_members who may read or write, and what they may do ├─ company_invitations an address invited, a token hashed ├─ api_keys machine access, scoped to capabilities ├─ fiscal_years periods, open or closed ├─ accounts chart of accounts, 18 account types ├─ journals ── journal_sequences ├─ contacts customers, suppliers, employees ├─ taxes ── tax_postings ledger account + declaration box, per tax ├─ entries ── entry_lines the ledger; lines carry the truth ├─ products what a line is filled in from, never stock ├─ documents ── document_lines invoices, credit notes, quotes ├─ payments money in and out ├─ reconciliations bilateral matching, by amount ├─ bank_accounts ── bank_statements ── bank_transactions ├─ analytic_axes ── analytic_values ── entry_line_analytics └─ attachments files; an invoice's piece on its document user_preferences one row per person, null everywhere ``` `post_document()` turns a document into an entry. `trial_balance`, `general_ledger`, `aged_balance`, `vat_return`, `ec_sales_list`, `financial_statement` and `fec_lines` read the ledger back. `opening_balance()` takes over the balances of whatever kept the books before, and `close_fiscal_year()` closes a year the way the country pack says; `reopen_fiscal_year()` reopens it to correct it, and `close_fiscal_year_finally()` freezes it for good where the country's law asks for that. [`docs/schema.md`](docs/schema.md) describes every table and column, and [`docs/mapping.md`](docs/mapping.md) lines them up against EN 16931. ### Who may do what One installation belongs to one customer, so there is no `tenant_id`. `instance_admins` says who may create companies and invite people, and `company_members` gives each person a preset on each company: | Preset | Holds | |---|---| | `viewer` | every `.read` — the books, the documents, the chart, the catalogue | | `client` | what a viewer holds, plus handing a file over to whoever keeps the books | | `accountant` | that, plus writing and posting, matching, the settings and the year-end close | | `owner` | that, plus the company itself and its members | What the policies actually test is a **capability** — `documents.post`, `payments.write`, `year_end.close` and the rest of `select * from capabilities`. A member can be granted or refused one capability without inventing a role. A firm keeps the books of many companies in one installation, and the person who runs one of them is a `client` of that one and sees no other ([`docs/firms.md`](docs/firms.md)). People are invited with `invite_member()`; your users live in your own Supabase Auth, and Ekwo never holds an account. **Keys for machines.** A script — a nightly import, a till, a bank feed — gets a key from `create_api_key()`: scoped to one company and a list of capabilities, never more than the person who issued it holds, stored as a hash, and withdrawn with `revoke_api_key()`. It reaches the REST API through the `X-Ekwo-Api-Key` header ([`docs/machine-access.md`](docs/machine-access.md)). Never hand a script the `service_role` key. ### The TypeScript packages - [`ekwo-os`](packages/cli/) — the `ekwo` command line: installing, operating, and keeping books as a signed-in person. Every command takes `--json`. - [`@ekwo-ai/mcp`](packages/mcp/) — the MCP server. It acts **as the user**, never as `service_role`, and every write goes through the schema's own functions. Hosted at `https://mcp.ekwo.ai/mcp` for clients that add remote servers (sign-in in the browser, nothing stored in a configuration file), or `npx -y @ekwo-ai/mcp@latest` over stdio. - [`@ekwo-ai/core`](packages/core/) — the types of the schema, a typed client, and the book-keeping functions the command line and the MCP server share. ```ts import { EkwoClient } from '@ekwo-ai/core'; import { createClient } from '@supabase/supabase-js'; const ekwo = new EkwoClient(createClient(url, key)); await ekwo.postDocument(documentId); const balance = await ekwo.trialBalance({ companyId, from: '2026-01-01', to: '2026-12-31' }); const boxes = await ekwo.vatReturn({ companyId, from: '2026-07-01', to: '2026-09-30' }); ``` ### Format libraries [`packages/formats/`](packages/formats/) holds one MIT package per file format, organised by format and never by country. None imports the core: the core produces rows, and a library turns rows into a file, or a file into rows. - **Written from the ledger:** the French FEC ([`fec`](packages/formats/fec/)), XBRL annual accounts ([`xbrl-cbso`](packages/formats/xbrl-cbso/)), a periodic VAT return ([`vat-consignment`](packages/formats/vat-consignment/)), and four recapitulative statements of European Union supplies ([`intra-consignment`](packages/formats/intra-consignment/), [`des`](packages/formats/des/), [`ecdf`](packages/formats/ecdf/), [`vd`](packages/formats/vd/)). - **Electronic invoices, written and read:** [`peppol-ubl`](packages/formats/peppol-ubl/) (Peppol BIS Billing 3.0) and [`factur-x`](packages/formats/factur-x/) (Factur-X and ZUGFeRD). Both also read a received invoice into the same shape, ready to become a purchase draft. - **Any received invoice, read:** [`document-reading`](packages/document-reading/) reads a CII, UBL or Factur-X file exactly, and publishes the schema and the prompt a vision model reads a photograph or a plain PDF with, so both arrive as the same `ReceivedInvoice` and the same purchase draft. - **Bank statements, read:** [`camt053`](packages/formats/camt053/), [`coda`](packages/formats/coda/), [`cfonb120`](packages/formats/cfonb120/). - **Books kept elsewhere, read:** [`trial-balance`](packages/formats/trial-balance/), [`journal-items`](packages/formats/journal-items/), [`journal-report`](packages/formats/journal-report/), [`transaction-journal`](packages/formats/transaction-journal/), [`xaf`](packages/formats/xaf/) and the FEC — what `ekwo import` takes over ([`docs/compatibility.md`](docs/compatibility.md)). ### Community and cloud The line is operational, not functional. Everything a bookkeeper can do alone is here and always will be. | Ekwo OS, on your Supabase | Managed edition, on [ekwo.ai](https://ekwo.ai) | |---|---| | The whole schema, migrations, row level security | Provisioning and running the instance | | Journals, entries, matching, charts of accounts | Backups, restores, version upgrades | | Invoicing, credit notes, taxes, reports, statutory files | AI agents you set up, acting on your instructions | | Importing bank files and books kept elsewhere | Bank connections under contract | | Writing and checking electronic invoices | A Peppol access point to send and receive them | | Everything above, forever, for nothing | Transmission to administrations, on the business's instruction | The test: does it keep working on its own, with us or without us? If yes, it belongs here, under AGPL, and no licence key gates it. If no, it is a service, because something has to be kept alive for it — a contract, a certificate, a credential, a machine. [`docs/cloud-services.md`](docs/cloud-services.md) lists them, and says what will never be sold. ### Support Three ways to get help, from the open to the dedicated: - **In the open, for everyone.** [Issues](https://github.com/Ekwo-ai/ekwo-os/issues) for a bug or a rule that is wrong for your country, with the text of law cited; [Discussions](https://github.com/Ekwo-ai/ekwo-os/discussions) for a question or an idea; the [Ekwo AI Discord](https://discord.gg/dhAQAVhWMG) to talk it through with the people who use, build on and write Ekwo. The team reads all three, and a fix lands in this repository for everyone. - **By e-mail, with Hosted and Pro.** A company or a firm on [Ekwo Cloud](https://cloud.ekwo.ai) writes from its Support page and gets a written answer from the people who write Ekwo. What each plan includes: [ekwo.ai/pricing](https://ekwo.ai/pricing/). - **On quote: Ekwo Consulting.** The services line of Ekwo, for what no plan covers — a country pack written or reviewed with a professional of that country, a module, a connector to the software you already run, a migration done with you, onboarding and training, or a named contact with an agreed response time. A scope, a price and a date before anything starts, and what belongs in this repository is published here: [ekwo.ai/consulting](https://ekwo.ai/consulting/). ### Security Row level security is the whole model: every table carries it, every policy asks one question — `has_capability()` — and the reports run as the caller. An anonymous request sees nothing. The MCP server and the command line refuse a `service_role` key for keeping books, and the CI fails if a table ever arrives without a policy. Three things the schema cannot do for you, printed by `ekwo init` at the end of every installation: **turn off public sign-ups** on your Supabase project, **keep two administrators**, and **keep the `service_role` key off every machine that does not need it**. See [`packages/cli`](packages/cli/README.md#before-you-go-live-four-things-on-your-project) and [SECURITY.md](SECURITY.md). ### What this is not Ekwo is open source data infrastructure. It is not an accounting firm and gives no accounting, tax, financial, legal or investment advice. Your books, returns and filings are yours; a country pack is a reading of the rules at a date, and a review is a professional's good-faith reading, not a guarantee. Where accounting and tax are regulated professions, consult a professional authorised in your country. [DISCLAIMER.md](DISCLAIMER.md) says this in full, and is published at [ekwo.ai/disclaimer](https://ekwo.ai/disclaimer/). Read it before you file anything. ### Finding your way Most folders carry a short README saying what lives there: [`supabase/`](supabase/), [`modules/`](modules/), [`packages/cli/`](packages/cli/), [`packages/mcp/`](packages/mcp/), [`packages/core/`](packages/core/), [`tests/`](tests/) and [`docs/`](docs/), which holds the long-form reference. Each country pack under [`packs/`](packs/) has its own README. Where the project is heading: [`docs/road-to-1.0.md`](docs/road-to-1.0.md). A few names are renamed before 1.0, each with an alias for at least one minor release: [the names that change before 1.0](docs/releasing.md#names-that-change-before-10). ### Development ```sh npm install npm run typecheck npm test # applies every migration and seed to an in-memory Postgres npm run build ``` Tests use [PGlite](https://pglite.dev): no Docker and no local Postgres. A development checkout needs Node 22 or later. ### Contributing Issues and pull requests are welcome. Contributions require the [Contributor Licence Agreement](CLA.md); see [CONTRIBUTING.md](CONTRIBUTING.md) for how to work on the schema without breaking a database somebody already installed. ### Licence [AGPL-3.0-only](LICENSE) © EKWO OÜ (Estonian registry code 14510673), trading as Ekwo. Installing Ekwo OS and running it for your own organisation — modified or not — puts no obligation on you. The share-alike clause applies only if you modify it *and* offer that modified version to people outside your organisation over a network. **The format libraries under [`packages/formats/`](packages/formats/) are MIT**, each with its own `LICENSE`. A file format should be readable and writable by anyone. "Ekwo" and the Ekwo logo are trademarks and are not covered by the licence. Fork the code; do not call the fork Ekwo. --- # Start with Claude: try Ekwo on your own books Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/docs/start-with-claude.md — on the site: https://ekwo.ai/docs/start-with-claude/ This is the shortest way to see your own books in Ekwo: a free database of your own, one command to install, and then Claude — the desktop application or Claude Code — doing the rest in plain sentences. You bring an export of your books from wherever they are kept today; Claude takes them over, answers questions about them and prepares your next VAT return. The web application, [Ekwo Cloud](https://cloud.ekwo.ai), opens this same instance whenever you would rather click than type. It takes about twenty minutes, most of it in the Supabase dashboard. You do not need to be a developer, but you will paste a few lines into a terminal and one block into a settings file. **Before you start, know what is not there yet** (the full list is [at the end](#what-this-does-not-do-yet)): Ekwo prepares a declaration and you file it; imported history carries no VAT; the reconciliation marks of your old books are not re-applied. ### What you need - A **Supabase account**. The free plan is enough. Ekwo never sees the project: it is yours from the first row. - **Node.js 20 or later**, from [nodejs.org](https://nodejs.org). Type `node --version` in a terminal to check. - **Claude Desktop** ([claude.ai/download](https://claude.ai/download)) or **Claude Code**. - **An export of your books.** The simplest is a trial balance as a CSV file — account, debit, credit — which every ledger can produce. A full export from another ledger works too. [`compatibility.md`](compatibility.md) lists every export Ekwo reads, with the official page that says how to produce each one. Try it on a copy first: nothing here touches the software your books come from. ### 1. Create a free Supabase project 1. Sign in at [supabase.com](https://supabase.com) and create a **new project**. Pick a name, a region near you, and a **database password** — write it down, you need it once, in the next step. 2. When the project is ready, collect three things from the dashboard: - **Connect** → **Session pooler** → the connection string, with your database password where it says `[YOUR-PASSWORD]`. Take the session pooler line rather than the direct one, which many networks cannot reach. - **Project Settings → API Keys**: the **publishable key** (`sb_publishable_…`, or the older **`anon`** key). This is the key Claude will use. - On the same page, the **secret key** (`sb_secret_…`, or the legacy **`service_role`** key). The installer uses it once, to create your user, and writes it nowhere. The **Project URL** is `https://.supabase.co`, where `` is the part after `postgres.` in the connection string. ### 2. Install Ekwo into it In a terminal: ```sh npx -y ekwo-os@latest init ``` The installer asks its questions one by one: | It asks | What to answer | |---|---| | The connection string | The session pooler line from step 1, with your password in it | | The country | The country whose rules your books follow. Nothing is preselected | | Your organisation, then the first company | Names. The company is the one whose books you are bringing | | The first day of the financial year | Only where the country does not fix one | | The chart of accounts and the language of the books | Only where the country publishes more than one | | How often the company files its VAT return | Only where that depends on the company | | Your main bank account | Optional, written the way your country's banks write it. Enter skips it | | The administrator's e-mail address, the secret key and a password | This is **you**: the user Claude will sign in as. Choose a real password and keep it | It takes a few seconds and ends with a summary, then lists **four things to do on your project** — among them, switching off public sign-up. Do them while the dashboard is open; they are explained in the [installation guide](../packages/cli/README.md#before-you-go-live-four-things-on-your-project). At the very end it offers to register the installation with Ekwo for security advisories and release notes; it is optional, and the [installation guide](../packages/cli/README.md#registering-with-ekwo) lists what it sends. ### 3. Connect Ekwo to Claude The connection is the Ekwo MCP server, [`@ekwo-ai/mcp`](../packages/mcp/README.md), published on npm and listed in the official MCP registry as `ai.ekwo/mcp`. Claude starts it on your computer. It signs in to your project as the user you just created, and can do exactly what that user can do and nothing more. It needs four values: | Variable | Value | |---|---| | `SUPABASE_URL` | `https://.supabase.co` | | `SUPABASE_ANON_KEY` | The publishable key, or the legacy `anon` key | | `EKWO_EMAIL` | The administrator's address you gave the installer | | `EKWO_PASSWORD` | Its password | #### In Claude Desktop 1. Open **Settings** from the Claude menu of your computer's menu bar, then **Developer → Edit Config**. That opens `claude_desktop_config.json`. 2. Put this in it — or, if the file already has an `mcpServers` section, add the `"ekwo"` entry inside it: ```json { "mcpServers": { "ekwo": { "command": "npx", "args": ["-y", "@ekwo-ai/mcp@latest"], "env": { "SUPABASE_URL": "https://YOURREF.supabase.co", "SUPABASE_ANON_KEY": "sb_publishable_…", "EKWO_EMAIL": "you@example.com", "EKWO_PASSWORD": "the password you chose" } } } } ``` 3. **Quit Claude Desktop completely and open it again.** In a new conversation, the **+** button → **Connectors** lists `ekwo`. If it does not appear, the server's log is `mcp-server-ekwo.log`, in `~/Library/Logs/Claude` on macOS or `%APPDATA%\Claude\logs` on Windows. #### In Claude Code ```sh claude mcp add --scope user \ --env SUPABASE_URL=https://YOURREF.supabase.co \ --env SUPABASE_ANON_KEY=sb_publishable_… \ --env EKWO_EMAIL=you@example.com \ --env EKWO_PASSWORD='the password you chose' \ --transport stdio ekwo -- npx -y @ekwo-ai/mcp@latest ``` `--scope user` keeps the entry in your own `~/.claude.json`. Do not use `--scope project`: it would write the password into a file meant to be committed. Then run `/mcp` inside Claude Code: `ekwo` should read **connected**. The password sits in plain text in either file, like any value in a client's configuration; keep the file to yourself. **With an Ekwo Cloud account**, there is a shorter way with nothing in a file: add `https://mcp.ekwo.ai/mcp` as a custom connector and approve it in your browser. [`packages/mcp`](../packages/mcp/README.md) explains both routes. ### 4. Several companies, several countries Start a conversation. Claude reads the description of every tool, so you speak about your books, not about tools. **"Is Ekwo connected? List my companies."** Claude calls `status` and `list_companies`: the schema version, and the company the installer created, with you as its owner. One installation keeps the books of as many companies as you like, in as many countries: the installer loads the rules of every country Ekwo has a pack for. **"Create a second company, Harbourlight Ledger Ltd, in the United Kingdom, its financial year starting on 1 January 2026."** Claude calls `create_company`. The company gets its country's chart of accounts, journals, taxes and VAT return, in its own currency, with you as its owner: | Company | Country | Currency | Your role | |---|---|---|---| | Põhjatuul OÜ | EE | EUR | owner | | Harbourlight Ledger Ltd | GB | GBP | owner | Every tool that reads or writes the books names its company, so tell Claude which one you mean whenever it could be either. Where a country leaves a choice open — the first day of the year, a chart, a language — the tool refuses to guess, and Claude asks you. The command line does the same: `ekwo company new` creates a company, and `ekwo use` picks the one the next commands run on. An installation with no single first company — a group, a firm — can start with `ekwo init --no-company`; see the [installation guide](../packages/cli/README.md#several-countries-in-one-installation-init---no-company). ### 5. Ask Claude to take over your books **"Here is the trial balance of Põhjatuul OÜ at 1 January 2026. Import it — show me first what you would do."** Attach the CSV (in Claude Code, give its path). Claude calls `import_books` with `dry_run` on, which writes nothing. The answer is the **correspondence**: for every account of your old books, the account of the new chart it would go to, and why. A few lines of it, from the two companies above: | Old account | Proposed | Basis, and why | |---|---|---| | 101000 Bank current account | 1010 | suggested, same digits — its name is the one 1010 has in the chart | | 120000 Customers | 1200 | suggested, same digits — its name says a receivable, and 1200 is one | | 610 Accounts receivable | 1100 | suggested, kind — 6100 has the same digits but is an expense account, so the chart's receivable is proposed instead | | 090 Business current account | — | none — the chart has neither the code nor its digits | **Read every line before you agree.** Only the same code, confirmed by what the file says of the account, is `exact`; everything else is `suggested` and waits for you, or `none`. Two charts can use the same digits for different things, so a suggestion can be wrong. Nothing is posted while a line is only suggested. **"610 is 1100, as you suggest. 090 is the bank current account, 1300."** Claude runs the rehearsal again with your answers. When nothing is left open, the database runs the whole import and takes it back, so what you see is what would happen, and any refusal is the real one. When every suggestion is right: **"Every suggestion is right, accept them."** **"That's right. Import it for real."** The opening entry is posted, all of it or none of it. The same file a second time is refused rather than counted twice. For a larger history — the entries of a whole year — the steps are the same. A file that does not balance, or a date it does not make unambiguous, is refused by name rather than guessed. The tool takes up to 256 KiB of text; beyond that it answers with the `ekwo import` command that reads the files from your disk and runs the same import ([`import.md`](import.md)). Claude Code can run it for you. Bank statements are not books: say **"import this bank statement"** and Claude uses `import_bank_statement`, which records the lines to be matched and books nothing. ### 6. Ask questions, prepare a return Now it is your books. Sentences that work, and what answers them: | You say | Claude uses | |---|---| | "Show me the trial balance for 2026." | `trial_balance` | | "Every movement on the customers account." | `general_ledger` | | "Who owes me money, and since when?" | `aged_balance` | | "Invoice Lõuna Pagarid 1 000 for consulting at the standard rate, and post it." | `search_contacts`, `create_document`, `post_document` | | "Send them a link to the invoice." | `share_document` | | "Prepare my VAT return for January." | `vat_return` | The return is computed from what was booked in Ekwo during the period, box by box, in the form the country's administration uses. Claude finds its way on its own: the server tells it, at the handshake, what to call first and how to correct what is posted. The same first session, tool by tool, is in [`agents.md`](agents.md). **Filing is yours.** Ekwo prepares the figures; you send them on your tax administration's portal, or give them to whoever files for you. What a declaration goes through after it is computed — freezing it, keeping what was sent, noticing a period that changed afterwards — is in [`filing.md`](filing.md). ### What this does not do yet - **No filing.** Ekwo prepares a declaration and does not transmit it to an administration. Sending it, and answering for it, is yours. - **No VAT on imported history.** An imported line feeds the ledger, the balances and the financial statements, and no box of a VAT return: a period kept elsewhere was declared from where it was kept. - **No reconciliation marks.** Open items are matched again in Ekwo, with `reconcile` ("match this payment with that invoice"). - **No new accounts.** An old account the new chart does not have is pointed at one that exists, or added first. - **No documents.** Old invoices arrive as the entries they were posted as. Before you rely on anything Ekwo prepares, read [DISCLAIMER.md](../DISCLAIMER.md): a country pack is a reading of the rules at the date of its version, and the books are yours. ### Checked for real Every step above runs end to end against throwaway Supabase projects with the published packages, from a script that can be repeated on any release: [`docs/demo/start-with-claude/walkthrough.mjs`](demo/start-with-claude/walkthrough.mjs). The trial balances it imports are beside it; the data is invented. --- # Install Ekwo OS on your own Supabase project Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/packages/cli/README.md — on the site: https://ekwo.ai/docs/install/ ### From a free Supabase account to a first invoice 1. **Create a project** at [supabase.com](https://supabase.com). The free plan is enough to start. Ekwo does not create it, does not pay for it and has no access to it: it is yours from the first row. 2. **Copy two things** from the dashboard: - **Connect → Session pooler**: the connection string. It contains your database password. Take the session pooler line rather than the direct one: the direct host answers on IPv6 only, which many networks cannot reach. - **Project Settings → API Keys**: the **secret key** (`sb_secret_…`, or the legacy `service_role` key on an older project) and the **Project URL**. They are used once, to create the first administrator in your own Supabase Auth, and are never written to disk. 3. **Run the installer.** ```sh npx -y ekwo-os@latest init ``` It asks for the connection string, the country, the chart of accounts and the language where the pack offers a choice, your organisation, the currency, the first company, the address of the first administrator and — optionally — your main bank account, written the way your country's banks write it. A few seconds on a free project. Nothing is preselected on the three questions whose wrong answer is expensive: the country, the chart and the language. 4. **Sign in** as that administrator and start booking — in the web application, [Ekwo Cloud](https://cloud.ekwo.ai/signup?src=cli), which opens your own instance; through an AI agent and the [MCP server](../mcp/README.md); from this command line; or through the REST API Supabase generates. 5. **Do the four things below** while the dashboard is still open. The installer prints them at the end of a successful run. Everything above in one non-interactive line: ```sh npx -y ekwo-os@latest init \ --db-url "postgresql://postgres.YOURREF:PASSWORD@aws-1-REGION.pooler.supabase.com:5432/postgres" \ --supabase-url "https://YOURREF.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --country \ --org "My Organisation" \ --company "My Company" \ --admin-email "you@example.com" \ --admin-password "a-long-password" \ --fiscal-year 2026 \ --yes ``` With `--yes` nobody is asked anything, so **`ekwo init` refuses rather than choosing for you**: no country without `--country`, and `--chart`, `--language` or `--fiscal-year-start` wherever the country's pack offers more than one answer. Each refusal lists the values the pack accepts. `ekwo pack describe ` (in a clone) or the country's page on [ekwo.ai/countries](https://ekwo.ai/countries/) says which a country needs. ### Several countries in one installation: `init --no-company` An installation is not in a country; its companies are. `ekwo init` loads every pack of the release whatever `--country` says, so one installation keeps the books of companies in as many countries as it holds packs. When there is no "first company" to name — a group, a firm, a holding with subsidiaries abroad — install without one, then create each company in its own country: ```sh npx -y ekwo-os@latest init --no-company \ --db-url "$EKWO_DB_URL" --supabase-url "https://YOURREF.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "My Group" --admin-email "you@example.com" --yes ekwo company new "My Company One" --country --yes ekwo company new "My Company Two" --country --yes ekwo company list ``` `--no-company` refuses every flag that only describes a company — `--country`, `--chart`, `--language`, `--currency` and the rest — since there is no company for it to describe. `ekwo company new` is the same `create_company()` the MCP tool calls: it runs as an administrator of the installation (`--as-user`, or the only one), asks the same questions as `init` and refuses the same way off a terminal. ### Before you go live: four things on your project An installation leaves four things undone on purpose: they are yours to decide, on a project Ekwo has no access to. `ekwo init` prints this list at the end of a successful run. **1. Turn off self sign-up on your project.** Supabase dashboard → **Authentication → Sign In / Providers → "Allow new users to sign up"**, switched off. An Ekwo installation is closed: the people who keep the books are invited. A stranger who signs up sees nothing, but there is no reason to let them in. **2. Keep two administrators.** An instance administrator invites everybody else. With one, a lost password or a closed mailbox is a set of books nobody can let anyone into. Create a second account and add it with `claim_instance_admin()`, or invite it from the application. **3. Keep the service_role key off every machine that does not need it.** A request carrying it bypasses row level security and reads every company in the instance. This CLI uses it once, to create the first account, and writes it nowhere. `--admin-user-id` installs against an account that already exists and needs no key at all. A script that needs to work on its own gets an API key, scoped to one company. **4. Read DISCLAIMER.md before you file anything.** [`DISCLAIMER.md`](../../DISCLAIMER.md), at the root of the repository. A country pack is a reading of a country's rules at the date of its version. `ekwo init` prints the review status of the pack it installs for the same reason. The books are yours, in every country where you file. ### What `init` does, step by step | Step | What happens | |---|---| | 1 | Applies `supabase/migrations/*.sql` in order, recorded in the Supabase CLI's own history table — so `supabase db push` and `ekwo migrate` stay interchangeable | | 2 | Applies every reference seed: currencies, territories, the generic financial statements, and every country pack of the release | | 3 | Creates the first administrator through the Supabase Auth admin API — a database connection cannot be a signed-in user, which is the only reason the secret key is asked for | | 4 | Records the instance, takes the administrator seat, creates the company with you as owner, copies its country pack, opens the first financial year, and adds the bank account when one was given | | 5 | Writes `ekwo.json`: the project URL and the schema version, nothing else | | 6 | Asks whether to register with Ekwo; the default answer is no | Every step checks before it acts. Running `ekwo init` twice on the same project reports what was already there and creates nothing a second time. --- # The command line: ekwo Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/packages/cli/README.md — on the site: https://ekwo.ai/docs/cli/ ### Commands | Command | What it does | |---|---| | `ekwo init` | The whole installation, interactive or not: the socle's migrations, the reference seeds, then the modules', as `ekwo migrate` applies them. `--no-company` stops before the first company: see [several countries](#several-countries-in-one-installation-init---no-company). | | `ekwo migrate` | Applies the migrations this release adds, after showing the gap — the socle's, then the modules'. Re-applies the reference seeds, which are idempotent. `--no-modules` leaves the modules alone. | | `ekwo status` | Schema version installed against available, pending migrations, the instance, its administrators, the country packs it holds and, per company, the pack version it copied. On an installation that is not registered, a short invitation to [register](#registering-with-ekwo). Exits 1 when something is pending. | | `ekwo doctor` | Every object this release defines and every privilege it grants, against what the database holds; row level security on every table, a policy on every protected table, no pending migration, no membership pointing at a deleted user, every company with a bank account, statements that tie to their lines, posted entries that balance. Exits 1 on a problem, 0 on warnings. | | `ekwo register` | Opt in to security advisories and release notes. Optional: everything works the same without it. Also the retry when the announcement did not go through. | | `ekwo unregister` | Opt back out. Clears the address and the date on the instance row. | | `ekwo demo` | Loads the sample company. Fictional data, explicit request only. | | `ekwo module` | What is installed beside the socle, applies a module's migrations and its country seeds, and turns one on or off for a company. | | `ekwo company` | `new` creates a company in its own country, through `create_company()`, and `list` shows the companies held here. `show` reads the company in use as the person signed in — its financial years, lock dates, journals and accounts by role — the same document as the MCP tool `get_company`. One company leaves an installation with its books — `export` writes an archive anybody can read, as a member under row level security — and arrives in another one alive: `import` takes it in whole or not at all. | | `ekwo pack` | Compiles a country pack into its seed, and refuses a seed that is no longer the output of its pack. Runs in a checkout of the repository only. | | `ekwo login` | Signs in to an instance as yourself and keeps the session, in your own configuration directory. See [acting as a person](#acting-as-a-person-login-use-whoami). | | `ekwo logout` | Ends that session, here and on the instance. | | `ekwo use ` | Picks the company the next commands run on. | | `ekwo whoami` | Who you are on which instance, the companies you can see, and what you may do on the one in use. | | `ekwo contact add` / `list` | A customer or a supplier, and finding one again. | | `ekwo contact duplicates` | The pairs of contacts that are probably one party, strongest first, through `suggest_duplicate_contacts()`: which one to keep, a score, and the evidence — the same VAT or registration number, the same bank account, the words of the name weighed by how few contacts carry them. Writes nothing. | | `ekwo contact merge ` | One party created twice — two spellings, two imports — joined through `merge_contacts()`: everything that names the second, posted lines and issued documents included, names the first; the first takes the fields it left empty; the second is retired, never deleted, and named by nothing again. By name or id. | | `ekwo doc new` / `doc line add` | A draft document — any kind, with `--type` — and one more line on it. A draft books nothing. `ekwo invoice` is the old name of `ekwo doc`, kept as an alias. | | `ekwo doc approve ` | Approves a draft, as it stands, for an agent to post where agents post in `review`, through `approve_document()`. Signed in as yourself, with `documents.post`; refused to a machine key. A change to the draft afterwards needs another approval. | | `ekwo company agent-posting [review\|autopilot\|review_only]` | The setting `agent_posting`: how an agent — a machine key, the MCP server — books a document of the company in use. `review`, the default, once a person approved it, unless the agent's session was started with `--autopilot`; `autopilot`, directly, within its rights, each posting on the audit trail; `review_only`, review with autopilot refused to every session. Without a value, says which. Signed in as yourself, with `company.write`; an agent may only make it stricter. | | `ekwo key list [--all]` / `ekwo key create --capability … [--expires ] [--autopilot]` | The machine keys of the company in use, with what each may do and how it posts; and one more, through `create_api_key()`, its secret shown once. A key posts as the company's `agent_posting` says; `--autopilot` issues one that posts without approvals — with `company.write`, never in a `review_only` company — and the mode is fixed for good: a key wanted in another mode is issued again. Needs `members.manage`. | | `ekwo mcp [--autopilot\|--review]` | The MCP server, over stdio, for an agent: the same server as `ekwo-mcp` of [`@ekwo-ai/mcp`](../mcp/README.md), with its flags and its environment (`ekwo mcp --help`). The `@ekwo-ai/mcp` installed beside this CLI, or the one of its release through `npx` — this CLI keeps its one outside dependency. In `.mcp.json`: `"command": "ekwo", "args": ["mcp"]`. | | `ekwo post ` | Books it, through `post_document()`. `--dry-run` shows the entry the database would write and writes nothing. Signed in as yourself, you post in any mode; with a machine key, the company's `agent_posting` applies, or the key's own autopilot. | | `ekwo cancel ` | Undoes a posted invoice, and says how. Back to draft, through `unpost_document()`, where its country allows it and nothing about it has left; otherwise through `cancel_document()`: the credit note that names it, posted and matched against it, and the invoice cancelled. `--date` books the credit note on another day than the invoice's, which is how a locked period is stepped over; `--credit` asks for the note where a draft was possible. | | `ekwo reverse ` | Undoes a posted entry keyed by hand, through `reverse_entry()`: its mirror, posted and matched against it. By id or by number; `--date` as for `cancel`. | | `ekwo line contacts suggest [--line ]…` / `ekwo line contact set ` | The open receivable and payable lines that name nobody — open items of books imported line by line — with the contacts each could be, best first: a learned motif, the number of a document of the company quoted in the label, the description or the reference of the entry, the words of a contact's name, and how many contacts the same evidence reached. `set` names one, once, through `set_line_contact()`, and the label is learned for the next time. A contact by name or id. | | `ekwo line unnamed leave --reason ` / `ekwo line unnamed undo ` | Leaves such a line without a contact on purpose, with the reason, through `leave_line_unnamed()`: it is no longer suggested a contact and stays an open item. `undo` takes it back. | | `ekwo line combinations suggest [--contact ]` / `ekwo line match … [--difference ]` / `ekwo line differences list` | Which open receivable and payable lines of one counterparty settle each other — an exact pair, several lines to the cent, or within the company's difference tolerance — through `suggest_item_combinations()`; `match` matches the lines named in one gesture under one letter (`reconcile_many()`), or with `--difference` books the difference on the account the pack gives for the reason and matches everything (`reconcile_with_difference()`); `differences list` gives the reasons, their accounts and the tolerance. | | `ekwo payment record` | Money in or out, booked and matched. With `--doc`, against that document. | | `ekwo match … [--amount ]… [--extra "account=,amount=,tax="]…` | A bank statement line pays documents, through `settle_from_statement()`: `--amount`, once per document, says how much settles each; `--extra` books the fee or the charges the line is net of in the same entry, and alone settles a bank charge. The line balances to the cent or is refused. | | `ekwo analytic axes`, `ekwo analytic report --axis --from --to ` | The analytic axes of the company and their values; and the income, expense, result and fixed-asset movement of each value of one axis over a period, read by `analytic_report()` from the posted ledger, a parent with the subtotal of the values below it, then the part no share of the axis reaches and the total of the period. | | `ekwo import …` | Books kept elsewhere — `trial-balance`, `fec`, `journal-items`, `journal-report`, `transaction-journal`, `xaf` — whole or not at all, through `import_books()`, with a correspondence of accounts and journals you save and give back; or a bank statement — `camt.053`, `coda`, `cfonb120` — as pending lines. `--dry-run` rehearses. See [taking over books](#taking-over-books-ekwo-import). | | `ekwo doc list` / `show` | What exists, and with `--unpaid` what is posted and still owed. See [keeping books](#keeping-books). | | `ekwo doc pdf ` | The PDF of a sale invoice or credit note, rendered from the books by [`@ekwo-ai/invoice-pdf`](../formats/invoice-pdf/README.md), with the logo the company names by URL (fetched by this command, from a public http(s) address only). Written to `--out`, or under its own name in the current directory. `--factur-x` embeds the CII of a posted sale and makes it a Factur-X PDF/A-3 (the rules it breaks end on exit 1); `--page-size Letter`; `--labels ` gives the words of the layout in the document's language. `ekwo document` is the whole word of `ekwo doc`. Records nothing. | | `ekwo proof stamp` / `upgrade` / `verify` | The sha256 of a filed file — a declaration, the annual accounts of a financial year, a document — committed to Bitcoin through the public OpenTimestamps calendars; only the hash leaves. `upgrade` completes the pending proofs of the company and is made to run on a schedule; `verify` checks a file against its proof and the block it names, and `--out` writes the `.ots` file any verifier reads. See [`docs/filing-proofs.md`](../../docs/filing-proofs.md). | | `ekwo einvoice validate` / `issue` / `status` / `list` | The electronic invoice of a posted sale, in the format its country pack declares, through the `einvoicing` module: `validate` writes it and names the rules it breaks (exit 1 if any), `issue` keeps it and with `--send --to ` writes it to that folder, `status --refresh` follows it. See [`modules/einvoicing`](../../modules/einvoicing/README.md). | | `ekwo einvoice fiscalise` / `fiscalisation` | The fiscal record a country's fiscalisation regime requires for every invoice — VERI*FACTU is one — written by the brick its pack names and chained after the last record of the invoicing system described by `--system ` (or `EKWO_FISCAL_SYSTEM`); `--dry-run` writes it and chains nothing, a record that breaks a rule is never chained (exit 1). `fiscalisation` walks each chain, and names the records still to send and the posted sales without a record. | | `ekwo einvoice clearance submitted\|validated\|rejected\|cancelled` | Under a clearance regime — the authority validates every invoice before it is issued — records what happened to a posted sale: its submission (`--reference`, `--issue`), the authority's validation (`--identifier`, `--validated-at`, `--verification-url` — or, where the pack builds the link, `--detail` and `--environment`), a rejection by the authority or the buyer (`--reason`, `--by`), its cancellation (`--reason`), each `--at` a moment, `--detail ` the answer as JSON. It dials nobody; the database refuses a transition that cannot have happened, and a window of the pack that has closed. `fiscalisation` then counts the sales validated, waiting, rejected and cancelled. | | `ekwo peppol validate ` / `lookup ` | The Peppol network, with no installation and no sign-in. `validate` reads a UBL invoice or credit note as it arrived and names the rules it breaks — the arithmetic of EN 16931 and the electronic addresses of both parties — with exit 1 if any; nothing is booked. `lookup` checks a participant identifier (`0208:0999999922`, `iso6523-actorid-upis::…` or a symbolic scheme) and asks the DNS of the Service Metadata Locator whether it is registered, and with which Service Metadata Publisher; `--test` asks the acceptance network. Exit 0 only for a registered participant. See [`@ekwo-ai/peppol-ubl`](../formats/peppol-ubl/README.md#participant-identifiers-and-the-sml). | There is no `eject`, because there is nothing to eject from. The schema is in your database, the migrations are in the repository under AGPL-3.0, and `supabase db push` applies them without this CLI ever running again. ### What a command answers: `--json` and the exit codes Every command prints for a person by default, and takes `--json` for a program. Under `--json` the standard output is **one JSON document and nothing else**, with the same shape whatever happened: ```json { "ok": false, "command": "module enable", "exitCode": 3, "warnings": [], "error": { "kind": "refusal", "name": "not_allowed", "message": "not_allowed: enabling a module on this company needs company.write", "sqlstate": "42501" } } ``` `data` carries what the command has to say; its shape per command is published in [`schema/output.1.json`](schema/output.1.json). Amounts are decimal strings, dates are ISO 8601. `ekwo help --json` answers the whole reference of commands and flags in one document, for an agent. | Exit code | Means | |---|---| | `0` | Done. | | `1` | It failed for a reason that is not the books — the network, a bug — **or a check found something** (`doctor`, `status`, `pack check`). | | `2` | The command was called wrong, or needed an answer with no terminal to ask it on. | | `3` | **The database refused**: a locked period, a capability you do not hold, a constraint. The call was well formed; the accounting said no. | A refusal is printed as the database wrote it — `period_locked: …` — and never rephrased or worked around. **No command waits on a question when there is nobody to answer**: off a terminal, under `--json` or with `--yes`, a missing answer is exit code 2 with the flag to pass. ### Acting as a person: `login`, `use`, `whoami` `init`, `migrate`, `status` and `doctor` connect as the owner of the database. Anything that keeps books acts as **a person**, through the instance's API, under row level security — the same route and the same functions as the MCP server. ```bash ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo whoami ekwo use "Example One" ``` - **The session** is kept in `$EKWO_CONFIG_DIR`, else `$XDG_CONFIG_HOME/ekwo`, else `~/.config/ekwo`, readable by you alone, renewed on its own, and refused inside a repository. The password is sent to the instance once and written nowhere. `ekwo logout` ends it. - **Profiles** (`--profile`, `EKWO_PROFILE`) keep one instance, one person and one company in use each: a demo, production, one client of a firm. - **For a CI job**, `SUPABASE_URL`, `SUPABASE_ANON_KEY` and either `EKWO_ACCESS_TOKEN` or `EKWO_EMAIL` with `EKWO_PASSWORD` sign in for one command and write nothing; pass `--company`. - **The company in use** is set with `ekwo use`, or `--company` for one command. Under `--json`, every answer carries a `context` naming the profile, the instance and the company it was rendered for. - **Never a `service_role` key**: it is refused by name, at every door it could arrive by. `ekwo init` remains the one command that takes it. ### Keeping books ```bash ekwo contact add "Client Example" --country --ref crm-42 ekwo doc new --contact client --date 2026-06-15 --ref job-7 \ --line "name=Audit,price=1500.00,account=,tax=" ekwo doc line add job-7 --name Travel --price 250.00 --account ekwo post job-7 --dry-run # the entry the database would write; nothing is written ekwo post job-7 ekwo cancel job-7 # back to draft where the country allows it, else the credit note ekwo payment record --doc job-7 --amount 1750.00 --date 2026-06-30 --bank-account --ref bank-1 ekwo match job-9 ekwo match job-9 --extra "account=,amount=3.00,tax=" ekwo doc list --unpaid --since 2026-06-01 --json ``` - **Each verb is one function of `@ekwo-ai/core`**, the same the MCP server calls, and the rules underneath are the schema's. This CLI computes no amount: what you type goes in as text, what is printed is what came back. - **A tax and an account are named by their code**, never by a rate: several taxes share one. The codes come from the company's country pack. - **`--ref`, so that nothing is created twice.** The same reference a second time returns what the first call created and writes nothing. A `` is its id, its number, or the `--ref` it was created under. - **`--dry-run` on `post`** runs the posting for real and rolls it back, so the entry shown is the one that would be written, and a refusal is the real one. - **`--stdin`** takes one JSON object with the fields of the matching MCP tool, for a program. ### Taking over books: `ekwo import` To try Ekwo on your own books, bring them. One reader per source, and nothing is posted while an account has no answer: ```bash ekwo import fec FEC20251231.txt --dry-run --open-years --save-mapping map.json $EDITOR map.json # answer what is null, check what is suggested ekwo import fec FEC20251231.txt --mapping map.json --open-years ekwo import camt.053 statement.xml # or coda, cfonb120: pending lines for `ekwo match` ``` | Source | What it reads | |---|---| | `trial-balance` | A trial balance as CSV, which becomes the opening entry of the year `--opening-date` starts | | `fec` | A French *fichier des écritures comptables* | | `journal-items` | The lines of every entry exported as CSV from a ledger kept as a table of lines, with its chart of accounts and partners | | `journal-report` | A journal report or general ledger detail saved as CSV, with its chart and contacts | | `transaction-journal` | A transaction journal saved as CSV, with its list of accounts | | `xaf` | An XML Audit File Financial, version 3.2 or 4.0 | | `camt.053`, `coda`, `cfonb120` | A bank statement: its lines, pending, ready for `ekwo match` | `ekwo import --help` also lists the exports of other ledgers by the software they come from, and [`docs/compatibility.md`](../../docs/compatibility.md) gives each one's export and official page. - **The correspondence is yours.** Every account and journal of the old books needs an answer in the company's chart. Ekwo proposes one for each — `exact` only for the same code, otherwise `suggested` with its reason — and `--save-mapping` writes them as JSON for you to check. `--mapping` gives it back; `--accept-suggestions` takes every suggestion once you have read them. - **`--dry-run` is the real import, taken back**, so the numbers shown are the ones the entries would take and a refusal is the real one. - **Whole or not at all.** The import is one transaction: one refusal and nothing stays. The same files twice are refused, saying when they were imported and what that import wrote. - **No tax on history.** An imported line feeds the ledger, the balances and the statements, not the boxes of a declaration: a period kept elsewhere was declared from where it was kept. The MCP server offers the same as `import_books`, and `import_bank_statement` for a statement. [`docs/import.md`](../../docs/import.md) is the long form. ### `ekwo module` A module is a Postgres schema beside the core — fixed assets, budgets, corporate income tax, electronic invoicing. Its migrations travel with this package, and `ekwo migrate` applies them by default. ```sh ekwo module list # what this release carries, and what the database holds ekwo module migrate [] # the migrations, and the country seeds they need ekwo module enable assets --company "…" # turn it on for one company ekwo module disable assets --company "…" # turn it off; nothing it wrote is deleted ``` PostgREST serves a schema other than `public` only once the project lists it under its exposed schemas — a setting of the API that no database connection can change — so `ekwo module enable` prints the line to add (Supabase dashboard → Project Settings → API). Before `supabase db push`, run `ekwo migrate --no-modules`. ### `ekwo company` ```sh ekwo company new "My Company" --country ekwo company list # name, country, currency, language, chart, pack, members ekwo company show --json # the company in use: years, lock dates, journals, accounts by role ekwo company export "My Company" --out ./my-company # manifest.json + one JSON Lines file per table ekwo company import ./my-company --owner # whole, or not at all ``` **A company leaves with its books.** `export` runs as a member holding `company.export`, under row level security, and writes an archive anybody can read. `import` takes it into another installation in one transaction, or refuses; members do not travel, `--owner` names the first one. Attached files live in storage and are listed in the manifest to copy. The format is in [`docs/company-archive.md`](../../docs/company-archive.md). ### `ekwo doctor` What a healthy installation is true of. It reads and reports; it never repairs. ```sh ekwo doctor --db-url "$URL" # readable ekwo doctor --db-url "$URL" --json # the whole report ``` It compares the database with an inventory of everything this release defines — tables, columns, views, functions, policies, triggers, types, and the privileges each role holds — shipped inside this package and generated from the migrations. A missing object, a missing or extra policy, a changed column type and a privilege the anonymous role should not hold are problems; your own extra tables are reported as information. It also checks row level security on every table, pending migrations, memberships of deleted users, companies without a bank account, and posted entries that do not balance. Exit code `0` when there is no problem, `1` otherwise — usable as a deployment gate. ### `ekwo pack`, in a checkout A country is data under `packs//`; the compiler turns it into the seed `ekwo init` applies. These commands run in a clone of the repository: ```sh ekwo pack list # the packs this checkout carries, and their review status ekwo pack describe # everything one pack says; --json for the whole object ekwo pack build # write its seed, and the lists of packs in the docs ekwo pack check --all # exit 1 if a committed seed or list is not the output of the packs ``` `pack describe --json` is the same object the site builds each country's page from. The format and every rule `pack check` applies are in [`docs/packs.md`](../../docs/packs.md). Two commands read an installation instead, and need no clone: ```sh ekwo pack status --db-url "$EKWO_DB_URL" # which pack version each company copied ekwo pack upgrade "My Company" --db-url "…" # move it to the version this installation holds ``` `upgrade` applies additions on its own, lists everything else for a person to read, never removes anything from a company's books, and takes `--apply` to accept what it listed. ### Flags Every command takes the connection flags: | Flag | Meaning | |---|---| | `--db-url ` | Postgres connection string. The reliable way. | | `--project-ref ` | With `--db-password` and `--db-region`, the session pooler host. | | `--db-password ` | Database password. Prompted, masked, when omitted. | | `--db-region ` | With `--project-ref`, the session pooler in that region. Both generation prefixes are tried and the one that answers is kept. | | `--supabase-url ` | `https://.supabase.co`. Needed only to create a user. | | `--service-role-key ` | Needed only to create a user. Either form Supabase issues: a secret key, `sb_secret_…`, sent on the `apikey` header alone because it is not a JWT, or the legacy `service_role` JWT, sent on `apikey` and as a Bearer as before. | | `--yes`, `-y` | Never ask a question. Everything must come from flags or the environment. | Without `--db-url` or `--db-region`, nothing is derived and the CLI asks for the connection string: copy it from the dashboard, Connect → Session pooler. `ekwo init` adds: | Flag | Meaning | |---|---| | `--country ` | Which country pack: its chart of accounts, its journals, its taxes and its declaration. One of the packs the database holds — `ekwo pack list` names them, and there is no default. | | `--chart ` | Which chart of accounts, where the country publishes several. Required outside a terminal when it does. | | `--org ` | Your organisation, written on the instance row. | | `--company ` | The first company. Defaults to `--org`. | | `--admin-email
` | The first administrator, created in your Supabase Auth. | | `--admin-password ` | Their password. Omitted, an invite link is generated and printed. | | `--admin-user-id ` | Use an account that already exists, instead of creating one. | | `--fiscal-year ` | Calendar year of the first financial year. Defaults to this year. | | `--fiscal-year-start ` | The day that year opens, as `YYYY-MM-DD`. Needed only where the pack names no usual opening month (`defaults.fiscal_year_default`). | | `--currency ` | Currency of the company. Defaults to the pack's `defaults.currency`. | | `--language ` | Language of the books, two letters. Defaults to `country_defaults.language_default`, which the pack fills. It decides which label of the pack lands on each account; the others are kept in `name_i18n`. | | `--bank-identifier ` | Creates the main bank account, wired to the bank journal and its ledger account. What it is written in is the country's: an IBAN, an ABA routing number and an account number (`"021000021 123456789"`), a sort code and an account number, a BSB, an IFSC, a CLABE… `ekwo pack describe ` names it, and it is checked. A country whose pack declares none is asked for an account number as the bank wrote it. `--iban` is the old spelling and is refused where the banks do not use IBANs. Omitted, no bank account is created and `ekwo doctor` says so. | | `--bic ` | Optional, on that account, for a bank that has one. | | `--bank-name ` | Optional. It also names the account in the books. | | `--demo` | Also load the sample company. | | `--register` | Register without being asked. `--register-email` sets the address. | | `--registry-url ` | Where the registration is announced. | | `--no-modules` | Leave the modules out. By default `init` installs them, as `ekwo migrate` does — empty schemas until a company enables one. | | `--no-company` | Install without a company: schema, every pack, the modules, the first administrator, and no country on the instance row. The flags that only describe a company are refused with it. Then `ekwo company new`, once per company. | `ekwo company new ` takes `--country`, `--chart`, `--language`, `--currency`, `--fiscal-year` and `--fiscal-year-start` as `init` does, and `--as-user `: the administrator of the installation it is created as, who becomes its owner — the only one, when there is exactly one. Every command takes `--json`; see [what a command answers](#what-a-command-answers---json-and-the-exit-codes). `ekwo migrate` takes `--skip-seeds`. ### Environment variables | Variable | Same as | |---|---| | `EKWO_DB_URL` | `--db-url`. `SUPABASE_DB_URL` also works. | | `EKWO_DB_PASSWORD` | `--db-password` | | `SUPABASE_URL` | `--supabase-url` | | `SUPABASE_SERVICE_ROLE_KEY` | `--service-role-key`. `ekwo init` only. | | `SUPABASE_ANON_KEY` | `--anon-key` | | `EKWO_EMAIL`, `EKWO_PASSWORD` | Sign in for one command, writing nothing. `ekwo login` reads them too. | | `EKWO_ACCESS_TOKEN` | The same, with a session token already in hand. It is not renewed. | | `EKWO_PROFILE` | `--profile` | | `EKWO_EINVOICE_DIRECTORY` | `--to`, for `ekwo einvoice`. The MCP server reads it too. | | `EKWO_FISCAL_SYSTEM` | `--system`, as the JSON itself, for `ekwo einvoice fiscalise`. The MCP server reads it too. | | `EKWO_CONFIG_DIR` | Where profiles and sessions are kept. | | `EKWO_REGISTRY_URL` | `--registry-url`. Default `https://api.ekwo.ai/v1/registrations`. | | `EKWO_NO_REGISTER_INVITE` | Set to `1` to hide the invitation to register that `ekwo init` and `ekwo status` show on an installation that is not registered. The MCP server reads it too. | | `EKWO_NO_CLOUD_OFFER` | Set to `1` to hide the one line offering a free Ekwo Cloud account. The MCP server reads it too. See [An Ekwo Cloud account](#an-ekwo-cloud-account-optional). | | `NO_COLOR` | Plain output. | See [`.env.example`](../../.env.example) at the root of the repository. ### Secrets The CLI never writes a password or a key to disk. The database password and the secret key are read from a flag, an environment variable or a masked prompt, used, and forgotten; `ekwo.json` holds the project URL and the schema version. The one thing kept is the session of the person who signed in with `ekwo login`, in their own configuration directory, readable by them alone, and refused anywhere inside a repository. `ekwo logout` removes it. Outside this repository the CLI has one runtime dependency, the Postgres driver: everything it is handed is a secret, and every dependency is one more thing that could read it. ### Registering with Ekwo At the end of an interactive `ekwo init`, you are asked: > Register this installation with Ekwo, for security advisories that concern > your version and release notes? Everything works the same without it. The default answer is no, and no is supported forever. Where nobody is asked (`--yes`, `--json`), the end of `ekwo init` and `ekwo status` show a short invitation instead, with the one command: ```sh npx -y ekwo-os@latest register --email ``` `EKWO_NO_REGISTER_INVITE=1` hides the invitation. Community works unregistered: nothing reads the registration to decide what you may do. Registering writes the address and a date on your instance row, and sends exactly six fields: ```json { "instance_id": "…", "organization": "My Organisation", "country": "", "edition": "community", "schema_version": "0.20.0", "contact_email": "you@example.com" } ``` No ledger data, no user list, no connection string. `instance_id` is generated by your own database and is not a licence key. A failed announcement is a soft message, not a failed install: `ekwo register` retries it. `ekwo unregister` clears the local fields. ### An Ekwo Cloud account (optional) Everything above works without an account, and always will. A free account on [Ekwo Cloud](https://cloud.ekwo.ai/signup?src=cli) — an address and a six-digit code, no password to invent — adds the web application on the same books, a nightly backup of every company you link, and one connector URL, `https://mcp.ekwo.ai/mcp`, for your AI agent, approved in your browser, instead of a key and a password in a file. The command line says so in one line, at two moments: at the end of an `ekwo init` that succeeded, and after a first `ekwo company export`. Each moment once for you: it is remembered in `settings.json`, in your configuration directory beside your profiles, and nothing is sent to Ekwo to show it or to remember it. The line is never shown under `--json`, when the output is not a terminal, or in CI (`CI` set). `EKWO_NO_CLOUD_OFFER=1` hides it, and so does `"cloud_offer": false` in that `settings.json`, for good. The MCP server carries the same words in its instructions; see [its README](../mcp/README.md#what-an-agent-reads-first). ### Testing it against a real project The test suite runs against Postgres compiled to WebAssembly. To exercise the network, PostgREST and Supabase Auth as well, run the end-to-end script from a clone, against an empty project you can throw away: ```sh npm run e2e:supabase ``` It installs, migrates, signs in, books, files a declaration and closes the year, and prints a pass/fail table with how long each step took. [`docs/releasing.md`](../../docs/releasing.md) lists what it reads. ### Licence [AGPL-3.0-only](../../LICENSE) © Ekwo AI. --- # The MCP server: an agent at the books Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/packages/mcp/README.md — on the site: https://ekwo.ai/docs/mcp/ The [Model Context Protocol](https://modelcontextprotocol.io) server for [Ekwo OS](https://github.com/Ekwo-ai/ekwo-os). It lets an AI agent work on the books in your own Postgres: read the ledger, raise an invoice, post it, match a payment, prepare the VAT return — **as you**, under the row level security of your own installation. There are two ways to reach it, and they are the same server. ### Hosted, at `https://mcp.ekwo.ai/mcp` For a client that adds remote servers rather than launching them — claude.ai, or any other that speaks **Streamable HTTP**. Nothing is installed, and no password or key is written into a configuration file. ``` https://mcp.ekwo.ai/mcp ``` Point a client at that address and it discovers the rest. An unauthenticated call is answered with `401` and a `WWW-Authenticate` header naming the server's protected-resource metadata (RFC 9728); the client follows it to the authorization server (RFC 8414), registers itself (RFC 7591, so it needs no credentials of its own) and sends the person to their browser to approve the connection. The scope asked for is `books`. An agent reading this without a browser can start from [`/.well-known/oauth-protected-resource`](https://mcp.ekwo.ai/.well-known/oauth-protected-resource). The books stay where they are: the hosted server holds none, and connects to the instance the person chooses when they approve it. On the same screen they decide whether the agent may write; otherwise it reads. The hosted server is operated by [Ekwo Cloud](https://cloud.ekwo.ai), and signing in there needs an account — a free one, [opened](https://cloud.ekwo.ai/signup?src=mcp) with an address and a six-digit code, which also gives the web application on the same books and a nightly backup of every company it links. ### Locally, over stdio ```sh npx -y @ekwo-ai/mcp@latest ``` For a client that launches its own servers — Claude Desktop, Claude Code, any editor that reads `.mcp.json` — against any installation, with no account. Keep `@latest` in the command: from inside a clone of the repository, a bare `npx @ekwo-ai/mcp` finds the unbuilt workspace package and answers `ekwo-mcp: command not found`. With the command line installed, `ekwo mcp` starts the same server — the same entry point, `runStdio()`, the same flags (`--autopilot`, `--review`) and the same environment: `"command": "ekwo", "args": ["mcp"]`. ### What it is, and what it is not The server holds no privileges of its own. It signs in as the person using it, or is handed their access token, and everything it can do afterwards is exactly what that person can do: a viewer reads and cannot write, a member of one company cannot see another, a locked period refuses a posting. None of that is checked in this package — the policies and the triggers in the schema decide, and this server reports what they answered. Three things it will never do: - **Write a ledger line.** Every entry comes out of the schema's own functions, which carry the accounting rules. Direct inserts are for the objects a person types: contacts, draft documents and their lines, payments, bank transactions. - **Delete or edit a posted entry.** No tool removes one. A posted invoice is undone the one way its country allows — back to draft where nothing about it has left, otherwise by the credit note that names it — and an entry keyed by hand by its reversal. - **Use a `service_role` key.** It would work, and that is the objection: it bypasses every policy, so the agent would answer for companies its user was never invited to. The server refuses to start with one. ### Configuration #### The recommended route: PostgREST, as the signed-in user ```json { "mcpServers": { "ekwo": { "command": "npx", "args": ["-y", "@ekwo-ai/mcp@latest"], "env": { "SUPABASE_URL": "https://YOURREF.supabase.co", "SUPABASE_ANON_KEY": "your anon (publishable) key", "EKWO_EMAIL": "you@example.com", "EKWO_PASSWORD": "your password" } } } } ``` That block goes in `claude_desktop_config.json` for Claude Desktop, or in `.mcp.json` at the root of a project for Claude Code. `EKWO_ACCESS_TOKEN` replaces the address and the password when you already hold a session; with the password, the session is kept in memory and refreshed, and nothing is written to disk. #### The fallback: a direct Postgres connection For a self-hosted installation with no PostgREST in front of the database, or for tests. ```json { "env": { "EKWO_DB_URL": "postgresql://…", "EKWO_ACT_AS_USER_ID": "the auth.users id this server acts for" } } ``` `EKWO_ACT_AS_USER_ID` is **required**, and that is the whole point of this mode. A database connection is nobody: `auth.uid()` is null, row level security is bypassed rather than satisfied, and a server running that way would be a way round the policies rather than a client of them. So every query runs inside a transaction that sets `request.jwt.claims` to that user and switches to the `authenticated` role, and the policies bind exactly as they do over the API. This mode needs the `postgres` package installed alongside the server; the recommended route needs no driver at all. | Variable | Meaning | |---|---| | `SUPABASE_URL` | `https://.supabase.co` | | `SUPABASE_ANON_KEY` | The anon (publishable) key. A `service_role` key is refused. | | `EKWO_EMAIL` / `EKWO_PASSWORD` | The user this agent acts as | | `EKWO_ACCESS_TOKEN` | A session already in hand, instead of the two above | | `EKWO_DB_URL` | A direct Postgres connection, for a self-hosted installation | | `EKWO_ACT_AS_USER_ID` | Required with `EKWO_DB_URL`: the `auth.users` id to act for | | `EKWO_NO_REGISTER_INVITE` | Optional. `1` leaves the invitation to register out of the instructions | | `EKWO_NO_CLOUD_OFFER` | Optional. `1` leaves the offer of a free Ekwo Cloud account out of the instructions; so does `CI` | | `EKWO_AGENT_POSTING` | Optional. `autopilot` or `review`: how this session posts, as `--autopilot` and `--review` choose it. Unset, each company's `agent_posting` decides. See [Review or autopilot](#review-or-autopilot) | | `EKWO_EINVOICE_DIRECTORY` | Optional. The folder electronic invoices are sent to by `einvoicing_issue` with `send`. Unset, files are issued and kept, and sending is refused as `no_transport` | | `EKWO_FISCAL_SYSTEM` | Optional. The invoicing system `einvoicing_fiscalise` chains fiscal records under, as JSON: `name`, `id`, `version`, `installation`, `producerName`, `producerTaxId`, and the booleans a regime may ask (`verifactuOnly`, `multipleTaxpayers`, `multipleTaxpayersNow`). Unset, fiscalising is refused as `no_fiscal_system`; malformed, the server does not start | #### Started with nothing set A client lists a server's tools as soon as it is added, and so do the directories that index MCP servers. So with **none** of the variables above — or with half of them — the server still starts, still answers the list of tools, and every tool call returns a `not_configured` error that names the variables to set and where. It connects nowhere until then, and it offers the tools of the socle only: which modules an installation carries is read from its database. Only absence is forgiven. A `service_role` key, in either slot, and an `EKWO_ACT_AS_USER_ID` that is not a uuid are values somebody wrote, and the server still refuses to start with them. ```sh npm run build -w @ekwo-ai/mcp node packages/mcp/scripts/introspect.mjs # starts it with no environment and lists the tools ``` The `Dockerfile` at the root of the repository builds the same server from the checkout; `docker run -i --rm ` speaks MCP over stdio, with the variables passed as `-e`. ### Over HTTP: hosting it for others The same server, reached by URL instead of started by a client: `handleHttpRequest` answers the **Streamable HTTP** transport of MCP. It is **stateless** — each request builds a server, answers in JSON and closes it, with no session id and nothing kept — so it runs on a function platform, behind a load balancer, or in one process. A `GET` is answered `405`: this server never speaks first, so there is no stream to open. It does not decide who is calling: the host authenticates the request its own way, then hands in **the connection that request may use**. ```ts import { handleHttpRequest } from '@ekwo-ai/mcp'; export default async function (request: Request): Promise { const who = await yourOwnAuthentication(request); // a token you issued if (who === undefined) return new Response(null, { status: 401 }); return handleHttpRequest(request, { supabaseUrl: who.supabaseUrl, // https://.supabase.co anonKey: who.publishableKey, // never the service_role key apiKey: who.ekwoKey, // or: accessToken: who.session }); } ``` A connection is one of two things, never both: - **A person's access token** on the instance. Row level security decides, exactly as for that person in a browser. - **A key of Ekwo OS**, as `create_api_key()` issues it. It travels in the `X-Ekwo-Api-Key` header with no `Authorization` beside it, the schema's pre-request hook presents it (decision [0062](../../docs/decisions/0062-a-key-reaches-the-api.md)), and the caller is on that key's one company with that key's capabilities. A key issued without a capability that writes gives an agent that reads. A `service_role` key is refused in all three slots, as on stdio. For `node:http` (or anything built on it), `handleNodeRequest(req, res, connection, { origin })` is the same handler. #### Putting it in front of people: authorization A remote MCP client expects the server to follow the [authorization part of the MCP specification](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization): OAuth 2.1 with PKCE, protected resource metadata (RFC 9728), authorization server metadata (RFC 8414) and dynamic client registration (RFC 7591). That belongs to the host, not to this package: the host signs the person in, issues its own tokens, and maps each one to a connection above. The database stays the only place that decides what may be read or written. ### The tools Every write names its company explicitly. | Tool | What it does | |---|---| | `list_companies` | The companies you are a member of, with your role on each | | `get_company` | Financial years, lock dates, journals, default accounts | | `list_accounts` | The accounts a company works with, by code prefix, type or name. `include_all` for the whole chart | | `search_contacts` | Customers and suppliers, by name, type or VAT number | | `suggest_duplicate_contacts` | The pairs of contacts that are probably one party, strongest first: the contact to keep, a score, and the evidence — the same VAT or registration number, the same bank account, the words of the name weighed by how few contacts carry them. Writes nothing; `merge_contacts` joins a pair the user confirms | | `search_products` | The catalogue: code, unit, price, account and tax of what is sold and bought | | `list_documents` | Invoices, credit notes and quotes, filtered | | `get_document` | One document with its lines and the entry it produced | | `render_invoice_pdf` | The PDF of a sale invoice or credit note, as a PDF resource (base64) beside a JSON summary, rendered from the books by [`@ekwo-ai/invoice-pdf`](../formats/invoice-pdf/README.md). `factur_x` embeds the CII of a posted sale (Factur-X, EN 16931, PDF/A-3) and returns the rules it breaks; `labels` gives the words of the layout in the document's language. The logo is fetched by the server from the company's `logo_url`, never from a local or private address. Records nothing | | `list_bank_accounts` | The bank accounts of a company, with the journal and ledger account behind each | | `list_bank_transactions` | Statement lines, pending by default | | `trial_balance` | Opening, movements and closing per account | | `general_ledger` | Every posted line of an account, with a running balance | | `journal_book` | The book of one journal, or of all of them: every posted line of the period in the order a book is read, with the totals of each journal at the head | | `suggest_line_contacts` | The contacts an open receivable or payable line that names nobody could be, best first, each with its evidence and how many contacts that evidence reached. Writes nothing | | `suggest_item_combinations` | For each open receivable or payable line of one counterparty, the lines of the other side that settle it: an exact pair, several lines to the cent, or within the company's difference tolerance, with the difference. Writes nothing | | `matching_difference_options` | The reasons a difference may be booked for, with the account the pack gives for each, and the company's tolerance | | `aged_balance` | What is still owed, bucketed by age, read from the ledger | | `vat_return` | The boxes for a period, summed from the ledger | | `instalment_plan` | The payments on account the VAT scheme of a company asks for in a period: due, paid, outstanding | | `ec_sales_list` | The recapitulative statement of European Union supplies: one line per customer VAT number and per nature | | `portfolio_upcoming_filings` | *Portfolio* = the companies you may read: for an accounting firm, its clients ([`docs/firms.md`](../../docs/firms.md)). What falls due between two dates in every company you hold `filings.read` on. One row per company at least: a pack that names no deadline is listed without a date, and says so | | `portfolio_filings_touched_since` | Declarations that have gone and whose period received entries afterwards, across the same companies, with the company named | | `list_statements` / `financial_statement` | The schemes a company can be presented on, and one statement | | `financial_analysis` | Revenue, net result, equity, total and current assets, cash, receivables, payables and the other aggregates of an analysis, each with the accounts that make it, as the country pack defines them, or read by account type through the generic framework where it defines none — `source` says which ([`docs/analysis.md`](../../docs/analysis.md)) | | `list_analytic_axes` | The analytic axes of a company — a cost centre, a project, a site — and the values of each, which may nest, with `required_on`, the lines that must carry the axis whole at posting | | `analytic_report` | The income, expense, result and fixed-asset movement of each value of one axis over a period, from the posted ledger, the whole income statement included, a parent with the subtotal of the values below it, `unassigned`, the part no share of the axis reaches, and `total` ([decision 0076](../../docs/decisions/0076-an-analytic-value-is-entered-on-the-line.md)) | | `generate_fec` | The French FEC as text, with its checks and its filename, for a company that keeps French books | | `read_audit_log` | Who changed what and when: the configuration of a company, and the acts that change a state. Append-only for every client; only the database writes it | | `get_preferences` | What you prefer, and the language chain to read labels with | | `list_invitations` | Who has been invited into a company and not yet joined | | `list_api_keys` | The machine keys of a company, and what each may do | | `describe_pack` | Which country packs this installation holds: their version, how much anyone has read them, the register of texts each was built from — title, official publisher, link and the day it was opened — and, for a proven pack, its evidence: per scope, the kind of filing, the year, what was reproduced and what was not tested | | `status` | Schema version, instance, connection, companies | | `create_contact` | A customer, supplier or other third party | | `merge_contacts` | Joins two contacts that are one party: everything naming the absorbed one, posted lines and issued documents included, names the kept one, whose empty fields are filled; the absorbed one is retired. Refused by name for two different VAT or registration numbers, a contact merged before, or a matching that would span two parties | | `create_product` | A catalogue row: code, name, unit, price, account, tax | | `update_product` | Changes one, or retires it with `active: false` | | `pin_accounts` | Adds accounts to the working chart a company sees first, or takes one back out with `pinned: false` | | `create_document` | A draft invoice, credit note or quote, with its lines. With `client_ref`, calling twice creates once | | `update_document_lines` | Replaces the lines of a **draft** | | `post_document` | Books it, in review or autopilot ([below](#review-or-autopilot)): in `review`, only once a person approved the draft as it stands, refused with `approval_required` otherwise; in `autopilot`, directly. `dry_run: true` returns the entry the database would write, and writes nothing, in both | | `cancel_document` | Undoes a posted invoice, and says how in `undone_by`: back to `draft` where its country's `posted_edit_policy` allows it and nothing about it has left (`unpost_document()`), otherwise a `credit_note` that names it, posted and matched against it, and the invoice cancelled (`cancel_document()`), with `why` the draft was ruled out. A credit note is dated on the invoice's day while that period is open; otherwise the caller gives a date. A date, or `credit_note: true`, asks for the credit note | | `reverse_entry` | Undoes a posted entry keyed by hand: its mirror, posted under the next number and matched against it. Same rule for the date | | `record_payment` | Books money in or out and matches it against open invoices — or, with `document_id`, against that document alone, which then names the contact and the direction. With `client_ref`, recording twice records once | | `set_line_contact` | Names the contact of such a line, once, from nothing to a contact of the company, and learns the label as a motif. Refused by name for a line that names somebody, is matched, is not on a receivable or payable account, or a contact of another company | | `leave_line_unnamed` / `undo_leave_line_unnamed` | Leaves such a line without a contact on purpose, with the reason, so it is no longer suggested; or takes that back | | `reconcile_many` | Matches several lines of one counterparty and one account together, their open debits and credits equal to the cent, under one letter | | `reconcile_with_difference` | The same with a small difference, booked on the account the pack gives for the reason (`rounding`, `exchange_difference`) within the company's tolerance, then matched | | `reconcile` / `unreconcile` | Matches two ledger lines, or undoes one matching | | `create_bank_account` | Registers an account from its identifier, in the scheme the company's country uses (an IBAN, a routing number and an account number, a sort code and an account number…), and wires it to the bank journal. Running it twice with the same identifier creates nothing | | `create_bank_transaction` | One statement line by hand, for an installation with no feed | | `settle_from_statement` | Books a statement line as the payment it is and matches it against the documents or open items named, in one entry — with `amounts`, how much settles each; with `extra_lines`, the fee a payment provider kept or the charges of a bank, on the account and with the tax the user names. The line balances to the cent or is refused (`settlement_unbalanced`); extra lines alone settle a bank charge | | `import_bank_statement` | A statement file (`camt.053`, `coda`, `cfonb120`) into statements and pending lines. Books nothing; the same file twice creates nothing; an unknown account or a statement that does not add up is refused by name, a missing statement is signalled | | `lock_period` | Moves the accounting and VAT lock dates. Needs `company.write`. | | `opening_balance` | The trial balance of whatever kept the books before, as the opening entry — of the first day of the year, or of `opening_date`, the day inside it the books were taken over. `items` are the invoices and credit notes still open that day: each a posted document with its number, payment reference and due date, which statement matching finds like an invoice issued here; the items of an account must add up to its line | | `import_books` | Books kept elsewhere — a FEC, an export of journal items, a journal report, a trial balance — whole or not at all, with `open_items` beside a trial balance. `dry_run: true` first: the correspondence proposed for every account and journal — `exact` only for the same code the files do not contradict, otherwise `suggested` with its reason, or `none` — what has no answer, and the import rehearsed by the database and taken back. Then again with the completed `mapping`, or `accept_suggestions` once the user has read every suggestion; nothing is posted while one is unconfirmed. Every entry through `post_entry()`; no tax; the same files twice refused, saying when and what. The files travel as text, 256 KiB at most: beyond, the tool answers with the `ekwo import` command that reads them from the disk. `ekwo import` is the same function | | `close_fiscal_year` / `reopen_fiscal_year` | Closes a year the way the country pack says — with `final_close`, whether the country also requires a final close and by when — or reopens it to correct it, whatever later years hold; a later closed year is reopened first | | `close_fiscal_year_finally` | The final close of a closed year: nobody reopens it afterwards, the operator included. Only on the user's explicit request | | `create_company` | A company on a country pack, with its chart and its first financial year. An instance-level act | | `update_company_profile` | What a company says about itself on its documents, and the pattern of its document numbers | | `set_number_prefix` | What one journal prints in place of `{CODE}` in its numbers | | `set_preferences` | Your own language, timezone, formats and default company | | `invite_member` / `revoke_invitation` | Invites an address into a company, or withdraws the invitation. The token is shown once | | `remove_member` / `set_member_role` | Takes a member out of a company — leaving oneself needs no `members.manage` — or moves them to another preset, clearing their per-member adjustments. The last owner is neither removed nor demoted | | `create_api_key` / `revoke_api_key` | A key for a machine, scoped to one company and a list of capabilities | | `share_document` / `list_shares` / `revoke_share` | Publishes a posted sales document behind a link the customer opens without an account, lists the links with how often each was opened, or withdraws one ([`docs/sharing.md`](../../docs/sharing.md)) | **`list_accounts` answers with the working chart, not the whole one.** A country pack transcribes the regulation — sometimes more than a thousand accounts — and a company works with a few dozen. The default is the accounts with posted entries, those the company's settings or an enabled module point at, and those somebody pinned with `pin_accounts`. `include_all` returns the whole chart, and every write tool still accepts any account of it. `post_document`, `cancel_document`, `reverse_entry`, `record_payment`, `update_document_lines`, `unreconcile`, `settle_from_statement`, `lock_period`, `opening_balance`, `import_books`, `close_fiscal_year`, `reopen_fiscal_year`, `close_fiscal_year_finally`, `revoke_invitation`, `remove_member`, `set_member_role`, `revoke_api_key` and `revoke_share` are annotated destructive in the protocol, so a client can ask before calling them. **What a tool may do is the capability the user holds**, not the tool's own right: the server acts as the person it signed in as, so `post_document` works for an accountant and is refused to a viewer, by the database, with the database's own words. `get_company` returns `your_capabilities` for exactly that reason. **The modules.** A module of this installation gets its own tools, under the prefix its `module.json` declares, and the server reads `public.modules` at startup to know which: `fixed_assets_list`, `fixed_assets_create`, `fixed_assets_schedule`, `fixed_assets_run_depreciation`, `fixed_assets_dispose`, `budgets_list`, `budgets_upsert_lines`, `budgets_variance`, `einvoicing_validate`, `einvoicing_issue`, `einvoicing_status`, `einvoicing_list`, `einvoicing_fiscalise`, `einvoicing_fiscalisation_status`, `einvoicing_clearance`, `tax_estimate`, `tax_parameters`, `tax_declare_parameter`, `tax_adjustments`, `tax_declare_adjustment`, `tax_losses`, `tax_record_computation`, `tax_computations`, `crm_search`, `crm_card`, `crm_segments`, `crm_board`, `crm_timeline`, `crm_upsert_card`, `crm_log_activity`, `crm_join_segment`, `crm_leave_segment`, `crm_open_deal`, `crm_move_deal`, `contracts_list`, `contracts_card`, `contracts_upsert`, `contracts_schedule`, `contracts_issue_due`, `contracts_deadlines`, `contracts_amend`, `contracts_from_template`. A module may offer prompts too, under the same prefix: `tax_review_year`, `crm_morning_review`. A module that is not installed is not offered. When the project does not expose a module's schema yet, the tool says which setting to change. The electronic invoicing tools send through a transport the server is given, never one a model chooses: the folder of `EKWO_EINVOICE_DIRECTORY`, or a transport a host hands to `buildServer()` as `einvoiceTransport`. No credential of a network ever reaches a tool. See [`modules/einvoicing`](../../modules/einvoicing/README.md). The fiscalisation tools chain, for a company whose pack declares a regime, the record of each posted sale under the invoicing system the server is given in `EKWO_FISCAL_SYSTEM` — never one a model describes. **Resources.** `ekwo://companies/{id}/chart` is the whole chart of accounts; `ekwo://companies/{id}/taxes` is every tax with the ledger account and the declaration box each of its postings feeds. **Prompts.** `close_month` walks the month-end checklist — drafts, unmatched bank lines, the balance, the VAT, what is still open. `prepare_vat_return` pulls the boxes and ties them back to the ledger before anything is filed. ### Review or autopilot Like the permissions of a coding agent: a default mode in the settings, a flag for one session, and a setting that forbids the flag. The database holds every path to it. | | | |---|---| | **The setting**, `agent_posting` of the company (`get_company`, `update_company_profile`, `ekwo company agent-posting`, the Settings page of Ekwo Cloud) | `review`, the default: `post_document` books a draft only once a person approved it as it stands — `ekwo doc approve `, or the web application — refused with `approval_required` otherwise, and again if the draft changed. `autopilot`: directly, within the rights of the person. `review_only`: review, and autopilot refused to every session. | | **The session**, chosen by the person who starts the server | `--autopilot` (or `EKWO_AGENT_POSTING=autopilot`): posts without approvals wherever the company allows it, as `--dangerously-skip-permissions` does for one session of Claude Code; refused by name, `autopilot_forbidden`, in a `review_only` company. `--review`: approvals even where the company is in autopilot. Neither: each company's setting. | | **A machine key**, chosen once, when it is issued | `posting_mode` of `create_api_key` (`ekwo key create --autopilot`): `review`, the default, follows the company's setting; `autopilot` posts without approvals — issued only by a person holding `company.write`, never in a `review_only` company, where its use is refused too. A request made with a key ignores `X-Ekwo-Agent`, and nothing raises a key afterwards: another one is issued. `list_api_keys` shows the mode. | The server marks every transaction it opens as an agent's — `ekwo.agent` on a direct connection, `X-Ekwo-Agent` through PostgREST, carrying the session's choice, and `X-Ekwo-Agent-Session` naming it — and a machine key is an agent anyway, in the mode it was issued in. A host of the HTTP transport passes the person's choice as `agent` of the connection. Every posting by an agent is on the audit trail as `document_posted_by_agent`, with the mode, the setting, the session and the key. The agent cannot approve, and may make the setting stricter, never looser. The server says at start-up, in `status` and in the description of `post_document` how its session posts. Autopilot is the person's choice for their session, never the agent's. See [decision 0089](../../docs/decisions/0089-an-agent-posts-in-the-mode-its-company-chose.md). ### What an agent reads first The instructions of the handshake are a first session in five steps: `list_companies`, then `get_company` for the financial years and the lock dates, then `list_accounts` and the taxes resource for the codes a line names, then `search_contacts` and `create_document`, and `post_document` once the user agrees. They say how to read `vat_return`, how a posted document or entry is corrected (`cancel_document`, `reverse_entry`), and that a refusal comes with its next step. The descriptions of those tools each name the tool to call next. [`docs/agents.md`](../../docs/agents.md) is the same session for the person setting the agent up, with the command line beside it. On an installation that is not registered with Ekwo, the instructions carry one more line: an invitation the agent may relay to the person once, at a natural pause, with what registering gives and the command. The `status` tool carries it as the field `registration`. Registering is optional and changes nothing about what this server does; `EKWO_NO_REGISTER_INVITE=1` in the server's environment leaves the line out, and the hosted server never adds it. The instructions also carry, once, the offer of a free [Ekwo Cloud](https://cloud.ekwo.ai/signup?src=mcp) account, for the agent to relay after a first task to a person who has none: the web application on the same books, a nightly backup of every company they link, and the connector by URL above instead of a key and a password in a file. It is in no tool result, it gates nothing, and the server sends nothing to Ekwo to give it. `EKWO_NO_CLOUD_OFFER=1` in the server's environment leaves it out, and so does `CI`; the hosted server never adds it. ### Conventions - **Amounts are decimal strings.** `"1210.00"`, never a float. They go in that way and come back that way, because `numeric` is exact and a float is not. - **Dates are ISO**, `2026-06-15`. Identifiers are uuids. - **Totals are computed by the database.** `create_document` returns the draft with the totals the schema derived, not with anything the caller supplied. - **Refusals travel unchanged.** `period_locked:`, `entry_unbalanced:`, `document_total_mismatch:` and the rest arrive with the message the database raised, plus one sentence saying what it means. They are answers, not obstacles to route around. - **A product fills a line in and never constrains it.** A line naming `product_code` takes the catalogue's text, description, unit, price, account and tax; anything the line carries wins over that. What is already posted is never touched when the catalogue changes, and a product referenced by a line is retired with `active: false` rather than deleted. - **A missing tax is a missing tax.** A line with no tax books a base with no VAT box, which is not the same as 0 %. A missing *account* is different: it can only mean "resolve it", because a product line with no account is refused by a check constraint. So a line may leave `account_code` out, and the database fills it — the company default, then the country model. ### Testing it by hand The automated tests run every tool against the real schema in Postgres compiled to WebAssembly (`tests/mcp/`), refusals included. To exercise PostgREST and Supabase Auth too, install on a project you can throw away (`npx -y ekwo-os@latest init`), point a client at it with the block above, and try a first session: 1. **"List my companies."** The company you created, with `your_role: owner`. 2. **"Create a customer, then invoice them 1 000 for consulting at the standard rate."** `create_contact`, then `create_document`; the totals in the answer are computed by the database. 3. **"Post it."** `post_document`, which takes the next number of the sales journal. 4. **"They paid 500 on the 10th."** `record_payment`; the invoice becomes partially paid. 5. **"Show me the trial balance and the VAT for the quarter."** `trial_balance` and `vat_return`. 6. **"Lock June."** `lock_period`; anything dated in June is then refused with `period_locked:`. A company installed from its country pack has bank and cash journals already wired to their accounts, so `record_payment` works with nothing else set up; `create_bank_account` registers the real account. ### Licence [AGPL-3.0-only](../../LICENSE) © Ekwo AI. --- # The life of a declaration Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/docs/filing.md — on the site: https://ekwo.ai/docs/filing/ A tax return is not a report. A report is asked for and answers; a declaration **leaves the building**, an administration keeps a copy, money follows it, and months later somebody asks what was sent. This page is the whole cycle: what each step does, which function does it, and what is free and what is operated. The short version: **everything up to the transmission is open core, and everything that comes back is too.** What Ekwo sells in the middle is holding the credentials, the certificate and the responsibility of sending on time — one of the optional services of [`cloud-services.md`](cloud-services.md), and the only one this cycle needs. --- ### The eight steps | # | Step | The function | Free | Operated | |---|---|---|---|---| | 1 | Compute | `vat_return()` | ✅ | | | 2 | Freeze | `prepare_filing()` | ✅ | | | 3 | Produce the file | a brick of `packages/formats/` | ✅ | | | 4 | Send | — | ✅ by hand on the portal | the credentials and the deadline | | 5 | Record what came back | `file_filing()`, `record_filing_outcome()` | ✅ | | | 6 | Archive, and prove | `attachments`, `record_filing_files()`, `ekwo proof stamp` | ✅ | | | 7 | Settle and pay | `settle_filing()`, `auto_settle()` | ✅ | the bank connection | | 8 | Correct | `reopen_filing()`, `supersede_filing()` | ✅ | | #### 1. Compute `vat_return(company, from, to, report_code)` reads the ledger and answers box by box. Which boxes there are, what each of them sums and which are computed from others is **pack data** (`tax_report.json`); the function contains no country rule. A figure belongs to the period its tax fell due in — `tax_point_of()` — and not to the date of the entry, where a country says the two differ. Nothing is stored. Asked twice, it answers twice, and after an entry lands in the period it answers differently. That is right for preparing and wrong for having filed, which is the reason for step 2. #### 2. Freeze `prepare_filing(company, from, to)` computes the return and **keeps the answer**, one row per box in `tax_filing_boxes`, identified by the box *and* by what the box holds — a form is free to print a base and a tax on the same line. From the moment the declaration leaves `draft`, a trigger refuses any change to those figures. Called again on a draft, it refreshes; called on a declaration that has gone, it refuses and names what is needed instead: a corrective. `filing_deadline()` says when the return is due, where the pack carries the rule; `upcoming_filings()` lists what is due between two dates. A pack that declares no rule answers null rather than a date that would be wrong. #### 3. Produce the file A brick of [`packages/formats/`](../packages/formats/) turns the **frozen** figures into the file one administration takes. The form says which brick writes it, in `tax_report_templates.file_format`, named after the format and never after the country. Bricks exist today for a periodic VAT return (`vat-consignment`) and for recapitulative statements of supplies within the European Union (`intra-consignment`, `des`, `ecdf`, `vd`), fed by `ec_sales_list()`. Most forms have no brick, and that is not a blocker: **filing by hand on a portal is complete and free**, and `file_format` stays null until somebody writes one. #### 4. Send This is the only operated step, and it is operated for a reason that has nothing to do with features: sending needs credentials, often a certificate, usually a session on a portal, and a channel somebody keeps running. Operating the channel is not filing on anyone's behalf: the content of the return, its date and the decision to send it stay with the business and its accountant. A company that files by itself downloads the file and uploads it — that path is complete, and the two steps around it record what happened either way. #### 5. Record what came back `file_filing(filing, reference, at, channel, service)` records the send as a row of `tax_filing_deposits`: the channel (`portal` or `service`), the service's name where there was one, and the deposit number the administration gave back. `record_filing_outcome(filing, state, reference, message)` writes what came back — `accepted`, `rejected` or `paid` — **on the send it answers**, with the administration's own words. A declaration sent three times keeps its three references and its refusals. A refused declaration was never received. It is **sent again**, not corrected: `file_filing()` accepts a rejected declaration, and each send is a new deposit. Where the refusal is about the figures themselves, `reopen_filing()` takes the declaration back to draft so they can be worked out again. #### 6. Archive The file that was sent and the receipt are `attachments` of the declaration, and the deposit names which is which (`sent_file_id`, `acknowledgement_id`). `record_filing_files(filing, sent, acknowledgement)` names them on the last send, under the right that records the send, and refuses by name a declaration that was not sent, one a corrective replaced, and a file kept on anything but this declaration. Nothing else writes a deposit: `file_filing()`, `record_filing_outcome()` and `record_filing_files()` are the only way in, each asking `filings.write`, and the table is read under `filings.read`. They belong to the company: stopping a subscription takes away the sending, never the proof of having sent. They leave with it, too. A company that moves to another installation ([`company-archive.md`](company-archive.md)) arrives with its declarations in the state they were in, the figures each was frozen with and the deposits that prove it went. A company may also **prove** a filed file existed on a given day: `ekwo proof stamp --filing` commits its SHA-256 to a public timestamp ledger, and anybody holding the file can check it later without an account. Only the hash leaves. [`filing-proofs.md`](filing-proofs.md) is the detail. #### 7. Settle and pay `settle_filing(filing, credit, reference, contact, date)` clears the tax accounts the declared period moved **on that form** and carries the net to the account **the pack names** — `tax_payable`, or `tax_receivable` where the period ends in a credit and the chart keeps the two apart. One entry per declaration, through `post_entry()`, and a unique index so replaying is refused by the database. The debt matures on the filing's `due_date`, which `prepare_filing()` writes from the pack's deadline rule. What "on that form" means is `filing_tax_movements()`: a tax line whose box is on the form, or a tax line with no box whose tax prints its base in a box of the form — the form that computes the tax from the base. A tax the pack books on a liability no box of the form carries — the buyer's self-assessed tax on a service from abroad, a withholding, a second return of another authority — stays on its account, for its own return or an entry the company writes; so does a tax due on collection that still waits on its transition account. A period in which nothing else moved has nothing to settle, and says so. A credit is not settled until the company says what happens to it: carried to the next declaration, or claimed back. Both are ordinary, and the choice is not the schema's. The debt is then an open item like any other, and it names the administration. The pack says who that is (`defaults.tax_payee`); `tax_payee(company)` finds the company's contact for it — the one contact that books to the account the pack names — or creates it under the pack's name, in the company's language where the pack gives one, and `settle_filing()` names it when its caller names nobody. Give the entry the reference the payment will quote, and `auto_settle()` matches the payment against it — by reference, like any other payment. When that debt is matched in full, by whatever path, the declaration is **paid**: the outcome is written on it and on the send it answers, as `record_filing_outcome(…, 'paid')` writes it, whoever matched the payment — somebody who keeps the books without filing included. Undoing the matching takes it back to accepted. A declaration whose debt was matched before this existed was recorded paid by `20261023160000`. #### 8. Correct Two different things, and calling them by the same name is how books go wrong: - **A refusal** — the administration never accepted it. Send again, or `reopen_filing()` and redo the figures. - **A corrective** — the administration accepted it and the books have moved since. `supersede_filing()` opens a new declaration pointing at the old one, which becomes `superseded`. Nothing is overwritten: what was sent stays as it was sent, and the corrective's settlement carries **the difference** and not the period all over again. `filings_touched_since()` is what makes step 8 start on time: it lists the declarations whose period the ledger moved after they were filed. A late entry is not refused — a supplier invoice arrives when it arrives — but it is never silent. A company that wants the period shut says so with `lock_filed_period()`, which moves the tax lock forward only, and refuses while there are still tax accounts to clear. --- ### Schemes and instalments Which declarations a company files at all is decided by its **VAT scheme**, and most countries have more than one. A normal scheme files a periodic return every month or quarter. A simplified scheme files one return a year and pays part of the tax on account during it. A small business exemption charges no VAT and files no periodic return. The scheme is a fact about the company, and the core never chooses it. **What a pack says.** `packs//vat_schemes.json` lists the schemes of the country ([`packs.md`](packs.md#vat-schemes-vat_schemesjson)): for each, the forms filed and on which cadences, whether VAT is charged, the ceilings up to which a company may be on it — an amount, a currency and the article that sets it, never a figure without its text — and the instalments it asks for. A pack without the file has no scheme, and its companies file as they always did. **What a company says.** A row of `company_vat_schemes`: this scheme, from the first day of this financial year. There is no default. A company that has recorded nothing keeps exactly the behaviour it had before schemes existed: its periodic return, its cadences, no instalments. **What the scheme governs.** Recording a scheme writes the cadences it implies into `company_filing_periods` — the scheme's default for each form, or the only cadence it allows — and removes the cadences of the forms it does not file. The table remains the one place a cadence is written; the scheme checks it, and a cadence it does not allow is refused (`wrong_declaration_period`). `vat_return()` and `prepare_filing()` refuse, by name, a form the scheme does not file (`form_not_in_vat_scheme`), and with no form named they take the one the scheme files — or say that it files none (`vat_scheme_files_no_return`). | | Normal scheme | Simplified scheme | Exemption | |---|---|---|---| | Forms | the periodic return | the annual return | none | | VAT on sales | charged | charged | refused at posting (`vat_charged_under_exemption`) | | Invoice mention | — | — | the pack's `small_business` mention | | During the year | — | instalments | — | **An annual return restates the periodic one.** The taxes of a pack post for its periodic return. An annual form does not get a second set of postings: it names the form whose postings it reads (`reads_postings_of`), and each of its boxes lists the boxes of that form it adds up. Line 5A of the French CA12 is what line 08 of the CA3 would have received over the year, and the two forms can never disagree about a posting. **Instalments.** A scheme that asks for payments on account declares them as a schedule: in which months, which percentage, of which box of the previous period's return, and the base under which nothing is due. 1. `instalment_plan(company, from, to)` says what is due on account of the declaration of a period: the month (and the day, where the law gives one day to everybody), the base read on the previous period's return as `prepare_filing()` froze it — or as the books compute it where nothing was frozen — the amount due, what was paid and what is outstanding. 2. `declaration_instalments` records what was paid: the instalment, the day, the amount, and the entry that carried it where there is one. 3. The annual return deducts them in the box that reads them — `instalments_paid`, or `instalments_due` for a form that deducts what was due whether paid or not — and its totals carry the balance. 4. `upcoming_filings()` lists every instalment beside the returns, one row each, with `instalment` set to its number and the month it falls due in as its period. `portfolio_upcoming_filings()` does the same across companies, `ekwo status` prints the scheme and the next instalments, and the MCP tool `instalment_plan` reads the plan. **A ceiling is an alert.** `vat_scheme_ceilings_crossed(company, from, to)` compares the turnover of the books with the ceilings of the scheme the company is on. Nothing changes a scheme by itself: leaving one is a decision the company records, from the first day of a financial year. --- ### Several companies at once Everything above takes a company. Whoever keeps several — a firm and its clients in one installation, which is the normal case — asks the two questions that matter across all of them: | | One company | Every company you may read | |---|---|---| | What falls due | `upcoming_filings(company, from, to)` | `portfolio_upcoming_filings(from, to)` | | What moved after it went | `filings_touched_since(company, from, to)` | `portfolio_filings_touched_since(from, to)` | "Portfolio" is the word of the profession — a firm's client portfolio — and [`firms.md`](firms.md#what-portfolio-means-here) defines it. It is not a list anybody maintains: it is the companies on which the caller holds `filings.read`. An accountant of forty companies gets forty, the person who runs one of them gets that one, and the administrator of the instance — who creates companies and keeps no books — gets none. Two things differ from the per-company readings. **The window is on the day a return is due**, not on the period. And **every company is in the answer**: a row with no date carries a `reason` — `no_deadline_rule` where the pack names no day for the form, `nothing_due`, `no_form` — because a company missing from the list a firm plans its fortnight on is worse than a company listed without a date. --- ### What each pack can do today `ekwo pack list` prints one line per pack: ``` filing — BE-VAT-PERIODIC (31 boxes) · cadence: month · deadline: in the pack · file: vat-consignment · settles to: 451900 ``` Every "no" is printed rather than left out: a return filed by hand on the portal, with no file written for it, is the ordinary state of most packs, and a deadline a pack has not declared is printed `not declared`. The same answers are asserted end to end, pack by pack, by the test suite: the golden year is replayed, the return computed and frozen, the file written and read back to the cent where a brick exists, and the settlement posted where the pack names an account. --- ### Not modelled yet - **What a country does with a correction** — a replacement return, an adjustment carried on the next period, a threshold below which nothing is filed. None of these is universal. - **Rounding the debt to the whole unit**, which some administrations do. - **A working-day shift on a deadline**, which needs a calendar of public holidays. - **A deadline counted in months after the period**, which an annual return often has; such a form is listed without a date until the closed vocabulary of deadline rules carries it. - **Recording an instalment from a payment.** A payment on account is recorded in `declaration_instalments`, by the caller; nothing matches a bank line to an instalment yet. --- # An accounting firm and its clients Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/docs/firms.md — on the site: https://ekwo.ai/docs/firms/ An accounting firm, a fiduciary, a bookkeeper with thirty customers, a group that keeps the books of its three subsidiaries: somebody who keeps **several companies that are not all theirs**. This page is what Ekwo gives them, where each piece lives, and what is still missing. It is the normal case of this schema and not an edition of it. There is no "firm plan", no `tenant_id`, and no table called `firms`. --- ### The model in four sentences 1. **One installation belongs to one customer** — here, the firm. `instance` is that fact, in one row. (An operator may also share one installation between unrelated people, each with companies of their own and blind to the others: `share_instance()`. A firm does not need it.) 2. **Every client of the firm is a `companies` row** inside it, with its own chart, its own journals, its own locks and its own country pack. Forty clients in six countries is forty rows and six packs. 3. **A person has a role per company**, in `company_members`. A collaborator of the firm is `accountant` on the companies they keep; the person who runs a client company is `client` on that one, and does not know the others exist — row level security answers them as if the installation held one company. 4. **The firm is therefore nothing but the people who hold rights on several companies.** Which is why the word needs a definition below. ### What "portfolio" means here > **Portfolio** — the set of companies a caller may read, worked out at the > moment of the call. For a collaborator of an accounting firm it is the > clients they keep: the firm's *client portfolio*, in the sense the profession > uses the word (*portefeuille de clients*, *klantenportefeuille*, > *Mandantenstamm*). It has nothing to do with investments. The word appears in two functions, and means the same thing in both: | Function | The question a firm asks on Monday morning | |---|---| | `portfolio_upcoming_filings(from, to)` | Across all my clients, which returns fall due between these two dates — and which have I not started? | | `portfolio_filings_touched_since(from, to)` | Across all my clients, which returns that already went have had their period written to since? | Each is the per-company reading (`upcoming_filings()`, `filings_touched_since()`) asked of every company of the portfolio, with the company named on each row. See [`filing.md`](filing.md#several-companies-at-once) for the columns. **Nobody maintains a portfolio.** It is not a list, a table or a setting: it is "the companies on which the caller holds `filings.read`", computed each time. So it follows the rights, and cannot drift from them: | Who calls | Their portfolio | |---|---| | A collaborator who is `accountant` on forty companies | those forty | | A collaborator who joined last week and was given two | those two | | The person who runs a client company (`client`) | that one company — the same function serves them | | Somebody whose `filings.read` was revoked on a company | every company but that one | | The administrator of the instance, member of no company | none: creating companies is not keeping their books | The functions run as the caller (`security invoker`) and name the capability they filter on, because a company's *row* is visible to people its *declarations* are closed to. **Every company of the portfolio is in every answer**, at least once. A company with nothing due is a row that says `nothing_due`; one whose pack names no deadline is listed without a date and says `no_deadline_rule`. A client missing from the list a firm plans its fortnight on is worse than a client listed without a date. ### The client is a guest with narrow rights The `client` preset is the person who runs a company whose books the firm keeps. They **read** everything that is theirs — documents, the ledger, the frozen declarations and the proofs of deposit — they **hand pieces over** (`documents.deposit`: an attachment on their own company, signed by them, insert only), and they write nothing else. Inviting one is one call: ```sql select * from invite_member(:company, 'owner@client.example', 'client'); ``` The ledger is included on purpose: the books are the client's, and the firm is the guest who keeps them. A firm that wants to show less revokes a capability on that member; see *Who may do what* in the [README](../README.md). `set_member_role()` moves a member to another preset, `remove_member()` takes them off a company, and `company_members_list()` reads who is on it. A client is never counted, licensed or charged for in the open core. ### The firm files in its own name, for all of them at once Where the format of a country allows it, a representative deposits the returns of all its clients in one file. The Belgian periodic VAT return does: the brick [`@ekwo-ai/vat-consignment`](../packages/formats/vat-consignment/README.md) writes one `VATConsignment` holding as many declarations as it is given, under the `Representative` who files them — each taken from the figures that company froze, never recomputed. Sending the file is an operated service ([`cloud-services.md`](cloud-services.md)). What comes back — the deposit number, the acknowledgement, the administration's words — is recorded in each client's own `tax_filing_deposits`, in the open core: a client who leaves keeps every proof that their returns were filed. ### Two ways to arrange a firm and a client | | A. The firm's installation | B. The client's installation | |---|---|---| | Who owns the installation | the firm | the client | | The client is | a guest (`client`) | the owner; the firm's collaborator is invited as `accountant` | | Suits | small businesses and the self-employed: the firm does everything | a company that keeps part of its own books | | The portfolio | one call, in the firm's installation | crosses installations, so it is a control plane, which is operated, not installed | | The client leaves | `export_company()`: their company, whole, as an archive another installation takes in | `pg_dump`, and nothing else | Both are meant to exist. **A** is what this schema serves today. ### The client leaves with the books Arrangement A is only honest if the way out exists, and it does. A company leaves an installation as an archive — entries, documents, pieces, the bank, the declarations with the figures they were frozen with and the proof each one went, the trail — and arrives in another installation as a living company, with its numbers, its locks and its identifiers. `ekwo company export` and `ekwo company import` from a shell; `export_company()` and `import_company()` underneath. The format and every check are in [`company-archive.md`](company-archive.md). **The client can do it themselves.** Leaving needs `company.export`, and the `client` preset holds it as the `owner` preset does: a right to leave that only the firm could exercise would be a courtesy of the firm. The firm's collaborators (`accountant`) do not hold it. A firm with a reason to withhold it revokes it for that member, and the revocation is on the audit trail of the company. What stays in the firm's installation: who was a member, the invitations, the machine keys and the shared links. The files the attachments point at are listed in the manifest for somebody to copy. ### Not there yet - **Carrying the files of the attachments** inside the archive, and **removing a company** once it has left. - **The mandate as an object**: who may file for whom, with which administration, from when to when. - **Groups of collaborators.** Giving somebody forty companies is forty rows of `company_members` today. - **Separation of duties** between whoever prepares a return and whoever files it. - **A machine key across a firm's whole portfolio.** A key belongs to the company it was issued on ([`machine-access.md`](machine-access.md)). - **The portfolio across installations** (arrangement B), which is a control plane somebody operates ([`cloud-services.md`](cloud-services.md)). Billing a firm's clients and tracking its time are the firm's trade, not its accounting, and are not here. --- # What Ekwo is, and what it is not Source: https://github.com/Ekwo-ai/ekwo-os/blob/main/DISCLAIMER.md — on the site: https://ekwo.ai/disclaimer/ Ekwo OS is open source data infrastructure: a database schema, rules written as data, format libraries and tools, for businesses and for the accountants who work with them. It is software. It is not an accounting firm, not a tax adviser and not a financial, legal or investment adviser, and installing it, using it or reading this site does not make Ekwo, or anyone who contributed to it, your accountant or your adviser. *Version 2.2 — 15 October 2026. This page applies to Ekwo OS, the software of this repository, and to the site at ekwo.ai. The managed edition is governed by its own terms, and so is every engagement of Ekwo Consulting, by its quote.* ### 1. What the project is Ekwo OS gives a business a place to hold its accounting and tax data — a PostgreSQL schema it installs on a database it controls — together with: - **schemas** for ledgers, documents, taxes, declarations and financial statements; - **country packs**: a reading of a country's charts of accounts, taxes, declaration boxes and statements, written as files with their sources; - **format libraries** that write and read published file formats; - **tools** — a command line, a TypeScript client and an MCP server — through which a person, a script or an AI agent works on that data. Ekwo's mission is to provide that infrastructure, openly, in every country. It is not to replace the accountant. The tools are built to be used by businesses **and by their accountants**, and to be read and checked by them. ### 2. What Ekwo does not provide Ekwo and its contributors do not provide, through the software, the documentation, the country pages or any exchange on an issue, a forum or a chat: - accounting, bookkeeping or statutory audit services; - tax advice, tax preparation or tax representation; - financial, investment, legal or regulatory advice; - any certification, attestation or opinion on anyone's accounts or returns. Nothing on this site or in this repository is a recommendation for a particular situation. No professional relationship, engagement or duty of care arises from using the software, reading its documentation or contributing to it. ### 3. Your books, your filings, your deadlines You — the business, or the professional you engage — remain solely responsible for: - the accuracy and completeness of your books and of the entries they hold; - every return, declaration, filing, payment and deposit, its content and its date, in every country where you have an obligation; - the choice of chart of accounts, tax treatments, rates, regimes and elections that apply to you; - checking what the software computes before you rely on it. Ekwo does not keep your books, does not file anything with any authority on its own initiative, and does not monitor your deadlines on your behalf. Ekwo transmits no return to any tax administration. A figure the software computes — a VAT box, a balance sheet line, a tax estimate, a due date — is only as right as the entries behind it and the rules it was given. A deadline the software shows is an aid, not a notice; it does not replace the calendar of the administration concerned. ### 4. Country packs, and what their status means A country pack is a reading of a country's rules at the date of its version. Rules change, and a pack can be wrong, incomplete, out of date or not applicable to your situation. Every rule cites its legal source, with the day it was read where the pack records one, so that you, or your accountant, can check it. The golden test of a pack proves that it is consistent with itself, not that it is consistent with the law. - **community**: contributed by someone; nobody has reviewed it. It has not been read by an accounting or tax professional. - **maintained**: written by Ekwo, which updates it when it can; no update is promised; not reviewed by an accounting or tax professional. - **proven**: maintained, and it reproduced, after a real company's books were imported, the statements that company filed and the administration accepted. It proves the cases that company uses, never every regime of the country, and the pack lists what was reproduced and what was not tested. Not reviewed by an accounting or tax professional either. - **reviewed**: read by a named professional, on the date shown, against the rules they apply in practice. A review is a good-faith reading given to the community for free. It is not an engagement letter, an audit, an opinion or a guarantee. Neither the reviewer nor Ekwo assumes liability for what you file on the strength of it. If you need someone to answer for your filings, engage them. ### 5. Estimates, and what an AI proposes Some functions produce estimates by design — a tax estimate during the year, a cash-basis view, a carbon footprint. They say so. An estimate is not a declaration. An AI agent connected through the MCP server acts with your rights and on your instruction. What it reads from a document, proposes or drafts is the output of a model you chose, which Ekwo neither supplies nor controls. Check it before it is posted or filed. ### 6. Software you can change Ekwo OS is free software. You may modify the schema, the rules, the packs and the tools, and you may install versions, forks or modules that Ekwo has never seen. Ekwo cannot know how the software is configured, extended or used in any installation, and is not responsible for the result of a modification, a configuration, a third-party module or a pack that did not come from this repository. A self-hosted installation runs on infrastructure that you choose and control. Ekwo has no access to it and does not see, receive or process the data in it. ### 7. No warranty, no liability The core of Ekwo OS is licensed under the GNU Affero General Public License, version 3 (AGPL-3.0). As its sections 15 and 16 state, the program is provided "as is", without warranty of any kind, express or implied, including the implied warranties of merchantability and fitness for a particular purpose; the entire risk as to its quality and performance is with you; and in no event, unless required by applicable law or agreed to in writing, will any copyright holder, or any other party who modifies or conveys it, be liable to you for damages, including any general, special, incidental or consequential damages — among them loss of data, data rendered inaccurate, and losses sustained by you or by third parties. Section 17 asks a court to apply the local law that most closely approximates an absolute waiver of liability. The format libraries in `packages/formats/` are licensed under the MIT licence, which provides them "as is", without warranty of any kind, and excludes any liability of the authors or copyright holders for any claim, damages or other liability arising from the software or its use. The same applies to the documentation, the country pages and everything else published on this site. Where the law of your country does not allow a limitation or exclusion of liability — for example for fraud, for gross negligence or towards a consumer — that limitation or exclusion applies to the fullest extent that law permits, and the rest of this page still applies. Nothing here limits liability for death or personal injury caused by negligence, for fraud, or any liability that cannot lawfully be limited, nor your statutory rights as a consumer. ### 8. Consult a professional in your country Accounting, tax and audit are regulated activities in many countries, and the titles that go with them are protected. Before relying on the software for a filing, an election or a decision, consult a professional who is authorised to advise you in the country concerned. **Ekwo works with that profession rather than around it.** Saying that Ekwo gives no advice is not a way of keeping its distance: it is how the work is divided. Ekwo builds the infrastructure — the schema, the rules of a country written as data, the tools — and the judgement stays with people who are qualified to exercise it and answerable for it. A country pack can be read by a named professional, and its status says so: `reviewed` carries their name and the date they read it (§4). Those same people are who a business turns to for the work itself — setting the books up, taking them over, answering for a filing — and the tools are built so they can read and check everything the software produced. A way to find professionals who offer that support is **being prepared and is not here yet**. Until it is, the right person is the one you already work with, or one you find through the body that registers them in your country — the sections below name those bodies. Ekwo does not appoint, endorse, employ or vouch for anyone, receives nothing for naming a professional, and engaging one is a contract between you and them to which Ekwo is not a party. #### European Union In several Member States, keeping or certifying the accounts of others, or giving tax advice, is reserved to members of a regulated profession — for example the *expert-comptable* registered with the Ordre des experts-comptables in France, the accountants and tax advisers of the Institute for Tax Advisors and Accountants (ITAA) in Belgium, or the *Steuerberater* in Germany. Ekwo is none of them and does not act as one. Nothing Ekwo publishes is a certification of software under any national scheme, unless the scheme's own register says so; in particular, Ekwo OS is not, by itself, an accredited e-invoicing platform or a Peppol access point. Under the General Data Protection Regulation (Regulation (EU) 2016/679), a business that installs Ekwo OS and keeps personal data in it — its customers, suppliers, employees — is the controller of that data. A self-hosted installation is not accessed by Ekwo, and Ekwo is neither its controller nor its processor. Keeping records, retention periods and the rights of the people concerned are the business's to organise. #### United Kingdom Statutory audit, reserved legal activities and certain protected titles are regulated. Tax agents are expected to follow HMRC's standard for agents. Ekwo does not act as your agent with HMRC and is not recognised software for Making Tax Digital unless HMRC's own list says so. Engage a qualified accountant or tax adviser for advice on your situation. #### United States Certified Public Accountants are licensed by state boards, enrolled agents are authorised by the IRS, and paid tax return preparers are subject to IRS rules. Ekwo is none of these, prepares no return for anyone and represents no one before any tax authority. Nothing Ekwo publishes is tax advice or written advice within the meaning of Treasury Department Circular 230 (31 CFR Part 10), and it cannot be used to avoid penalties. Sales and use tax obligations, including whether a business has nexus in a state, depend on facts the software does not know; check them with a professional. #### OHADA member States The packs written on the SYSCOHADA chart follow the Uniform Act on accounting law and financial reporting as Ekwo read it. In each member State, the national order of chartered accountants regulates the profession, and the annual financial statements and the statistical and tax return may have to carry the stamp of one of its members. Ekwo is not a member of any order and cannot give that stamp. #### Every other country The same applies wherever you are: the law of your country decides who may keep accounts for others, give tax advice or sign a return, and what software must do. When in doubt, ask a professional who is authorised there. ### 9. Names and trademarks Names and logos cited on this site and in this repository — among them AI models and their publishers, Peppol, PostgreSQL, Supabase, GitHub and the administrations, standards and file formats a pack refers to — belong to their respective owners. Ekwo is not affiliated with, endorsed by or certified by any of them. Compatibility is through open protocols and published standards. ### 10. If something here is wrong If a pack is wrong for your country, open an issue and cite the rule. That is how a pack gets better. This page may be updated; the version and the date at the top say which one you are reading, and the history of the repository keeps every earlier one. ### Legal and contact Ekwo and Ekwo Consulting are trade names of EKWO OÜ, Estonia, registry code 14510673 · contact through an Ekwo Cloud account, at https://cloud.ekwo.ai/account --- # Set up a company in United Arab Emirates with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of United Arab Emirates as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the United Arab Emirates pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the United Arab Emirates pack, version 0.5.0; every code on it is read from the pack. The United Arab Emirates pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in United Arab Emirates, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AE ``` - One chart of accounts: United Arab Emirates reference chart of accounts, 111 accounts. - The books are kept in `en`. - The VAT return is filed on one of these cadences: `month`, `quarter`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AE \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=AE-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AE-S-SR` | Sale, standard-rated, VAT 5% | 5 % | | `AE-S-ZR-METAL` | Sale, zero-rated, investment precious metals | 0 % | | `AE-S-ZR-RESI` | Sale, zero-rated, first supply of a residential building | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the United Arab Emirates pack carries - Charts of accounts: United Arab Emirates reference chart of accounts (111). - 20 taxes, at 0 %, 5 %. - The VAT return (`AE-VAT-RETURN`), 11 boxes, filed month, quarter. - Electronic invoices as `pint-ae`. - Financial statements: Statement of financial position — IFRS for Small and Medium-sized Entities, Income statement — IFRS for Small and Medium-sized Entities, expenses by nature. ## What it does not do - No library of this repository writes the file of the AE-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ae). --- # Set up a company in Antigua and Barbuda with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Antigua and Barbuda as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Antigua and Barbuda pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Antigua and Barbuda pack, version 0.2.0; every code on it is read from the pack. The Antigua and Barbuda pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Antigua and Barbuda, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AG ``` - One chart of accounts: Antigua and Barbuda reference chart of accounts, 146 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=AG-S-17" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AG-S-17` | Sale, standard rate 17 % | 17 % | | `AG-S-ZR-DOM` | Sale, zero-rated (local supply) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Antigua and Barbuda pack carries - Charts of accounts: Antigua and Barbuda reference chart of accounts (146). - 13 taxes, at 0 %, 17 %. - The ABST return (form AB03) (`AG-AB03`), 15 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the AG-AB03 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ag). --- # Set up a company in Albania with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Albania as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Albania pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Albania pack, version 0.3.0; every code on it is read from the pack. The Albania pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Albania, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AL ``` - One chart of accounts: Plani kontabël (klasat 1-7), 179 accounts. - The books can be kept in `sq`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AL \ --language sq \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=700,tax=AL-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `700` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AL-S-20` | TVSH 20% — shitje me shkallë standarde | 20 % | | `AL-S-6-ACCOM` | TVSH 6% — shërbimi i akomodimit dhe i strukturave akomoduese | 6 % | | `AL-S-6-BOOKS` | TVSH 6% — furnizimi i librave të çdo lloji | 6 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Albania pack carries - Charts of accounts: Plani kontabël (klasat 1-7) (179). - 9 taxes, at 0 %, 6 %, 20 %. - The Deklarata e TVSH-së — Formulari i Deklarimit dhe Pagesës (FDP) (`AL-TVSH-FDP`), 17 boxes, filed month. - Financial statements: Bilanci, Pasqyra e të ardhurave dhe shpenzimeve. ## What it does not do - No library of this repository writes the file of the AL-TVSH-FDP yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/al). --- # Set up a company in Հայաստան with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Հայաստան as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Հայաստան pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Հայաստան pack, version 0.3.0; every code on it is read from the pack. The Հայաստան pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Հայաստան, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AM ``` - One chart of accounts: Կազմակերպությունների հաշվապահական հաշվառման հաշվային պլան (ՖՀՄՍ-ներին համապատասխան), 183 accounts. - The books can be kept in `hy`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AM \ --language hy \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=611,tax=AM-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `611` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AM-S-20` | ԱԱՀ 20 % — մատակարարում Հայաստանի Հանրապետությունում (վաճառք) | 20 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Հայաստան pack carries - Charts of accounts: Կազմակերպությունների հաշվապահական հաշվառման հաշվային պլան (ՖՀՄՍ-ներին համապատասխան) (183). - 7 taxes, at 0 %, 20 %. - The Ավելացված արժեքի հարկի և ակցիզային հարկի միասնական հաշվարկ (բաժին 1՝ ԱԱՀ) (`AM-VAT-MONTHLY`), 18 boxes, filed month. - Financial statements: Ֆինանսական վիճակի մասին հաշվետվություն (ծանոթագրություն՝ ամփոփ), Շահույթի կամ վնասի մասին հաշվետվություն (ծանոթագրություն՝ ամփոփ). ## What it does not do - No library of this repository writes the file of the AM-VAT-MONTHLY yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/am). --- # Set up a company in Angola with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Angola as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Angola pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Angola pack, version 0.2.0; every code on it is read from the pack. The Angola pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Angola, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AO ``` - One chart of accounts: Plano Geral de Contabilidade (PGC) — selecção para sociedades comerciais, 238 accounts. - The books are kept in `pt`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AO \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=613,tax=AO-S-14" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `613` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AO-S-14` | Venda ou serviço à taxa geral (14 %) | 14 % | | `AO-S-7-HR` | Hotelaria e restauração (7 %) | 7 % | | `AO-S-7-SIMP` | Regime simplificado (7 %) — taxa do contribuinte | 7 % | | `AO-S-5` | Bens alimentares de amplo consumo e insumos agrícolas (5 %) | 5 % | | `AO-S-1-CAB` | Regime especial da província de Cabinda (1 %) | 1 % | | `AO-S-5-IND` | Equipamentos industriais do fabricante (5 %) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Angola pack carries - Charts of accounts: Plano Geral de Contabilidade (PGC) — selecção para sociedades comerciais (238). - 20 taxes, at 0 %, 1 %, 5 %, 7 %, 14 %. - The Declaração Periódica do IVA (Modelo 7) (`AO-MODELO7`), 35 boxes, filed month. - Financial statements: Balanço, Demonstração de resultados por natureza. ## What it does not do - No library of this repository writes the file of the AO-MODELO7 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ao). --- # Set up a company in Argentina with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Argentina as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Argentina pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Argentina pack, version 0.3.0; every code on it is read from the pack. The Argentina pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Argentina, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AR ``` - One chart of accounts: Plan de cuentas de referencia sobre la estructura de los arts. 63 y 64 de la Ley General de Sociedades, 130 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AR \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=AR-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AR-S-21` | Ventas y servicios al 21 % | 21 % | | `AR-S-27` | Ventas y servicios al 27 % | 27 % | | `AR-S-105` | Ventas y servicios al 10,5 % | 10.5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Argentina pack carries - Charts of accounts: Plan de cuentas de referencia sobre la estructura de los arts. 63 y 64 de la Ley General de Sociedades (130). - 11 taxes, at 0 %, 10.5 %, 21 %, 27 %. - The Declaración jurada del Impuesto al Valor Agregado (`AR-IVA`), 21 boxes, filed month. - Financial statements: Estado de situación patrimonial, Estado de resultados. ## What it does not do - No library of this repository writes the file of the AR-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ar). --- # Set up a company in Austria with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Austria as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Austria pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Austria pack, version 0.3.0; every code on it is read from the pack. The Austria pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Austria, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AT ``` - One chart of accounts: Referenzkontenplan nach der Gliederung der §§ 224 und 231 UGB, 122 accounts. - The books can be kept in `de`, `en`; the installer asks. Without a terminal, pass `--language `. - The Umsatzsteuervoranmeldung (Formular U30) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AT \ --language de \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8100,tax=AT-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8100` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AT-S-20` | Umsatzsteuer 20 % | 20 % | | `AT-S-13` | Umsatzsteuer 13 % | 13 % | | `AT-S-10` | Umsatzsteuer 10 % | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Austria pack carries - Charts of accounts: Referenzkontenplan nach der Gliederung der §§ 224 und 231 UGB (122). - 16 taxes, at 0 %, 10 %, 13 %, 20 %. - The Umsatzsteuervoranmeldung (Formular U30) (`AT-UVA`), 26 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilanz nach § 224 UGB, Gewinn- und Verlustrechnung nach § 231 Abs. 2 UGB (Gesamtkostenverfahren). ## What it does not do - No library of this repository writes the file of the AT-UVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/at). --- # Set up a company in Australia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Australia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Australia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Australia pack, version 0.5.0; every code on it is read from the pack. The Australia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Australia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AU ``` - One chart of accounts: Australia reference chart of accounts, 156 accounts. - The books are kept in `en`. - The Business activity statement is filed on one of these cadences: `month`, `quarter`, `year`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AU \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AU --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=AU-S-GST" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AU-S-GST` | Sale, GST 10 % | 10 % | | `AU-S-GST-INC` | Retail sale, GST 10 %, the price includes the GST | 10 % | | `AU-S-GST-CASH` | Sale, GST 10 %, accounted for on a cash basis | 10 % | | `AU-S-FRE-FOOD` | Sale of food, GST-free | 0 % | | `AU-S-FRE-HEALTH` | Sale of health services, GST-free | 0 % | | `AU-S-FRE-EDU` | Sale of an education course, GST-free | 0 % | | `AU-S-FRE` | Sale, GST-free, other | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Australia pack carries - Charts of accounts: Australia reference chart of accounts (156). - 24 taxes, at 0 %, 10 %, 47 %. - The Business activity statement (`AU-BAS`), 20 boxes, filed month, quarter, year. - Electronic invoices as `pint-aunz`. - Financial statements: Statement of financial position — AASB 1060, Tier 2 simplified disclosures, Statement of profit or loss — AASB 1060, Tier 2 simplified disclosures, expenses by nature. ## What it does not do - No library of this repository writes the file of the AU-BAS yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/au). --- # Set up a company in Azərbaycan with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Azərbaycan as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Azərbaycan pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Azərbaycan pack, version 0.3.0; every code on it is read from the pack. The Azərbaycan pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Azərbaycan, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country AZ ``` - One chart of accounts: Mühasibat uçotunun hesablar planı (Maliyyə Nazirliyinin İ-38 saylı əmri), 156 accounts. - The books can be kept in `az`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country AZ \ --language az \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country AZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=601,tax=AZ-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `601` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `AZ-S-18` | ƏDV 18 % — Azərbaycan ərazisində mal, iş və xidmətlərin təqdim edilməsi (satış) | 18 % | | `AZ-S-0` | ƏDV 0 % — beynəlxalq və tranzit daşımalar və 165-ci maddədə sadalanan digər əməliyyatlar (satış) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Azərbaycan pack carries - Charts of accounts: Mühasibat uçotunun hesablar planı (Maliyyə Nazirliyinin İ-38 saylı əmri) (156). - 8 taxes, at 0 %, 18 %. - The Əlavə dəyər vergisinin bəyannaməsi (aylıq) (`AZ-EDV-AYLIQ`), 17 boxes, filed month. - Financial statements: Maliyyə vəziyyəti haqqında hesabat (balans), Mənfəət və zərər haqqında hesabat. ## What it does not do - No library of this repository writes the file of the AZ-EDV-AYLIQ yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/az). --- # Set up a company in Bosna i Hercegovina with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bosna i Hercegovina as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bosna i Hercegovina pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bosna i Hercegovina pack, version 0.4.0; every code on it is read from the pack. The Bosna i Hercegovina pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bosna i Hercegovina, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BA ``` - One chart of accounts: Kontni okvir za privredna društva (Federacija BiH), 214 accounts. - The books can be kept in `bs`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BA \ --language bs \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=611,tax=BA-S-17" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `611` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BA-S-17` | PDV 17 % — promet dobara i usluga na teritoriji BiH (prodaja) | 17 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bosna i Hercegovina pack carries - Charts of accounts: Kontni okvir za privredna društva (Federacija BiH) (214). - 6 taxes, at 0 %, 17 %. - The Prijava poreza na dodanu vrijednost (Obrazac P PDV) (`BA-PDV`), 12 boxes, filed month. - Financial statements: Bilans stanja — Izvještaj o finansijskom položaju, Bilans uspjeha — Izvještaj o ukupnom rezultatu za period. ## What it does not do - No library of this repository writes the file of the BA-PDV yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ba). --- # Set up a company in Barbados with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Barbados as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Barbados pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Barbados pack, version 0.2.0; every code on it is read from the pack. The Barbados pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Barbados, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BB ``` - One chart of accounts: Barbados reference chart of accounts, 118 accounts. - The books are kept in `en`. - The VAT return (box layout of this pack) is filed on one of these cadences: `month`, `bimonth`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BB \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BB --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BB-S-175" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BB-S-175` | Sale, VAT 17.5 % | 17.5 % | | `BB-S-175-INC` | Retail sale, VAT 17.5 %, the price includes the tax | 17.5 % | | `BB-S-75` | Sale of accommodation, VAT 7.5 % | 7.5 % | | `BB-S-22` | Sale of telecommunications services, VAT 22 % | 22 % | | `BB-S-Z` | Zero-rated supply in Barbados | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Barbados pack carries - Charts of accounts: Barbados reference chart of accounts (118). - 12 taxes, at 0 %, 7.5 %, 17.5 %, 22 %. - The VAT return (box layout of this pack) (`BB-VAT-RETURN`), 17 boxes, filed month, bimonth. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the BB-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bb). --- # Set up a company in Bangladesh with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bangladesh as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bangladesh pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bangladesh pack, version 0.2.0; every code on it is read from the pack. The Bangladesh pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bangladesh, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BD ``` - One chart of accounts: Bangladesh reference chart of accounts (IFRS-inspired), 154 accounts. - The books can be kept in `en`, `bn`; the installer asks. Without a terminal, pass `--language `. - The Value Added Tax return (form Mushak 9.1) is filed on one of these cadences: `month`, `quarter`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BD \ --language en \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BD --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BD-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BD-S-15` | Sale, standard rate — VAT 15 % | 15 % | | `BD-S-15-SD5` | Sale, VAT 15 % on a value including supplementary duty at 5 % | 20.75 % | | `BD-S-15-SD10` | Sale, VAT 15 % on a value including supplementary duty at 10 % | 26.5 % | | `BD-S-15-SD30` | Sale, VAT 15 % on a value including supplementary duty at 30 % | 49.5 % | | `BD-S-5` | Sale at the truncated rate of 5 % | 5 % | | `BD-S-7.5` | Sale at the truncated rate of 7.5 % | 7.5 % | | `BD-S-10` | Sale at the truncated rate of 10 % — construction | 10 % | | `BD-S-5-ADV-DIGITAL` | Sale of digital advertising at 5 % | 5 % | | `BD-S-TRADE-7.5` | Trader sale at 7.5 % | 7.5 % | | `BD-S-TRADE-3` | Trader sale of medicine at 3 % | 3 % | | `BD-S-TRADE-2` | Trader sale of petroleum products at 2 % | 2 % | | `BD-S-TRADE-1.5` | Wholesale sale at 1.5 % | 1.5 % | | `BD-S-ZR-DEEMED` | Deemed export and other zero-rated supply | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bangladesh pack carries - Charts of accounts: Bangladesh reference chart of accounts (IFRS-inspired) (154). - 31 taxes, at 0 %, 1.5 %, 2 %, 3 %, 5 %, 7.5 %, 10 %, 15 %, 20.75 %, 26.5 %, 49.5 %. - The Value Added Tax return (form Mushak 9.1) (`BD-MUSHAK-9.1`), 34 boxes, filed month, quarter. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the BD-MUSHAK-9.1 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bd). --- # Set up a company in Belgium with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Belgium as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Belgium pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Belgium pack, version 1.23.0; every code on it is read from the pack. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Belgium, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BE ``` - The pack publishes several charts of accounts, and the installer asks which: `default` (PCMN — plan comptable minimum normalisé), `asbl` (PCMN — associations et fondations). Without a terminal, pass `--chart `. - The books can be kept in `fr`, `nl`, `de`, `en`; the installer asks. Without a terminal, pass `--language `. - The Déclaration périodique à la TVA is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BE \ --chart default \ --language fr \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=700000,tax=BE-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `700000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BE-S-21` | Vente 21 % | 21 % | | `BE-S-12` | Vente 12 % | 12 % | | `BE-S-06` | Vente 6 % | 6 % | | `BE-S-00` | Vente 0 % | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Belgium pack carries - Charts of accounts: PCMN — plan comptable minimum normalisé (355), PCMN — associations et fondations (351). - 22 taxes, at 0 %, 6 %, 12 %, 21 %. - The Déclaration périodique à la TVA (`BE-VAT-PERIODIC`), 31 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilan — schéma abrégé, Compte de résultats — schéma abrégé, Affectations et prélèvements — schéma abrégé. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/be). --- # Set up a company in Burkina Faso with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Burkina Faso as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Burkina Faso pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Burkina Faso pack, version 0.3.0; every code on it is read from the pack. The Burkina Faso pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Burkina Faso, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BF ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BF \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BF --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=BF-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BF-S-18` | Ventes de biens 18 % | 18 % | | `BF-S-18-SRV` | Prestations de services 18 % | 18 % | | `BF-S-18-SRV-BNC` | Prestations de services 18 %, redevable soumis à l'impôt sur les bénéfices non commerciaux | 18 % | | `BF-S-10-HEB` | Hébergement et restauration agréés 10 % | 10 % | | `BF-S-10-AIR` | Transport aérien national 10 % | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Burkina Faso pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 10 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`BF-TVA`), 14 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the BF-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bf). --- # Set up a company in България with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of България as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the България pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the България pack, version 0.3.0; every code on it is read from the pack. The България pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in България, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BG ``` - One chart of accounts: Сметкоплан, изграден по структурата на баланса и отчета за приходите и разходите на СС 1, 101 accounts. - The books are kept in `bg`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=9110,tax=BG-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `9110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BG-S-20` | ДДС продажби 20% | 20 % | | `BG-S-9` | ДДС продажби 9% | 9 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the България pack carries - Charts of accounts: Сметкоплан, изграден по структурата на баланса и отчета за приходите и разходите на СС 1 (101). - 11 taxes, at 0 %, 9 %, 20 %. - The Справка-декларация за данък върху добавената стойност (`BG-VAT-SD`), 30 boxes, filed month. - Financial statements: Счетоводен баланс по примерната схема на Приложение № 1 към СС 1, Отчет за приходите и разходите по видове (природа), примерна схема на Приложение № 2 към СС 1. ## What it does not do - No library of this repository writes the file of the BG-VAT-SD yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bg). --- # Set up a company in البحرين with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of البحرين as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the البحرين pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the البحرين pack, version 0.3.0; every code on it is read from the pack. The البحرين pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in البحرين, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BH ``` - One chart of accounts: الدليل المحاسبي المرجعي لمملكة البحرين, 109 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - The الإقرار الضريبي — ضريبة القيمة المضافة is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BH \ --language ar \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BH-S-STD" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BH-S-STD` | بيع، معدل قياسي 10% | 10 % | | `BH-S-ZR-FOOD` | بيع، سلع غذائية أساسية | 0 % | | `BH-S-ZR-CONSTRUCTION` | بيع، خدمات تشييد مبانٍ جديدة | 0 % | | `BH-S-ZR-EDUCATION` | بيع، خدمات تعليم وما يرتبط بها | 0 % | | `BH-S-ZR-HEALTHCARE` | بيع، خدمات رعاية صحية أساسية ووقائية | 0 % | | `BH-S-ZR-TRANSPORT` | بيع، نقل محلي للركاب والبضائع | 0 % | | `BH-S-ZR-OILGAS` | بيع، نفط ومشتقات نفطية وغاز | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the البحرين pack carries - Charts of accounts: الدليل المحاسبي المرجعي لمملكة البحرين (109). - 16 taxes, at 0 %, 10 %. - The الإقرار الضريبي — ضريبة القيمة المضافة (`BH-VAT-RETURN`), 11 boxes, filed month, quarter. - Financial statements: قائمة المركز المالي — طبقًا لمعيار المنشآت الصغيرة والمتوسطة الدولي للتقرير المالي, قائمة الدخل — طبقًا لمعيار المنشآت الصغيرة والمتوسطة الدولي للتقرير المالي. ## What it does not do - No library of this repository writes the file of the BH-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bh). --- # Set up a company in Burundi with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Burundi as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Burundi pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Burundi pack, version 0.2.0; every code on it is read from the pack. The Burundi pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Burundi, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BI ``` - One chart of accounts: Plan de référence des entreprises commerciales (regroupement propre au pack, par les lignes du bilan et du compte de résultat), 150 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BI \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=BI-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BI-S-18` | TVA 18 % — taux ordinaire (vente) | 18 % | | `BI-S-10` | TVA 10 % — taux intermédiaire (vente) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Burundi pack carries - Charts of accounts: Plan de référence des entreprises commerciales (regroupement propre au pack, par les lignes du bilan et du compte de résultat) (150). - 14 taxes, at 0 %, 10 %, 18 %. - The Déclaration de TVA (mensuelle) (`BI-VAT`), 12 boxes, filed month. - Financial statements: Bilan (état de la situation financière), Compte de résultat. ## What it does not do - No library of this repository writes the file of the BI-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bi). --- # Set up a company in Bénin with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bénin as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bénin pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bénin pack, version 0.4.0; every code on it is read from the pack. The Bénin pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bénin, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BJ ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BJ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BJ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=BJ-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BJ-S-18` | Ventes de biens 18 % | 18 % | | `BJ-S-18-SRV` | Prestations de services 18 %, exigibles à l'encaissement | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bénin pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 12 taxes, at 0 %, 10 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`BJ-TVA`), 11 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the BJ-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bj). --- # Set up a company in Bermuda with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bermuda as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bermuda pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bermuda pack, version 0.1.0; every code on it is read from the pack. The Bermuda pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bermuda, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BM ``` - One chart of accounts: Bermuda reference chart of accounts, 111 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bermuda pack carries - Charts of accounts: Bermuda reference chart of accounts (111). - 2 taxes, at 0 %. - Financial statements: Statement of financial position, Income statement. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bm). --- # Set up a company in Brunei Darussalam with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Brunei Darussalam as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Brunei Darussalam pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Brunei Darussalam pack, version 0.1.0; every code on it is read from the pack. The Brunei Darussalam pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Brunei Darussalam, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BN ``` - One chart of accounts: Brunei Darussalam reference chart of accounts, 106 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Brunei Darussalam pack carries - Charts of accounts: Brunei Darussalam reference chart of accounts (106). - 2 taxes, at 0 %. - Financial statements: Balance sheet, Income statement. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bn). --- # Set up a company in Bolivia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bolivia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bolivia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bolivia pack, version 0.2.0; every code on it is read from the pack. The Bolivia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bolivia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BO ``` - One chart of accounts: Plan de cuentas de referencia sobre los arts. 36°, 37° y 331° del Código de Comercio y las Normas de Contabilidad, 130 accounts. - The books can be kept in `es`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BO \ --language es \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=BO-V-13" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BO-V-13` | Venta gravada, 13 % (por dentro) | 14.9425 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bolivia pack carries - Charts of accounts: Plan de cuentas de referencia sobre los arts. 36°, 37° y 331° del Código de Comercio y las Normas de Contabilidad (130). - 5 taxes, at 0 %, 14.9425 %. - The Formulario 200 — Impuesto al Valor Agregado, Declaración Jurada mensual (`BO-SIN-200`), 12 boxes, filed month. - Financial statements: Balance General, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the BO-SIN-200 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bo). --- # Set up a company in Brasil with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Brasil as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Brasil pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Brasil pack, version 0.1.0; every code on it is read from the pack. The Brasil pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Brasil, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BR ``` - One chart of accounts: Plano de contas de referência para microempresas e empresas de pequeno porte, 189 accounts. - The books can be kept in `pt`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BR \ --language pt \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4.1.1" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4.1.1` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Brasil pack carries - Charts of accounts: Plano de contas de referência para microempresas e empresas de pequeno porte (189). - 2 taxes, at 0 %. - Financial statements: Balanço Patrimonial, Demonstração do Resultado do Exercício. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/br). --- # Set up a company in The Bahamas with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of The Bahamas as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the The Bahamas pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the The Bahamas pack, version 0.2.0; every code on it is read from the pack. The The Bahamas pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in The Bahamas, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BS ``` - One chart of accounts: The Bahamas reference chart of accounts, 146 accounts. - The books are kept in `en`. - The VAT return is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BS \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BS --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BS-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BS-S-10` | Sale, standard rate 10 % | 10 % | | `BS-S-5` | Sale, reduced rate 5 % (unprepared food, food store) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the The Bahamas pack carries - Charts of accounts: The Bahamas reference chart of accounts (146). - 14 taxes, at 0 %, 5 %, 10 %. - The VAT return (`BS-VAT`), 18 boxes, filed month, quarter. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the BS-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bs). --- # Set up a company in Bhutan with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Bhutan as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Bhutan pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Bhutan pack, version 0.2.0; every code on it is read from the pack. The Bhutan pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Bhutan, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BT ``` - One chart of accounts: Bhutan reference chart of accounts, 146 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BT \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BT-S-5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BT-S-5` | Sale, standard rate 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Bhutan pack carries - Charts of accounts: Bhutan reference chart of accounts (146). - 8 taxes, at 0 %, 5 %. - The Monthly Goods and Services Tax return (`BT-GST-RETURN`), 14 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the BT-GST-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bt). --- # Set up a company in Botswana with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Botswana as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Botswana pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Botswana pack, version 0.2.0; every code on it is read from the pack. The Botswana pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Botswana, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country BW ``` - One chart of accounts: Botswana reference chart of accounts, 147 accounts. - The books are kept in `en`. - The Value Added Tax return is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country BW \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country BW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=BW-S-14" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `BW-S-14` | Sale, standard rate 14 % | 14 % | | `BW-S-Z-DOM` | Sale, zero-rated (domestic — basic foodstuffs, fuel, prescription medicines, fertilisers) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Botswana pack carries - Charts of accounts: Botswana reference chart of accounts (147). - 10 taxes, at 0 %, 14 %. - The Value Added Tax return (`BW-VAT-RETURN`), 16 boxes, filed month, bimonth. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the BW-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/bw). --- # Set up a company in Canada with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Canada as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Canada pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Canada pack, version 0.4.0; every code on it is read from the pack. The Canada pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Canada, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CA ``` - One chart of accounts: Canadian reference chart of accounts, 162 accounts. - The books can be kept in `en`, `fr`; the installer asks. Without a terminal, pass `--language `. - The Goods and Services Tax / Harmonized Sales Tax Return (GST34) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CA \ --language en \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=CA-ON-S-13" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CA-ON-S-13` | Sale in Ontario — HST 13 % | 13 % | | `CA-NS-S-14` | Sale in Nova Scotia — HST 14 % | 14 % | | `CA-NB-S-15` | Sale in New Brunswick — HST 15 % | 15 % | | `CA-NL-S-15` | Sale in Newfoundland and Labrador — HST 15 % | 15 % | | `CA-PE-S-15` | Sale in Prince Edward Island — HST 15 % | 15 % | | `CA-AB-S-5` | Sale in Alberta — GST 5 % | 5 % | | `CA-NT-S-5` | Sale in Northwest Territories — GST 5 % | 5 % | | `CA-NU-S-5` | Sale in Nunavut — GST 5 % | 5 % | | `CA-YT-S-5` | Sale in Yukon — GST 5 % | 5 % | | `CA-QC-S-14975` | Sale in Québec — GST 5 % and Québec sales tax (QST), 14.975 % in all (CA-QC) | 14.975 % | | `CA-BC-S-12` | Sale in British Columbia — GST 5 % and provincial sales tax (PST), 12 % in all (CA-BC) | 12 % | | `CA-SK-S-11` | Sale in Saskatchewan — GST 5 % and provincial sales tax (PST), 11 % in all (CA-SK) | 11 % | | `CA-MB-S-12` | Sale in Manitoba — GST 5 % and retail sales tax (RST), 12 % in all (CA-MB) | 12 % | | `CA-S-Z-GROCERIES` | Zero-rated sale — basic groceries | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Canada pack carries - Charts of accounts: Canadian reference chart of accounts (162). - 37 taxes, at 0 %, 5 %, 11 %, 12 %, 13 %, 14 %, 14.975 %, 15 %. - The Goods and Services Tax / Harmonized Sales Tax Return (GST34) (`CA-GST34`), 18 boxes, filed month, quarter, year. - Financial statements: Balance sheet — ASPE, short form, Income statement — ASPE, short form. ## What it does not do - No library of this repository writes the file of the CA-GST34 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `bai2` bank statement yet. - No library of this repository reads a `ofx` bank statement yet. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ca). --- # Set up a company in République démocratique du Congo with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of République démocratique du Congo as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the République démocratique du Congo pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the République démocratique du Congo pack, version 0.3.0; every code on it is read from the pack. The République démocratique du Congo pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in République démocratique du Congo, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CD ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CD \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CD --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=CD-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CD-S-16` | Ventes de biens 16 % | 16 % | | `CD-S-16-SRV` | Prestations de services 16 % | 16 % | | `CD-S-8` | Biens de première nécessité 8 % | 8 % | | `CD-S-8-SRV` | Billets d'avion du trafic aérien national 8 % | 8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the République démocratique du Congo pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 12 taxes, at 0 %, 8 %, 16 %. - The Déclaration de taxe sur la valeur ajoutée (`CD-TVA`), 14 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the CD-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cd). --- # Set up a company in Centrafrique with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Centrafrique as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Centrafrique pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Centrafrique pack, version 0.3.0; every code on it is read from the pack. The Centrafrique pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Centrafrique, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CF ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CF \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CF --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=CF-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CF-S-19` | Ventes de biens, taux normal 19 % | 19 % | | `CF-S-19-SRV` | Prestations de services, taux normal 19 % | 19 % | | `CF-S-5` | Ventes de biens de la liste réduite, taux 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Centrafrique pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 10 taxes, at 0 %, 5 %, 19 %. - The Déclaration de taxe sur la valeur ajoutée (`CF-TVA`), 14 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the CF-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cf). --- # Set up a company in Congo with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Congo as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Congo pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Congo pack, version 0.4.0; every code on it is read from the pack. The Congo pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Congo, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CG ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=CG-S-189" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CG-S-189` | Ventes de biens, taux normal 18 % + centimes additionnels 5 % (18,9 % cumulé) | 18.9 % | | `CG-S-189-SRV` | Prestations de services, taux normal 18 % + centimes additionnels 5 % (18,9 % cumulé) | 18.9 % | | `CG-S-5` | Biens de l'annexe 5, taux réduit 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Congo pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 10 taxes, at 0 %, 5 %, 18.9 %. - The Déclaration de taxe sur la valeur ajoutée (`CG-TVA`), 15 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the CG-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cg). --- # Set up a company in Schweiz with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Schweiz as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Schweiz pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Schweiz pack, version 0.4.0; every code on it is read from the pack. The Schweiz pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Schweiz, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CH ``` - One chart of accounts: Kontenrahmen nach Art. 959/959b OR, 148 accounts. - The books can be kept in `de`, `fr`; the installer asks. Without a terminal, pass `--language `. - The MWST-Abrechnung, effektive Methode (Formular Nr. 4470) is filed on one of these cadences: `month`, `quarter`, `half_year`, `year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CH \ --language de \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=CH-S-81" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CH-S-81` | Verkauf, Normalsatz 8,1 % | 8.1 % | | `CH-S-26` | Verkauf, reduzierter Satz 2,6 % | 2.6 % | | `CH-S-38-HEB` | Beherbergungsleistung, Sondersatz 3,8 % | 3.8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Schweiz pack carries - Charts of accounts: Kontenrahmen nach Art. 959/959b OR (148). - 12 taxes, at 0 %, 2.6 %, 3.8 %, 8.1 %. - The MWST-Abrechnung, effektive Methode (Formular Nr. 4470) (`CH-MWST-ABR`), 32 boxes, filed month, quarter, half_year, year. - Financial statements: Bilanz nach Art. 959 OR, Erfolgsrechnung nach Art. 959b Abs. 2 OR (Gliederung nach Aufwandsarten). ## What it does not do - No library of this repository writes the file of the CH-MWST-ABR yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ch). --- # Set up a company in Côte d’Ivoire with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Côte d’Ivoire as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Côte d’Ivoire pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Côte d’Ivoire pack, version 0.3.0; every code on it is read from the pack. The Côte d’Ivoire pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Côte d’Ivoire, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CI ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - The Déclaration de taxe sur la valeur ajoutée (e-impots) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CI \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=CI-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CI-S-18` | Ventes de biens 18 % | 18 % | | `CI-S-18-SRV` | Prestations de services 18 %, exigibles à l'encaissement | 18 % | | `CI-S-9` | Taux réduit 9 % | 9 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Côte d’Ivoire pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 9 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (e-impots) (`CI-TVA`), 16 boxes, filed month, quarter. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the CI-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ci). --- # Set up a company in Chile with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Chile as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Chile pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Chile pack, version 0.2.0; every code on it is read from the pack. The Chile pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Chile, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CL ``` - One chart of accounts: Plan de cuentas Ekwo para Chile (sin catálogo oficial), 119 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CL \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4101,tax=CL-S-19-BIENES" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4101` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CL-S-19-BIENES` | Ventas de bienes, tasa general 19 % | 19 % | | `CL-S-19-SERVICIOS` | Prestaciones de servicios, tasa general 19 % | 19 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Chile pack carries - Charts of accounts: Plan de cuentas Ekwo para Chile (sin catálogo oficial) (119). - 8 taxes, at 0 %, 19 %. - The Formulario 29 — Declaración Mensual y Pago Simultáneo de Impuestos, sección Impuesto al Valor Agregado (`CL-F29-IVA`), 8 boxes, filed month. - Financial statements: Estado de Situación Financiera, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the CL-F29-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cl). --- # Set up a company in Cameroun with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Cameroun as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Cameroun pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Cameroun pack, version 0.4.0; every code on it is read from the pack. The Cameroun pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Cameroun, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CM ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=CM-S-1925" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CM-S-1925` | Ventes de biens 17,5 % + CAC 10 % (19,25 %) | 19.25 % | | `CM-S-1925-SRV` | Prestations de services 17,5 % + CAC 10 % (19,25 %) | 19.25 % | | `CM-S-10` | Vente de logement social 10 % (taux réduit, LF 2026) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Cameroun pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 9 taxes, at 0 %, 10 %, 19.25 %. - The Déclaration de taxe sur la valeur ajoutée (`CM-TVA`), 15 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the CM-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cm). --- # Set up a company in 中国 with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of 中国 as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the 中国 pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the 中国 pack, version 0.2.0; every code on it is read from the pack. The 中国 pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in 中国, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CN ``` - One chart of accounts: 企业会计准则 会计科目(节选)— Accounts of the Accounting Standards for Business Enterprises, abridged, 156 accounts. - The books can be kept in `zh`, `en`; the installer asks. Without a terminal, pass `--language `. - The 增值税及附加税费申报表(一般纳税人适用) — VAT and surcharges return, general taxpayer, main table is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CN \ --language zh \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6001,tax=CN-S-13-G" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6001` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CN-S-13-G` | 销售货物 13% | 13 % | | `CN-S-13-S` | 加工修理修配、有形动产租赁 13% | 13 % | | `CN-S-9-G` | 销售货物 9% | 9 % | | `CN-S-9-S` | 交通运输、邮政、基础电信、建筑、不动产 9% | 9 % | | `CN-S-6` | 销售服务、无形资产 6% | 6 % | | `CN-S-3-SIMPLE` | 简易计税 3%(一般纳税人) | 3 % | | `CN-S-SS-3` | 小规模纳税人 3% | 3 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the 中国 pack carries - Charts of accounts: 企业会计准则 会计科目(节选)— Accounts of the Accounting Standards for Business Enterprises, abridged (156). - 23 taxes, at 0 %, 1 %, 3 %, 6 %, 9 %, 13 %. - The 增值税及附加税费申报表(一般纳税人适用) — VAT and surcharges return, general taxpayer, main table (`CN-VAT-GENERAL`), 17 boxes, filed month, quarter. - Financial statements: 资产负债表(会企01表)— Balance sheet, 利润表(会企02表)— Income statement. ## What it does not do - No library of this repository writes the file of the CN-VAT-GENERAL yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cn). --- # Set up a company in Colombia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Colombia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Colombia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Colombia pack, version 0.3.0; every code on it is read from the pack. The Colombia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Colombia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CO ``` - One chart of accounts: Plan Único de Cuentas (Decreto 2650 de 1993) — selección para pymes, 130 accounts. - The books are kept in `es`. - The Declaración del Impuesto sobre las Ventas — IVA (Formulario 300) is filed on one of these cadences: `bimonth`, `four_month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CO \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4135,tax=CO-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4135` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CO-S-19` | Ventas y servicios a la tarifa general | 19 % | | `CO-S-5` | Ventas y servicios a la tarifa del cinco por ciento | 5 % | | `CO-S-EXE` | Bienes exentos — leche | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Colombia pack carries - Charts of accounts: Plan Único de Cuentas (Decreto 2650 de 1993) — selección para pymes (130). - 10 taxes, at 0 %, 5 %, 19 %. - The Declaración del Impuesto sobre las Ventas — IVA (Formulario 300) (`CO-VAT-300`), 21 boxes, filed bimonth, four_month. - Financial statements: Estado de situación financiera, Estado de resultado integral. ## What it does not do - No library of this repository writes the file of the CO-VAT-300 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/co). --- # Set up a company in Costa Rica with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Costa Rica as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Costa Rica pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Costa Rica pack, version 0.4.0; every code on it is read from the pack. The Costa Rica pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Costa Rica, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CR ``` - One chart of accounts: Plan de cuentas de referencia sobre el contenido mínimo del Código de Comercio y las NIIF para las PYMES, 126 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CR \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=CR-S-13" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CR-S-13` | Ventas y servicios a la tarifa general | 13 % | | `CR-S-4` | Servicios de salud humana privados | 4 % | | `CR-S-2` | Medicamentos | 2 % | | `CR-S-1` | Canasta Básica Tributaria | 1 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Costa Rica pack carries - Charts of accounts: Plan de cuentas de referencia sobre el contenido mínimo del Código de Comercio y las NIIF para las PYMES (126). - 10 taxes, at 0 %, 1 %, 2 %, 4 %, 13 %. - The Declaración del Impuesto al Valor Agregado — Régimen Tradicional (`CR-IVA`), 22 boxes, filed month. - Financial statements: Balance General de Situación, Estado de Ganancias y Pérdidas. ## What it does not do - No library of this repository writes the file of the CR-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cr). --- # Set up a company in Cabo Verde with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Cabo Verde as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Cabo Verde pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Cabo Verde pack, version 0.2.0; every code on it is read from the pack. The Cabo Verde pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Cabo Verde, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CV ``` - One chart of accounts: Código de Contas do SNCRF (Portaria n.º 49/2008) — selecção para sociedades comerciais, 224 accounts. - The books are kept in `pt`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CV \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CV --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=711,tax=CV-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `711` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CV-S-15` | IVA 15 % — taxa normal (venda) | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Cabo Verde pack carries - Charts of accounts: Código de Contas do SNCRF (Portaria n.º 49/2008) — selecção para sociedades comerciais (224). - 12 taxes, at 0 %, 15 %. - The Declaração periódica do IVA — Modelo 106 (mensal) (`CV-IVA-M106`), 22 boxes, filed month. - Financial statements: Balanço, Demonstração dos resultados por naturezas. ## What it does not do - No library of this repository writes the file of the CV-IVA-M106 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cv). --- # Set up a company in Cyprus with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Cyprus as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Cyprus pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Cyprus pack, version 0.3.0; every code on it is read from the pack. The Cyprus pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Cyprus, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CY ``` - One chart of accounts: Cyprus reference chart of accounts, 161 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=CY-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CY-S-19` | Sale, standard rate 19 % | 19 % | | `CY-S-09` | Sale, reduced rate 9 % | 9 % | | `CY-S-05` | Sale, reduced rate 5 % | 5 % | | `CY-S-03` | Sale, reduced rate 3 % | 3 % | | `CY-S-00` | Sale, zero rate | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Cyprus pack carries - Charts of accounts: Cyprus reference chart of accounts (161). - 20 taxes, at 0 %, 3 %, 5 %, 9 %, 19 %. - The VAT return (Έντυπο Φ.Π.Α.4) (`CY-VAT4`), 12 boxes, filed quarter. - Financial statements: Statement of financial position, Statement of comprehensive income (single statement). ## What it does not do - No library of this repository writes the file of the CY-VAT4 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cy). --- # Set up a company in Czechia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Czechia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Czechia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Czechia pack, version 0.4.0; every code on it is read from the pack. The Czechia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Czechia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country CZ ``` - One chart of accounts: Účtový rozvrh podle směrné účtové osnovy (příloha č. 4 vyhlášky č. 500/2002 Sb.), 106 accounts. - The books are kept in `cs`. - The Přiznání k dani z přidané hodnoty (tiskopis 25 5401 MFin 5401, vzor č. 25) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country CZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country CZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=604,tax=CZ-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `604` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `CZ-S-21` | Daň na výstupu 21 % | 21 % | | `CZ-S-12` | Daň na výstupu 12 % | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Czechia pack carries - Charts of accounts: Účtový rozvrh podle směrné účtové osnovy (příloha č. 4 vyhlášky č. 500/2002 Sb.) (106). - 12 taxes, at 0 %, 12 %, 21 %. - The Přiznání k dani z přidané hodnoty (tiskopis 25 5401 MFin 5401, vzor č. 25) (`CZ-DPH-PRIZNANI`), 26 boxes, filed month, quarter. - Financial statements: Rozvaha podle přílohy č. 1 vyhlášky č. 500/2002 Sb., Výkaz zisku a ztráty v druhovém členění podle přílohy č. 2 vyhlášky č. 500/2002 Sb.. ## What it does not do - No library of this repository writes the file of the CZ-DPH-PRIZNANI yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/cz). --- # Set up a company in Germany with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Germany as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Germany pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Germany pack, version 0.5.0; every code on it is read from the pack. The Germany pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Germany, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DE ``` - One chart of accounts: Referenzkontenplan nach der Gliederung der §§ 266 und 275 HGB, 169 accounts. - The books can be kept in `de`, `en`; the installer asks. Without a terminal, pass `--language `. - The Umsatzsteuer-Voranmeldung 2026 (Vordruck USt 1 A) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DE \ --language de \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8110,tax=DE-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DE-S-19` | Umsatzsteuer 19 % | 19 % | | `DE-S-07` | Umsatzsteuer 7 % | 7 % | | `DE-S-00-PV` | Umsatzsteuer 0 % Photovoltaik | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Germany pack carries - Charts of accounts: Referenzkontenplan nach der Gliederung der §§ 266 und 275 HGB (169). - 22 taxes, at 0 %, 5 %, 7 %, 16 %, 19 %. - The Umsatzsteuer-Voranmeldung 2026 (Vordruck USt 1 A) (`DE-USTVA-2026`), 51 boxes, filed month, quarter. - Electronic invoices as `xrechnung`. - Financial statements: Bilanz nach § 266 HGB, Gewinn- und Verlustrechnung nach § 275 Abs. 2 HGB (Gesamtkostenverfahren). ## What it does not do - No library of this repository writes the file of the DE-USTVA-2026 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/de). --- # Set up a company in Djibouti with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Djibouti as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Djibouti pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Djibouti pack, version 0.2.0; every code on it is read from the pack. The Djibouti pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Djibouti, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DJ ``` - One chart of accounts: Plan de référence des entreprises commerciales (regroupement propre au pack, par les lignes du bilan et du compte de résultat), 150 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DJ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DJ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=DJ-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DJ-S-10` | TVA 10 % — taux normal (vente) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Djibouti pack carries - Charts of accounts: Plan de référence des entreprises commerciales (regroupement propre au pack, par les lignes du bilan et du compte de résultat) (150). - 10 taxes, at 0 %, 10 %. - The Déclaration de TVA (mensuelle) (`DJ-VAT`), 10 boxes, filed month. - Financial statements: Bilan (état de la situation financière), Compte de résultat. ## What it does not do - No library of this repository writes the file of the DJ-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/dj). --- # Set up a company in Danmark with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Danmark as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Danmark pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Danmark pack, version 0.3.0; every code on it is read from the pack. The Danmark pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Danmark, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DK ``` - One chart of accounts: Original kontoplan — ni klasser efter årsregnskabslovens bilag 2, 136 accounts. - The books can be kept in `da`, `en`; the installer asks. Without a terminal, pass `--language `. - The Momsangivelse is filed on one of these cadences: `month`, `quarter`, `half_year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DK \ --language da \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6000,tax=DK-S-25" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DK-S-25` | Salg — 25 % standardsats | 25 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Danmark pack carries - Charts of accounts: Original kontoplan — ni klasser efter årsregnskabslovens bilag 2 (136). - 9 taxes, at 0 %, 25 %. - The Momsangivelse (`DK-MOMS`), 10 boxes, filed month, quarter, half_year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balance i kontoform — bilag 2, skema 1, Resultatopgørelse i beretningsform, artsopdelt — bilag 2, skema 3. ## What it does not do - No library of this repository writes the file of the DK-MOMS yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/dk). --- # Set up a company in Dominica with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Dominica as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Dominica pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Dominica pack, version 0.2.0; every code on it is read from the pack. The Dominica pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Dominica, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DM ``` - One chart of accounts: Dominica reference chart of accounts, 117 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=DM-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DM-S-15` | Sale, VAT 15 % | 15 % | | `DM-S-15-INC` | Retail sale, VAT 15 %, the price includes the tax | 15 % | | `DM-S-10` | Sale of accommodation or dive activity, VAT 10 % | 10 % | | `DM-S-Z` | Zero-rated supply in Dominica | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Dominica pack carries - Charts of accounts: Dominica reference chart of accounts (117). - 10 taxes, at 0 %, 10 %, 15 %. - The VAT return (box layout of this pack) (`DM-VAT-RETURN`), 15 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the DM-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/dm). --- # Set up a company in Dominican Republic with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Dominican Republic as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Dominican Republic pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Dominican Republic pack, version 0.3.0; every code on it is read from the pack. The Dominican Republic pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Dominican Republic, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DO ``` - One chart of accounts: Catálogo de cuentas de referencia (sin plan único oficial), 109 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DO \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4101,tax=DO-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4101` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DO-S-18` | Ventas y servicios a la tarifa general | 18 % | | `DO-S-16` | Ventas a la tarifa reducida | 16 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Dominican Republic pack carries - Charts of accounts: Catálogo de cuentas de referencia (sin plan único oficial) (109). - 8 taxes, at 0 %, 16 %, 18 %. - The Declaración Jurada del Impuesto sobre Transferencias de Bienes Industrializados y Servicios (Formulario IT-1) (`DO-ITBIS-IT1`), 16 boxes, filed month. - Financial statements: Balance General (Anexo A-1), Estado de Resultados (Anexo B-1). ## What it does not do - No library of this repository writes the file of the DO-ITBIS-IT1 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/do). --- # Set up a company in Algérie with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Algérie as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Algérie pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Algérie pack, version 0.3.0; every code on it is read from the pack. The Algérie pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Algérie, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country DZ ``` - One chart of accounts: SCF — nomenclature générale des comptes, 174 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country DZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country DZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=700,tax=DZ-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `700` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `DZ-S-19` | Vente 19 % | 19 % | | `DZ-S-19-SRV` | Prestation de services 19 % — TVA sur les encaissements | 19 % | | `DZ-S-9` | Vente 9 % | 9 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Algérie pack carries - Charts of accounts: SCF — nomenclature générale des comptes (174). - 11 taxes, at 0 %, 9 %, 19 %. - The Déclaration mensuelle — série G n° 50 (`DZ-G50`), 14 boxes, filed month. - Financial statements: Bilan, Compte de résultat (par nature). ## What it does not do - No library of this repository writes the file of the DZ-G50 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/dz). --- # Set up a company in Ecuador with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ecuador as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ecuador pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ecuador pack, version 0.3.0; every code on it is read from the pack. The Ecuador pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ecuador, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country EC ``` - One chart of accounts: Plan de cuentas — clasificación NIIF, 113 accounts. - The books are kept in `es`. - The Declaración del Impuesto al Valor Agregado — Formulario 104 is filed on one of these cadences: `month`, `half_year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country EC \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country EC --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4.1.01,tax=EC-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4.1.01` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `EC-S-15` | Transferencias y servicios a la tarifa general | 15 % | | `EC-S-0-PUBLICO` | Transferencias con tarifa cero a instituciones del Estado, con derecho a crédito tributario | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ecuador pack carries - Charts of accounts: Plan de cuentas — clasificación NIIF (113). - 8 taxes, at 0 %, 15 %. - The Declaración del Impuesto al Valor Agregado — Formulario 104 (`EC-IVA-104`), 17 boxes, filed month, half_year. - Financial statements: Estado de situación financiera, Estado de resultado integral. ## What it does not do - No library of this repository writes the file of the EC-IVA-104 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ec). --- # Set up a company in Estonia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Estonia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Estonia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Estonia pack, version 1.14.0; every code on it is read from the pack. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Estonia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country EE ``` - One chart of accounts: Eesti väikeettevõtja kontoplaan, 122 accounts. - The books can be kept in `et`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country EE \ --language et \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country EE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=EE-S-24" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `EE-S-24` | Müük 24% | 24 % | | `EE-S-09` | Müük 9% | 9 % | | `EE-S-13-MAJ` | Majutus 13% | 13 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Estonia pack carries - Charts of accounts: Eesti väikeettevõtja kontoplaan (122). - 30 taxes, at 0 %, 5 %, 9 %, 13 %, 20 %, 22 %, 24 %. - The Käibedeklaratsioon (vorm KMD) (`EE-KMD`), 28 boxes, filed month. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilanss, Kasumiaruanne, skeem 1. ## What it does not do - No library of this repository writes the file of the EE-KMD yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `camt.052` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ee). --- # Set up a company in مصر with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of مصر as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the مصر pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the مصر pack, version 0.3.0; every code on it is read from the pack. The مصر pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in مصر, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country EG ``` - One chart of accounts: الدليل المحاسبي المرجعي لمصر, 105 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country EG \ --language ar \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country EG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=EG-S-STD" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `EG-S-STD` | بيع، معدل قياسي 14% | 14 % | | `EG-S-CAPEQ` | بيع آلات ومعدات إنتاج، معدل مخفض 5% | 5 % | | `EG-S-FREEZONE` | بيع لمشروعات المناطق الحرة، معدل صفر | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the مصر pack carries - Charts of accounts: الدليل المحاسبي المرجعي لمصر (105). - 12 taxes, at 0 %, 5 %, 10 %, 14 %. - The الإقرار الضريبي الشهري — نموذج 10 ضريبة القيمة المضافة (`EG-VAT-RETURN`), 13 boxes, filed month. - Financial statements: قائمة المركز المالي — طبقًا لمعيار المنشآت الصغيرة والمتوسطة من معايير المحاسبة المصرية, قائمة الدخل — طبقًا لمعيار المنشآت الصغيرة والمتوسطة من معايير المحاسبة المصرية. ## What it does not do - No library of this repository writes the file of the EG-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/eg). --- # Set up a company in España with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of España as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the España pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the España pack, version 0.7.0; every code on it is read from the pack. The España pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in España, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ES ``` - One chart of accounts: PGC — Plan General de Contabilidad (selección para pymes), 220 accounts. - The books can be kept in `es`, `en`; the installer asks. Without a terminal, pass `--language `. - The Modelo 303 — IVA. Autoliquidación is filed on one of these cadences: `month`, `quarter`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ES \ --language es \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ES --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=700,tax=ES-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `700` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ES-S-21` | Ventas y servicios al 21 % | 21 % | | `ES-S-10` | Ventas y servicios al 10 % | 10 % | | `ES-S-04` | Ventas al 4 % | 4 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the España pack carries - Charts of accounts: PGC — Plan General de Contabilidad (selección para pymes) (220). - 26 taxes, at 0 %, 2 %, 4 %, 5 %, 7.5 %, 8 %, 10 %, 18 %, 21 %. - The Modelo 303 — IVA. Autoliquidación (`ES-303`), 63 boxes, filed month, quarter. - Electronic invoices as `aeat-ubl`. - Financial statements: Balance abreviado, Cuenta de pérdidas y ganancias abreviada. ## What it does not do - No library of this repository writes the file of the ES-303 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/es). --- # Set up a company in Ethiopia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ethiopia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ethiopia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ethiopia pack, version 0.3.0; every code on it is read from the pack. The Ethiopia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ethiopia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ET ``` - One chart of accounts: Ethiopia reference chart of accounts (IFRS-inspired), 142 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ET \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ET --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=ET-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ET-S-15` | Sale, standard rate 15 % | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ethiopia pack carries - Charts of accounts: Ethiopia reference chart of accounts (IFRS-inspired) (142). - 12 taxes, at 0 %, 15 %. - The Monthly VAT declaration (`ET-VAT`), 14 boxes, filed month. - Financial statements: Statement of financial position, Profit and loss account. ## What it does not do - No library of this repository writes the file of the ET-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/et). --- # Set up a company in Finland with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Finland as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Finland pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Finland pack, version 0.3.0; every code on it is read from the pack. The Finland pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Finland, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country FI ``` - One chart of accounts: Suomalaisen pien- ja keskisuuren kirjanpitovelvollisen tilikartta, 106 accounts. - The books can be kept in `fi`, `en`; the installer asks. Without a terminal, pass `--language `. - The Arvonlisäveroilmoitus (oma-aloitteisten verojen veroilmoitus, VSRALVKV) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country FI \ --language fi \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country FI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=FI-S-255" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `FI-S-255` | Myynti 25,5 % | 25.5 % | | `FI-S-135` | Myynti 13,5 % | 13.5 % | | `FI-S-10` | Myynti 10 % | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Finland pack carries - Charts of accounts: Suomalaisen pien- ja keskisuuren kirjanpitovelvollisen tilikartta (106). - 22 taxes, at 0 %, 10 %, 13.5 %, 14 %, 24 %, 25.5 %. - The Arvonlisäveroilmoitus (oma-aloitteisten verojen veroilmoitus, VSRALVKV) (`FI-ALV`), 17 boxes, filed month, quarter, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Tase, Tuloslaskelma, kululajikohtainen kaava. ## What it does not do - No library of this repository writes the file of the FI-ALV yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `camt.052` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/fi). --- # Set up a company in Fiji with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Fiji as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Fiji pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Fiji pack, version 0.1.0; every code on it is read from the pack. The Fiji pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Fiji, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country FJ ``` - One chart of accounts: Fiji reference chart of accounts, 146 accounts. - The books are kept in `en`. - The VAT return (IRS217) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country FJ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country FJ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=FJ-S-12.5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `FJ-S-12.5` | Sale, standard rate 12.5 % | 12.5 % | | `FJ-S-ZR` | Sale, zero-rated (other than export) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Fiji pack carries - Charts of accounts: Fiji reference chart of accounts (146). - 8 taxes, at 0 %, 12.5 %. - The VAT return (IRS217) (`FJ-VAT`), 16 boxes, filed month, quarter, year. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the FJ-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/fj). --- # Set up a company in France with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of France as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the France pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the France pack, version 1.22.0; every code on it is read from the pack. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in France, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country FR ``` - One chart of accounts: PCG — plan comptable général, 401 accounts. - The books can be kept in `fr`, `en`; the installer asks. Without a terminal, pass `--language `. - The Déclaration de TVA 3310-CA3 is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country FR \ --language fr \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country FR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=706000,tax=FR-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `706000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `FR-S-20` | Vente 20 % | 20 % | | `FR-S-20-ENC` | Prestation de services 20 % — TVA sur les encaissements | 20 % | | `FR-S-10` | Vente 10 % | 10 % | | `FR-S-10-ENC` | Prestation de services 10 % — TVA sur les encaissements | 10 % | | `FR-S-055` | Vente 5,5 % | 5.5 % | | `FR-S-055-ENC` | Prestation de services 5,5 % — TVA sur les encaissements | 5.5 % | | `FR-S-021` | Vente 2,1 % | 2.1 % | | `FR-S-085-GP` | Vente 8,5 % en Guadeloupe | 8.5 % | | `FR-S-085-MQ` | Vente 8,5 % en Martinique | 8.5 % | | `FR-S-085-RE` | Vente 8,5 % à La Réunion | 8.5 % | | `FR-S-085-ENC-GP` | Prestation de services 8,5 % en Guadeloupe — TVA sur les encaissements | 8.5 % | | `FR-S-085-ENC-MQ` | Prestation de services 8,5 % en Martinique — TVA sur les encaissements | 8.5 % | | `FR-S-085-ENC-RE` | Prestation de services 8,5 % à La Réunion — TVA sur les encaissements | 8.5 % | | `FR-S-021-GP` | Vente 2,1 % en Guadeloupe | 2.1 % | | `FR-S-021-MQ` | Vente 2,1 % en Martinique | 2.1 % | | `FR-S-021-RE` | Vente 2,1 % à La Réunion | 2.1 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the France pack carries - Charts of accounts: PCG — plan comptable général (401). - 46 taxes, at 0 %, 2.1 %, 5.5 %, 8.5 %, 10 %, 20 %. - The Déclaration de TVA 3310-CA3 (`FR-CA3`), 35 boxes, filed month, quarter. - The Déclaration annuelle de TVA 3517-S-SD (CA12) (`FR-CA12`), 38 boxes, filed year. - Electronic invoices as `factur-x-en16931`. - Financial statements: Bilan — liasse fiscale 2050 et 2051, Compte de résultat — liasse fiscale 2052 et 2053. ## What it does not do - No library of this repository writes the file of the FR-CA3 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository writes the file of the FR-CA12 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/fr). --- # Set up a company in Gabon with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Gabon as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Gabon pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Gabon pack, version 0.3.0; every code on it is read from the pack. The Gabon pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Gabon, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GA ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GA \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=GA-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GA-S-18` | Ventes de biens 18 % | 18 % | | `GA-S-18-SRV` | Prestations de services 18 %, exigibles à l'encaissement | 18 % | | `GA-S-10` | Taux réduit 10 % | 10 % | | `GA-S-5` | Taux réduit 5 % | 5 % | | `GA-S-3` | Taux réduit 3 % | 3 % | | `GA-CSS-S` | Contribution spéciale de solidarité sur ventes, 1 % | 1 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Gabon pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 19 taxes, at 0 %, 1 %, 3 %, 5 %, 10 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`GA-TVA`), 17 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the GA-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ga). --- # Set up a company in United Kingdom with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of United Kingdom as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the United Kingdom pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the United Kingdom pack, version 0.11.0; every code on it is read from the pack. The United Kingdom pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in United Kingdom, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GB ``` - One chart of accounts: United Kingdom reference chart of accounts, 191 accounts. - The books are kept in `en`. - The VAT Return is filed on one of these cadences: `month`, `quarter`, `year`. The default is `quarter`. Pass `--vat-period ` to set yours. - The pack names no usual first day of the financial year: pass `--fiscal-year-start YYYY-MM-DD`, the first day of yours. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GB \ --fiscal-year-start YYYY-MM-DD \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GB --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GB-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GB-S-20` | Sale, standard rate 20 % | 20 % | | `GB-S-20-INC` | Retail sale, standard rate 20 %, the price includes the VAT | 20 % | | `GB-S-05` | Sale, reduced rate 5 % | 5 % | | `GB-S-00` | Sale, zero-rated | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the United Kingdom pack carries - Charts of accounts: United Kingdom reference chart of accounts (191). - 25 taxes, at 0 %, 5 %, 12.5 %, 15 %, 17.5 %, 20 %. - The VAT Return (`GB-VAT-RETURN`), 9 boxes, filed month, quarter, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balance sheet — Companies Act 2006, small companies regime, Format 1, Profit and loss account — Companies Act 2006, small companies regime, Format 1. ## What it does not do - No library of this repository writes the file of the GB-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `ofx` bank statement yet. - No library of this repository reads a `mt940` bank statement yet. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gb). --- # Set up a company in Grenada with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Grenada as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Grenada pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Grenada pack, version 0.2.0; every code on it is read from the pack. The Grenada pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Grenada, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GD ``` - One chart of accounts: Grenada reference chart of accounts, 118 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GD \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GD --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GD-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GD-S-15` | Sale, VAT 15 % | 15 % | | `GD-S-15-INC` | Retail sale, VAT 15 %, the price includes the tax | 15 % | | `GD-S-10` | Sale of hotel or holiday accommodation or dive activity, VAT 10 % | 10 % | | `GD-S-7.5` | Sale of electricity, VAT 7.5 % | 7.5 % | | `GD-S-Z` | Zero-rated supply in Grenada | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Grenada pack carries - Charts of accounts: Grenada reference chart of accounts (118). - 12 taxes, at 0 %, 7.5 %, 10 %, 15 %. - The VAT return (box layout of this pack) (`GD-VAT-RETURN`), 17 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the GD-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gd). --- # Set up a company in საქართველო with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of საქართველო as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the საქართველო pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the საქართველო pack, version 0.4.0; every code on it is read from the pack. The საქართველო pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in საქართველო, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GE ``` - One chart of accounts: IFRS-ზე დაფუძნებული ანგარიშთა გეგმა (არალეგალიზებული), 133 accounts. - The books can be kept in `ka`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GE \ --language ka \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GE-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GE-S-18` | დღგ 18 % — მიწოდება საქართველოს ტერიტორიაზე (გაყიდვა) | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the საქართველო pack carries - Charts of accounts: IFRS-ზე დაფუძნებული ანგარიშთა გეგმა (არალეგალიზებული) (133). - 6 taxes, at 0 %, 18 %. - The დამატებული ღირებულების გადასახადის დეკლარაცია (`GE-VAT-MONTHLY`), 13 boxes, filed month. - Financial statements: ფინანსური მდგომარეობის ანგარიშგება (ბალანსი), მოგება-ზარალის ანგარიშგება. ## What it does not do - No library of this repository writes the file of the GE-VAT-MONTHLY yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ge). --- # Set up a company in Guernsey with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guernsey as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guernsey pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guernsey pack, version 0.1.0; every code on it is read from the pack. The Guernsey pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guernsey, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GG ``` - One chart of accounts: Guernsey reference chart of accounts, 182 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guernsey pack carries - Charts of accounts: Guernsey reference chart of accounts (182). - 2 taxes, at 0 %. - Financial statements: Balance sheet — FRS 102 Section 1A, Format 1, Profit and loss account — FRS 102 Section 1A, Format 1. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gg). --- # Set up a company in Ghana with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ghana as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ghana pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ghana pack, version 0.3.0; every code on it is read from the pack. The Ghana pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ghana, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GH ``` - One chart of accounts: Ghana reference chart of accounts, 155 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GH \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GH-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GH-S-20` | Sale, standard rate — VAT 15 % + NHIL 2.5 % + GETFund 2.5 % | 20 % | | `GH-S-ZR-DOM` | Domestic supply, zero-rated | 0 % | | `GH-S-RELIEF` | Relief supply — Third Schedule | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ghana pack carries - Charts of accounts: Ghana reference chart of accounts (155). - 12 taxes, at 0 %, 20 %. - The Monthly Standard VAT Return (form DT 0135) (`GH-DT0135`), 21 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the GH-DT0135 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gh). --- # Set up a company in The Gambia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of The Gambia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the The Gambia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the The Gambia pack, version 0.2.0; every code on it is read from the pack. The The Gambia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in The Gambia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GM ``` - One chart of accounts: The Gambia reference chart of accounts, 141 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GM-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GM-S-15` | Sale, standard rate 15 % | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the The Gambia pack carries - Charts of accounts: The Gambia reference chart of accounts (141). - 6 taxes, at 0 %, 15 %. - The Monthly Value Added Tax return (`GM-VAT-RETURN`), 11 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the GM-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gm). --- # Set up a company in Guinée with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guinée as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guinée pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guinée pack, version 0.3.0; every code on it is read from the pack. The Guinée pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guinée, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GN ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=GN-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GN-S-18` | Ventes de biens 18 % | 18 % | | `GN-S-18-SRV` | Prestations de services 18 % | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guinée pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 11 taxes, at 0 %, 5 %, 10 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`GN-TVA`), 12 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the GN-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gn). --- # Set up a company in Guinée équatoriale with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guinée équatoriale as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guinée équatoriale pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guinée équatoriale pack, version 0.3.0; every code on it is read from the pack. The Guinée équatoriale pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guinée équatoriale, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GQ ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GQ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GQ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=GQ-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GQ-S-15` | Ventes de biens, taux général 15 % | 15 % | | `GQ-S-15-SRV` | Prestations de services, taux général 15 % | 15 % | | `GQ-S-5` | Ventes de biens, taux réduit 5 % | 5 % | | `GQ-S-5-SRV` | Fourniture d'eau, de gaz et d'électricité à usage domestique, taux réduit 5 % | 5 % | | `GQ-S-0` | Autres opérations au taux zéro | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guinée équatoriale pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 13 taxes, at 0 %, 5 %, 15 %. - The Autoliquidación del Impuesto sobre el Valor Añadido, Régimen Real (I.V.A., cod. impuesto 1220) (`GQ-TVA`), 17 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the GQ-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gq). --- # Set up a company in Ελλάδα with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ελλάδα as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ελλάδα pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ελλάδα pack, version 0.4.0; every code on it is read from the pack. The Ελλάδα pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ελλάδα, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GR ``` - One chart of accounts: ΕΓΛΣ — Ελληνικό Γενικό Λογιστικό Σχέδιο (επιλογή λογαριασμών), 128 accounts. - The books can be kept in `el`, `en`; the installer asks. Without a terminal, pass `--language `. - The Δήλωση Φ.Π.Α. — Φ2 (έντυπο 050 Φ.Π.Α.) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GR \ --language el \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7000,tax=GR-S-24" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GR-S-24` | Πώληση με τον κανονικό συντελεστή 24% | 24 % | | `GR-S-13` | Πώληση με τον μειωμένο συντελεστή 13% | 13 % | | `GR-S-6` | Πώληση με τον υπερμειωμένο συντελεστή 6% | 6 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ελλάδα pack carries - Charts of accounts: ΕΓΛΣ — Ελληνικό Γενικό Λογιστικό Σχέδιο (επιλογή λογαριασμών) (128). - 14 taxes, at 0 %, 6 %, 13 %, 24 %. - The Δήλωση Φ.Π.Α. — Φ2 (έντυπο 050 Φ.Π.Α.) (`GR-F2`), 27 boxes, filed month, quarter. - Financial statements: Ισολογισμός, Κατάσταση Αποτελεσμάτων. ## What it does not do - No library of this repository writes the file of the GR-F2 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gr). --- # Set up a company in Guatemala with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guatemala as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guatemala pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guatemala pack, version 0.3.0; every code on it is read from the pack. The Guatemala pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guatemala, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GT ``` - One chart of accounts: Plan de cuentas de referencia, sobre la NIIF para PYMES, 141 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GT \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=GT-V-12" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GT-V-12` | Venta o servicio gravado, 12 % | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guatemala pack carries - Charts of accounts: Plan de cuentas de referencia, sobre la NIIF para PYMES (141). - 7 taxes, at 0 %, 12 %. - The Formulario SAT-2237 — Declaración Jurada y Pago Mensual del Impuesto al Valor Agregado, Régimen General (`GT-SAT-2237`), 11 boxes, filed month. - Financial statements: Estado de Situación Financiera, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the GT-SAT-2237 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gt). --- # Set up a company in Guinée-Bissau with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guinée-Bissau as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guinée-Bissau pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guinée-Bissau pack, version 0.3.0; every code on it is read from the pack. The Guinée-Bissau pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guinée-Bissau, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GW ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GW \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=GW-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GW-S-19` | Vendas de bens 19% | 19 % | | `GW-S-19-SRV` | Prestações de serviços 19% | 19 % | | `GW-S-10` | Vendas de bens do Anexo I 10% | 10 % | | `GW-S-10-SRV` | Prestações de serviços do Anexo I 10% | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guinée-Bissau pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 15 taxes, at 0 %, 5 %, 10 %, 19 %. - The Declaração periódica de Imposto sobre o Valor Acrescentado (regime normal) (`GW-IVA`), 14 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the GW-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gw). --- # Set up a company in Guyana with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Guyana as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Guyana pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Guyana pack, version 0.2.0; every code on it is read from the pack. The Guyana pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Guyana, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country GY ``` - One chart of accounts: Guyana reference chart of accounts, 117 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country GY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country GY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=GY-S-14" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `GY-S-14` | Sale, VAT 14 % | 14 % | | `GY-S-14-INC` | Retail sale, VAT 14 %, the price includes the tax | 14 % | | `GY-S-Z` | Zero-rated supply (domestic) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Guyana pack carries - Charts of accounts: Guyana reference chart of accounts (117). - 9 taxes, at 0 %, 14 %. - The VAT return (line numbers of the Authority's Value Added Tax Return) (`GY-VAT-RETURN`), 13 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the GY-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/gy). --- # Set up a company in Hong Kong with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Hong Kong as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Hong Kong pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Hong Kong pack, version 0.1.0; every code on it is read from the pack. The Hong Kong pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Hong Kong, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country HK ``` - One chart of accounts: Hong Kong reference chart of accounts, 104 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country HK \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country HK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Hong Kong pack carries - Charts of accounts: Hong Kong reference chart of accounts (104). - 2 taxes, at 0 %. - Financial statements: Statement of financial position, Income statement. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/hk). --- # Set up a company in Honduras with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Honduras as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Honduras pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Honduras pack, version 0.2.0; every code on it is read from the pack. The Honduras pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Honduras, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country HN ``` - One chart of accounts: Plan de cuentas de referencia, inspirado en la NIIF para las PYMES, 141 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country HN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country HN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=HN-V-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `HN-V-15` | Venta o servicio gravado, 15 % | 15 % | | `HN-V-18` | Venta gravada, 18 % (cerveza, bebidas alcohólicas, cigarrillos y boletos aéreos de clase ejecutiva) | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Honduras pack carries - Charts of accounts: Plan de cuentas de referencia, inspirado en la NIIF para las PYMES (141). - 10 taxes, at 0 %, 15 %, 18 %. - The Formulario 201 — Declaración Jurada del Impuesto Sobre Ventas (ISV), determinativa, mensual (`HN-SAR-201`), 19 boxes, filed month. - Financial statements: Estado de Situación Financiera, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the HN-SAR-201 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/hn). --- # Set up a company in Croatia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Croatia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Croatia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Croatia pack, version 0.3.0; every code on it is read from the pack. The Croatia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Croatia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country HR ``` - One chart of accounts: Neovisni računski plan po vrsti računa, 139 accounts. - The books are kept in `hr`. - The Obrazac PDV — Prijava poreza na dodanu vrijednost is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country HR \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country HR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8100,tax=HR-S-25" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8100` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `HR-S-25` | PDV 25% — tuzemna isporuka | 25 % | | `HR-S-13` | PDV 13% — tuzemna isporuka | 13 % | | `HR-S-5` | PDV 5% — tuzemna isporuka | 5 % | | `HR-S-0` | PDV 0% — solarne ploče na privatnim stambenim objektima | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Croatia pack carries - Charts of accounts: Neovisni računski plan po vrsti računa (139). - 18 taxes, at 0 %, 5 %, 13 %, 25 %. - The Obrazac PDV — Prijava poreza na dodanu vrijednost (`HR-PDV`), 71 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilanca — skraćeni oblik za mikro i male poduzetnike, Račun dobiti i gubitka — skraćeni oblik za mikro i male poduzetnike. ## What it does not do - No library of this repository writes the file of the HR-PDV yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/hr). --- # Set up a company in Magyarország with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Magyarország as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Magyarország pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Magyarország pack, version 0.3.0; every code on it is read from the pack. The Magyarország pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Magyarország, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country HU ``` - One chart of accounts: A mérleg és az eredménykimutatás „A” változatának tagolására épülő számlatükör, 111 accounts. - The books are kept in `hu`. - The Általános forgalmi adó bevallása (2665 számú nyomtatvány, 2026. évi bevallási időszakok) is filed on one of these cadences: `month`, `quarter`, `year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country HU \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country HU --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8100,tax=HU-S-27" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8100` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `HU-S-27` | Áfa 27% | 27 % | | `HU-S-18` | Áfa 18% | 18 % | | `HU-S-5` | Áfa 5% | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Magyarország pack carries - Charts of accounts: A mérleg és az eredménykimutatás „A” változatának tagolására épülő számlatükör (111). - 15 taxes, at 0 %, 5 %, 18 %, 27 %. - The Általános forgalmi adó bevallása (2665 számú nyomtatvány, 2026. évi bevallási időszakok) (`HU-AFA-2665`), 20 boxes, filed month, quarter, year. - Financial statements: Mérleg — „A” változat, Eredménykimutatás — összköltség eljárással, „A” változat. ## What it does not do - No library of this repository writes the file of the HU-AFA-2665 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/hu). --- # Set up a company in Indonesia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Indonesia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Indonesia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Indonesia pack, version 0.2.0; every code on it is read from the pack. The Indonesia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Indonesia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ID ``` - One chart of accounts: Bagan akun umum Indonesia, 116 accounts. - The books are kept in `id`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ID \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ID --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=ID-S-11" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ID-S-11` | Penjualan - PPN 11% (tarif efektif) | 11 % | | `ID-S-12-LUX` | Penjualan - PPN 12% (barang mewah tertentu) | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Indonesia pack carries - Charts of accounts: Bagan akun umum Indonesia (116). - 7 taxes, at 0 %, 11 %, 12 %. - The Surat Pemberitahuan Masa Pajak Pertambahan Nilai (SPT Masa PPN) - Formulir 1111 (`ID-SPT-MASA-PPN`), 10 boxes, filed month. - Financial statements: Laporan Posisi Keuangan, Laporan Laba Rugi. ## What it does not do - No library of this repository writes the file of the ID-SPT-MASA-PPN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/id). --- # Set up a company in Ireland with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ireland as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ireland pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ireland pack, version 0.4.0; every code on it is read from the pack. The Ireland pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ireland, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country IE ``` - One chart of accounts: Ireland reference chart of accounts, 209 accounts. - The books are kept in `en`. - The VAT 3 return is filed on one of these cadences: `month`, `bimonth`, `year`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country IE \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country IE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=IE-S-23" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `IE-S-23` | Sale, standard rate 23 % | 23 % | | `IE-S-23-CASH` | Sale, standard rate 23 %, moneys received basis | 23 % | | `IE-S-135` | Sale, reduced rate 13.5 % | 13.5 % | | `IE-S-135-CASH` | Sale, reduced rate 13.5 %, moneys received basis | 13.5 % | | `IE-S-09` | Sale, second reduced rate 9 % | 9 % | | `IE-S-09-FOOD` | Sale, 9 % — food, catering and hairdressing | 9 % | | `IE-S-048` | Sale of livestock, 4.8 % | 4.8 % | | `IE-S-00` | Sale, zero rate | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ireland pack carries - Charts of accounts: Ireland reference chart of accounts (209). - 39 taxes, at 0 %, 4.5 %, 4.8 %, 9 %, 13.5 %, 21 %, 23 %. - The VAT 3 return (`IE-VAT3`), 9 boxes, filed month, bimonth, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balance sheet — Companies Act 2014, Schedule 3A, Format 1 (small companies regime), Profit and loss account — Companies Act 2014, Schedule 3A, Format 1 (small companies regime). ## What it does not do - No library of this repository writes the file of the IE-VAT3 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ie). --- # Set up a company in Israel with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Israel as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Israel pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Israel pack, version 0.3.0; every code on it is read from the pack. The Israel pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Israel, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country IL ``` - One chart of accounts: לוח חשבונות ייחוס לישראל, 123 accounts. - The books can be kept in `he`, `en`; the installer asks. Without a terminal, pass `--language `. - The דוח תקופתי למע״מ (Periodic VAT report) is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country IL \ --language he \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country IL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=IL-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `IL-S-SR` | מכירה, שיעור מלא 18% (מ-1.1.2025) | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Israel pack carries - Charts of accounts: לוח חשבונות ייחוס לישראל (123). - 11 taxes, at 0 %, 18 %. - The דוח תקופתי למע״מ (Periodic VAT report) (`IL-VAT-PERIODIC`), 15 boxes, filed month, bimonth. - Financial statements: דוח על המצב הכספי (Statement of financial position — IAS 1), דוח רווח והפסד (Statement of profit or loss — IAS 1). ## What it does not do - No library of this repository writes the file of the IL-VAT-PERIODIC yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/il). --- # Set up a company in India with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of India as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the India pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the India pack, version 0.2.0; every code on it is read from the pack. The India pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in India, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country IN ``` - One chart of accounts: Indian reference chart of accounts (Schedule III), 164 accounts. - The books are kept in `en`. - The FORM GSTR-3B — summary return of outward and inward supplies, input tax credit and tax paid is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country IN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country IN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=IN-S-5-INTRA" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `IN-S-5-INTRA` | Sale within the State — GST 5 % (CGST 2.5 % + SGST/UTGST 2.5 %) | 5 % | | `IN-S-5-INTER` | Sale to another State — IGST 5 % | 5 % | | `IN-S-18-INTRA` | Sale within the State — GST 18 % (CGST 9 % + SGST/UTGST 9 %) | 18 % | | `IN-S-18-INTER` | Sale to another State — IGST 18 % | 18 % | | `IN-S-40-INTRA` | Sale within the State — GST 40 % (CGST 20 % + SGST/UTGST 20 %) | 40 % | | `IN-S-40-INTER` | Sale to another State — IGST 40 % | 40 % | | `IN-S-3-INTRA` | Sale within the State — GST 3 % (CGST 1.5 % + SGST/UTGST 1.5 %) | 3 % | | `IN-S-3-INTER` | Sale to another State — IGST 3 % | 3 % | | `IN-S-NIL` | Nil-rated supply | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the India pack carries - Charts of accounts: Indian reference chart of accounts (Schedule III) (164). - 41 taxes, at 0 %, 3 %, 5 %, 12 %, 18 %, 28 %, 40 %. - The FORM GSTR-3B — summary return of outward and inward supplies, input tax credit and tax paid (`IN-GSTR-3B`), 34 boxes, filed month, quarter. - Financial statements: Balance Sheet — Schedule III, Division I, Statement of Profit and Loss — Schedule III, Division I. ## What it does not do - No library of this repository writes the file of the IN-GSTR-3B yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/in). --- # Set up a company in Ísland with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ísland as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ísland pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ísland pack, version 0.3.0; every code on it is read from the pack. The Ísland pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ísland, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country IS ``` - One chart of accounts: Kontóáætlun byggð á 3. og 5. gr. reglugerðar nr. 696/2019, 113 accounts. - The books are kept in `is`. - The Virðisaukaskattsskýrsla (RSK 10.01) is filed on one of these cadences: `month`, `bimonth`, `year`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country IS \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country IS --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=IS-S-24" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `IS-S-24` | Sala, almennt skatthlutfall 24% | 24 % | | `IS-S-11` | Sala, lægra skatthlutfall 11% | 11 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ísland pack carries - Charts of accounts: Kontóáætlun byggð á 3. og 5. gr. reglugerðar nr. 696/2019 (113). - 10 taxes, at 0 %, 11 %, 24 %. - The Virðisaukaskattsskýrsla (RSK 10.01) (`IS-VSK-10.01`), 8 boxes, filed month, bimonth, year. - Financial statements: Efnahagsreikningur samkvæmt 3. gr. reglugerðar nr. 696/2019, Rekstrarreikningur samkvæmt 5. gr. reglugerðar nr. 696/2019 (eftir eðli kostnaðar). ## What it does not do - No library of this repository writes the file of the IS-VSK-10.01 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/is). --- # Set up a company in Italia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Italia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Italia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Italia pack, version 0.3.0; every code on it is read from the pack. The Italia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Italia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country IT ``` - One chart of accounts: Piano dei conti civilistico — schema di stato patrimoniale e conto economico, 128 accounts. - The books can be kept in `it`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country IT \ --language it \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country IT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=IT-S-22" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `IT-S-22` | Vendite — aliquota ordinaria 22% | 22 % | | `IT-S-10` | Vendite — aliquota ridotta 10% | 10 % | | `IT-S-5` | Vendite — aliquota ridotta 5% | 5 % | | `IT-S-4` | Vendite — aliquota minima 4% | 4 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Italia pack carries - Charts of accounts: Piano dei conti civilistico — schema di stato patrimoniale e conto economico (128). - 16 taxes, at 0 %, 4 %, 5 %, 10 %, 20 %, 22 %. - The Dichiarazione IVA annuale — Quadri VE, VF, VJ, VL, VX (`IT-DICH-IVA`), 38 boxes, filed year. - Financial statements: Stato patrimoniale, Conto economico. ## What it does not do - No library of this repository writes the file of the IT-DICH-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/it). --- # Set up a company in Jersey with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Jersey as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Jersey pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Jersey pack, version 0.2.0; every code on it is read from the pack. The Jersey pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Jersey, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country JE ``` - One chart of accounts: Jersey reference chart of accounts, 187 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country JE \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country JE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=JE-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `JE-S-SR` | Sale, standard-rated, GST 5 % | 5 % | | `JE-S-SR-INC` | Retail sale, standard-rated, GST 5 %, the price includes the GST | 5 % | | `JE-S-ZR-ISE` | Remitted supply to an International Services Entity, zero-rated | 0 % | | `JE-S-ZR-DW` | Supply of a dwelling, zero-rated | 0 % | | `JE-S-ZR-RX` | Medicine on prescription, zero-rated | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Jersey pack carries - Charts of accounts: Jersey reference chart of accounts (187). - 17 taxes, at 0 %, 5 %. - The GST return (Revenue Jersey) (`JE-GST`), 8 boxes, filed quarter. - Financial statements: Balance sheet — FRS 102 Section 1A, Format 1, Profit and loss account — FRS 102 Section 1A, Format 1. ## What it does not do - No library of this repository writes the file of the JE-GST yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/je). --- # Set up a company in Jamaica with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Jamaica as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Jamaica pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Jamaica pack, version 0.2.0; every code on it is read from the pack. The Jamaica pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Jamaica, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country JM ``` - One chart of accounts: Jamaica reference chart of accounts, 118 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country JM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country JM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=JM-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `JM-S-15` | Sale, GCT 15 % | 15 % | | `JM-S-15-INC` | Retail sale, GCT 15 %, the price includes the tax | 15 % | | `JM-S-25` | Sale of telephone service or instrument, GCT 25 % | 25 % | | `JM-S-Z` | Zero-rated supply (domestic) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Jamaica pack carries - Charts of accounts: Jamaica reference chart of accounts (118). - 10 taxes, at 0 %, 15 %, 25 %. - The GCT return (Form 4A, standard return) (`JM-GCT-RETURN`), 19 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the JM-GCT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/jm). --- # Set up a company in Jordan with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Jordan as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Jordan pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Jordan pack, version 0.2.0; every code on it is read from the pack. The Jordan pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Jordan, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country JO ``` - One chart of accounts: Jordan reference chart of accounts, 146 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country JO \ --language ar \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country JO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=JO-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `JO-S-16` | Sale, standard rate 16 % | 16 % | | `JO-S-10` | Sale, reduced rate 10 % | 10 % | | `JO-S-4` | Sale, reduced rate 4 % | 4 % | | `JO-S-5` | Sale, reduced rate 5 % | 5 % | | `JO-S-2` | Sale, reduced rate 2 % | 2 % | | `JO-S-ZR` | Sale, zero-rated (other than export) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Jordan pack carries - Charts of accounts: Jordan reference chart of accounts (146). - 24 taxes, at 0 %, 2 %, 4 %, 5 %, 10 %, 16 %. - The General sales tax return (`JO-GST`), 40 boxes, filed bimonth. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the JO-GST yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/jo). --- # Set up a company in 日本 with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of 日本 as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the 日本 pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the 日本 pack, version 0.3.0; every code on it is read from the pack. The 日本 pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in 日本, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country JP ``` - One chart of accounts: 日本 参照勘定科目表(会社計算規則準拠), 125 accounts. - The books can be kept in `ja`, `en`; the installer asks. Without a terminal, pass `--language `. - The 消費税及び地方消費税の確定申告書(一般用) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country JP \ --language ja \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country JP --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4110,tax=JP-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `JP-S-10` | 課税売上げ 10%(標準税率) | 10 % | | `JP-S-8R` | 課税売上げ 8%(軽減税率) | 8 % | | `JP-S-10-INC` | 課税売上げ 10%(税込価格) | 10 % | | `JP-S-8R-INC` | 課税売上げ 8%(軽減税率・税込価格) | 8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the 日本 pack carries - Charts of accounts: 日本 参照勘定科目表(会社計算規則準拠) (125). - 33 taxes, at 0 %, 3 %, 5 %, 8 %, 10 %. - The 消費税及び地方消費税の確定申告書(一般用) (`JP-CT-KAKUTEI`), 50 boxes, filed month, quarter, year. - Electronic invoices as `pint-jp`. - Financial statements: 貸借対照表(会社計算規則), 損益計算書(会社計算規則). ## What it does not do - No library of this repository writes the file of the JP-CT-KAKUTEI yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/jp). --- # Set up a company in Kenya with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Kenya as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Kenya pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Kenya pack, version 0.2.0; every code on it is read from the pack. The Kenya pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Kenya, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KE ``` - One chart of accounts: Kenya reference chart of accounts, 142 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KE \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=KE-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KE-S-16` | Sale, standard rate 16 % | 16 % | | `KE-S-ZR-DOM` | Sale, zero-rated (domestic) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Kenya pack carries - Charts of accounts: Kenya reference chart of accounts (142). - 11 taxes, at 0 %, 16 %. - The VAT Monthly Return (form VAT 3) (`KE-VAT3`), 21 boxes, filed month. - Financial statements: Statement of financial position, Profit and loss account. ## What it does not do - No library of this repository writes the file of the KE-VAT3 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ke). --- # Set up a company in Кыргызская Республика with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Кыргызская Республика as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Кыргызская Республика pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Кыргызская Республика pack, version 0.2.0; every code on it is read from the pack. The Кыргызская Республика pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Кыргызская Республика, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KG ``` - One chart of accounts: План счетов бухгалтерского учета субъектов предпринимательства (постановление Правительства № 231 от 07.10.2010), 149 accounts. - The books can be kept in `ru`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KG \ --language ru \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=KG-S-12" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KG-S-12` | НДС 12 % — основная ставка (продажа) | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Кыргызская Республика pack carries - Charts of accounts: План счетов бухгалтерского учета субъектов предпринимательства (постановление Правительства № 231 от 07.10.2010) (149). - 7 taxes, at 0 %, 12 %. - The Отчет по налогу на добавленную стоимость (`KG-VAT`), 10 boxes, filed month. - Financial statements: Бухгалтерский баланс, Отчет о прибылях и убытках. ## What it does not do - No library of this repository writes the file of the KG-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kg). --- # Set up a company in កម្ពុជា with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of កម្ពុជា as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the កម្ពុជា pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the កម្ពុជា pack, version 0.2.0; every code on it is read from the pack. The កម្ពុជា pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in កម្ពុជា, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KH ``` - One chart of accounts: ផ្លែនគណនីយោងរបស់កម្ពុជា, 173 accounts. - The books can be kept in `km`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KH \ --language km \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=KH-S-STD" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KH-S-STD` | លក់ អាករលើតម្លៃបន្ថែមអត្រា ១០% | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the កម្ពុជា pack carries - Charts of accounts: ផ្លែនគណនីយោងរបស់កម្ពុជា (173). - 6 taxes, at 0 %, 10 %. - The ការប្រកាសអាករលើតម្លៃបន្ថែមប្រចាំខែ (`KH-VAT`), 7 boxes, filed month. - Financial statements: តារាងតុល្យការ, របាយការណ៍លទ្ធផល. ## What it does not do - No library of this repository writes the file of the KH-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kh). --- # Set up a company in Comores with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Comores as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Comores pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Comores pack, version 0.3.0; every code on it is read from the pack. The Comores pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Comores, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KM ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=KM-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KM-S-10` | Ventes de biens, taux normal 10 % | 10 % | | `KM-S-10-SRV` | Prestations de services, taux normal 10 % | 10 % | | `KM-S-00` | Produits de première nécessité, taux 0 % | 0 % | | `KM-S-03-UTIL` | Fourniture d'eau et d'électricité, taux 3 % | 3 % | | `KM-S-03-TRANSPORT` | Titres de transport inter-îles, taux 3 % | 3 % | | `KM-S-05-SRV` | Restauration, activités bancaires, téléphone fixe, taux 5 % | 5 % | | `KM-S-05-TRANSPORT-INTL` | Titres de transport international, taux 5 % | 5 % | | `KM-S-075-MOBILE` | Recharges mobiles, voix et données, taux 7,5 % | 7.5 % | | `KM-S-25-CASINO` | Activités des casinos, taux 25 % | 25 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Comores pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 3 %, 5 %, 7.5 %, 10 %, 25 %. - The Déclaration mensuelle et unifiée de la taxe sur la consommation (`KM-TC`), 16 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the KM-TC yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/km). --- # Set up a company in Saint Kitts and Nevis with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Saint Kitts and Nevis as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Saint Kitts and Nevis pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Saint Kitts and Nevis pack, version 0.2.0; every code on it is read from the pack. The Saint Kitts and Nevis pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Saint Kitts and Nevis, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KN ``` - One chart of accounts: Saint Kitts and Nevis reference chart of accounts, 118 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=KN-S-17" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KN-S-17` | Sale, VAT 17 % | 17 % | | `KN-S-17-INC` | Retail sale, VAT 17 %, the price includes the tax | 17 % | | `KN-S-10` | Sale of accommodation, VAT 10 % | 10 % | | `KN-S-10-R` | Sale by a restaurant or tour operator, VAT 10 % | 10 % | | `KN-S-Z` | Zero-rated supply in Saint Kitts and Nevis | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Saint Kitts and Nevis pack carries - Charts of accounts: Saint Kitts and Nevis reference chart of accounts (118). - 11 taxes, at 0 %, 10 %, 17 %. - The VAT return (box layout of this pack) (`KN-VAT-RETURN`), 17 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the KN-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kn). --- # Set up a company in 대한민국 with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of 대한민국 as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the 대한민국 pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the 대한민국 pack, version 0.4.0; every code on it is read from the pack. The 대한민국 pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in 대한민국, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KR ``` - One chart of accounts: 대한민국 참고 계정과목표 (일반기업회계기준 기준), 105 accounts. - The books can be kept in `ko`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KR \ --language ko \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4100,tax=KR-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4100` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KR-S-10` | 과세 매출 10%(세금계산서 발급분) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the 대한민국 pack carries - Charts of accounts: 대한민국 참고 계정과목표 (일반기업회계기준 기준) (105). - 9 taxes, at 0 %, 10 %. - The 일반과세자 부가가치세[예정, 확정] 신고서 (별지 제21호서식) (`KR-VAT-21`), 13 boxes, filed quarter. - Financial statements: 재무상태표, 손익계산서. ## What it does not do - No library of this repository writes the file of the KR-VAT-21 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kr). --- # Set up a company in Kuwait with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Kuwait as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Kuwait pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Kuwait pack, version 0.1.0; every code on it is read from the pack. The Kuwait pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Kuwait, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KW ``` - One chart of accounts: Kuwait reference chart of accounts, 113 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KW \ --language ar \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Kuwait pack carries - Charts of accounts: Kuwait reference chart of accounts (113). - 2 taxes, at 0 %. - Financial statements: Statement of financial position — full IFRS Accounting Standards, Income statement — full IFRS Accounting Standards. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kw). --- # Set up a company in Cayman Islands with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Cayman Islands as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Cayman Islands pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Cayman Islands pack, version 0.1.0; every code on it is read from the pack. The Cayman Islands pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Cayman Islands, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KY ``` - One chart of accounts: Cayman Islands reference chart of accounts, 106 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Cayman Islands pack carries - Charts of accounts: Cayman Islands reference chart of accounts (106). - 2 taxes, at 0 %. - Financial statements: Statement of financial position, Income statement. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ky). --- # Set up a company in Қазақстан with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Қазақстан as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Қазақстан pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Қазақстан pack, version 0.5.0; every code on it is read from the pack. The Қазақстан pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Қазақстан, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country KZ ``` - One chart of accounts: Бухгалтерлік есептің үлгі шоттар жоспары (№ 185 бұйрық негізінде), 129 accounts. - The books can be kept in `kk`, `ru`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country KZ \ --language kk \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country KZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6010,tax=KZ-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6010` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `KZ-S-16` | ҚҚС 16 % — негізгі мөлшерлеме (сату) | 16 % | | `KZ-S-MED-10` | ҚҚС 10 % — дәрілік заттар, медициналық бұйымдар және медициналық қызметтер (сату, 2027 жылдан бастап) | 10 % | | `KZ-S-PRESS-10` | ҚҚС 10 % — отандық баспасөз басылымдары (сату) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Қазақстан pack carries - Charts of accounts: Бухгалтерлік есептің үлгі шоттар жоспары (№ 185 бұйрық негізінде) (129). - 11 taxes, at 0 %, 5 %, 10 %, 12 %, 16 %. - The Қосылған құн салығы бойынша декларация (300.00 нысаны) (`KZ-300`), 11 boxes, filed quarter. - Financial statements: Қаржылық жағдайы туралы есеп, Пайда мен зиян және өзге де жиынтық кіріс туралы есеп. ## What it does not do - No library of this repository writes the file of the KZ-300 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/kz). --- # Set up a company in Lao PDR with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Lao PDR as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Lao PDR pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Lao PDR pack, version 0.1.0; every code on it is read from the pack. The Lao PDR pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Lao PDR, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LA ``` - One chart of accounts: Reference chart of accounts for commercial enterprises (the pack's own grouping by the classes of the IFRS for SMEs statements), 149 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LA \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=LA-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LA-S-10` | VAT 10% — standard rate (sale) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Lao PDR pack carries - Charts of accounts: Reference chart of accounts for commercial enterprises (the pack's own grouping by the classes of the IFRS for SMEs statements) (149). - 8 taxes, at 0 %, 10 %. - The Value added tax return (monthly) (`LA-VAT`), 10 boxes, filed month. - Financial statements: Statement of financial position (balance sheet), Statement of comprehensive income (profit and loss). ## What it does not do - No library of this repository writes the file of the LA-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/la). --- # Set up a company in Saint Lucia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Saint Lucia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Saint Lucia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Saint Lucia pack, version 0.1.0; every code on it is read from the pack. The Saint Lucia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Saint Lucia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LC ``` - One chart of accounts: Saint Lucia reference chart of accounts, 118 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LC \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LC --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=LC-S-12.5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LC-S-12.5` | Sale, VAT 12.5 % | 12.5 % | | `LC-S-12.5-INC` | Retail sale, VAT 12.5 %, the price includes the tax | 12.5 % | | `LC-S-10` | Sale of restaurant food and beverages, water sports, tours and attractions, VAT 10 % | 10 % | | `LC-S-7` | Sale of tourism accommodation, VAT 7 % | 7 % | | `LC-S-Z` | Zero-rated supply in Saint Lucia | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Saint Lucia pack carries - Charts of accounts: Saint Lucia reference chart of accounts (118). - 12 taxes, at 0 %, 7 %, 10 %, 12.5 %. - The VAT return (box layout of this pack) (`LC-VAT-RETURN`), 17 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the LC-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/lc). --- # Set up a company in Liechtenstein with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Liechtenstein as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Liechtenstein pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Liechtenstein pack, version 0.2.0; every code on it is read from the pack. The Liechtenstein pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Liechtenstein, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LI ``` - One chart of accounts: Kontenrahmen nach Art. 1045 ff. PGR, 148 accounts. - The books are kept in `de`. - The MWST-Abrechnung, effektive Methode (Nummerierung des Formulars Nr. 4470) is filed on one of these cadences: `month`, `quarter`, `half_year`, `year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LI \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=LI-S-81" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LI-S-81` | Verkauf, Normalsatz 8,1 % | 8.1 % | | `LI-S-26` | Verkauf, reduzierter Satz 2,6 % | 2.6 % | | `LI-S-38-HEB` | Beherbergungsleistung, Sondersatz 3,8 % | 3.8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Liechtenstein pack carries - Charts of accounts: Kontenrahmen nach Art. 1045 ff. PGR (148). - 12 taxes, at 0 %, 2.6 %, 3.8 %, 8.1 %. - The MWST-Abrechnung, effektive Methode (Nummerierung des Formulars Nr. 4470) (`LI-MWST-ABR`), 32 boxes, filed month, quarter, half_year, year. - Financial statements: Bilanz nach Art. 1051 PGR, Erfolgsrechnung nach Art. 1048 PGR. ## What it does not do - No library of this repository writes the file of the LI-MWST-ABR yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/li). --- # Set up a company in Sri Lanka with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Sri Lanka as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Sri Lanka pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Sri Lanka pack, version 0.2.0; every code on it is read from the pack. The Sri Lanka pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Sri Lanka, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LK ``` - One chart of accounts: Sri Lanka reference chart of accounts, 155 accounts. - The books are kept in `en`. - The VAT return (RAMIS e-Services) and its schedules 01 to 07 is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LK \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=LK-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LK-S-18` | Sale, standard rate — VAT 18 % | 18 % | | `LK-S-FIN-205` | Sale of financial services — VAT 20.5 % | 20.5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Sri Lanka pack carries - Charts of accounts: Sri Lanka reference chart of accounts (155). - 13 taxes, at 0 %, 15 %, 18 %, 20.5 %. - The VAT return (RAMIS e-Services) and its schedules 01 to 07 (`LK-VAT`), 13 boxes, filed month, quarter. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the LK-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/lk). --- # Set up a company in Lesotho with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Lesotho as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Lesotho pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Lesotho pack, version 0.2.0; every code on it is read from the pack. The Lesotho pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Lesotho, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LS ``` - One chart of accounts: Lesotho reference chart of accounts, 156 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LS \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LS --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=LS-S-VAT" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LS-S-VAT` | Sale, standard rate 15 % | 15 % | | `LS-S-VAT-ELEC` | Sale of electricity, rate 10 % | 10 % | | `LS-S-ZERO` | Sale, zero-rated, domestic | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Lesotho pack carries - Charts of accounts: Lesotho reference chart of accounts (156). - 14 taxes, at 0 %, 10 %, 15 %. - The Value Added Tax return (`LS-VAT`), 13 boxes, filed month. - Financial statements: Statement of financial position — IFRS for SMEs Accounting Standard, Section 4, Statement of comprehensive income — IFRS for SMEs Accounting Standard, Section 5, expenses by nature. ## What it does not do - No library of this repository writes the file of the LS-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ls). --- # Set up a company in Lietuva with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Lietuva as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Lietuva pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Lietuva pack, version 0.3.0; every code on it is read from the pack. The Lietuva pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Lietuva, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LT ``` - One chart of accounts: Sąskaitų planas pagal AVNT pavyzdinio plano klasių struktūrą, 102 accounts. - The books are kept in `lt`. - The PVM deklaracija (forma FR0600) is filed on one of these cadences: `month`, `quarter`, `half_year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LT \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=5000,tax=LT-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `5000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LT-S-21` | Pardavimas 21% | 21 % | | `LT-S-12` | Pardavimas 12% | 12 % | | `LT-S-05` | Pardavimas 5% | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Lietuva pack carries - Charts of accounts: Sąskaitų planas pagal AVNT pavyzdinio plano klasių struktūrą (102). - 20 taxes, at 0 %, 5 %, 9 %, 12 %, 21 %. - The PVM deklaracija (forma FR0600) (`LT-FR0600`), 27 boxes, filed month, quarter, half_year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balansas, Pelno (nuostolių) ataskaita, 1-oji schema (pagal sąnaudų pobūdį). ## What it does not do - No library of this repository writes the file of the LT-FR0600 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/lt). --- # Set up a company in Luxembourg with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Luxembourg as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Luxembourg pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Luxembourg pack, version 1.11.0; every code on it is read from the pack. The Luxembourg pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Luxembourg, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LU ``` - One chart of accounts: PCN — plan comptable normalisé, 1026 accounts. - The books can be kept in `fr`, `de`, `en`; the installer asks. Without a terminal, pass `--language `. - The Déclaration périodique de TVA (eCDF) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LU \ --language fr \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LU --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7061,tax=LU-S-17" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7061` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LU-S-17` | Vente 17 % — taux normal | 17 % | | `LU-S-14` | Vente 14 % — taux intermédiaire | 14 % | | `LU-S-08` | Vente 8 % — taux réduit | 8 % | | `LU-S-03` | Vente 3 % — taux super-réduit | 3 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Luxembourg pack carries - Charts of accounts: PCN — plan comptable normalisé (1026). - 35 taxes, at 0 %, 3 %, 7 %, 8 %, 13 %, 14 %, 16 %, 17 %. - The Déclaration périodique de TVA (eCDF) (`LU-VAT-PERIODIC`), 162 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilan abrégé (eCDF), Compte de profits et pertes abrégé (eCDF). ## What it does not do - No library of this repository writes the file of the LU-VAT-PERIODIC yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/lu). --- # Set up a company in Latvija with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Latvija as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Latvija pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Latvija pack, version 0.4.0; every code on it is read from the pack. The Latvija pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Latvija, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country LV ``` - One chart of accounts: Kontu plāns pēc Gada pārskatu un konsolidēto gada pārskatu likuma 1. un 2. pielikuma shēmas, 122 accounts. - The books are kept in `lv`. - The Pievienotās vērtības nodokļa deklarācija par taksācijas periodu is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country LV \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country LV --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6010,tax=LV-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6010` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `LV-S-21` | Pārdošana 21% | 21 % | | `LV-S-12` | Pārdošana 12% | 12 % | | `LV-S-5` | Pārdošana 5% | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Latvija pack carries - Charts of accounts: Kontu plāns pēc Gada pārskatu un konsolidēto gada pārskatu likuma 1. un 2. pielikuma shēmas (122). - 11 taxes, at 0 %, 5 %, 12 %, 21 %. - The Pievienotās vērtības nodokļa deklarācija par taksācijas periodu (`LV-PVN-DEKLARACIJA`), 22 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Bilance, Peļņas vai zaudējumu aprēķins (vertikālā forma, klasificēts pēc izdevumu veidiem). ## What it does not do - No library of this repository writes the file of the LV-PVN-DEKLARACIJA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `camt.052` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/lv). --- # Set up a company in Maroc with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Maroc as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Maroc pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Maroc pack, version 0.3.0; every code on it is read from the pack. The Maroc pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Maroc, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MA ``` - One chart of accounts: PCGE — Plan comptable général des entreprises (modèle normal), 198 accounts. - The books are kept in `fr`. - The Déclaration du chiffre d'affaires — taxe sur la valeur ajoutée is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MA \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7111,tax=MA-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7111` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MA-S-20` | Ventes taux normal 20 % — encaissement | 20 % | | `MA-S-20-DEB` | Ventes taux normal 20 % — régime des débits | 20 % | | `MA-S-10-ADD` | Ventes taux réduit 10 % (avec droit à déduction) — encaissement | 10 % | | `MA-S-10-ADD-DEB` | Ventes taux réduit 10 % (avec droit à déduction) — régime des débits | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Maroc pack carries - Charts of accounts: PCGE — Plan comptable général des entreprises (modèle normal) (198). - 11 taxes, at 0 %, 10 %, 20 %. - The Déclaration du chiffre d'affaires — taxe sur la valeur ajoutée (`MA-TVA`), 17 boxes, filed month, quarter. - Financial statements: Bilan (BL) — modèle normal, masses et postes, Compte de produits et charges (CPC) — modèle normal, en liste. ## What it does not do - No library of this repository writes the file of the MA-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ma). --- # Set up a company in Moldova with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Moldova as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Moldova pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Moldova pack, version 0.3.0; every code on it is read from the pack. The Moldova pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Moldova, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MD ``` - One chart of accounts: Planul general de conturi contabile, 211 accounts. - The books can be kept in `ro`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MD \ --language ro \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MD --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=611,tax=MD-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `611` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MD-S-20` | Livrări — cota standard 20% | 20 % | | `MD-S-8` | Livrări — cota redusă 8% | 8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Moldova pack carries - Charts of accounts: Planul general de conturi contabile (211). - 8 taxes, at 0 %, 8 %, 20 %. - The Declarația privind TVA (forma TVA12) (`MD-TVA12`), 19 boxes, filed month. - Financial statements: Bilanțul contabil, Raportul de profit și pierderi. ## What it does not do - No library of this repository writes the file of the MD-TVA12 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/md). --- # Set up a company in Crna Gora with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Crna Gora as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Crna Gora pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Crna Gora pack, version 0.3.0; every code on it is read from the pack. The Crna Gora pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Crna Gora, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ME ``` - One chart of accounts: Kontni okvir za privredna društva i druga pravna lica, 217 accounts. - The books can be kept in `sr`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ME \ --language sr \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ME --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=612,tax=ME-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `612` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ME-S-21` | PDV 21% — opšta stopa (prodaja) | 21 % | | `ME-S-15` | PDV 15% — smještaj, hrana i piće u ugostiteljstvu, knjige i dr. (prodaja) | 15 % | | `ME-S-7` | PDV 7% — osnovni proizvodi za ljudsku ishranu i dr. (prodaja) | 7 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Crna Gora pack carries - Charts of accounts: Kontni okvir za privredna društva i druga pravna lica (217). - 9 taxes, at 0 %, 7 %, 15 %, 21 %. - The Mjesečna prijava za obračun poreza na dodatu vrijednost — Obrazac PR PDV-2 (`ME-PR-PDV-2`), 14 boxes, filed month. - Financial statements: Iskaz o finansijskoj poziciji /Bilans stanja/, Iskaz o ukupnom rezultatu /Bilans uspjeha/. ## What it does not do - No library of this repository writes the file of the ME-PR-PDV-2 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/me). --- # Set up a company in Madagascar with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Madagascar as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Madagascar pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Madagascar pack, version 0.2.0; every code on it is read from the pack. The Madagascar pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Madagascar, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MG ``` - One chart of accounts: Plan de comptes de référence de Madagascar, 119 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7010,tax=MG-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7010` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MG-S-20` | Vente, taux normal 20 % | 20 % | | `MG-S-5` | Vente de gaz butane, taux réduit 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Madagascar pack carries - Charts of accounts: Plan de comptes de référence de Madagascar (119). - 10 taxes, at 0 %, 5 %, 20 %. - The Déclaration mensuelle de la taxe sur la valeur ajoutée (`MG-TVA-MENSUELLE`), 18 boxes, filed month. - Financial statements: Bilan, Compte de résultat (par nature). ## What it does not do - No library of this repository writes the file of the MG-TVA-MENSUELLE yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mg). --- # Set up a company in Северна Македонија with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Северна Македонија as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Северна Македонија pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Северна Македонија pack, version 0.4.0; every code on it is read from the pack. The Северна Македонија pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Северна Македонија, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MK ``` - One chart of accounts: Сметковен план за трговски друштва (Правилник за сметковниот план), 136 accounts. - The books can be kept in `mk`, `en`; the installer asks. Without a terminal, pass `--language `. - The Даночна пријава на данокот на додадена вредност (ДДВ-04) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MK \ --language mk \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=740,tax=MK-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `740` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MK-S-18` | ДДВ 18% — општа даночна стапка (продажба) | 18 % | | `MK-S-10` | ДДВ 10% — повластена стапка, услуги на исхрана и сместување (продажба) | 10 % | | `MK-S-5` | ДДВ 5% — повластена стапка, основни производи за човечка исхрана (продажба) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Северна Македонија pack carries - Charts of accounts: Сметковен план за трговски друштва (Правилник за сметковниот план) (136). - 9 taxes, at 0 %, 5 %, 10 %, 18 %. - The Даночна пријава на данокот на додадена вредност (ДДВ-04) (`MK-DDV-04`), 17 boxes, filed month, quarter. - Financial statements: Биланс на состојба, Биланс на успех. ## What it does not do - No library of this repository writes the file of the MK-DDV-04 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mk). --- # Set up a company in Mali with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Mali as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Mali pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Mali pack, version 0.4.0; every code on it is read from the pack. The Mali pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Mali, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ML ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ML \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ML --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=ML-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ML-S-18` | Ventes de biens 18 % | 18 % | | `ML-S-18-SRV` | Prestations de services 18 % | 18 % | | `ML-S-5-INFO` | Matériel informatique et de production d'énergie solaire 5 % | 5 % | | `ML-S-5-AGRI` | Matériel agricole 5 % | 5 % | | `ML-S-5-HOTEL` | Hébergement, restauration et circuits touristiques agréés 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Mali pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 5 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`ML-TVA`), 14 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the ML-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ml). --- # Set up a company in Монгол Улс with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Монгол Улс as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Монгол Улс pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Монгол Улс pack, version 0.2.0; every code on it is read from the pack. The Монгол Улс pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Монгол Улс, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MN ``` - One chart of accounts: Нягтлан бодох бүртгэлийн дансны жагсаалт — аж ахуйн нэгж (Нягтлан бодох бүртгэлийн тухай хууль, Сангийн сайдын 347 дугаар тушаал), 149 accounts. - The books can be kept in `mn`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MN \ --language mn \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=MN-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MN-S-10` | НӨАТ 10 % — ерөнхий хувь (борлуулалт) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Монгол Улс pack carries - Charts of accounts: Нягтлан бодох бүртгэлийн дансны жагсаалт — аж ахуйн нэгж (Нягтлан бодох бүртгэлийн тухай хууль, Сангийн сайдын 347 дугаар тушаал) (149). - 7 taxes, at 0 %, 10 %. - The Нэмэгдсэн өртгийн албан татварын тайлан (`MN-VAT`), 10 boxes, filed month. - Financial statements: Санхүү байдлын тайлан (баланс), Орлогын дэлгэрэнгүй тайлан. ## What it does not do - No library of this repository writes the file of the MN-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mn). --- # Set up a company in 澳門 with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of 澳門 as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the 澳門 pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the 澳門 pack, version 0.1.0; every code on it is read from the pack. The 澳門 pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in 澳門, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MO ``` - One chart of accounts: 澳門參考會計科目表, 109 accounts. - The books can be kept in `zh`, `pt`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MO \ --language zh \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the 澳門 pack carries - Charts of accounts: 澳門參考會計科目表 (109). - 2 taxes, at 0 %. - Financial statements: 資產負債表, 損益表. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mo). --- # Set up a company in Mauritanie with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Mauritanie as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Mauritanie pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Mauritanie pack, version 0.2.0; every code on it is read from the pack. The Mauritanie pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Mauritanie, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MR ``` - One chart of accounts: Plan comptable national — plan comptable général (classes 1 à 8), 229 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MR \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=700,tax=MR-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `700` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MR-S-16` | Ventes taux normal 16 % | 16 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Mauritanie pack carries - Charts of accounts: Plan comptable national — plan comptable général (classes 1 à 8) (229). - 7 taxes, at 0 %, 16 %. - The Déclaration mensuelle de la taxe sur la valeur ajoutée (`MR-TVA`), 11 boxes, filed month. - Financial statements: Bilan, Tableau des résultats de l'exercice. ## What it does not do - No library of this repository writes the file of the MR-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mr). --- # Set up a company in Malta with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Malta as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Malta pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Malta pack, version 0.3.0; every code on it is read from the pack. The Malta pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Malta, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MT ``` - One chart of accounts: Malta reference chart of accounts (GAPSME horizontal layout), 148 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MT \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=5000,tax=MT-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `5000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MT-S-18` | Sale, standard rate 18% | 18 % | | `MT-S-07` | Sale, reduced rate 7% — accommodation and sporting facilities | 7 % | | `MT-S-12` | Sale, reduced rate 12% — securities, credit management, boat hire, body care | 12 % | | `MT-S-05` | Sale, reduced rate 5% | 5 % | | `MT-S-FOOD` | Sale, food for human consumption — exempt with credit | 0 % | | `MT-S-PHARMA` | Sale, pharmaceutical goods — exempt with credit | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Malta pack carries - Charts of accounts: Malta reference chart of accounts (GAPSME horizontal layout) (148). - 25 taxes, at 0 %, 5 %, 7 %, 12 %, 18 %. - The VAT Return (`MT-VAT-RETURN`), 55 boxes, filed quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balance Sheet — GAPSME horizontal layout, Income Statement — GAPSME, function of expense method. ## What it does not do - No library of this repository writes the file of the MT-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mt). --- # Set up a company in Mauritius with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Mauritius as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Mauritius pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Mauritius pack, version 0.2.0; every code on it is read from the pack. The Mauritius pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Mauritius, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MU ``` - One chart of accounts: Mauritius reference chart of accounts, 146 accounts. - The books can be kept in `en`, `fr`; the installer asks. Without a terminal, pass `--language `. - The VAT return (form VAT 3) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MU \ --language en \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MU --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=MU-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MU-S-15` | Sale, standard rate 15 % | 15 % | | `MU-S-ZR-DOM` | Sale, zero-rated (local supply) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Mauritius pack carries - Charts of accounts: Mauritius reference chart of accounts (146). - 16 taxes, at 0 %, 15 %. - The VAT return (form VAT 3) (`MU-VAT3`), 28 boxes, filed month, quarter. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the MU-VAT3 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mu). --- # Set up a company in Malawi with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Malawi as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Malawi pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Malawi pack, version 0.2.0; every code on it is read from the pack. The Malawi pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Malawi, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MW ``` - One chart of accounts: Malawi reference chart of accounts, 147 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MW \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=MW-S-17.5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MW-S-17.5` | Sale, standard rate 17.5 % | 17.5 % | | `MW-S-Z-DOM` | Sale, zero-rated (domestic) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Malawi pack carries - Charts of accounts: Malawi reference chart of accounts (147). - 10 taxes, at 0 %, 17.5 %. - The Monthly Value Added Tax return (`MW-VAT-RETURN`), 15 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the MW-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mw). --- # Set up a company in México with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of México as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the México pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the México pack, version 0.6.0; every code on it is read from the pack. The México pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in México, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MX ``` - One chart of accounts: Catálogo de cuentas sobre el código agrupador del SAT (selección para pymes), 280 accounts. - The books can be kept in `es`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MX \ --language es \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MX --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=401.01,tax=MX-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `401.01` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MX-S-16` | Ventas y servicios al 16 % | 16 % | | `MX-S-16-RET4` | Autotransporte terrestre de bienes al 16 %, con retención del 4 % | 16 % | | `MX-S-0` | Ventas a la tasa del 0 % | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the México pack carries - Charts of accounts: Catálogo de cuentas sobre el código agrupador del SAT (selección para pymes) (280). - 15 taxes, at 0 %, 8 %, 16 %. - The Declaración del pago definitivo mensual — IVA personas morales (`MX-IVA-PM`), 31 boxes, filed month. - Financial statements: Estado de situación financiera, Estado de resultados. ## What it does not do - No library of this repository writes the file of the MX-IVA-PM yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mx). --- # Set up a company in Malaysia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Malaysia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Malaysia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Malaysia pack, version 0.5.0; every code on it is read from the pack. The Malaysia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Malaysia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MY ``` - One chart of accounts: Malaysia reference chart of accounts, 142 accounts. - The books are kept in `ms`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=MY-S-RED" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MY-S-RED` | Sale of taxable goods, Sales Tax at 5 % | 5 % | | `MY-S-STD` | Sale of taxable goods, Sales Tax at 10 % | 10 % | | `MY-SVT-FB` | Taxable service, Service Tax at 6 % | 6 % | | `MY-SVT-STD` | Taxable service, Service Tax at 8 % | 8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Malaysia pack carries - Charts of accounts: Malaysia reference chart of accounts (142). - 15 taxes, at 0 %, 5 %, 6 %, 8 %, 10 %. - The SST-02 — Return of Sales Tax and Service Tax (`MY-SST-02`), 13 boxes, filed bimonth. - Electronic invoices as `myinvois`. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the MY-SST-02 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/my). --- # Set up a company in Moçambique with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Moçambique as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Moçambique pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Moçambique pack, version 0.2.0; every code on it is read from the pack. The Moçambique pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Moçambique, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country MZ ``` - One chart of accounts: PGC-NIRF — Plano Geral de Contabilidade para as Normas Internacionais de Relato Financeiro (selecção), 339 accounts. - The books are kept in `pt`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country MZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country MZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=711,tax=MZ-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `711` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `MZ-S-16` | Venda ou prestação de serviços à taxa normal (16 %) | 16 % | | `MZ-S-5` | Venda ou prestação de serviços à taxa reduzida (5 %) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Moçambique pack carries - Charts of accounts: PGC-NIRF — Plano Geral de Contabilidade para as Normas Internacionais de Relato Financeiro (selecção) (339). - 19 taxes, at 0 %, 5 %, 16 %, 17 %. - The Declaração Periódica de IVA — Modelo A (regime normal) (`MZ-IVA-MODELO-A`), 15 boxes, filed month. - Financial statements: Balanço, Demonstração dos resultados por naturezas. ## What it does not do - No library of this repository writes the file of the MZ-IVA-MODELO-A yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/mz). --- # Set up a company in Namibia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Namibia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Namibia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Namibia pack, version 0.2.0; every code on it is read from the pack. The Namibia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Namibia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NA ``` - One chart of accounts: Namibia reference chart of accounts, 149 accounts. - The books are kept in `en`. - The VAT 2 — Return for Value Added Tax is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NA \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=NA-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NA-S-15` | Sale, standard rate 15 % | 15 % | | `NA-S-15-CAP` | Sale of a capital good, standard rate 15 % | 15 % | | `NA-S-Z` | Sale, zero-rated (local) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Namibia pack carries - Charts of accounts: Namibia reference chart of accounts (149). - 13 taxes, at 0 %, 15 %. - The VAT 2 — Return for Value Added Tax (`NA-VAT2`), 27 boxes, filed month, bimonth. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the NA-VAT2 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/na). --- # Set up a company in Niger with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Niger as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Niger pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Niger pack, version 0.4.0; every code on it is read from the pack. The Niger pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Niger, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NE ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - The Déclaration de taxe sur la valeur ajoutée is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NE \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=NE-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NE-S-19` | Ventes de biens 19 % | 19 % | | `NE-S-19-SRV` | Prestations de services 19 % | 19 % | | `NE-S-10-TRANSPORT` | Transport terrestre de personnes et de marchandises 10 % | 10 % | | `NE-S-10-HEB` | Hébergement et restauration 10 % | 10 % | | `NE-S-5` | Produits de première nécessité et matériel informatique 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Niger pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 17 taxes, at 0 %, 5 %, 10 %, 19 %. - The Déclaration de taxe sur la valeur ajoutée (`NE-TVA`), 16 boxes, filed month, quarter. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the NE-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ne). --- # Set up a company in Nigeria with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Nigeria as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Nigeria pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Nigeria pack, version 0.5.0; every code on it is read from the pack. The Nigeria pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Nigeria, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NG ``` - One chart of accounts: Nigeria reference chart of accounts, 201 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=NG-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NG-S-SR` | Sale, standard-rated, VAT 7.5% | 7.5 % | | `NG-S-ZR-DOM` | Sale, zero-rated, domestic supply of a listed essential good or service | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Nigeria pack carries - Charts of accounts: Nigeria reference chart of accounts (201). - 10 taxes, at 0 %, 7.5 %. - The VAT return (`NG-VAT-RETURN`), 15 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the NG-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ng). --- # Set up a company in Nicaragua with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Nicaragua as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Nicaragua pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Nicaragua pack, version 0.3.0; every code on it is read from the pack. The Nicaragua pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Nicaragua, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NI ``` - One chart of accounts: Plan de cuentas de referencia, sobre la NIIF para las PYMES, 142 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NI \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=NI-V-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NI-V-15` | Venta o servicio gravado, 15 % | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Nicaragua pack carries - Charts of accounts: Plan de cuentas de referencia, sobre la NIIF para las PYMES (142). - 8 taxes, at 0 %, 15 %. - The Declaración mensual del Impuesto al Valor Agregado (IVA) — Ventanilla Electrónica Tributaria de la DGI (`NI-DGI-IVA`), 13 boxes, filed month. - Financial statements: Estado de Situación Financiera, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the NI-DGI-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ni). --- # Set up a company in Nederland with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Nederland as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Nederland pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Nederland pack, version 0.5.0; every code on it is read from the pack. The Nederland pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Nederland, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NL ``` - One chart of accounts: RGS — Referentie GrootboekSchema 3.8, MKB-selectie, 408 accounts. - The books can be kept in `nl`, `en`; the installer asks. Without a terminal, pass `--language `. - The Aangifte omzetbelasting (btw-aangifte) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NL \ --language nl \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=WOmzNohOlh,tax=NL-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `WOmzNohOlh` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NL-S-21` | Verkoop 21 % — algemeen tarief | 21 % | | `NL-S-09` | Verkoop 9 % — verlaagd tarief | 9 % | | `NL-S-00` | Verkoop 0 % — tabel II, binnenland | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Nederland pack carries - Charts of accounts: RGS — Referentie GrootboekSchema 3.8, MKB-selectie (408). - 21 taxes, at 0 %, 6 %, 9 %, 21 %. - The Aangifte omzetbelasting (btw-aangifte) (`NL-OB-AANGIFTE`), 21 boxes, filed month, quarter, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balans — model C (kleine rechtspersoon, verticaal), Winst- en verliesrekening — model E (categoriale indeling, verticaal). ## What it does not do - No library of this repository writes the file of the NL-OB-AANGIFTE yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/nl). --- # Set up a company in Norge with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Norge as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Norge pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Norge pack, version 0.4.0; every code on it is read from the pack. The Norge pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Norge, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NO ``` - One chart of accounts: Kontoplan etter regnskapsloven § 6-1 og § 6-2, 104 accounts. - The books are kept in `nb`. - The Mva-melding for merverdiavgift (kodebasert skjema, mvaKoder etter SAF-T-standarden) is filed on one of these cadences: `bimonth`, `year`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NO \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3000,tax=NO-S-25" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NO-S-25` | Salg, alminnelig sats 25 % | 25 % | | `NO-S-15` | Salg, redusert sats 15 % (næringsmidler) | 15 % | | `NO-S-12` | Salg, lav sats 12 % (persontransport, overnatting, m.m.) | 12 % | | `NO-S-0` | Salg, fritatt for merverdiavgift (nullsats innenlands — bøker) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Norge pack carries - Charts of accounts: Kontoplan etter regnskapsloven § 6-1 og § 6-2 (104). - 10 taxes, at 0 %, 12 %, 15 %, 25 %. - The Mva-melding for merverdiavgift (kodebasert skjema, mvaKoder etter SAF-T-standarden) (`NO-MVA-MELDING`), 22 boxes, filed bimonth, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balanse etter regnskapsloven § 6-2, Resultatregnskap etter art, regnskapsloven § 6-1. ## What it does not do - No library of this repository writes the file of the NO-MVA-MELDING yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/no). --- # Set up a company in Nepal with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Nepal as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Nepal pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Nepal pack, version 0.2.0; every code on it is read from the pack. The Nepal pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Nepal, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NP ``` - One chart of accounts: Nepal reference chart of accounts, 146 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NP \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NP --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=NP-S-13" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NP-S-13` | Sale, standard rate 13 % | 13 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Nepal pack carries - Charts of accounts: Nepal reference chart of accounts (146). - 8 taxes, at 0 %, 13 %. - The Monthly value-added tax return (`NP-VAT-RETURN`), 14 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the NP-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/np). --- # Set up a company in New Zealand with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of New Zealand as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the New Zealand pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the New Zealand pack, version 0.2.0; every code on it is read from the pack. The New Zealand pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in New Zealand, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country NZ ``` - One chart of accounts: New Zealand reference chart of accounts, 163 accounts. - The books are kept in `en`. - The Goods and services tax return is filed on one of these cadences: `month`, `bimonth`, `half_year`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country NZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country NZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=NZ-S-GST" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `NZ-S-GST` | Sale, GST 15 % | 15 % | | `NZ-S-GST-INC` | Retail sale, GST 15 %, the price includes the GST | 15 % | | `NZ-S-GST-PAY` | Sale, GST 15 %, accounted for on the payments basis | 15 % | | `NZ-S-ZERO-GOINGCONCERN` | Sale of a taxable activity as a going concern, zero-rated | 0 % | | `NZ-S-ZERO-LAND` | Sale of land between GST-registered persons, zero-rated | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the New Zealand pack carries - Charts of accounts: New Zealand reference chart of accounts (163). - 17 taxes, at 0 %, 15 %. - The Goods and services tax return (`NZ-GST101A`), 11 boxes, filed month, bimonth, half_year. - Electronic invoices as `pint-aunz`. - Financial statements: Statement of financial position — NZ IFRS, Tier 2 Reduced Disclosure Regime, Statement of profit or loss — NZ IFRS, Tier 2 Reduced Disclosure Regime, expenses by nature. ## What it does not do - No library of this repository writes the file of the NZ-GST101A yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/nz). --- # Set up a company in Oman with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Oman as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Oman pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Oman pack, version 0.2.0; every code on it is read from the pack. The Oman pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Oman, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country OM ``` - One chart of accounts: Oman reference chart of accounts, 113 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country OM \ --language ar \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country OM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=OM-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `OM-S-SR` | Sale, standard-rated, VAT 5% | 5 % | | `OM-S-ZR-FOOD` | Sale, zero-rated, specified basic food items | 0 % | | `OM-S-ZR-MED` | Sale, zero-rated, medicines and medical equipment | 0 % | | `OM-S-ZR-METAL` | Sale, zero-rated, investment gold, silver and platinum | 0 % | | `OM-S-ZR-TRANSPORT` | Sale, zero-rated, international and intra-GCC transport | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Oman pack carries - Charts of accounts: Oman reference chart of accounts (113). - 22 taxes, at 0 %, 5 %. - The VAT return (`OM-VAT-RETURN`), 27 boxes, filed quarter. - Financial statements: Statement of financial position — full IFRS Accounting Standards, Income statement — full IFRS Accounting Standards, expenses by nature. ## What it does not do - No library of this repository writes the file of the OM-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/om). --- # Set up a company in Panamá with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Panamá as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Panamá pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Panamá pack, version 0.3.0; every code on it is read from the pack. The Panamá pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Panamá, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PA ``` - One chart of accounts: Catálogo de cuentas propio, organizado sobre la NIIF para las PYMES, 152 accounts. - The books are kept in `es`. - The Declaración Jurada del Impuesto de Transferencia de Bienes Corporales Muebles y la Prestación de Servicios (Formulario 430) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PA \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=410501,tax=PA-S-7" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `410501` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PA-S-7` | Operaciones gravadas a la tarifa general del 7 % | 7 % | | `PA-S-10-ALC` | Operaciones gravadas a la tarifa del 10 % — bebidas alcohólicas | 10 % | | `PA-S-10-HOSP` | Operaciones gravadas a la tarifa del 10 % — hospedaje | 10 % | | `PA-S-15-TAB` | Operaciones gravadas a la tarifa del 15 % — tabaco | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Panamá pack carries - Charts of accounts: Catálogo de cuentas propio, organizado sobre la NIIF para las PYMES (152). - 13 taxes, at 0 %, 7 %, 10 %, 15 %. - The Declaración Jurada del Impuesto de Transferencia de Bienes Corporales Muebles y la Prestación de Servicios (Formulario 430) (`PA-DGI-430`), 29 boxes, filed month, quarter. - Financial statements: Estado de situación financiera, Estado de resultado integral. ## What it does not do - No library of this repository writes the file of the PA-DGI-430 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/pa). --- # Set up a company in Perú with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Perú as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Perú pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Perú pack, version 0.3.0; every code on it is read from the pack. The Perú pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Perú, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PE ``` - One chart of accounts: Plan Contable General Empresarial (selección), 176 accounts. - The books can be kept in `es`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PE \ --language es \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7012,tax=PE-V-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7012` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PE-V-18` | Venta gravada, 18 % | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Perú pack carries - Charts of accounts: Plan Contable General Empresarial (selección) (176). - 7 taxes, at 0 %, 18 %. - The Formulario Virtual N.° 621 — IGV Renta mensual (declaración del IGV) (`PE-SUNAT-621`), 11 boxes, filed month. - Financial statements: Estado de Situación Financiera, Estado de Resultados (por naturaleza). ## What it does not do - No library of this repository writes the file of the PE-SUNAT-621 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/pe). --- # Set up a company in Philippines with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Philippines as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Philippines pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Philippines pack, version 0.2.0; every code on it is read from the pack. The Philippines pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Philippines, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PH ``` - One chart of accounts: Ekwo reference chart of accounts for the Philippines, 156 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PH \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=PH-S-STD" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PH-S-STD` | Sale — value-added tax at 12% | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Philippines pack carries - Charts of accounts: Ekwo reference chart of accounts for the Philippines (156). - 7 taxes, at 0 %, 12 %. - The BIR Form No. 2550Q — Quarterly Value-Added Tax Return (`PH-VAT-2550Q`), 11 boxes, filed quarter. - Financial statements: Statement of Financial Position, Statement of Comprehensive Income. ## What it does not do - No library of this repository writes the file of the PH-VAT-2550Q yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ph). --- # Set up a company in Pakistan with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Pakistan as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Pakistan pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Pakistan pack, version 0.3.0; every code on it is read from the pack. The Pakistan pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Pakistan, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PK ``` - One chart of accounts: Pakistan reference chart of accounts, 172 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PK \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=PK-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PK-S-18` | Sale of goods, standard rate 18 % | 18 % | | `PK-S-18-FT` | Sale of goods to an unregistered buyer, 18 % + further tax 4 % | 22 % | | `PK-S-10` | Sale at a reduced rate of 10 % — photovoltaic cells and panels | 10 % | | `PK-S-ZR-DOM` | Domestic supply, zero-rated — Fifth Schedule | 0 % | | `PK-S-PRA-16` | Sale of services, Punjab sales tax on services 16 % (PRA) | 16 % | | `PK-S-SRB-15` | Sale of services, Sindh sales tax on services 15 % (SRB) | 15 % | | `PK-S-KPRA-15` | Sale of services, Khyber Pakhtunkhwa sales tax on services 15 % (KPRA) | 15 % | | `PK-S-BRA-15` | Sale of services, Balochistan sales tax on services 15 % (BRA) | 15 % | | `PK-S-ICT-15` | Sale of services, Islamabad Capital Territory sales tax on services 15 % (ICT) | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Pakistan pack carries - Charts of accounts: Pakistan reference chart of accounts (172). - 29 taxes, at 0 %, 1 %, 10 %, 15 %, 16 %, 17 %, 18 %, 22 %. - The Monthly Sales Tax Return (form STR-7, filed on FBR IRIS) (`PK-STR7`), 22 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the PK-STR7 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/pk). --- # Set up a company in Polska with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Polska as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Polska pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Polska pack, version 0.2.1; every code on it is read from the pack. The Polska pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Polska, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PL ``` - One chart of accounts: Plan kont odpowiadający załącznikowi nr 1 do ustawy o rachunkowości, 108 accounts. - The books are kept in `pl`. - The JPK_VAT z deklaracją — część deklaracyjna (wzór JPK_V7M(3) / JPK_V7K(3)) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PL \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8100,tax=PL-S-23" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8100` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PL-S-23` | VAT sprzedaż 23% | 23 % | | `PL-S-8` | VAT sprzedaż 8% | 8 % | | `PL-S-5` | VAT sprzedaż 5% | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Polska pack carries - Charts of accounts: Plan kont odpowiadający załącznikowi nr 1 do ustawy o rachunkowości (108). - 18 taxes, at 0 %, 5 %, 8 %, 23 %. - The JPK_VAT z deklaracją — część deklaracyjna (wzór JPK_V7M(3) / JPK_V7K(3)) (`PL-JPK-V7`), 64 boxes, filed month, quarter. - Electronic invoices as `ksef-fa3`. - Financial statements: Bilans według załącznika nr 1 do ustawy o rachunkowości, Rachunek zysków i strat — wariant porównawczy, według załącznika nr 1 do ustawy o rachunkowości. ## What it does not do - No library of this repository writes the file of the PL-JPK-V7 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/pl). --- # Set up a company in Portugal with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Portugal as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Portugal pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Portugal pack, version 0.4.0; every code on it is read from the pack. The Portugal pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Portugal, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PT ``` - One chart of accounts: SNC — Sistema de Normalização Contabilística (seleção para PME), 120 accounts. - The books can be kept in `pt`, `en`; the installer asks. Without a terminal, pass `--language `. - The Declaração Periódica do IVA is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PT \ --language pt \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=71,tax=PT-S-23" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `71` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PT-S-23` | Vendas e serviços à taxa normal (23 %) | 23 % | | `PT-S-13` | Vendas e serviços à taxa intermédia (13 %) | 13 % | | `PT-S-6` | Vendas e serviços à taxa reduzida (6 %) | 6 % | | `PT-S-AC-16` | Vendas e serviços na Região Autónoma dos Açores, taxa normal (16 %) | 16 % | | `PT-S-AC-9` | Vendas e serviços na Região Autónoma dos Açores, taxa intermédia (9 %) | 9 % | | `PT-S-AC-4` | Vendas e serviços na Região Autónoma dos Açores, taxa reduzida (4 %) | 4 % | | `PT-S-MA-22` | Vendas e serviços na Região Autónoma da Madeira, taxa normal (22 %) | 22 % | | `PT-S-MA-12` | Vendas e serviços na Região Autónoma da Madeira, taxa intermédia (12 %) | 12 % | | `PT-S-MA-4` | Vendas e serviços na Região Autónoma da Madeira, taxa reduzida (4 %, desde 01/10/2024) | 4 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Portugal pack carries - Charts of accounts: SNC — Sistema de Normalização Contabilística (seleção para PME) (120). - 26 taxes, at 0 %, 4 %, 5 %, 6 %, 9 %, 12 %, 13 %, 16 %, 22 %, 23 %. - The Declaração Periódica do IVA (`PT-DP-IVA`), 25 boxes, filed month, quarter. - Financial statements: Balanço, Demonstração dos Resultados por naturezas. ## What it does not do - No library of this repository writes the file of the PT-DP-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/pt). --- # Set up a company in Paraguay with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Paraguay as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Paraguay pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Paraguay pack, version 0.4.0; every code on it is read from the pack. The Paraguay pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Paraguay, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country PY ``` - One chart of accounts: Plan de cuentas de referencia sobre el libro de inventario y el balance general de la Ley N.° 1.034/1983, 117 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country PY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country PY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=411,tax=PY-V-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `411` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `PY-V-10` | Venta gravada, tasa general 10 % | 10 % | | `PY-V-5` | Venta gravada, tasa reducida 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Paraguay pack carries - Charts of accounts: Plan de cuentas de referencia sobre el libro de inventario y el balance general de la Ley N.° 1.034/1983 (117). - 10 taxes, at 0 %, 5 %, 10 %. - The Formulario N.° 120 — Declaración Jurada del Impuesto al Valor Agregado (IVA) (`PY-F120`), 29 boxes, filed month. - Financial statements: Estado de situación patrimonial (Balance general), Estado de resultados. ## What it does not do - No library of this repository writes the file of the PY-F120 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/py). --- # Set up a company in Qatar with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Qatar as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Qatar pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Qatar pack, version 0.1.0; every code on it is read from the pack. The Qatar pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Qatar, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country QA ``` - One chart of accounts: Qatar reference chart of accounts, 107 accounts. - The books can be kept in `ar`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country QA \ --language ar \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country QA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Qatar pack carries - Charts of accounts: Qatar reference chart of accounts (107). - 2 taxes, at 0 %. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/qa). --- # Set up a company in Romania with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Romania as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Romania pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Romania pack, version 0.3.0; every code on it is read from the pack. The Romania pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Romania, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country RO ``` - One chart of accounts: Planul de conturi general (clasele 1-7), 199 accounts. - The books are kept in `ro`. - The Decont de taxă pe valoarea adăugată (formularul 300) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country RO \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country RO --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=707,tax=RO-S-21" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `707` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `RO-S-21` | Vânzări — cota standard 21% | 21 % | | `RO-S-11` | Vânzări — cota redusă 11% | 11 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Romania pack carries - Charts of accounts: Planul de conturi general (clasele 1-7) (199). - 13 taxes, at 0 %, 11 %, 21 %. - The Decont de taxă pe valoarea adăugată (formularul 300) (`RO-D300`), 29 boxes, filed month, quarter. - Financial statements: Bilanț prescurtat, Contul de profit și pierdere. ## What it does not do - No library of this repository writes the file of the RO-D300 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `mt940` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ro). --- # Set up a company in Srbija with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Srbija as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Srbija pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Srbija pack, version 0.3.0; every code on it is read from the pack. The Srbija pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Srbija, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country RS ``` - One chart of accounts: Kontni okvir za privredna društva, zadruge i preduzetnike (Pravilnik 89/2020), 248 accounts. - The books can be kept in `sr`, `en`; the installer asks. Without a terminal, pass `--language `. - The Poreska prijava poreza na dodatu vrednost (Obrazac PPPDV) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country RS \ --language sr \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country RS --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=614,tax=RS-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `614` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `RS-S-20` | PDV 20% — opšta stopa (promet) | 20 % | | `RS-S-10` | PDV 10% — posebna stopa (promet) | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Srbija pack carries - Charts of accounts: Kontni okvir za privredna društva, zadruge i preduzetnike (Pravilnik 89/2020) (248). - 11 taxes, at 0 %, 10 %, 20 %. - The Poreska prijava poreza na dodatu vrednost (Obrazac PPPDV) (`RS-PPPDV`), 17 boxes, filed month, quarter. - Financial statements: Bilans stanja, Bilans uspeha. ## What it does not do - No library of this repository writes the file of the RS-PPPDV yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/rs). --- # Set up a company in Rwanda with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Rwanda as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Rwanda pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Rwanda pack, version 0.2.0; every code on it is read from the pack. The Rwanda pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Rwanda, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country RW ``` - One chart of accounts: Rwanda reference chart of accounts, 142 accounts. - The books can be kept in `en`, `fr`; the installer asks. Without a terminal, pass `--language `. - The Monthly VAT Declaration Form (RRA-VAT-DF1) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country RW \ --language en \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country RW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=RW-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `RW-S-18` | Sale, standard rate 18 % | 18 % | | `RW-S-ZR-MIN` | Sale, zero-rated (minerals sold on the domestic market) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Rwanda pack carries - Charts of accounts: Rwanda reference chart of accounts (142). - 10 taxes, at 0 %, 18 %. - The Monthly VAT Declaration Form (RRA-VAT-DF1) (`RW-VAT`), 14 boxes, filed month, quarter. - Financial statements: Statement of financial position, Profit and loss account. ## What it does not do - No library of this repository writes the file of the RW-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/rw). --- # Set up a company in Saudi Arabia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Saudi Arabia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Saudi Arabia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Saudi Arabia pack, version 0.3.0; every code on it is read from the pack. The Saudi Arabia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Saudi Arabia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SA ``` - One chart of accounts: Saudi Arabia reference chart of accounts, 115 accounts. - The books are kept in `en`. - The VAT return is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SA \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SA-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SA-S-SR` | Sale, standard-rated, VAT 15% | 15 % | | `SA-S-ZR-TRANSPORT` | Sale, zero-rated, international transport of goods or passengers | 0 % | | `SA-S-ZR-MED` | Sale, zero-rated, qualifying medicines and medical goods | 0 % | | `SA-S-ZR-METAL` | Sale, zero-rated, first supply of an investment metal | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Saudi Arabia pack carries - Charts of accounts: Saudi Arabia reference chart of accounts (115). - 19 taxes, at 0 %, 15 %. - The VAT return (`SA-VAT-RETURN`), 21 boxes, filed month, quarter. - Financial statements: Statement of financial position — IFRS for Small and Medium-sized Entities, Income statement — IFRS for Small and Medium-sized Entities. ## What it does not do - No library of this repository writes the file of the SA-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sa). --- # Set up a company in Seychelles with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Seychelles as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Seychelles pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Seychelles pack, version 0.2.0; every code on it is read from the pack. The Seychelles pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Seychelles, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SC ``` - One chart of accounts: Seychelles reference chart of accounts, 146 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SC \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SC --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SC-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SC-S-15` | Sale, standard rate 15 % | 15 % | | `SC-S-15-CAP` | Sale of a capital asset, standard rate 15 % | 15 % | | `SC-S-ZR` | Sale, zero-rated (other than export) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Seychelles pack carries - Charts of accounts: Seychelles reference chart of accounts (146). - 11 taxes, at 0 %, 15 %. - The VAT return (`SC-VAT`), 20 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the SC-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sc). --- # Set up a company in Sverige with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Sverige as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Sverige pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Sverige pack, version 0.3.0; every code on it is read from the pack. The Sverige pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Sverige, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SE ``` - One chart of accounts: Referenskontoplan för Sverige, 166 accounts. - The books are kept in `sv`. - The Momsdeklaration is filed on one of these cadences: `month`, `quarter`, `year`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SE \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SE --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=3010,tax=SE-S-25" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `3010` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SE-S-25` | Utgående moms 25 % | 25 % | | `SE-S-12` | Utgående moms 12 % | 12 % | | `SE-S-06` | Utgående moms 6 % | 6 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Sverige pack carries - Charts of accounts: Referenskontoplan för Sverige (166). - 16 taxes, at 0 %, 6 %, 12 %, 25 %. - The Momsdeklaration (`SE-MOMS`), 29 boxes, filed month, quarter, year. - Electronic invoices as `peppol-bis-3`. - Financial statements: Balansräkning enligt bilaga 1 (kontoform), Resultaträkning enligt bilaga 2 (kostnadsslagsindelad). ## What it does not do - No library of this repository writes the file of the SE-MOMS yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/se). --- # Set up a company in Singapore with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Singapore as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Singapore pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Singapore pack, version 0.4.0; every code on it is read from the pack. The Singapore pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Singapore, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SG ``` - One chart of accounts: Singapore reference chart of accounts, 142 accounts. - The books are kept in `en`. - The GST return (form GST F5) is filed on one of these cadences: `month`, `quarter`, `half_year`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SG-S-SR-9" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SG-S-SR-9` | Sale, standard-rated, GST 9 % | 9 % | | `SG-S-SR-INC-9` | Retail sale, standard-rated, GST 9 %, the price includes the GST | 9 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Singapore pack carries - Charts of accounts: Singapore reference chart of accounts (142). - 36 taxes, at 0 %, 7 %, 8 %, 9 %, 10 %, 15 %. - The GST return (form GST F5) (`SG-GST-F5`), 17 boxes, filed month, quarter, half_year. - Electronic invoices as `pint-sg`. - Financial statements: Statement of financial position — SFRS for Small Entities, Income statement — SFRS for Small Entities, expenses by nature. ## What it does not do - No library of this repository writes the file of the SG-GST-F5 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sg). --- # Set up a company in Slovenia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Slovenia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Slovenia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Slovenia pack, version 0.3.0; every code on it is read from the pack. The Slovenia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Slovenia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SI ``` - One chart of accounts: Splošni kontni okvir po 65. in 66. členu ZGD-1, 132 accounts. - The books can be kept in `sl`, `en`; the installer asks. Without a terminal, pass `--language `. - The Obračun davka na dodano vrednost (obrazec DDV-O) is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SI \ --language sl \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SI --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=8000,tax=SI-S-22" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `8000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SI-S-22` | DDV 22 % | 22 % | | `SI-S-9_5` | DDV 9,5 % | 9.5 % | | `SI-S-5` | DDV 5 % | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Slovenia pack carries - Charts of accounts: Splošni kontni okvir po 65. in 66. členu ZGD-1 (132). - 14 taxes, at 0 %, 5 %, 9.5 %, 22 %. - The Obračun davka na dodano vrednost (obrazec DDV-O) (`SI-DDV-O`), 18 boxes, filed month, quarter. - Electronic invoices as `eslog-2.0`. - Financial statements: Bilanca stanja po 65. členu ZGD-1, Izkaz poslovnega izida po drugem odstavku 66. člena ZGD-1 (različica I). ## What it does not do - No library of this repository writes the file of the SI-DDV-O yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/si). --- # Set up a company in Slovensko with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Slovensko as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Slovensko pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Slovensko pack, version 0.3.0; every code on it is read from the pack. The Slovensko pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Slovensko, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SK ``` - One chart of accounts: Rámcová účtová osnova pre podnikateľov, 111 accounts. - The books are kept in `sk`. - The Daňové priznanie k dani z pridanej hodnoty (tlačivo DPHv25, MF/007833/2025-731) is filed on one of these cadences: `month`, `quarter`. The default is `month`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SK \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=604,tax=SK-S-23" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `604` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SK-S-23` | DPH 23 % — základná sadzba, tuzemsko | 23 % | | `SK-S-19` | DPH 19 % — znížená sadzba, tuzemsko | 19 % | | `SK-S-5` | DPH 5 % — druhá znížená sadzba, tuzemsko | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Slovensko pack carries - Charts of accounts: Rámcová účtová osnova pre podnikateľov (111). - 17 taxes, at 0 %, 5 %, 19 %, 23 %. - The Daňové priznanie k dani z pridanej hodnoty (tlačivo DPHv25, MF/007833/2025-731) (`SK-DPH`), 22 boxes, filed month, quarter. - Electronic invoices as `peppol-bis-3`. - Financial statements: Súvaha Úč POD 1-01, Výkaz ziskov a strát Úč POD 2-01. ## What it does not do - No library of this repository writes the file of the SK-DPH yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sk). --- # Set up a company in Sierra Leone with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Sierra Leone as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Sierra Leone pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Sierra Leone pack, version 0.2.0; every code on it is read from the pack. The Sierra Leone pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Sierra Leone, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SL ``` - One chart of accounts: Sierra Leone reference chart of accounts, 147 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SL \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SL --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SL-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SL-S-15` | Sale, standard rate 15 % | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Sierra Leone pack carries - Charts of accounts: Sierra Leone reference chart of accounts (147). - 8 taxes, at 0 %, 15 %. - The Monthly Goods and Services Tax return (`SL-GST-RETURN`), 13 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the SL-GST-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sl). --- # Set up a company in Sénégal with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Sénégal as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Sénégal pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Sénégal pack, version 0.5.0; every code on it is read from the pack. The Sénégal pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Sénégal, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SN ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - The Déclaration de taxe sur la valeur ajoutée is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SN \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=SN-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SN-S-18` | Ventes de biens 18 % | 18 % | | `SN-S-18-SRV` | Prestations de services 18 % | 18 % | | `SN-S-10` | Hébergement touristique agréé 10 % | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Sénégal pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 10 %, 18 %. - The Déclaration de taxe sur la valeur ajoutée (`SN-TVA`), 14 boxes, filed month, quarter. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the SN-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sn). --- # Set up a company in Suriname with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Suriname as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Suriname pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Suriname pack, version 0.2.0; every code on it is read from the pack. The Suriname pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Suriname, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SR ``` - One chart of accounts: Surinaams referentierekeningschema, 118 accounts. - The books can be kept in `nl`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SR \ --language nl \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SR-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SR-S-10` | Verkoop 10 % — algemeen tarief | 10 % | | `SR-S-10-INC` | Kleinhandelsverkoop 10 % — prijs inclusief BTW | 10 % | | `SR-S-05` | Verkoop 5 % — verlaagd tarief | 5 % | | `SR-S-25` | Verkoop 25 % — verhoogd tarief | 25 % | | `SR-S-00` | Verkoop 0 % — bijlage 1 | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Suriname pack carries - Charts of accounts: Surinaams referentierekeningschema (118). - 18 taxes, at 0 %, 5 %, 10 %, 25 %. - The BTW-aangifte (maandelijkse aangifte) (`SR-BTW-AANGIFTE`), 28 boxes, filed month. - Financial statements: Balans, Winst-en-verliesrekening. ## What it does not do - No library of this repository writes the file of the SR-BTW-AANGIFTE yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sr). --- # Set up a company in El Salvador with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of El Salvador as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the El Salvador pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the El Salvador pack, version 0.3.0; every code on it is read from the pack. The El Salvador pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in El Salvador, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SV ``` - One chart of accounts: Plan de cuentas inspirado en las NIIF, 158 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SV \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SV --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4101,tax=SV-S-13-CCF" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4101` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SV-S-13-CCF` | Ventas gravadas al 13 % a contribuyentes (comprobante de crédito fiscal) | 13 % | | `SV-S-13-FAC` | Ventas gravadas al 13 % a consumidores finales (factura) | 13 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the El Salvador pack carries - Charts of accounts: Plan de cuentas inspirado en las NIIF (158). - 11 taxes, at 0 %, 13 %. - The Declaración y pago del impuesto a la transferencia de bienes muebles y a la prestación de servicios — formulario F07 (`SV-IVA-F07`), 19 boxes, filed month. - Financial statements: Estado de situación financiera, Estado de resultado integral. ## What it does not do - No library of this repository writes the file of the SV-IVA-F07 yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sv). --- # Set up a company in Eswatini with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Eswatini as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Eswatini pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Eswatini pack, version 0.2.0; every code on it is read from the pack. The Eswatini pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Eswatini, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country SZ ``` - One chart of accounts: Eswatini reference chart of accounts, 147 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country SZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country SZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=SZ-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `SZ-S-15` | Sale, standard rate 15 % | 15 % | | `SZ-S-Z-DOM` | Sale, zero-rated (domestic — basic foodstuffs, farm inputs, medicines, school text books) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Eswatini pack carries - Charts of accounts: Eswatini reference chart of accounts (147). - 10 taxes, at 0 %, 15 %. - The Monthly Value Added Tax return (`SZ-VAT-RETURN`), 15 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the SZ-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/sz). --- # Set up a company in Tchad with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Tchad as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Tchad pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Tchad pack, version 0.4.0; every code on it is read from the pack. The Tchad pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Tchad, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TD ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TD \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TD --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=TD-S-1925" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TD-S-1925` | Ventes de biens, taux normal 19,25 % | 19.25 % | | `TD-S-1925-SRV` | Prestations de services, taux normal 19,25 % | 19.25 % | | `TD-S-9` | Biens de la liste réduite, 9 % | 9 % | | `TD-S-9-SRV` | Hébergement et restauration, 9 % | 9 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Tchad pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 14 taxes, at 0 %, 9 %, 19.25 %. - The Déclaration de taxe sur la valeur ajoutée (`TD-TVA`), 17 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the TD-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/td). --- # Set up a company in Togo with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Togo as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Togo pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Togo pack, version 0.3.0; every code on it is read from the pack. The Togo pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Togo, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TG ``` - One chart of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal, 1358 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7011,tax=TG-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `7011` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TG-S-18` | Ventes de biens 18 % | 18 % | | `TG-S-18-SRV` | Prestations de services 18 %, exigibles à l'encaissement | 18 % | | `TG-S-MP-18` | Marchés publics payés par chèque du Trésor 18 % | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Togo pack carries - Charts of accounts: SYSCOHADA révisé — plan comptable général OHADA, Système normal (1358). - 11 taxes, at 0 %, 18 %. - The Déclaration de TVA (Taxe sur la Valeur Ajoutée) (`TG-TVA`), 26 boxes, filed month. - Financial statements: Bilan — Système normal, Compte de résultat — Système normal. ## What it does not do - No library of this repository writes the file of the TG-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tg). --- # Set up a company in ประเทศไทย with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of ประเทศไทย as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the ประเทศไทย pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the ประเทศไทย pack, version 0.2.0; every code on it is read from the pack. The ประเทศไทย pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in ประเทศไทย, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TH ``` - One chart of accounts: ผังบัญชีอ้างอิงของประเทศไทย, 173 accounts. - The books can be kept in `th`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TH \ --language th \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TH --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=TH-S-STD" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TH-S-STD` | ขาย ภาษีมูลค่าเพิ่มอัตราร้อยละ 7 | 7 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the ประเทศไทย pack carries - Charts of accounts: ผังบัญชีอ้างอิงของประเทศไทย (173). - 9 taxes, at 0 %, 3 %, 5 %, 7 %. - The แบบแสดงรายการภาษีมูลค่าเพิ่ม (ภ.พ.30) (`TH-VAT-30`), 7 boxes, filed month. - Financial statements: งบแสดงฐานะการเงิน, งบกำไรขาดทุน. ## What it does not do - No library of this repository writes the file of the TH-VAT-30 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/th). --- # Set up a company in Ҷумҳурии Тоҷикистон (Республика Таджикистан) with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ҷумҳурии Тоҷикистон (Республика Таджикистан) as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ҷумҳурии Тоҷикистон (Республика Таджикистан) pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ҷумҳурии Тоҷикистон (Республика Таджикистан) pack, version 0.2.0; every code on it is read from the pack. The Ҷумҳурии Тоҷикистон (Республика Таджикистан) pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ҷумҳурии Тоҷикистон (Республика Таджикистан), see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TJ ``` - One chart of accounts: План счетов бухгалтерского учета финансово-хозяйственной деятельности хозяйствующих субъектов (распоряжение Минфина № 41 от 27.05.2011), 220 accounts. - The books can be kept in `ru`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TJ \ --language ru \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TJ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=44110,tax=TJ-S-13" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `44110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TJ-S-13` | НДС 13 % — стандартная ставка с 2027 года (продажа) | 13 % | | `TJ-S-7` | НДС 7 % — сниженная ставка: строительные работы, гостиничные услуги, общественное питание (продажа) | 7 % | | `TJ-S-5` | НДС 5 % — сниженная ставка: сельскохозяйственная продукция внутреннего производства, обучение, медицинские услуги санаториев (продажа) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ҷумҳурии Тоҷикистон (Республика Таджикистан) pack carries - Charts of accounts: План счетов бухгалтерского учета финансово-хозяйственной деятельности хозяйствующих субъектов (распоряжение Минфина № 41 от 27.05.2011) (220). - 12 taxes, at 0 %, 5 %, 7 %, 13 %, 14 %. - The Декларация по налогу на добавленную стоимость (`TJ-VAT`), 16 boxes, filed month. - Financial statements: Бухгалтерский баланс, Отчет о прибылях и убытках. ## What it does not do - No library of this repository writes the file of the TJ-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tj). --- # Set up a company in Туркменистан with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Туркменистан as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Туркменистан pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Туркменистан pack, version 0.2.0; every code on it is read from the pack. The Туркменистан pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Туркменистан, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TM ``` - One chart of accounts: План счетов бухгалтерского учёта — коммерческие организации (собственная группировка пакета по классам НСФО МСП), 149 accounts. - The books can be kept in `ru`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TM \ --language ru \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=6110,tax=TM-S-15" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `6110` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TM-S-15` | НДС 15 % — общая ставка (продажа) | 15 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Туркменистан pack carries - Charts of accounts: План счетов бухгалтерского учёта — коммерческие организации (собственная группировка пакета по классам НСФО МСП) (149). - 8 taxes, at 0 %, 15 %. - The Декларация по налогу на добавленную стоимость (`TM-VAT`), 10 boxes, filed month. - Financial statements: Отчёт о финансовом положении (баланс), Отчёт о совокупной прибыли (о прибылях и убытках). ## What it does not do - No library of this repository writes the file of the TM-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tm). --- # Set up a company in Tunisie with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Tunisie as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Tunisie pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Tunisie pack, version 0.3.0; every code on it is read from the pack. The Tunisie pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Tunisie, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TN ``` - One chart of accounts: Système comptable des entreprises — nomenclature des comptes, 149 accounts. - The books are kept in `fr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TN \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=701,tax=TN-S-19" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `701` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TN-S-19` | Vente au taux de 19 % | 19 % | | `TN-S-13` | Vente au taux de 13 % | 13 % | | `TN-S-7` | Vente au taux de 7 % | 7 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Tunisie pack carries - Charts of accounts: Système comptable des entreprises — nomenclature des comptes (149). - 10 taxes, at 0 %, 7 %, 13 %, 19 %. - The Déclaration mensuelle — volet taxe sur la valeur ajoutée (`TN-TVA`), 14 boxes, filed month. - Financial statements: Bilan, État de résultat. ## What it does not do - No library of this repository writes the file of the TN-TVA yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tn). --- # Set up a company in Türkiye with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Türkiye as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Türkiye pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Türkiye pack, version 0.3.0; every code on it is read from the pack. The Türkiye pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Türkiye, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TR ``` - One chart of accounts: Tekdüzen Hesap Planı, 180 accounts. - The books are kept in `tr`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TR \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TR --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=600,tax=TR-S-SR" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `600` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TR-S-SR` | Satış, genel oran, KDV %20 | 20 % | | `TR-S-RR10` | Satış, indirimli oran, KDV %10 | 10 % | | `TR-S-RR1` | Satış, indirimli oran, KDV %1 | 1 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Türkiye pack carries - Charts of accounts: Tekdüzen Hesap Planı (180). - 12 taxes, at 0 %, 1 %, 10 %, 20 %. - The 1 No'lu Katma Değer Vergisi Beyannamesi (`TR-KDV1`), 17 boxes, filed month. - Financial statements: Bilânço — Tekdüzen Hesap Planı, Gelir Tablosu — Tekdüzen Hesap Planı. ## What it does not do - No library of this repository writes the file of the TR-KDV1 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tr). --- # Set up a company in Trinidad and Tobago with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Trinidad and Tobago as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Trinidad and Tobago pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Trinidad and Tobago pack, version 0.2.0; every code on it is read from the pack. The Trinidad and Tobago pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Trinidad and Tobago, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TT ``` - One chart of accounts: Trinidad and Tobago reference chart of accounts, 116 accounts. - The books are kept in `en`. - The VAT return (box layout of this pack) is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TT \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TT --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=TT-S-125" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TT-S-125` | Sale, VAT 12.5 % | 12.5 % | | `TT-S-125-INC` | Retail sale, VAT 12.5 %, the price includes the tax | 12.5 % | | `TT-S-Z` | Zero-rated supply in Trinidad and Tobago | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Trinidad and Tobago pack carries - Charts of accounts: Trinidad and Tobago reference chart of accounts (116). - 8 taxes, at 0 %, 12.5 %. - The VAT return (box layout of this pack) (`TT-VAT-RETURN`), 12 boxes, filed month, bimonth. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the TT-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tt). --- # Set up a company in 臺灣 with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of 臺灣 as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the 臺灣 pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the 臺灣 pack, version 0.2.0; every code on it is read from the pack. The 臺灣 pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in 臺灣, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TW ``` - One chart of accounts: 商業會計項目表(節錄) — Business Accounting Items Table, abridged, 130 accounts. - The books can be kept in `zh`, `en`; the installer asks. Without a terminal, pass `--language `. - The 營業人銷售額與稅額申報書(401)— General Business Entity Sales Amount and Tax Amount Return, general tax calculation method is filed on one of these cadences: `month`, `bimonth`. The default is `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TW \ --language zh \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4111,tax=TW-S-5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4111` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TW-S-5` | 銷售 5%(一般稅額計算) | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the 臺灣 pack carries - Charts of accounts: 商業會計項目表(節錄) — Business Accounting Items Table, abridged (130). - 13 taxes, at 0 %, 5 %. - The 營業人銷售額與稅額申報書(401)— General Business Entity Sales Amount and Tax Amount Return, general tax calculation method (`TW-401`), 15 boxes, filed month, bimonth. - Financial statements: 資產負債表 — Statement of financial position, 損益表 — Income statement. ## What it does not do - No library of this repository writes the file of the TW-401 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tw). --- # Set up a company in Tanzania with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Tanzania as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Tanzania pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Tanzania pack, version 0.2.0; every code on it is read from the pack. The Tanzania pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Tanzania, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country TZ ``` - One chart of accounts: Tanzania reference chart of accounts, 142 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country TZ \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country TZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=TZ-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `TZ-S-18` | Sale, standard rate 18 % | 18 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Tanzania pack carries - Charts of accounts: Tanzania reference chart of accounts (142). - 10 taxes, at 0 %, 18 %. - The VAT return (`TZ-VAT-RETURN`), 17 boxes, filed month. - Financial statements: Statement of financial position, Profit and loss account. ## What it does not do - No library of this repository writes the file of the TZ-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/tz). --- # Set up a company in Україна with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Україна as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Україна pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Україна pack, version 0.4.0; every code on it is read from the pack. The Україна pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Україна, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country UA ``` - One chart of accounts: План рахунків бухгалтерського обліку (наказ Мінфіну № 291), 154 accounts. - The books can be kept in `uk`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country UA \ --language uk \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country UA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=702,tax=UA-S-20" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `702` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `UA-S-20` | ПДВ 20 % — постачання на митній території (продаж) | 20 % | | `UA-S-14` | ПДВ 14 % — окремі види сільськогосподарської продукції (продаж) | 14 % | | `UA-S-7` | ПДВ 7 % — ліки, вироби медичного призначення, готельні та культурні послуги (продаж) | 7 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Україна pack carries - Charts of accounts: План рахунків бухгалтерського обліку (наказ Мінфіну № 291) (154). - 9 taxes, at 0 %, 7 %, 14 %, 20 %. - The Податкова декларація з податку на додану вартість (`UA-PDV`), 22 boxes, filed month. - Financial statements: Баланс (Звіт про фінансовий стан) — форма № 1, Звіт про фінансові результати (Звіт про сукупний доход) — форма № 2. ## What it does not do - No library of this repository writes the file of the UA-PDV yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ua). --- # Set up a company in Uganda with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Uganda as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Uganda pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Uganda pack, version 0.2.0; every code on it is read from the pack. The Uganda pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Uganda, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country UG ``` - One chart of accounts: Uganda reference chart of accounts, 140 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country UG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country UG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=UG-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `UG-S-18` | Sale, standard rate 18 % | 18 % | | `UG-S-Z-DOM` | Sale, zero-rated (domestic — drugs and medicines) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Uganda pack carries - Charts of accounts: Uganda reference chart of accounts (140). - 9 taxes, at 0 %, 18 %. - The Monthly Value Added Tax Return (form DT-2031) (`UG-VAT-DT2031`), 19 boxes, filed month. - Financial statements: Statement of financial position, Profit and loss account. ## What it does not do - No library of this repository writes the file of the UG-VAT-DT2031 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/ug). --- # Set up a company in United States with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of United States as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the United States pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the United States pack, version 0.11.0; every code on it is read from the pack. The United States pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in United States, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country US ``` - One chart of accounts: United States reference chart of accounts, 236 accounts. - The books are kept in `en`. - The State, Local, and District Sales and Use Tax Return (CDTFA-401-A) is filed on one of these cadences: `month`, `quarter`, `year`. The default is `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country US \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country US --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=US-CA-S-725" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `US-CA-S-725` | Sale in California, combined state and local rate 7.25 % (US-CA) | 7.25 % | | `US-CA-S-1075` | Sale in the City of Oakland, combined rate 10.75 % (US-CA) | 10.75 % | | `US-NY-S-8875` | Sale delivered in New York City, combined rate 8.875 % (US-NY) | 8.875 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the United States pack carries - Charts of accounts: United States reference chart of accounts (236). - 11 taxes, at 0 %, 7.25 %, 8.875 %, 10.75 %. - The State, Local, and District Sales and Use Tax Return (CDTFA-401-A) (`US-CA-SUT-RETURN`), 39 boxes, filed month, quarter, year. - Financial statements: Balance sheet — Regulation S-X, Rule 5-02, Income statement — Regulation S-X, Rule 5-03. ## What it does not do - No library of this repository writes the file of the US-CA-SUT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `bai2` bank statement yet. - No library of this repository reads a `ofx` bank statement yet. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/us). --- # Set up a company in Uruguay with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Uruguay as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Uruguay pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Uruguay pack, version 0.2.0; every code on it is read from the pack. The Uruguay pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Uruguay, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country UY ``` - One chart of accounts: Plan de cuentas Ekwo para Uruguay (sin catálogo oficial), 116 accounts. - The books are kept in `es`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country UY \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country UY --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4101,tax=UY-S-22" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4101` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `UY-S-22` | Ventas y servicios, tasa básica 22 % | 22 % | | `UY-S-10` | Ventas y servicios, tasa mínima 10 % | 10 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Uruguay pack carries - Charts of accounts: Plan de cuentas Ekwo para Uruguay (sin catálogo oficial) (116). - 7 taxes, at 0 %, 10 %, 22 %. - The Formulario 1376 — Declaración Mensual de IVA (grupo CEDE y División Grandes Contribuyentes), sección Impuesto al Valor Agregado (`UY-F1376-IVA`), 11 boxes, filed month. - Financial statements: Estado de Situación Patrimonial, Estado de Resultados. ## What it does not do - No library of this repository writes the file of the UY-F1376-IVA yet: the return is computed and frozen here, and typed on the administration’s portal. - No library of this repository reads a `csv` bank statement yet. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/uy). --- # Set up a company in Ўзбекистон Республикаси with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Ўзбекистон Республикаси as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Ўзбекистон Республикаси pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Ўзбекистон Республикаси pack, version 0.2.0; every code on it is read from the pack. The Ўзбекистон Республикаси pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Ўзбекистон Республикаси, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country UZ ``` - One chart of accounts: Хўжалик юритувчи субъектларда бухгалтерия ҳисобининг ҳисобварақлар режаси (21-сонли БҲМС, 2025), 327 accounts. - The books can be kept in `uz`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country UZ \ --language uz \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country UZ --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=9020,tax=UZ-S-12" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `9020` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `UZ-S-12` | ҚҚС 12 % — асосий ставка (сотув) | 12 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Ўзбекистон Республикаси pack carries - Charts of accounts: Хўжалик юритувчи субъектларда бухгалтерия ҳисобининг ҳисобварақлар режаси (21-сонли БҲМС, 2025) (327). - 7 taxes, at 0 %, 12 %. - The Қўшилган қиймат солиғи бўйича солиқ ҳисоботи (`UZ-VAT`), 10 boxes, filed month. - Financial statements: Бухгалтерия баланси, Молиявий натижалар тўғрисидаги ҳисобот. ## What it does not do - No library of this repository writes the file of the UZ-VAT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/uz). --- # Set up a company in Saint Vincent and the Grenadines with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Saint Vincent and the Grenadines as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Saint Vincent and the Grenadines pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Saint Vincent and the Grenadines pack, version 0.2.0; every code on it is read from the pack. The Saint Vincent and the Grenadines pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Saint Vincent and the Grenadines, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country VC ``` - One chart of accounts: Saint Vincent and the Grenadines reference chart of accounts, 118 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country VC \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country VC --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=VC-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `VC-S-16` | Sale, VAT 16 % | 16 % | | `VC-S-16-INC` | Retail sale, VAT 16 %, the price includes the tax | 16 % | | `VC-S-11` | Sale of accommodation or tourist services, VAT 11 % | 11 % | | `VC-S-11-T` | Sale of diving, tour or other tourist services, VAT 11 % | 11 % | | `VC-S-Z` | Zero-rated supply in Saint Vincent and the Grenadines | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Saint Vincent and the Grenadines pack carries - Charts of accounts: Saint Vincent and the Grenadines reference chart of accounts (118). - 11 taxes, at 0 %, 11 %, 16 %. - The VAT return (box layout of this pack) (`VC-VAT-RETURN`), 17 boxes, filed month. - Financial statements: Statement of financial position, Income statement. ## What it does not do - No library of this repository writes the file of the VC-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/vc). --- # Set up a company in British Virgin Islands with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of British Virgin Islands as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the British Virgin Islands pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the British Virgin Islands pack, version 0.1.0; every code on it is read from the pack. The British Virgin Islands pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in British Virgin Islands, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country VG ``` - One chart of accounts: British Virgin Islands reference chart of accounts, 107 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country VG \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country VG --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The pack carries no domestic sale tax, so a line names no tax. ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the British Virgin Islands pack carries - Charts of accounts: British Virgin Islands reference chart of accounts (107). - 2 taxes, at 0 %. - Financial statements: Balance sheet (statement of financial position), Income statement. ## What it does not do - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/vg). --- # Set up a company in Việt Nam with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Việt Nam as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Việt Nam pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Việt Nam pack, version 0.3.0; every code on it is read from the pack. The Việt Nam pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Việt Nam, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country VN ``` - One chart of accounts: Hệ thống tài khoản kế toán doanh nghiệp, 111 accounts. - The books are kept in `vi`. - The Tờ khai thuế giá trị gia tăng (phương pháp khấu trừ) — Mẫu số 01/GTGT is filed on one of these cadences: `month`, `quarter`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country VN \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country VN --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=511,tax=VN-S-10" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `511` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `VN-S-10` | Bán ra — thuế suất 10% | 10 % | | `VN-S-5` | Bán ra — thuế suất 5% | 5 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Việt Nam pack carries - Charts of accounts: Hệ thống tài khoản kế toán doanh nghiệp (111). - 11 taxes, at 0 %, 5 %, 8 %, 10 %. - The Tờ khai thuế giá trị gia tăng (phương pháp khấu trừ) — Mẫu số 01/GTGT (`VN-VAT-01-GTGT`), 15 boxes, filed month, quarter. - Financial statements: Báo cáo tình hình tài chính (Mẫu số B01-DN), Báo cáo kết quả hoạt động kinh doanh (Mẫu số B02-DN). ## What it does not do - No library of this repository writes the file of the VN-VAT-01-GTGT yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/vn). --- # Set up a company in Kosova with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Kosova as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Kosova pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Kosova pack, version 0.3.0; every code on it is read from the pack. The Kosova pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Kosova, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country XK ``` - One chart of accounts: Plan kontabël i frymëzuar nga IFRS (jo i legjislatuar), 137 accounts. - The books can be kept in `sq`, `en`; the installer asks. Without a terminal, pass `--language `. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country XK \ --language sq \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country XK --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=XK-S-18" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `XK-S-18` | TVSH 18% — norma standarde (furnizim) | 18 % | | `XK-S-8` | TVSH 8% — norma e reduktuar (furnizim) | 8 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Kosova pack carries - Charts of accounts: Plan kontabël i frymëzuar nga IFRS (jo i legjislatuar) (137). - 9 taxes, at 0 %, 8 %, 18 %. - The Deklarata e TVSH-së (`XK-TVSH`), 20 boxes, filed month. - Financial statements: Pasqyra e pozicionit financiar, Pasqyra e të ardhurave gjithëpërfshirëse. ## What it does not do - No library of this repository writes the file of the XK-TVSH yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/xk). --- # Set up a company in South Africa with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of South Africa as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the South Africa pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the South Africa pack, version 0.4.0; every code on it is read from the pack. The South Africa pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in South Africa, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ZA ``` - One chart of accounts: South Africa reference chart of accounts, 156 accounts. - The books are kept in `en`. - The Value-Added Tax return (VAT201) is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ZA \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ZA --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=ZA-S-VAT" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ZA-S-VAT` | Sale, standard rate 15 % | 15 % | | `ZA-S-VAT-CASH` | Sale, standard rate 15 %, vendor on the payments basis | 15 % | | `ZA-S-VAT-CAP` | Sale of capital goods or services, standard rate 15 % | 15 % | | `ZA-S-ZERO` | Sale, zero-rated, domestic | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the South Africa pack carries - Charts of accounts: South Africa reference chart of accounts (156). - 18 taxes, at 0 %, 15 %. - The Value-Added Tax return (VAT201) (`ZA-VAT201`), 25 boxes, filed month, bimonth. - Financial statements: Statement of financial position — IFRS for SMEs Accounting Standard, Section 4, Statement of comprehensive income — IFRS for SMEs Accounting Standard, Section 5, expenses by nature. ## What it does not do - No library of this repository writes the file of the ZA-VAT201 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/za). --- # Set up a company in Zambia with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Zambia as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Zambia pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Zambia pack, version 0.2.0; every code on it is read from the pack. The Zambia pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Zambia, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ZM ``` - One chart of accounts: Zambia reference chart of accounts, 147 accounts. - The books are kept in `en`. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ZM \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ZM --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=ZM-S-16" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ZM-S-16` | Sale, standard rate 16 % | 16 % | | `ZM-S-Z-DOM` | Sale, zero-rated (domestic — medical supplies and drugs) | 0 % | | `ZM-S-Z-WATER` | Sale, zero-rated (mains water and sewerage, from 1 January 2026) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Zambia pack carries - Charts of accounts: Zambia reference chart of accounts (147). - 12 taxes, at 0 %, 16 %. - The Monthly Value Added Tax return (`ZM-VAT-RETURN`), 15 boxes, filed month. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the ZM-VAT-RETURN yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/zm). --- # Set up a company in Zimbabwe with Ekwo OS Ekwo keeps double-entry books in a database you own, with the rules of Zimbabwe as data. On [Ekwo Cloud](https://cloud.ekwo.ai/account) the Zimbabwe pack is ready to use, with an account opened in a minute; this page is the other way in, Ekwo OS, the open source core, installed on your own project. It is generated from the Zimbabwe pack, version 0.2.0; every code on it is read from the pack. The Zimbabwe pack is **community**: contributed, and reviewed by nobody. > Your accountant works in the same books, with their own access, and the pack carries its sources, its version and its status. To find an accountant who works with Ekwo in Zimbabwe, see [the directory](https://ekwo.ai/partners/directory/) or [our partners](https://ekwo.ai/partners/). What Ekwo is, and its limits: [the disclaimer](https://ekwo.ai/disclaimer/). ## 1. What you need - A [Supabase](https://supabase.com) project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it. - From its dashboard: the connection string (Connect → **Session pooler**), the Project URL and the `service_role` key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards. - Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone. ## 2. Install One command. It asks for the rest as it goes. ```sh npx ekwo-os init --country ZW ``` - One chart of accounts: Zimbabwe reference chart of accounts, 157 accounts. - The books are kept in `en`. - The VAT 7 — Return for Remittance of Value Added Tax is filed on one of these cadences: `month`, `bimonth`. Pass `--vat-period ` to set yours. - A financial year follows the calendar unless you pass `--fiscal-year-start YYYY-MM-DD`. The same, with no question asked — every value your own: ```sh npx ekwo-os init \ --country ZW \ --vat-period \ --db-url "postgresql://postgres.:@:5432/postgres" \ --supabase-url "https://.supabase.co" \ --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \ --org "Your Organisation" --company "Your Company" \ --admin-email "you@example.com" \ --yes ``` ## 3. Before you go live Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the `service_role` key off every other machine, and read the disclaimer. `init` prints them; [the installation guide](https://ekwo.ai/docs/install/#before-you-go-live-four-things-on-your-project) explains each. ## 4. A first invoice Sign in as the administrator you just created, pick the company, and write a draft. `--dry-run` shows the entry the database would write, and writes nothing; `post` books it. ```sh ekwo login --supabase-url https://.supabase.co --anon-key --email you@example.com ekwo use "Your Company" ekwo contact add "First Customer" --country ZW --ref customer-1 ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=4000,tax=ZW-S-15.5" ekwo post invoice-1 --dry-run ekwo post invoice-1 ``` A line names its account and its tax by code, never by rate. `4000` is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and `list_accounts` lists them. What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool `update_company_profile` fills; `ekwo init` sets only the name. The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice. | Tax code | Name | Rate | |---|---|---| | `ZW-S-15.5` | Sale, standard rate 15.5 % | 15.5 % | | `ZW-S-15-T` | Sale, 15 % — supply made in 2025, accounted for in 2026 | 15 % | | `ZW-S-Z-DOM` | Sale, zero-rated (local) | 0 % | ## 5. With an AI agent The MCP server lets an agent keep the books as you, under your own row level security, and never with the `service_role` key. [Configuring it](https://ekwo.ai/docs/mcp/), and [what an agent must and must not do](https://ekwo.ai/docs/agents/). ## What the Zimbabwe pack carries - Charts of accounts: Zimbabwe reference chart of accounts (157). - 16 taxes, at 0 %, 15 %, 15.5 %. - The VAT 7 — Return for Remittance of Value Added Tax (`ZW-VAT7`), 25 boxes, filed month, bimonth. - Financial statements: Statement of financial position, Statement of profit or loss. ## What it does not do - No library of this repository writes the file of the ZW-VAT7 yet: the return is computed and frozen here, and typed on the administration’s portal. - Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint. - What the pack leaves out on purpose is in [its README](https://github.com/Ekwo-ai/ekwo-os/tree/main/packs/zw).