Moroccan tax
TVA, IS and auto-entrepreneur withholding
A TVA year page, IS with instalments, withholding taken at payment, and tax rates that cite their source.


RIVER ERP 27 — by MrZaKaRiA IT Solutions
RIVER ERP is a self-hosted Odoo alternative for owner-managed businesses. Quotes, invoices, stock, the till, payroll, treasury and the books run in one system. It is licensed per domain, not per seat, so hiring never raises the bill. Version 27 adds Moroccan tax, CNSS payslips, groups of companies and an AI assistant that can run on your own hardware.
CRM, invoices, stock, tills, manufacturing, payroll, treasury and a ledger, in one install.
Licensed per domain. Your second cashier and third warehouse clerk cost nothing extra.
12 cloud and 5 local, behind 47 tools. Client names are redacted before a prompt reaches a cloud model.
The licence is an Ed25519 signature checked offline. No licence server, no update check, no usage data.
Everything below ships in one install and writes to the same books.


Sales
Nine document types convert into one another, from quote to credit note. Save an invoice and the ledger entry posts itself. DGI e-invoicing sits on the same screen, not in a plugin.


Stock
A stock ledger with FIFO and weighted-average valuation, batch and serial tracking, and multi-warehouse transfers. The till, the invoice and the production order read one products table, so shelf, shop and accounts show the same figure.


Point of sale
A touch-tile retail till with sessions, cash counts and Z-reports. A restaurant mode adds a floor plan, kitchen and waiter screens, tips and loyalty. Same licence, same stock, same ledger.


Every device
RIVER ERP is an installable progressive web app. Open your domain in a current browser and install it. It opens full-screen with its own icon, and the shell loads offline. A 5 MB native launcher gives desktops a dock icon.




Payroll & HR
A payslip engine for CNSS, AMO and IR, with monthly runs, leave reconciliation and payslip PDFs. Finalising a month turns it into a payable, so payroll lands in the same books. Bring last month’s payslips and we will run them side by side.


Treasury
Cheque tracking and bank statements imported by CSV or PDF with fuzzy matching. Four payment providers sit behind one registry: Stripe Connect, PayPal, CMI and manual. A cash-flow forecast reads open invoices, due payables and recurring charges.


Manufacturing
Bills of materials and production orders with labour and overhead rolled up, plus planning, yield tracking, labels and subcontracting. A recipe costs out through its components, so your quote rests on real cost.


AI assistant
17 providers sit behind one registry: 12 cloud services and 5 that run on your own hardware (Ollama, LM Studio, llama.cpp, vLLM). 47 tools answer questions about overdue invoices, margin and stock from your own data. Names, phone numbers and tax identifiers are redacted before a prompt leaves, by default.


Logistics & freight
For importers, exporters and forwarders. A freight job carries the parties, Incoterm, route and carrier, then its legs, containers and charges. Containers are checked against ISO 6346, with demurrage and detention deadlines computed. Charges are cost against sell, and one click invoices them.


Your data
RIVER ERP keeps everything in one folder you choose: the database (SQLite by default, MariaDB or PostgreSQL if you prefer), uploads, PDFs and backups. Copy that folder and you hold a complete copy of the business. The licence is checked offline, so there is no licence server and no update check. Error reporting and analytics stay off until you switch them on.


Backups, audit trail, exits
Backups go to a local folder and, if you want them off-site, to your own S3 bucket or Dropbox, with keys you hold. An audit log records who changed what, when and from where. Everything leaves on demand: the FEC file, a journal CSV that Sage or Ciel will import, a GDPR export and the REST API. Two limits. The database file is not encrypted at rest, so disk encryption is your host’s job. Cloud AI runs only if you choose a provider and enter your own key.
Your data, compared
Checked on 6 October 2026 against each vendor’s own pages: odoo.com, sage.com/fr-ma, dolibarr.org and dolicloud.com. Self-hosting is not unique to RIVER. Odoo’s Custom plan and free Community edition allow it, Sage 100 installs on your own Windows machine, and Dolibarr is free to download. The table compares the standard offer and the vendor’s reach once it runs. Odoo’s per-user price depends on your region, so no figure is printed.
| Question | RIVER ERP | Odoo Online (Standard) | Sage 100 (Morocco) | Dolibarr / DoliCloud |
|---|---|---|---|---|
| Where the database sits in the standard offer | On your server, in one folder you choose | Odoo’s cloud; self-hosting needs the Custom plan | Your Windows machine; Azure if you buy hosted mode | Your server (free, GPL); DoliCloud’s if hosted |
| Datacentre country | Wherever you put the server, Morocco included | Nearest listed region: France/Belgium; none in Morocco | Local install: your premises; hosted: France or Europe | Self-hosted: your choice; DoliCloud: France |
| Vendor access to your data, as each vendor states it | Only the people you authorise; nothing in the build reports to us | Helpdesk and engineers: support, legal, security; audited | Processor under its DPA; Sage Network data may train Sage ML | Customer gets SSH and database access (DoliCloud) |
| How it is priced | Per domain, all 23 modules, no seat fee | Per user, per month, every user | Module by module, 12-month subscription, by user count | Free to self-host; DoliCloud 14 EUR per user per month |
| Moroccan payroll (CNSS, AMO, IR) in the price | ✓ | Payroll app in plan; CNSS declaration add-on is third-party | Separate product: Sage 100 Paie & RH, from 5,000 DH HT | Not in core; third-party modules, 125–200 EUR |
| Copy the whole database yourself, any time | Yes: one folder, plus a backup command to your S3 or Dropbox | Backups download from the database manager | Local install: yes; hosted: automatic backups by the partner | Yes: SSH, SFTP, rsync and database access |
New in version 27
Version 27.0.1 shipped on 17 September 2026. Every item is in the released build.
Moroccan tax
A TVA year page, IS with instalments, withholding taken at payment, and tax rates that cite their source.
Payroll
A Moroccan payslip engine. Finalising a month turns it into a payable.
Accounting
Double-entry on the Moroccan chart of accounts. Entries are refused rather than half-written, and closed periods are enforced.
Groups
Contacts shared inside a group, an all-companies dashboard, and the issuing company chosen per quote.
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, stock, invoice history and quotes.








What is inside
Ten modules are enabled on a fresh install, and the rest are switched on when you need them. The switch controls navigation, not access. It tidies the menu and is not yet a security boundary.
Documents
Nine document types, from quote and purchase order to delivery note, invoice and credit note. Any type converts into any other, with lineage kept.
Accounting
Balanced entries post to the Moroccan chart of accounts on save, payment, expense approval and payroll. Trial balance, P&L, balance sheet and FEC export are included.
Point of sale
A touch-tile till with sessions, cash counts, Z-reports and returns. The restaurant side adds a floor plan, kitchen and waiter screens, tips and loyalty.
Inventory
FIFO and weighted-average valuation, batch and serial tracking, reorder points, purchase-order suggestions and a barcode scan page.
Logistics
Freight jobs with legs, ISO 6346 containers and demurrage deadlines. Also goods receipts with landed cost, pick lists, carrier labels, fleet and customs declarations.
Manufacturing
Production orders with labour and overhead rolled up, planning, yield tracking and labels.
People
Monthly payroll runs, leave reconciliation, payslip PDFs, expense reports with AI receipt extraction, and a timeclock kiosk.
Money
Four payment providers behind one registry, cheque tracking, bank reconciliation by CSV or PDF import, a cash-flow forecast and multi-currency.
Recurring revenue
Plans with trial days, daily idempotent billing, dunning, MRR and ARR, churn, cohort retention and proration.
Reporting
A draggable KPI canvas, anomaly tiles that flag an expense at twice its rolling average, gross margin, runway and burn.
Clients & work
Clients, suppliers and leads shared across a group, with projects, tasks on a kanban and one shared calendar.
Automation
35 triggers and 14 actions with a dry run, 1,450 documented API routes, signed webhooks and an AI assistant on 17 providers.
Foundations
Access control, auditability and an open interface decide whether you can still run a system in year five. Each card says what is enforced today and what is only planned.
Roles run from owner at rank 100 to cashier at rank 15, with permission-gated fields, so a cashier does not see cost price. TOTP two-factor is enforced for admin and owner accounts. Policy classes cover 7 of roughly 165 company-scoped models; the rest use rank checks.
Every change is recorded: who, when, from which address, with the diff. GDPR export and erasure endpoints ship alongside. Tamper-evident hash chaining is planned, not shipped, so treat the log as evidence, not a sealed record.
1,450 API routes, an OpenAPI 3.1 specification at /api-docs, and scoped tokens you mint yourself. Webhooks are signed HMAC-SHA256 with replay protection. There is no frozen /api/v1 contract yet, so an upgrade can move the surface.
35 triggers, 14 actions and 8 one-click templates. A dry-run test-fire previews a rule before it emails a client.
French and English are complete, and Arabic is about 88% done, laid out left-to-right. Seven more languages are about a third translated. Amounts convert to a declared base currency.
RIVER ERP installs as a progressive web app from the same URL on every platform. A native Tauri launcher of roughly 5 MB, MIT-licensed and at version 0.1.0, opens your instance from the dock. The Capacitor mobile wrappers are source projects, not store listings.
Definition
RIVER ERP is a self-hosted ERP system for owner-managed businesses. It covers CRM, sales and purchase documents, inventory, manufacturing, point of sale, payroll, treasury and a double-entry ledger, on your own server, licensed per domain instead of per user.
It is one application, not a suite of bolted-together tools. One products table and one contacts table serve the shop floor, the warehouse and the ledger. Technically it is Laravel 13 on PHP 8.3 with a Vue 3 front end, on MariaDB or PostgreSQL.
It is built and sold by MrZaKaRiA IT Solutions as a domain-locked build: one signed release for one customer domain, for a lifetime term or a set number of months. RIVER is also the back office behind RAIN Store and ERPStore. For a system built from scratch, see custom ERP development, or send the details in writing.
What protects you
The commercial model is the risk reversal. No seat meter that grows with hiring, no commission on revenue, no vendor cloud holding your records. The limits come in the next sections.
Next step
Tell us what you run today: the accounting package, the till, the payroll service, the spreadsheets. You get a straight answer on which parts RIVER ERP replaces well, which adequately, and which you should keep.
Honest comparison
Odoo is the mainstream comparison. The patchwork of an accounting package such as Sage 100, a separate till and a payroll service is what most owner-managed businesses run. Where a cell names a plan, that is where Odoo sells it. Larger businesses will also weigh SAP Business One, which brings a partner network RIVER does not have. Three rows go against us outright. Checked against the vendors’ own pages on 6 October 2026.
| Capability | RIVER ERP | Odoo (SaaS or self-hosted) | Accounting package + POS + payroll |
|---|---|---|---|
| POS, stock, payroll and a double-entry ledger in one system | ✓ | Enterprise only | — |
| Runs on your own server, on a database you control | ✓ | Community or Custom plan | Partial |
| Licensed per domain, not per user seat | ✓ | — | — |
| Moroccan payroll (CNSS, AMO, IR) in the base licence | ✓ | Enterprise only | Separate product |
| DGI e-invoicing (UBL 2.1) in the base licence | ✓ | Third-party add-on | — |
| AI assistant that can run on local models | ✓ | Partial | — |
| Restaurant floor plan and kitchen screens | ✓ | ✓ | — |
| Freight jobs with ISO 6346 containers and demurrage clocks | ✓ | Partial | — |
| Documented REST API and signed webhooks | ✓ | Custom plan | Partial |
| One install on macOS, Windows, Linux, iOS, Android and ChromeOS | ✓ | ✓ | Partial |
| Published price list you can check without talking to anyone | — | ✓ | Partial |
| Implementation partners in most cities | — | ✓ | ✓ |
| Years of production track record across many deployments | — | ✓ | ✓ |
Delivery
Six steps, in order, run by MrZaKaRiA IT Solutions. The awkward one, loading your history, is named out loud.
We go through what you run today and decide which modules go live. Ten are enabled on a fresh install. We also tell you which parts RIVER should not replace.
Your domain and term are signed into the build with an Ed25519 key: a lifetime or a set number of months, with a wildcard if subdomains need covering.
One command produces a self-contained distribution, deployed to your server behind TLS you terminate. Server, backups, MariaDB and Redis are yours to run or to hire out.
Your chart of accounts is mapped, the VAT rate set, roles assigned, two-factor enforced for owners and admins, and payment providers connected.
Contacts, products, stock counts, open documents and opening balances load through CSV and the API, scoped by hand. Dolibarr data imports directly. From QuickBooks, Sage or Odoo there is no one-click importer.
Each role is trained on its own screens: the cashier on the till, the controller on the ledger. Support terms are agreed in writing, because there is no published SLA.
The catch, in our words
Measured, and dated
Counted in the release tree on 2 October 2026: 241 models, 243 API controllers, 172 page components, 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, with a clean production build.
In August our tests ran on SQLite while production runs MariaDB, and that gap had hidden seven MariaDB-only breakages. The suite now runs on both engines. A speed pass in version 27 cut the app shell from 286 KB to 216 KB compressed and the notification poll from 288 ms to 27 ms.
Green tests show the logic holds on the engines we test. They are not a production track record.
Typical set-ups
These are typical set-ups built from what the software does. They are not customer stories, quotes or results.
Typical set-up: retail and wholesale
A company selling over a counter and invoicing trade customers often runs two systems. In RIVER both sit on one products table.
Problem
The same sale is re-keyed into the till, the invoicing tool and the accounting package.
Solution
One install runs the retail till, multi-warehouse stock and the quote-to-invoice chain, all posting into one ledger.
Outcome
Typical set-up: Moroccan SMB facing DGI
The announced DGI clearance model forces a choice: move the books to a foreign cloud, or run a compliant system on your own infrastructure.
Problem
Options tend to be narrow e-invoicing add-ons, or foreign SaaS that takes custody of the books.
Solution
Invoices are built as UBL 2.1 and signed with the company’s own certificate. Rejected submissions land in a queue for re-send.
Outcome
Typical set-up: multi-site restaurant operator
Restaurant groups often run a till, a rota tool, a payroll service and a stock sheet that agree only at month end.
Problem
Service data lives in the till, hours in a spreadsheet, and payroll is re-keyed from both.
Solution
Floor plan and kitchen screens, bills of materials that cost a recipe, and payroll that posts to the ledger, with a timeclock kiosk feeding the hours.
Outcome
Clients
Clients
Real clients, on the work they ran with us. These are not reviews of RIVER ERP.
FAQ
Short, specific answers. Where the answer is unflattering, it is still the answer.
RIVER ERP is a self-hosted ERP system for owner-managed businesses. It covers CRM, quotes and invoices, multi-warehouse stock, manufacturing, retail and restaurant point of sale, payroll, treasury and a double-entry ledger. It is one Laravel 13 and Vue 3 application with 23 modules, ten of them on by default. MrZaKaRiA IT Solutions licenses it per domain.
RIVER ERP is an Odoo alternative that trades ecosystem for ownership. Both self-host, and both cover POS, stock and accounting. RIVER is licensed per domain, so the eighth user costs nothing, while Odoo bills every user every month. Moroccan payroll and DGI e-invoicing are in RIVER’s licence. In Odoo, Payroll is Enterprise-only and the Moroccan modules on its store are third-party and paid. Odoo has a published price list, partners in most cities and years of track record. RIVER has none of those. Checked against odoo.com on 6 October 2026.
Yes, as a built pipeline. RIVER builds invoices as UBL 2.1, signs them with XMLDSig using your own company certificate, and submits them through a clearance client. Failed submissions land in a fallback queue for re-send. No accreditation is claimed, so clearance is proved in your own DGI account before go-live.
You do. The database is a file in a folder on hardware you control, and nothing in the product gives MrZaKaRiA IT Solutions a way in. The licence is checked offline, so nothing reports home. Exports are built in: the books, an FEC file, a journal CSV, GDPR export and the audit log. The file is not encrypted at rest, so disk encryption is your host’s job.
It is licensed per domain, not rented per seat. A build is signed to your domain for a lifetime term or a fixed number of months agreed before it ships. There is no per-seat metering, no commission on your sales and no hosting fee to us. There is no public price list, because scope drives the number. You get a scoped quote from the call.
We will not call it production ready in general terms. Our own audit on 25 August 2026 answered with an explicit not yet: five critical tenant-isolation and authentication defects were found and fixed in one session that reviewed roughly a tenth of the endpoints. The newest code, freight and the performance pass, has the least production time behind it. Fit is answered per deployment, on the call.
Start here
A walkthrough is a working session: your chart of accounts, document flow, till and payroll, and a straight answer on what RIVER ERP should and should not replace. If it is the wrong fit this year, you will hear that on the call.