# Ledgerix — Functioneel Overzicht > Compleet overzicht van alle functionaliteit, opties en onderdelen van het > Ledgerix-boekhoudpakket. Bedoeld als naslag en als basis voor presentaties. > > **Versie:** 0.94.0 · **Laatste update:** 2026-05-22 --- ## 1. Wat is Ledgerix Ledgerix is een **modulair Nederlands boekhoudpakket**, geschreven in Rust, ontworpen als moderne vervanging voor CASH-boekhoudsoftware. | Kenmerk | Invulling | |---------|-----------| | **Doelgroep** | ZZP'ers, MKB, accountants(kantoren) | | **Distributie** | On-premises, single-binary (Windows `.exe` met installer) | | **Database** | SQLite, embedded — geen aparte database-installatie | | **Interface** | Webinterface (vanilla JS, geen framework) + volledige REST API | | **Talen** | NL (primair), EN, DE, FR | | **Architectuur** | 14 onafhankelijke Rust-crates, gekoppeld via ID's | | **Licentie** | Proprietair, commerciële licentie vereist (zie [`LICENSE`](../LICENSE)) | ### Positionering Eén installatie draait meerdere administraties (multi-company). De interface past zich aan op basis van **bedrijfsmodus** en **UI-complexiteit**, zodat een ZZP'er een eenvoudig scherm ziet en een accountant het volledige arsenaal. ### Licentiemodel (v0.90+) Ledgerix is een commercieel product met drie tiers; de licentie is **offline-first** — 100% lokaal geverifieerd met een in de binary ingebakken Ed25519 public-key, geen internetverbinding vereist. | Tier | Gebruikers / administraties | Inhoud | |------|------------------------------|--------| | **ZZP** | 1 / 1 | Kernboekhouding | | **MKB** | 5 / 3 | + alle pro-features (batch, sjablonen, budget, integraties, …) | | **Accountant** | onbeperkt / onbeperkt | + alle huidige én toekomstige features (wildcard) | - **30 dagen trial** met volledige toegang bij eerste boot. - **Boekhouding wordt nooit hard geblokkeerd** op licentie-status: een verlopen/ontbrekende key toont een banner, maar een boekjaar afsluiten moet altijd kunnen. Bij activatie verdwijnt de banner direct. - **Feature-gating** is server-side afgedwongen per endpoint (v0.91+): een ZZP-licentie kan technisch geen MKB-features gebruiken. - Keys worden uitgegeven met de interne **licentietool** (`licgen`); een ingetrokken key blijft offline-first geldig tot z'n vervaldatum. --- ## 2. Bedrijfsmodi & UI-complexiteit Ledgerix kent twee onafhankelijke "assen" die bepalen wat een gebruiker ziet: ### 2.1 Bedrijfsmodus (`company_mode`) Hiërarchisch — elke modus toont een superset van de vorige: | Modus | Voor wie | Wat zichtbaar is | |-------|----------|------------------| | **ZZP** | Zelfstandigen zonder personeel | Kern: boekingen, grootboek, relaties, BTW, rapportages, bankimport | | **MKB** | Kleinbedrijf | + batch-boekingen, sjablonen, margeregeling, valuta, jaarrekening, periodes, jaarafsluiting, ICP, budget | | **Accountant** | Accountantskantoren | + accountantsoverzicht, jaarrekening-configuratie (alle modules) | ### 2.2 UI-complexiteit (`ui_complexity`) Los van de bedrijfsmodus — een MKB'er kan "eenvoudig" kiezen, een ZZP'er "advanced": - **Eenvoudig** — vereenvoudigde schermen (`eenvoudig.html`, `eenvoudig-overzicht.html`, `eenvoudig-btw.html`), debet/credit verborgen, domein-taal - **Standaard** — de reguliere interface - **Advanced** — alles zichtbaar, geen vereenvoudigingen ### 2.3 Single-user kiosk-modus Voor een installatie met één gebruiker: auth-management en gebruikersbeheer worden verborgen, automatische login. Ideaal voor een ZZP'er op de eigen pc. --- ## 3. Functionaliteit per gebied De volgende indeling volgt de navigatiestructuur van de applicatie. ### 3.1 Dashboard Configureerbaar widget-systeem — de gebruiker kiest welke widgets zichtbaar zijn en in welke volgorde (drag & drop, opgeslagen per gebruiker): | Widget | Inhoud | |--------|--------| | Statistieken (KPI) | **Configureerbaar** (v0.92): naast de tellingen (relaties, rekeningen, boekingen, dagboeken) ook omzet, kosten en resultaat (YTD) als KPI aan te zetten via een tandwiel rechtsonder dat een popup met de opties opent; keuze persistent per gebruiker | | Goedkeuringen | (v0.93) Toont wat op jouw beslissing wacht; goedkeuren/afwijzen rechtstreeks vanaf het dashboard | | Ontbrekende boekingen | Maanden zonder activiteit per dagboek — spot vergeten bankafschriften | | Liquiditeitsprognose | 12-weken cashflow-voorspelling met dip-waarschuwing | | Budget-variantie | Afwijking budget vs werkelijk per rekening (maand/kwartaal/YTD/jaar) | | Maandtrend | Omzet/kosten per maand (SVG-grafiek) | | Liquiditeit | End-of-month banksaldo cumulatief | | Omzet / Kosten | Top-rekeningen met balkgrafiek | | Top-debiteuren | Grootste openstaande posten | | Snelle acties | Configureerbare knoppen naar veelgebruikte schermen | | OB-deadline | Afteller naar de eerstvolgende BTW-aangifte | | Recente boekingen / Debiteuren | Tabellen | Plus: **globaal zoeken** (Ctrl+K) over relaties, rekeningen, boekingen. ### 3.2 Boekhouding (Sidebar-groep sinds de herschikking in v0.92–v0.93: dagelijkse boekwerk- flows + relaties bij elkaar; stamtabellen verhuisd naar **Stamgegevens**.) | Onderdeel | Functie | |-----------|---------| | **Boekingen** | Handmatige journaalposten, multi-line, met bijlagen (PDF/afbeeldingen), duplicate-warning, review-flow, bulk-acties, storno (reverse-boeking met audit-linkage), PDF-export per boeking, UBL-export voor verkoopfacturen | | **Batch-boekingen** | Spreadsheet-achtige bulkinvoer; per regel datum/dagboek/rekening/bedrag/BTW, met drop-zone voor bijlagen | | **Bulk-bewerken** | (verplaatst naar Boekhouding in v0.93) Selecteer-en-wijzig flow voor boekings-velden over honderden regels tegelijk | | **Snel bon vastleggen** | Mobiele camera-flow voor bonnen; **alleen zichtbaar op telefoon/tablet** (v0.93.1) — op desktop verborgen | | **Grootboekkaart** | Mutatie-overzicht per rekening | | **Sjablonen** | Terugkerende boekingen opslaan + automatisch boeken op interval | | **Margeregeling** | Per-artikel én globalisatiemethode, inclusief voorraadadministratie | | **Relaties** | (onderaan Boekhouding sinds v0.93) Debiteuren/crediteuren, KvK-API-integratie voor auto-aanvullen | | **KOR-modus** | (v0.84, uitgebreid v0.95.39+) Kleineondernemersregeling: setting + YTD-omzettracker over 8xxx-rekeningen + dashboard-banner bij ≥80% (oranje) / overschreden (rood) van de €20k-drempel. Bij ingeschakelde KOR: verkoop standaard 0%, niet-aftrekbare voorbelasting automatisch in de kostprijs, en OB-werkblad meldt de ontheffing van de periodieke aangifte | ### 3.3 Stamgegevens (Eigen sidebar-groep sinds v0.92 — voorheen verspreid over Boekhouding en "Relaties & Stamdata".) | Onderdeel | Functie | |-----------|---------| | **Grootboek** | Rekeningschema-beheer, account-types (Balans / W&V), categorieën, RGS-codes | | **Dagboeken** | Inkoop, Verkoop, Bank, Kas, Memoriaal, Beginbalans | | **BTW-codes** | Configureerbare BTW-codes met tariefhistorie (bijv. 6% → 9% laag tarief met geldigheidsperiode) | | **Valuta & Koersen** | Wisselkoersen per dag, automatische ECB-feed, jaarrevaluatie van vreemde-valuta-saldi | ### 3.4 Rapportages | Onderdeel | Functie | |-----------|---------| | **Rapportages** | Proefbalans, balans, winst & verlies, ouderdomsanalyse (debiteuren/crediteuren), jaarvergelijking — met print / PDF / HTML / CSV-export | | **Analyse-dimensies** | Eigen labels/tags op boekingen voor cross-cutting rapportage (project, kostendrager, locatie) | | **Rapport-bouwer** | Configureerbare rapport-templates met eigen filters en groeperingen | | **Budget** | YTD-budget per rekening, kopiëren van vorig jaar met inflatie-factor, e-mail-alerts bij overschrijding | | **Meerjarenoverzicht** | Jaarrekening-cijfers naast elkaar over meerdere jaren, met grafieken | ### 3.4b Jaarwerk & belastingen (Eigen sidebar-groep sinds v0.87.2, herschikking van de oude "Rapportages & BTW".) | Onderdeel | Functie | |-----------|---------| | **Jaarrekening** | Volledig configureerbaar per rechtsvorm (eenmanszaak, VOF, BV, NV, …); secties, mappings, winstverdeling, vaste activa, toelichtingen; PDF-export | | **Jaarrekening-configuratie** | Accountant stelt secties + rubriek-mappings in | | **Vaste activa** | (v0.83) Eigen standalone pagina onder Jaarwerk: register van bedrijfsmiddelen + lineaire afschrijfberekening + **éénklik auto-boeking** van de jaarafschrijving als memo-boeking (idempotent via description-prefix). (v0.94) **KIA-berekening** per boekjaar met de officiële schijven (bronvermelding + waarschuwing bij ontbrekende jaartabel) en detectie van desinvesterings-kandidaten | | **Periodes** | 12 maandelijkse periodes per boekjaar; gesloten periodes blokkeren mutaties | | **Jaarafsluiting** | Resultaat → eigen vermogen, periodes sluiten, volgend jaar aanmaken, beginbalans genereren — idempotent, met voorcontrole | | **OB-aangifte** | BTW-aangifte-werkblad per maand/kwartaal/jaar, configureerbare rubriek-mapping; **per-rubriek contextuele uitleg** (12 NL-keys met klikbare `?`-toggle) | | **ICP-opgave** | Intracommunautaire prestaties per land en klant, CSV-export | | **Scenarios (wat-als)** | (verplaatst naar Jaarwerk in v0.93) Risico-vrij rondkijken in een kloon van de huidige administratie; één-klik backup-restore in een scenario (v0.76) | ### 3.5 Import / Export | Onderdeel | Functie | |-----------|---------| | **XAF Import/Export** | XAF 3.2 auditfile — import vanuit CASH en andere software (meerdere jaren in één upload), export voor Belastingdienst/accountant | | **Journaal-import** | Bulk-import van memoriaal-boekingen via plakken uit Excel of CSV-upload (5-kolom format), met balans-check, rekening-validatie en niet-blokkerende waarschuwingen. **Brugstaat-modus**: upload een Excel-saldibalans van de accountant — de parser detecteert kolommen en genereert automatisch de correctie- en vjp-boekingen | | **Bankimport** | CAMT.053 (alle Nederlandse banken), MT940, CSV — met auto-matching tegen openstaande posten en automatische boekregel-suggesties | | **Bank match-regels** | (v0.85) User-managed regels met conditie-AND-logica (IBAN/naam/desc-pattern + bedrag-range + direction) → target-rekening + relatie + BTW-suggestie. Toegepast vóór learned-patterns; user-intent wint van statistiek. | | **Mailbox-inbox** | IMAP-poller haalt inkomende bonnen/facturen op; 1-klik verwerking mailbox → boeking met OCR | | **Peppol / NLCIUS** | (v0.86, MVP) Upload-pagina voor UBL 2.1- / NLCIUS-XML van leveranciers. Parser extract'eert factuurnummer, datums, leverancier, totalen, regels met BTW% en stelt een concept-boeking voor (debet/credit-pattern voor inkoop). Niets wordt automatisch geboekt — review-stap verplicht. Vanaf 2027 verplicht voor B2G in NL en de facto standaard voor B2B onder EU ViDA. | | **Volledige export** | Alle administratie-data als gestructureerde export (round-trip met CSV-import voor relaties, BTW-codes, valuta, koersen) | | **Documenten / OCR** | Bijlagen bij boekingen; OCR op bonnen via `ocrix` (pure-Rust OCR-service met Tesseract-fallback), camera-scan via PWA | ### 3.6 Beheer | Onderdeel | Functie | |-----------|---------| | **Gebruikers** | Per gebruiker: e-mail, naam, 2FA-status, bedrijfstoegang, groep-lidmaatschap | | **Groepen** | Groep-gebaseerde RBAC (v0.69+) — system-groups (Admin / Boekhouder / Klant / API) zijn vast; eigen groepen kunnen worden aangemaakt met **fijnmazige permissies per endpoint** (v0.70+) zodat een "Junior boekhouder" bijv. wél boekingen mag invoeren maar geen rapporten mag aanpassen. | | **API Keys** | Bearer-token toegang tot de REST API, met prefix-identificatie | | **OAuth-providers** | Single Sign-On via OpenID Connect (Microsoft Azure, Google, Keycloak, Authentik, …) | | **Goedkeuringen** | Workflow-engine: configureerbare goedkeuringsregels op type, dagboek, bedrag-grens of trigger; in-app badge in de sidebar + e-mail-notificatie bij nieuwe pending request. Werkt over álle boekings-paden + stamtabellen (ledger / relations / journals / companies) (v0.68 → v0.73). | | **Bedrijven** | Multi-company-beheer; DB-niveau FK-integriteit tegen orphans; scenario-companies (wat-als) | | **Audit Trail** | Elke mutatie automatisch gelogd (middleware); toont gebruiker, actie, entiteit, details; CSV-export | | **Backup & herstel** | Leek-vriendelijke UX (v0.75) — automatische scheduling, AES-256-GCM versleuteling optioneel, restore via knop (geen file-locatie hoeven kennen) | | **Systeem-monitor** | (v0.80) Real-time inzicht voor admins: proces-geheugen (RSS/VSZ/CPU), systeem-RAM, uptime, database-grootte (DB+WAL+SHM), laatste backup-status en rij-aantallen per belangrijke tabel. Auto-refresh elke 30s. | | **Instellingen** | Bedrijfsgegevens, rechtsvorm, valuta, bedrijfsmodus, UI-complexiteit, OCR-configuratie, backup-pad, integriteits-checks, **licentie-activatie** | > **Verplaatst in v0.93–v0.94:** Bulk-bewerken → Boekhouding, Scenarios → > Jaarwerk & belastingen, en **Documentatie** uit Beheer naar de onderste > sidebar-balk (naast taalkeuze en thema), zodat de handleiding overal één > klik weg is in plaats van weggestopt onder Beheer. ### 3.7 Klant-portal & vragen-thread (v0.78 – v0.79) Voor accountantskantoren: klanten kunnen meekijken in de eigen administratie zonder dat ze de volle boekhouder-UI te zien krijgen. | Onderdeel | Functie | |-----------|---------| | **Klant-system-group** | Gebruikers die uitsluitend in deze group zitten krijgen een sterk uitgeklede sidebar: alleen **Mijn portal** + **Rapporten** + **Klant-vragen** | | **Mijn portal** | (`/klant.html`) Compact dashboard met openstaande vragen, gedeelde documenten, recente rapporten | | **Vragen-thread per boeking** | De accountant stelt een vraag aan een specifieke boeking ("waar is de bon van?") en de klant beantwoordt 'm in een thread; status open/wacht-op-klant/beantwoord; e-mail-notificaties | | **Klant-vragen-overzicht** | Cross-administratie lijst van alle openstaande vragen, met filter op status en mijn-toegewezen vragen | | **Accountant-context** | De accountant ziet boven elke vraag-thread context: relatie, dagboek, bedrag, eventuele bijlagen | ### 3.8 Documentatie & help (v0.77+) | Onderdeel | Functie | |-----------|---------| | **Contextuele help-knop** | Rechtsboven elke pagina; opent een drawer met markdown-content specifiek voor die pagina | | **Gedeelde markdown-renderer** | (`/markdown.js`) Gebruikt door zowel de help-drawer als de docs-pagina; lijsten, tabellen, code-blocks | | **Glossary-tooltips** | Jargon krijgt automatisch een uitleg-icoon (`data-help`) | | **Documentatie-pagina** | (`/docs.html`) Ingebouwde handleidingen — gebruiker / beheerder / ontwikkelaar | ### 3.9 Integraties (v0.55+) Kant-en-klare koppelingen met externe diensten. Geen handmatige upload of CSV-import meer; data komt automatisch binnen en wordt — afhankelijk van de gekozen modus — voorbereid als concept-boeking of direct doorgeboekt. **Catalogus van providers** (status per **2026-05-22**, uit [`integrations/catalog.rs`](../crates/ledgerix-api/src/integrations/catalog.rs)): | Categorie | Provider | Status | Wat doet het | |-----------|----------|--------|--------------| | **Payment** | Mollie | Available | Payments + payouts; matching tegen openstaande facturen | | | Stripe | Available | Charges + payouts; idem als Mollie | | **CRM** | Pipedrive | Available | Organizations-sync naar relaties (idempotent via mapping-tabel) | | | HubSpot | Available | Companies-sync inclusief NAW, telefoon, BTW-ID | | **Webshops** | WooCommerce | Available (v0.60) | Orders → directe omzetboekingen | | | Shopify | Available (v0.60) | Idem | | **PSD2-bank** | Tink | Beta | OAuth-bankkoppeling; transacties direct in bankimport-staging | | | Yapily | Beta | Alternatieve PSD2-aggregator met bredere EU-bankdekking | | **Loonpakketten** | Loket | Beta (v0.61) | Maandelijkse loonjournaal-import | | | Nmbrs | Beta (v0.62) | Idem (SOAP-API) | | | Employes | Beta (v0.62) | Idem (REST-API) | | **Boekhouden** | Twinfield | Coming soon (roadmap) | Geplande sync-koppeling; zichtbaar in de UI maar nog niet aanmaakbaar | **Status-betekenis:** *Available* = productieklaar; *Beta* = technisch werkend en end-to-end gevalideerd via lokale mock-servers, voorzichtig deployen (productie vereist echte credentials/contracten — Tink/Yapily zijn AISP's onder PSD2, loonpakketten vereisen een productie-OAuth-token/setup); *Coming soon* = roadmap-item, alleen zichtbaar in de catalogus. **Flow per binnenkomend event (payment-providers):** 1. **Sync** — achtergrond-task pollt elke 15 min, of "Sync nu"-knop in UI 2. **Matching** — 4-staps strategie: provider-metadata → factuurnummer in description → bedrag + datum ±14 dagen → geen match 3. **Booking-suggestie** — driedelig (Bank-tussenrek D / fee D / debiteur of omzet C) 4. **Draft** — gebruiker ziet 'em op `/integratie-drafts.html` met groen/geel/ oranje/grijs confidence-badge en pre-ingevulde regels 5. **Confirm** — wordt een echte boeking via de journal-service (balans- en periodecontrole gerespecteerd) — of automatisch doorgeboekt bij `auto_confirm_mode = green_only` / `always` 6. **Payouts** — periodieke uitbetaling van het Mollie-/Stripe-saldo naar de bankrekening wordt automatisch gematcht met de bankimport via een reference-string in de bankregel **Per integratie configureerbaar:** | Setting | Waarden | |---------|---------| | `auto_confirm_mode` | `never` (default, alles als draft) / `green_only` (alleen exacte matches) / `always` | | `fee_pattern` | `in_booking` (fee als regel in dezelfde boeking) / `separate` | | Tussenrekening | Grootboekrekening voor het provider-saldo | | Fee-rekening | Kostenrekening voor commissies (default 4310 Bankkosten) | | Default omzet | Voor payments zonder factuur-match | | Bankrekening | Voor payout-koppeling met bankimport | **Credentials** worden AES-256-GCM versleuteld opgeslagen met een server-wide master-key. Master-key wordt bij eerste boot gegenereerd in de `settings`- tabel — beschermt een gestolen DB-backup tegen credential-leak (niet tegen een volledige filesystem-compromise). **PSD2-pad** (Tink/Yapily) wijkt af van payments: transacties komen direct in `bank_staging_lines` zodat de bestaande bankimport-werklijst (CAMT/CSV) ze afhandelt. Geen aparte drafts-flow; de gewone template-matching pakt 'em op. **CRM-pad** (Pipedrive/HubSpot) heeft géén drafts — relaties worden direct geüpsert in de `relations`-tabel met een mapping-tabel zodat tweede syncs van hetzelfde CRM-contact de bestaande Ledgerix-relatie updaten i.p.v. duplicaten maken. --- ## 4. Onboarding & setup | Onderdeel | Functie | |-----------|---------| | **Account-setup-wizard** | (v0.94) Veilige first-run: in plaats van een standaard `admin/admin`-login maak je bij de allereerste keer openen zelf het beheerdersaccount aan (gebruiker + wachtwoord). De Windows-installer vraagt het wachtwoord tijdens de installatie; voor Docker/Linux verschijnt de wizard wanneer geen `ADMIN_PASSWORD` is gezet. Daarna kan de Admin-rol niet meer worden ontnomen aan de laatste actieve admin (geen lockout) | | **Welkom-scherm** | (v0.74) Migratie-eerst: gebruikers die overstappen van een ander pakket beginnen op `/welkom.html` en uploaden direct hun XAF-bestand(en) — meerdere boekjaren tegelijk; nieuwe gebruikers krijgen daar dezelfde keuze tussen "lege administratie", "voorbeeld" of "branche-template" | | **Bedrijf-setup-wizard** | Bedrijfsgegevens → rekeningschema → dagboeken → boekjaar | | **Branche-templates** | 10 voorgedefinieerde rekeningschema's (ZZP-dienst, detailhandel, horeca, transport, groothandel, bouw, creatief, verhuur, zorg, algemeen) — één klik geeft een werkende administratie passend bij de branche | | **Demo-data** | Volledige voorbeeld-administratie laden om te verkennen zonder typewerk | | **Onboarding-tour** | Skipbare rondleiding door de interface | | **Rijke empty-states** | Lege schermen leggen uit wat de gebruiker kan doen | ### Branche-templates in detail Templates zijn JSON-bestanden met een forward-compatible schema. Twee bronnen, één loader: **ingebouwd** (in de binary embedded) en **lokaal** (`{db_dir}/templates/` per installatie — een accountant kan een eigen template-bibliotheek aanleggen). Multilingual namen, RGS-code-koppeling, `country` + `tax_year_min` voor toekomstige internationalisatie. --- ## 5. Beveiliging | Aspect | Invulling | |--------|-----------| | **Wachtwoorden** | Argon2-hashing (geen MD5/SHA, geen plain storage) | | **Sessies** | `X-Session-Id` of `Authorization: Bearer ` | | **2FA** | TOTP (authenticator-app), met QR-code | | **RBAC** | Groep-gebaseerde toegang (v0.72+): system-groups Admin / Boekhouder / Klant / API zijn vast, plus optionele eigen groepen; per groep een set fijnmazige permissies per endpoint (v0.70+) | | **Rate-limiting** | Login (5/15min), zware operaties zoals OCR/XAF/exports (20/5min) | | **SQL-injectie** | Altijd geparametriseerde queries | | **Multi-tenant-isolatie** | `company_id`-filter op alle tenant-queries + BEFORE INSERT-triggers | | **Audit-trail** | Coarse-grained middleware logt elke mutatie automatisch | | **CSP** | Restrictief Content-Security-Policy beleid | | **XSS** | Escape-by-default in rendering | | **Backup-encryptie** | AES-256-GCM at-rest, Argon2-KDF, automatische scheduling | | **Geld** | `rust_decimal::Decimal`, nooit floating-point | | **Geen default-credentials** | (v0.94) Geen `admin/admin` meer: het eerste account wordt via de setup-wizard of een installer-prompt aangemaakt; de laatste actieve admin kan niet worden verwijderd, gedeactiveerd of uit de Admin-groep gehaald (geen lockout) | --- ## 6. Technische kenmerken | Component | Technologie | |-----------|-------------| | Taal | Rust (edition 2024) | | Web framework | Axum | | Database | SQLite (embedded via sqlx) | | Frontend | Vanilla JS + CSS + i18n-runtime, geen framework | | XML | quick-xml (XAF 3.2) | | XLSX | calamine (brugstaat-import) | | PDF | printpdf | | Installer (Windows) | Inno Setup 6 | | Container (Linux) | Multi-stage Dockerfile (debian:bookworm-slim runtime, tini PID-1) | | Native Linux | systemd-unit met strakke sandbox (NoNewPrivileges, ProtectSystem=strict, SystemCallFilter) | ### Distributiemodellen Ledgerix is **niet hosted** — er is geen managed-SaaS-aanbod. Klanten draaien zelf op een van de volgende manieren: - **Windows** — `Ledgerix-Setup-X.Y.Z.exe` installer (single-binary + static assets + ocrix-service) - **Linux cloud-VPS** — Docker met `docker-compose` (zie [`docs/deployment.md`](deployment.md)) - **Linux bare-metal** — systemd-unit in `deploy/systemd/` - **Kubernetes / eigen orchestratie** — het Docker-image plus eigen manifests; `/data` als persistent volume - **From source** — `cargo build --release --bin ledgerix` op elk Tier-1 Rust target Reverse-proxy-templates voor Caddy, Traefik en nginx zitten in [`deploy/`](../deploy/). ### Architectuurprincipes - **Loose coupling** — crates refereren elkaar alleen via string-ID's - **Storage achter trait** — SQLite is de enige backend; de Store-traits documenteren de seam voor een eventuele tweede backend zonder dat we lege placeholder-crates onderhouden - **Multi-company** — `company_id` op elk tenant-record - **Periodecontrole** — gesloten periodes blokkeren mutaties - **Migraties** — oplopend genummerde, idempotente SQL-bestanden ### De 14 crates | Crate | Verantwoordelijkheid | |-------|----------------------| | `ledgerix-core` | Types, traits, errors | | `ledgerix-relations` | Relatiebeheer | | `ledgerix-ledger` | Grootboek | | `ledgerix-journal` | Dagboeken, transacties, periodecontrole | | `ledgerix-vat` | BTW-codes, OB-aangifte, tariefhistorie | | `ledgerix-checks` | Proactieve waarschuwingen op nieuwe boekingen | | `ledgerix-reports` | Rapportage-datamodellen | | `ledgerix-xaf` | XAF 3.2 parser + writer | | `ledgerix-import-export` | Bankimport (CAMT.053, MT940, CSV) + auto-matching | | `ledgerix-storage-sqlite` | SQLite-implementatie + migraties + seeds | | `ledgerix-mailbox` | IMAP-poller voor inkomende bonnen | | `ledgerix-auth` | Wachtwoord-hashing, auth-middleware | | `ledgerix-api` | REST API-routes + middleware | | `ledgerix-web` | Binary entry point + statische bestanden | --- ## 7. Gebruiksgemak | Functie | Beschrijving | |---------|--------------| | **Globaal zoeken** | Ctrl+K — relaties, rekeningen, boekingen, command-palette | | **Sneltoetsen** | Ctrl+B (nieuwe boeking), Ctrl+D (dark mode), Esc (sluiten) | | **Dark mode** | Volledige dark-mode-ondersteuning via CSS-variabelen | | **PWA** | Installeerbaar als app, camera-bonscan op mobiel, offline-bootstrap | | **Mobiel** | Responsive tabellen, viewport-meta via PWA-bootstrap | | **Glossary-tooltips** | Jargon krijgt automatisch een uitleg-icoon (`data-help`) | | **Undo** | Undo-banner (10s) bij verwijder-acties | | **Deadline-banner** | Globale herinnering voor naderende OB-aangifte | | **Validation-advisor** | Waarschuwt bij verdachte boekingen (rekeningtype-mismatch, gesloten periode, toekomstdatum) | | **Anomalie-controle** | Uitgestelde, niet-blokkerende controle op het Aan-de-slag-scherm: boekingen die statistisch afwijken (vreemd bedrag voor die rekening, ongebruikelijke rekening+BTW-combinatie, mogelijke dubbele factuur). Per afwijking afvinkbaar | | **Suggesties** | Tegenrekening + BTW automatisch voorgesteld op basis van eerdere boekingen; uitschakelbaar | --- ## 8. Roadmap-context | Versie | Thema | |--------|-------| | v0.38.0 | UX: bedrijfsmodi, kiosk, glossary, PWA, UBL-export, rules-engine, review-flow | | v0.39.0 | UX: UI-complexiteit, quick-book, ocrix als externe OCR-service | | v0.40.0 | UX: empty-states, onboarding-tour, undo-voor-delete, KvK-API | | v0.46.x | Journaal-import (paste/CSV), validation-advisor, brugstaat-auto-proposal | | v0.48.0 | Branche-templates in de setup-wizard | | v0.49.x | Aan-de-slag-scherm, bank-staging, inline akkoord/anders/wegzetten-flow, "sinds je vorige bezoek"-recap | | v0.50.0 | Anomalie-controle: uitgestelde, niet-blokkerende lijst van afwijkende boekingen | | v0.55.x | Integraties-platform: Mollie/Stripe/Pipedrive/HubSpot/Tink/Yapily | | v0.68.0 | Goedkeuringsstromen / approvals (workflows) | | v0.69 – v0.72 | RBAC-overhaul: groepen + fijnmazige permissies per endpoint vervangen vaste rollen | | v0.73.0 | Approval-notificaties (e-mail + in-app badge) | | v0.74.0 | Migratie-eerst onboarding (`welkom.html`, meerdere XAF tegelijk) | | v0.75.0 – v0.76.0 | Backup & herstel UX-overhaul + backup-restore in scenario | | v0.77.0 | Documentatie als first-class feature (per-pagina help + community) | | v0.78.0 | Klant-portal voor accountantskantoren | | v0.79.0 – v0.79.4 | Vragen-thread per boeking, overzichten + filters, auto-mapping jaarrekening | | v0.80.0 | Systeem-monitor onder Beheer (admin-only) | | v0.80.1 – v0.80.2 | Security-fixes uit interne audit (XSS, privilege-escalation, cross-tenant delete, rate-limit gaten) | | v0.81.0 – v0.81.1 | Geld-aggregatie naar Rust `Decimal` — ~34 plekken die `SUM(CAST AS REAL)` deden zijn naar Rust verhuisd, precisie tot €10¹² geverifieerd via tests | | v0.81.2 | Performance-indexes (mailbox date-range + partial-index voor unposted transactions) | | v0.81.3 | Stub-backend crates schrappen (waren al sinds v0.44 dood) | | v0.82.0 | LxTable shared helpers + vragen.html als showcase | | v0.83.0 | Vaste activa: standalone pagina + auto-boeking jaarafschrijving (idempotent) | | v0.84.0 | KOR-modus: settings + YTD-tracker + dashboard-banner | | v0.85.0 | Bank match-regels: user-managed regels met UI + matcher-integratie + 8 unit-tests | | v0.86.0 | Peppol / NLCIUS inkomende e-facturen (MVP): UBL-parser + upload-pagina + concept-boekingvoorstel | | v0.87.0 | UX-pass: 6 a11y/usability-fixes (TR keyboard, form-wrap, submit-guard, skip-link, audit-filter persist, bank-rules link) | | v0.87.1 | i18n timing bug op 6 pages — raw keys verschenen op cold load; `onceReady()` helper toegevoegd | | v0.87.2 | Discoverability: sidebar reorganisatie (13-item-groepen → 5-7), Ctrl+K-tip, drie nieuwe optionele dashboard quick-actions | | v0.88.0 | OCR-auto-categorize: multi-tenant bug fix + confidence-banner in eenvoudig-modus | | v0.89.0 | Cloud deployment: Dockerfile + docker-compose + Caddy/Traefik/nginx/systemd configs + `docs/deployment.md` | | v0.90.0 | Licentie-infrastructuur: commercieel product, 3 tiers, offline-first (ingebakken Ed25519-pubkey), 30 dagen trial, banner-niet-blokkeren | | v0.90.6 | Licentie afgedwongen: limieten op gebruikers/administraties + capability-flags | | v0.91.0 | Per-route feature-gating (`require_feature`) — ZZP kan geen MKB-features meer gebruiken | | v0.91.7 | Pre-v1.0: integration-tests voor licentie-restricties + revocation (`licgen revoke`) + AVG-docs | | v0.92.0 | UX-ronde: recap-wijzigingen met links, anomalie-blok ingeklapt + deep-link, perioden-banners ontdubbeld, **configureerbare KPI-widget**, nav-herschikking (Boekhouding-naam, Stamgegevens-groep) | | v0.93.0 | Nav verder opgeschoond (relaties → Boekhouding, valuta → Stamgegevens, bulk-bewerken → Boekhouding, scenarios → Jaarwerk, docs → onderbalk), widget-config in popup, **goedkeuringen-widget** | | v0.93.1 – v0.93.2 | Snel-bon alleen op mobiel, `status.disabled`-vertaling, "Zoek overal"-fix (dubbele id), demo-banner ververst na licentie-activatie | | **v0.94.0** | **First-run setup-wizard i.p.v. `admin/admin` + laatste-admin-lockout-bescherming** (huidig) | | v1.0.0 | Productie-stempel na een kwartaal live gebruik | ### Geplande richtingen - **Suggestion-engine** — centrale "voorstellen-verwerken"-flow die ongeboekte items (mailbox-bonnen, bankmutaties, herhaalpatronen) als kant-en-klare voorstellen toont; gebruiker doet alleen ✅/✏️/❌ - **Template-bibliotheek** — uitbreidbaar via community-PR's; mogelijk later een marktplaats - **Multi-country** — BE/DE/FR-ondersteuning --- ## 9. Bekende aandachtspunten - De **branche-templates** (v0.48.0) wachten op inhoudelijke validatie door een accountant — zie [`docs/templates-draft.md`](templates-draft.md). De code-architectuur staat; correcties zijn JSON-edits zonder runtime-impact. - De **systeem-monitor** (v0.80) telt rij-aantallen via `SELECT COUNT(*)`. Op typische MKB-installaties verwaarloosbaar (<1ms per tabel) maar op zeer grote databases (>10M rijen) kan een refresh kort merkbaar zijn. - **LxTable** (v0.82): de gedeelde tabel-helper draait nog steeds op dezelfde vier pagina's (`vragen`, `bank-regels`, `vaste-activa`, `peppol`). De bredere migratie is sinds v0.82 niet verder opgepakt; de overige tabel-pagina's gebruiken hun eigen string-concat-patroon. Puur interne opschoning, geen runtime- of functionele impact. - **Vaste activa — KIA** (v0.94): de kleinschaligheidsinvesteringsaftrek wordt nu berekend per boekjaar (`GET …/fixed-assets/kia`), met de officiële 2026-schijven van de Belastingdienst (met bronvermelding in de UI). De schijven wijzigen jaarlijks en worden **niet** live opgehaald: voor een jaar zonder ingebakken tabel toont het systeem een duidelijke **waarschuwing** i.p.v. een mogelijk onjuist bedrag. Desinvesterings-bijtelling: kandidaten (binnen 5 jaar afgestoten) worden gedetecteerd en getoond; het exacte bijtellings-bedrag vergt het KIA-tarief van het aanschafjaar en wordt bewust aan de accountant overgelaten (geen mogelijk-foute auto-berekening). - **KOR — rubriek 5d** (v0.94): bewust opgelost als "niet auto-vullen". De moderne KOR (omzetgerelateerde vrijstelling) is een btw-vrijstelling, geen 5d-vermindering (dat was de óúde KOR). De aangifte komt netto op nul en 5d blijft leeg; dit is nu fiscaal-correct gedocumenteerd in `routes/kor.rs`. - **Bank match-regels** (v0.85 → v0.94): naast LIKE-patronen met `%`-wildcards is er nu per regel een **regex-modus** (case-insensitive, vroege validatie van het patroon). Bewust nog **niet**: splitsings-regels (één bankregel → meerdere boekingen, grote aparte wijziging) en auto-confirm (automatisch boeken zonder review — strijdig met de bewuste review-flow van bankimport; het risico van blind boeken weegt niet op tegen het gemak). - **Peppol** (v0.86 → v0.94): de parser en upload-route ondersteunen nu zowel **Invoice als CreditNote** (boek-pattern wordt bij een creditnota omgekeerd) en extraheren **ingebedde base64-bijlagen**; bij geen crediteur-match komt er een **relatie-suggestie** terug (bewust geen auto-aanmaak op de preview). Nog open: de frontend-verwerking van die nieuwe velden (creditnota-weergave, "maak relatie aan"-knop, bijlage opslaan bij de boeking) en mailbox-attachment-persistentie. **Uitgaande** Peppol-verzending blijft uit scope (vereist een access-point-provider zoals Storecove of Procemia). --- *Voor architectuur en ontwikkeldetails: [`docs/ontwikkelaars.md`](ontwikkelaars.md). Voor API-details: [`docs/api.md`](api.md). Voor beheer: [`docs/beheerdershandleiding.md`](beheerdershandleiding.md). Voor eindgebruikers: [`docs/gebruikershandleiding.md`](gebruikershandleiding.md).*