Moroccan tax
TVA, IS and auto-entrepreneur withholding
A TVA year page, IS with its instalments, withholding taken at payment with monthly declarations and the annual statement, and tax rates that carry their date and cite their source.
RIVER ERP 27 — by MrZaKaRiA IT Solutions
RIVER ERP runs the whole back office of an owner-managed business on its own server: CRM, quotes and invoices, multi-warehouse stock, manufacturing, retail and restaurant point of sale, payroll, treasury and a double-entry ledger on the Moroccan chart of accounts. Version 27 adds the Moroccan tax stack — TVA, IS, auto-entrepreneur withholding and CNSS/AMO/IR payslips — groups of companies, field maintenance, and an AI assistant that never shows your clients' names to a cloud model. Built by MrZaKaRiA IT Solutions and licensed to your domain, not metered per seat.
CRM, retail and restaurant POS, stock, manufacturing, payroll, maintenance and a double-entry ledger in one install. Ten are enabled on a fresh install.
The interface runs on a documented REST API, with an OpenAPI 3.1 specification served in-app at /api-docs.
12 cloud services and 5 that run on your own hardware, behind 47 tools. Cloud models never see a client's name or tax ID.
Licensed per domain by MrZaKaRiA IT Solutions. Hiring a second cashier does not change what you pay.
Definition
RIVER ERP is a self-hosted enterprise resource planning system that runs the back office of an owner-managed business, covering CRM, sales and purchase documents, inventory, manufacturing, point of sale, payroll, treasury and a double-entry general ledger, on the company's own server, licensed per domain instead of rented per user.
It is one application rather than a suite of bolted-together tools. A single products table and a single contacts table serve the shop floor, the warehouse, the storefront and the ledger, and every stock movement links back to the document that caused it. Technically it is Laravel 13 on PHP 8.3 with a Vue 3 single-page front end, running on MariaDB or PostgreSQL, in a browser, as a progressive web app, or through a native desktop launcher of roughly 5 MB.
It is built and sold by MrZaKaRiA IT Solutions as a domain-locked build: one signed release, bound to one customer domain, for a lifetime term or a set number of months. RIVER is also the back office behind our two commerce products, RAIN Store and ERPStore, where signed inbound webhooks turn a storefront order into a draft invoice, mark a delivery note delivered and update the contact. If a call is not your style, send the details in writing instead.
New in version 27
Version 27.0.1 shipped on 17 September 2026. These are the parts a Moroccan business notices first; every one is in the released build, not on a roadmap.
Moroccan tax
A TVA year page, IS with its instalments, withholding taken at payment with monthly declarations and the annual statement, and tax rates that carry their date and cite their source.
Payroll
A Moroccan payslip engine. Finalising a month turns it into a payable, so payroll lands in the same books as everything else.
Accounting
Double-entry on the Moroccan chart of accounts. Entries are refused rather than half-written, closed periods are enforced on every path, and year-end closing is built in.
Groups
Contacts shared inside a group of companies, an all-companies dashboard, the issuing company chosen per quote, and staff assignable across companies.
Field work
Contracts with visit plans, signed visit sheets, and crews working a board from backlog to done.
Coming from Dolibarr
Importers for Dolibarr contacts, products and stock, customer and supplier invoice history, and quotes.
What is inside
Ten modules are enabled on a fresh install and the rest are switched on when the business needs them. Be clear on what that switch is today: it controls navigation, not access. It tidies the menu. It is not yet a security boundary, and we would rather say that here than let you discover it later.
Documents
Nine document types, from quote and purchase order through delivery note, invoice and credit note to request for quotation, goods-received note, supplier invoice and proposal. Any type converts into any other with lineage kept, numbering is gap-aware per type, and share links carry a token, password, expiry and QR code.
Accounting
Balanced journal entries post to the Moroccan chart of accounts on document save, on payment, on expense approval and on payroll finalisation. Period close locks entries at a cutoff date. Trial balance, profit and loss, balance sheet, cash flow and an FEC export file are included.
Point of sale
A touch-tile till with sessions, opening and closing cash counts, variance, Z-reports, returns and multi-payment tickets. The restaurant side adds a floor plan, reservations, kitchen and waiter screens, online orders, a public queue, tips, loyalty and gift cards.
Inventory
A stock movement ledger with FIFO and weighted-average valuation, batch and serial tracking with expiry, reorder points, a restock radar, automatic purchase-order suggestions, three-way match, and a scan page that takes a camera or a USB barcode reader.
Manufacturing
Production orders with labour and overhead cost rolled up, production planning, yield tracking and labels. It is how the question of what a product actually earned gets an answer inside the system instead of in a spreadsheet.
People
Monthly payroll runs with gross, net and charges, leave reconciliation, payslip PDFs and a lock on finalisation. Absences run on a business-day calendar. Expense reports take receipt extraction by AI, and material checkouts and a timeclock kiosk sit alongside.
Money
Four payment providers behind one registry: Stripe Connect, PayPal, CMI and manual. Cheque lifecycle tracking with a printing studio, bank reconciliation by CSV or PDF statement import with fuzzy matching, a cash-flow forecast, a due-date board and multi-currency with a declared base currency.
Recurring revenue
Plans with price before tax, VAT, period and trial days. Daily recurring billing that is idempotent per subscription and period, dunning with automatic past-due, MRR and ARR, churn rate, cohort retention and proration when a plan changes.
Reporting
A draggable KPI widget canvas with period-aware widgets, anomaly tiles that flag an expense at twice its rolling average or a single client above 30% of year-to-date revenue, gross margin, runway and burn, revenue minus cost of goods per product, and a read-only investor link.
Where RIVER is different
Most of what an ERP does is table stakes, and the comparison further down gives Odoo and the accounting-package patchwork credit where they earn it. Three capabilities are genuinely unusual in one licence at this size of business, so they get their own space here: an AI assistant that can run entirely on your own hardware, e-invoicing built into the system that raises the invoice, and a restaurant and retail till sharing the stock and the ledger.
Each one is described with its limits attached. Where a piece is planned rather than shipped, it says so in the same list.


AI assistant
Most business software ships an AI feature that quietly sends your ledger to somebody else's servers. RIVER lets you choose the engine, including engines that never leave your building.
E-invoicing
The e-invoicing pipeline is not a plugin bolted onto an invoice list. It is built into the same system that runs the till, the stock and the ledger.
Point of sale
A shop in front and a wholesale or production business behind usually means two systems and a monthly reconciliation by hand. Here it is one install, one products table, one contacts table.
Foundations
Access control, auditability and an open interface are what separate a system you can still run in year five from one you have to escape. Each card names what is enforced today and what is still a plan.
A role catalog running from owner at rank 100 down to cashier at rank 15, with router-confined roles and permission-gated fields, so a cashier does not see cost price. TOTP two-factor is enforced for admin and owner accounts. Policy classes currently cover 7 of roughly 165 company-scoped models; the rest fall back to rank checks.
An observer records who changed what, when, from which address and user agent, with the diff. GDPR export and erasure endpoints ship alongside it. Hash-chained tamper-evident rows and archive-to-cold-storage retention are planned, not shipped, so treat the log as evidence rather than as a sealed record.
1,450 API route declarations, an OpenAPI 3.1 specification at /api-docs, and scoped access tokens you mint and revoke yourself. Outbound webhooks are signed HMAC-SHA256 with replay protection and a circuit breaker. There is no frozen /api/v1 contract yet, so an upgrade can move the surface under an integration.
35 triggers across 9 categories, 14 actions across 4 categories, 8 one-click templates and variable interpolation into any action parameter. A dry-run test-fire previews a rule before it ever emails a client, and the last 30 runs stay on screen with every run recorded.
French and English are complete and Arabic is about 88% done, laid out left-to-right on purpose with Latin or Eastern Arabic digits. Seven more languages are about a third translated and fall back to French. There is a per-user language choice, a six-palette theme picker, and multi-currency amounts converting to a declared base currency. Sales copy on this site stays in English; the product itself does not.
The same install runs in a browser, installs as a progressive web app, and opens in a native Tauri launcher built for six targets across macOS, Windows and Linux at roughly 5 MB. That launcher is at version 0.1.0 and MIT-licensed. There are no app-store mobile apps: those projects are scaffolds.
Delivery
Six steps, in order, run by MrZaKaRiA IT Solutions. No step is a surprise, and the awkward one, loading your history, is named out loud rather than hidden in a footnote.
We go through what you run today and decide which modules go live. Ten are enabled on a fresh install; the rest wait until they earn their place. This is also where we tell you which parts of your stack RIVER should not replace.
Your domain and term are agreed and signed into the build with an Ed25519 key: a lifetime term or a fixed number of months, with a wildcard if your subdomains need covering. The build fails rather than shipping unbound to a domain.
A single command produces a self-contained distribution of API, public assets and database, deployed to your server behind TLS you terminate. Later upgrades ship with one remote command. Server, backups, MariaDB and Redis are yours to run or to hire someone to run.
Your chart of accounts is mapped, the default VAT rate is set in one place, roles are assigned across the 12 tiers, two-factor is enforced for owner and admin accounts, and payment providers are connected.
Contacts, products, stock counts, open documents and opening balances, loaded through CSV and the documented API. This part is manual and scoped by hand. Coming from Dolibarr, contacts, products, stock, invoice history and quotes import directly. From QuickBooks, Sage, Odoo or a legacy till there is no one-click importer, and we will not pretend otherwise.
Each role is trained on its own screens: the cashier on the till, the controller on the ledger, the owner on the dashboard. Support terms are agreed in writing per deployment, because there is no published SLA today.
Measured, and dated
Counted in the release tree on 2 October 2026: 241 models, 243 API controllers, 172 page components, 75 service domains, 358 database migrations and 1,450 API route declarations. The latest runs report 5,608 PHP tests passing on both SQLite and MariaDB, and 3,039 front-end tests across 387 files, with a clean production build.
In August the honest caveat was that our test runs used SQLite while production runs MariaDB, and that gap had already hidden seven MariaDB-only breakages. The suite now runs on both engines. A measured speed pass in version 27 cut the app shell from 286 KB to 216 KB compressed, took a 40-line invoice from 639 database round-trips to about 470 in one transaction, and brought the notification poll from 288 ms to 27 ms.
Green tests mean the logic holds on the engines we test. They are not a production track record, and we do not present them as one.
Next step
Tell us what you run today: the accounting package, the till, the payroll service, the folder of spreadsheets. You will get a straight answer on which parts RIVER ERP replaces well, which parts it replaces adequately, and which parts you should keep exactly where they are.
Honest comparison
Odoo is the mainstream self-hosted comparison, and the patchwork is what most owner-managed businesses actually run. Larger SMBs will also weigh SAP Business One, which brings a partner network, a certification trail and a track record RIVER does not have. Four rows below go against us outright and a fifth is work we have built but not released. Those are the rows to read first if you are comparing seriously.
| Capability | RIVER ERP | Odoo (SaaS or self-hosted) | Accounting package + POS + payroll |
|---|---|---|---|
| POS, stock, payroll and a double-entry ledger in one system | ✓ | ✓ | — |
| Runs on your own server, on a database you control | ✓ | ✓ | — |
| Licensed per domain rather than metered per user seat | ✓ | — | — |
| Morocco DGI e-invoicing built into the same product | ✓ | Partial | — |
| AI assistant that can run entirely on local models | ✓ | Partial | — |
| Restaurant floor plan and kitchen screens included | ✓ | ✓ | — |
| Freight jobs: containers, legs, milestones, charges to invoice | Not yet released | Partial | — |
| Documented REST API and signed outbound webhooks | ✓ | ✓ | Partial |
| Published price list you can check without talking to anyone | — | ✓ | ✓ |
| Implementation partners in most cities | — | ✓ | ✓ |
| Native mobile apps in the app stores | — | ✓ | ✓ |
| Years of production track record across many deployments | — | ✓ | ✓ |
What protects you
The commercial model is the risk reversal. No seat meter that grows with hiring, no commission on your revenue, no vendor cloud holding your records. The limits of that protection are in the next section, not hidden from it.
The catch, in our words
Illustrative scenarios
These are illustrative deployment scenarios assembled from what the software does. They are not customer stories. No client is named, quoted or attributed anywhere on this page, and nothing below is presented as a result a real business achieved.
Illustrative scenario: multi-activity SMB
A company selling over a counter and also invoicing trade customers usually runs two systems and reconciles them by hand. In RIVER both sit on one products table and one contacts table.
Problem
The same sale is re-keyed into the till, the invoicing tool and the accounting package. Stock figures disagree between the shop floor and the warehouse, and nobody can say what a product actually earned without exporting to a spreadsheet.
Solution
One install runs the retail till with sessions and cash-count variance, multi-warehouse stock with FIFO or weighted-average valuation, and the document chain from quote to delivery note to invoice, all posting into the same double-entry ledger.
Outcome
Illustrative scenario: Moroccan SMB facing DGI
The 2026 mandate forces a decision: move the books to a foreign cloud, or run a compliant system on infrastructure you control. This scenario takes the second path.
Problem
The available options tend to be narrow e-invoicing add-ons that do not run the business, or foreign SaaS that takes custody of the books. Neither suits a company that wants its data on its own server.
Solution
Invoices are built as UBL 2.1, signed with XMLDSig using the company's own certificate and submitted through the clearance client, while journal entries post to the Moroccan chart of accounts on save. Failed submissions land in a fallback queue with an admin page for inspection and re-send.
Outcome
Illustrative scenario: multi-site restaurant operator
Restaurant groups usually run a till, a rota tool, a payroll service and a stock sheet that agree with each other only at the end of the month, if then.
Problem
Service data lives in the till, hours live in a spreadsheet, prep and waste live nowhere, and payroll is re-keyed from all three. Nobody can price a dish against what it actually costs to make.
Solution
The restaurant side runs floor plan, kitchen and waiter screens, tips, loyalty and gift cards. Bills of materials cost a recipe from its ingredients. Payroll runs monthly with gross, net and charges, leave reconciliation and a payslip PDF locked on finalisation, with a timeclock kiosk feeding the hours.
Outcome
Clients
Named clients, on the engagements they actually ran with us — build, ERP and hosting work rather than reviews of this specific product.
FAQ
Short, specific answers. Where the answer is unflattering, it is still the answer.
RIVER ERP is a self-hosted ERP system that runs the back office of an owner-managed business: CRM, quotes and invoices, multi-warehouse stock, manufacturing, retail and restaurant point of sale, payroll, treasury and a double-entry general ledger. It is one Laravel 13 and Vue 3 application carrying 23 modules, ten of them enabled on a fresh install. It is built by MrZaKaRiA IT Solutions and licensed to a single customer domain rather than rented per user seat.
RIVER ERP builds invoices as UBL 2.1 with a CII alternate, signs them with XMLDSig using your own company certificate, and submits them through a two-step clear-then-email clearance client with async status refresh. Failed submissions land in an out-of-band fallback queue with an admin page to inspect the error and re-submit. The pipeline sits in the same system as the till and the ledger. No tax-authority accreditation is claimed: clearance is proved in your own DGI account before go-live.
RIVER ERP trades ecosystem for ownership. Both self-host, and both cover POS, stock and accounting. RIVER is licensed per domain rather than per user seat, ships Morocco DGI e-invoicing in the base product, and can run its AI assistant on local models. Odoo has a published price list, implementation partners in most cities, app-store mobile apps and years of production track record. RIVER has none of those four, and no one-click importer from Odoo, Sage or QuickBooks, although Dolibarr data imports directly. SAP Business One brings a partner network and certifications RIVER also lacks.
RIVER ERP runs on your own server: Laravel 13 on PHP 8.3, MariaDB or PostgreSQL, Redis for queues, behind TLS you terminate yourself. The same install works in a browser, installs as a progressive web app, and opens in a roughly 5 MB native desktop launcher built for six targets across macOS, Windows and Linux. There are no app-store mobile apps today, because those projects are still scaffolds. The server, the backups and HTTPS are the operator's responsibility, not a vendor's.
RIVER ERP keeps the database on hardware you control, so the records are yours and no vendor cloud sits in the request path. Exports are built in: trial balance, profit and loss, balance sheet, cash flow and an FEC file, plus GDPR export and erasure endpoints. Two honest exceptions. If you point the AI assistant at a cloud provider, prompts go to that provider. Off-site backups go to the Dropbox or S3 destination you configure.
RIVER ERP exposes 1,450 API route declarations with an OpenAPI 3.1 specification served in-app at /api-docs, plus scoped access tokens you mint and revoke yourself. Outbound webhooks are signed HMAC-SHA256 with replay protection and a circuit breaker, and a websocket server drives cross-tab sync and live dashboards. The contract is not versioned yet: there is no frozen /api/v1, so plan on adjusting an integration when the build is upgraded.
RIVER ERP is licensed per domain, not rented per seat. A build is signed with an Ed25519 key binding one release to your domain, or to a wildcard covering your subdomains, for either a lifetime term or a fixed number of months agreed before the build ships. There is no per-seat metering, no commission on your sales and no hosting fee to us. No public price list exists, because scope drives the number, so a scoped quote comes from the call.
RIVER ERP is not something MrZaKaRiA IT Solutions will call production ready in general terms. Its own audit on 25 August 2026 answered that question with an explicit not yet: five critical tenant-isolation and authentication defects were found and fixed in one session that had reviewed roughly a tenth of the endpoint surface. The newest work, freight forwarding and the performance pass included, sits on an unmerged branch 71 commits ahead of main. Whether it fits your scope is a per-deployment answer, given honestly on the call.
Start here
A walkthrough is a working session, not a slide deck: your chart of accounts, your document flow, your till, your payroll, and a straight answer on what RIVER ERP should and should not replace. If it is the wrong fit for you this year, you will hear that on the call rather than after the invoice.