Administration

System configuration screens: users and roles, company settings, ZATCA onboarding, document counters, print designer, and the approval workflow.

Users

Route: User menu › Users/admin/users

Users
User list
New user
New user

Purpose: create and maintain employee accounts. Each user gets a login identity, an interface language, default branch/warehouse, and one or more roles that define exactly what they may see and do. Use it whenever an employee joins, changes duties, or leaves.

The list

Columns: avatar, username, email, roles. Row actions:

  • Edit (pencil): opens the full-page editor.
  • Lock / Unlock (padlock): immediately blocks or restores login without deleting the account. The company's protected super admin can never be locked (the button is hidden and the server refuses it).

Field reference (user editor)

FieldMeaning / rules
UsernameCreation only. Type just the short name (letters, digits and . _ -, no @). The system appends your company tail automatically, producing the login email name@companycode.com. Shown read-only when editing.
First / Last nameDisplay name shown in lists, notes and approvals.
EmailContact address (for password resets and notifications). If left empty on creation, the generated login address is used.
Phone numberOptional contact number.
LanguageThe user's preferred interface language: Arabic, English or Indonesian. See "Language propagation" below.
SalesmanLinks the account to a salesman card — his sales documents default to that salesman.
Default warehouse / Default branchPre-selected on every new document the user creates (they can still change it if their role allows).
Default POS stationAppears only when Restaurant POS stations exist — the cashier's station.
Initial passwordCreation only, minimum 10 characters. Later changes go through Reset password / the user's own profile.
RolesMulti-select — the user's permissions are the union of all selected roles.
ActiveEdit only. Untick to disable the account without deleting it.
AvatarAlways the last field. The picture uploads after the record saves.

Worked example — create a user

  1. User menu › Users › Create.
  2. Username: m.ali — the hint shows the final login: m.ali@yourcode.com.
  3. Fill first/last name; pick Language = English if the employee prefers English.
  4. Choose the default branch and warehouse he works in.
  5. Enter an initial password of at least 10 characters and tell it to him privately.
  6. Tick his role(s), e.g. "Storekeeper", then Save (or Save & New to add the next employee).

Language preference propagation

The app ships in three languages: Arabic (RTL), English and Indonesian. Two mechanisms cooperate:

  • User preference (this screen): the Language field is stored on the account. At every login the interface switches to that language automatically.
  • Top-bar language dropdown (ع / EN / ID): any user can switch on the fly; the choice is remembered in that browser until the next login re-applies the account preference. Switching to Arabic also flips the whole layout to right-to-left.
💡 Tip: user data (item names, account names…) is bilingual by data entry, but the menus, buttons and messages follow the interface language.

Troubleshooting

SymptomCause / fix
User cannot log inCheck the account is Active and not Locked; verify he is typing the full generated address name@companycode.com.
User can't see a whole moduleEither his role lacks the module in Level 1 of the role editor, or the company's subscription doesn't include that module (host: Tenants › Subscription).
User sees a screen but buttons are missingLevel-2 grants: he has View but not Create/Edit/Post etc. — adjust the role.
Wrong language after loginThe account's Language field wins at login — change it here.

FAQ

  • Can I delete a user? No — lock or deactivate instead, so his document history stays attributed.
  • Can one user have several roles? Yes; permissions accumulate (union).
  • Why can't I lock a certain user? That is the protected company super admin — it can never be locked out.
  • Does changing a role take effect immediately? On the user's next login / token refresh.

Roles (permissions)

Route: User menu › Roles / Permissions/admin/roles

Roles
Role list

Purpose: a role is a named permission bundle (Accountant, Storekeeper, Cashier…) assigned to users. The editor has a name, a description, and three permission levels shown as tabs:

LevelTabWhat it controls
1ModulesWhich whole modules the role may enter at all. A disabled module is blocked entirely, regardless of any screen grants below it.
2Screens & ReportsThe permission matrix: per-screen action grants, and per-report view grants.
3DataData-level restrictions applied on top of screen permissions.

Level 1 — Modules

One card per sidebar module: Administration, Accounting, Inventory, Sales, Purchasing, Imports, Assets, Restaurants, Land, Agriculture, Fleet, Reports. Ticking a card grants entry to that module.

ℹ️ Note: Inventory, Sales and Purchasing form one commercial module — enabling any of the three enables all of them.

Level 2 — the permission matrix

Rows are screens, grouped under the same headings you see in the sidebar (click a group header to fold it). Reports appear as their own rows with their registry names. Columns are the six actions — a checkbox exists only where the screen actually supports the action, and each row has an "all" checkbox:

ActionGrants
ViewOpen the screen / see the list. Without it the screen disappears from the sidebar.
CreateAdd new records / documents.
EditModify existing records.
DeleteRemove records (drafts; posted documents must be unposted first).
PostPost the document — generates its journal entry and locks it.
UnpostReverse a posting to allow correction. Grant sparingly.

Level 3 — data scopes

ScopeEffect
Journal entries: own onlyThe user sees only journal entries he created himself.
Allowed cost centersRestrict to the selected cost centers. Empty = all (unrestricted).
Allowed branchesRestrict documents/data to the selected branches. Empty = all.
Allowed warehousesRestrict stock documents and balances to the selected warehouses. Empty = all.
⚠️ Note: an empty multi-select means "no restriction". To confine a user, you must select the allowed items explicitly.

Worked example — a "Storekeeper" limited to 2 warehouses

  1. User menu › Roles › Create. Name: Storekeeper.
  2. Tab Level 1: Modules — tick Inventory only (Sales/Purchasing come with it as one commercial module; leave Accounting, Administration etc. off).
  3. Tab Level 2: Screens & Reports — under Inventory grant: Items (View), Goods receipts (View/Create/Post), Stock adjustments (View/Create), Inventory transfers (View/Create/Post). Leave Delete and Unpost unticked.
  4. Tab Level 3: Data — in Allowed warehouses pick exactly the two warehouses, e.g. "01 - Main warehouse" and "03 - Spare parts".
  5. Save. Open Users, edit the storekeeper's account, tick the new role.
  6. Result: after his next login he sees only the Inventory module, only the granted screens/actions, and every list, lookup and document is filtered to those two warehouses.

FAQ

  • Screen grants are ticked but the user still sees nothing? The module itself is off in Level 1 — Level 1 always wins.
  • Do scopes affect reports? Yes — data restrictions apply on top of everything the role opens.
  • Best practice? Build functional roles (Accountant, Salesman…) instead of one per employee — change the role once and it applies to everyone holding it.
  • Who can approve documents? That is configured per document type in the Approvals screen (below), by pointing an approval rule at a role.

Settings

Route: User menu › Settings/settings

Settings
Company settings (tabbed)

Purpose: company-wide configuration, organized in five tabs:

TabKey settings
Company profileCompany code (read-only), default currency, Arabic/English names, legal name, VAT registration number, city. Saving refreshes the top-bar company block and report letterheads instantly.
AccountsThe automatic posting accounts — the foundation of every automatic journal entry (full list below).
EmailOutgoing SMTP used for password resets and notification emails in your company's name.
Sales & e-invoicingDefault VAT rate — the rate every new item starts at; changing it does not touch existing items and the rate stays editable per item, so set it to zero for a company that is not VAT-registered. Item numbering — "Sequential" hands a new item its next number and locks the box, "Manual" leaves the box for you to type your own code (letters and digits); either way a duplicate code is rejected and the code is fixed once saved. Plus "Auto-send invoices to ZATCA on posting" — when on, a sales invoice is signed and reported the moment it is posted.
RestaurantPOS receipt footer text, default kitchen printer, kitchen warehouse (ingredient depletion), dine-in service charge %.

The Accounts tab — every link and what it drives

Each field is a searchable chart-of-accounts picker (posting accounts; the two "parent" fields list group accounts). Grouped in four sections:

SectionAccount linkDrives
SalesSales revenue accountCredit side of every sales invoice.
Accounts receivable (control)Customer debt posted on credit invoices and settled by receipts.
VAT outputVAT collected on sales.
Cost of goods soldCOGS entry generated with each sales invoice.
Purchasing & inventoryAccounts payable (control)Supplier debt from purchase invoices.
VAT inputDeductible VAT on purchases.
Inventory accountStock value from receipts/issues.
Inventory adjustmentsCounterpart of stock adjustment documents.
Import cost accrualLanded-cost accrual in the Imports module.
Treasury, banks & chequesDefault cash boxCash side of cash invoices and vouchers.
Default bank accountBank side of transfers and card payments.
Cash boxes parent accountThe tree node new cash boxes are created under.
Banks parent accountThe tree node new bank accounts are created under.
Notes receivable (incoming cheques)Post-dated cheques received.
Notes payable (issued cheques)Post-dated cheques issued.
FX difference accountGains/losses when settling foreign-currency documents.
Business modulesVehicle & trip expensesFleet expense postings.
Trips (freight) revenueFleet trip revenue.
Crops work-in-progressAgriculture season costs accumulate here.
Harvest inventoryHarvested produce entering stock.
Land projects work-in-progressLand reclamation project costs.
Restaurant sales revenuePOS order revenue.
Service charge (restaurant)The dine-in service charge %.
Tips payable (restaurant)Tips collected for staff.

The Restore defaults button (after confirmation) re-applies the standard chart template codes; accounts missing from your chart are left unchanged.

⚠️ Note: changing account links never rewrites old entries — it applies to new documents only. Configure correctly from day one.

Email (SMTP) details

  • Host, port (587 default), username, password, From address, From name, STARTTLS switch.
  • Leave the host empty to use the platform default sender.
  • The stored password is write-only: the field shows dots — leave it empty to keep the current one.
  • STARTTLS on = port 587; untick it for implicit-SSL port 465.

FAQ

  • Who can open Settings? Any role holding the Settings View permission (Administration module).
  • Why is the company code read-only? It is the tenant identity and part of every login address.
  • An account link is empty — what happens? Posting the affected document fails with a clear message; set the link first.
  • Where are module options like the restaurant service charge? Module settings live as tabs of this same screen — no separate screens.

E-Invoicing (ZATCA)

Route: User menu › E-Invoicing/zatca

ZATCA
ZATCA onboarding

Purpose: the 4-step wizard that connects your company to ZATCA's Fatoora platform (Saudi e-invoicing, Phase 2 integration). Opening the screen asks for a daily access code — request it from your system administrator/support; it protects the certificates from accidental changes.

Environment

Pick the target environment at the top; the progress indicator shows how many of the 4 steps are done:

EnvironmentUseOTP
DevelopersSandbox for safe end-to-end testing.Fixed test OTP 12345 — filled in automatically.
SimulationZATCA's dress rehearsal against your real VAT number.Real OTP from the Fatoora portal (simulation section).
ProductionLive legal invoicing.Real OTP from the Fatoora portal.
ℹ️ Note: switching environment re-opens Step 1 — each environment needs its own full onboarding.

Company data panel

Organization name, VAT number, city and industry are read-only here — they come from Settings › Company profile. The VAT number must be 15 digits, starting and ending with 3. You choose on this screen only: the invoice types (Standard & simplified / Standard only / Simplified only) and the OTP.

The four steps and what each produces

  1. Create CSR + private key. Generates the EC private key and the certificate signing request locally, per ZATCA specifications. Nothing is sent to ZATCA yet. Produces: private key + CSR (visible in the credentials panel).
  2. Get the compliance CSID. Sends the CSR with your OTP to ZATCA. Produces: compliance certificate + compliance secret — the temporary credentials used for the tests.
  3. Compliance checks. The system signs and submits 6 sample invoices (standard/simplified: invoice, credit note, debit note) using the embedded signing engine. All six must pass. Produces: a cleared compliance record unlocking Step 4.
  4. Production certificate (final CSID). Exchanges the compliance CSID for the production one. Produces: production certificate + production secret + token, saved to the database — from now on invoices are signed and reported with these.

Below the wizard, a collapsible Keys, secret & certificate panel shows every stored credential (private key, CSR, compliance/production secret and certificate) read-only with copy buttons.

Worked example — sandbox onboarding end-to-end

  1. Verify Settings › Company profile has the legal name, a valid 15-digit VAT number and the city; then open E-Invoicing.
  2. Environment = Developers. The OTP fills with 12345 automatically.
  3. Step 1 › Create CSR + private key → "CSR created successfully".
  4. Step 2 › Get CSID → compliance CSID stored.
  5. Step 3 › Run compliance checks → all 6 sample documents pass.
  6. Step 4 › Get production certificate → final cert/secret/token saved.
  7. Turn on Settings › Sales & e-invoicing › Auto-send on posting, post a test sales invoice and confirm it reports successfully.

Troubleshooting

SymptomCause / fix
OTP rejected (Step 2 fails)Fatoora OTPs expire quickly — generate a fresh one and run the step immediately. Also confirm the OTP was issued for the same environment you selected (simulation vs production).
"Invalid VAT number"Must be exactly 15 digits, first and last digit = 3. Fix it in Settings, not here.
Compliance checks failThe error lists which sample failed. Usually company data changed after the CSR — re-run from Step 1.
Step 4 disabledSteps run strictly in order — the production certificate needs cleared compliance checks first.

FAQ

  • Company data changed (name/VAT) — what now? Re-onboard: switch/reselect the environment and run the 4 steps again to issue fresh certificates.
  • Do invoices send automatically? Only if the auto-send toggle is on; otherwise they are sent from the invoice send screen.
  • Is the private key sent anywhere? No — it is generated and stored locally; only the CSR goes to ZATCA.
  • Can I test without affecting real invoicing? Yes — that is exactly what the Developers environment is for.

Document counters

Route: User menu › Counters/system/counters

Counters
Document numbering counters

Purpose: one registry controlling the numbering of every document type, organized in module tabs: Accounting, Sales, Purchasing, Inventory, Imports, Fleet, Agriculture, Land, Restaurants. Numbers are allocated under a transaction lock, so no gaps or duplicates can occur.

Columns

ColumnMeaning
DocumentThe document type (see the code list below).
PrefixEditable — typed lowercase is saved uppercase (e.g. INV, JV).
Numbering methodContinuous sequential (one company-wide counter, no gaps) or Per branch & year (an independent counter per branch per year, pattern PREFIX[BRANCH]-[YY]-00001).
Yearly resetRestart from 1 each new year. Forced on (and locked) for the branch-&-year method.
Last / Next numberLive values — the next number shows exactly what the next document will get.
DocumentsHow many documents of this type exist.
StatusLive diagnostic: Clean (green), Gaps (yellow, with the count), Duplicates (red, with the count).

Document types per module

ModuleDocuments (default codes)
AccountingJournal entries (JV), Receipt vouchers (RCPT), Payment vouchers (PYMT)
SalesSales invoices (SINV), Sales returns (SCN), Sales debit notes (SDN), Sales orders (SORD), Quotations (QUOT), Delivery notes (DLVN)
PurchasingPurchase invoices (PINV), Purchase returns (PRET), Purchase orders (PORD), Purchase requisitions (PREQ)
InventoryGoods receipts (GRN), Stock adjustments (ADJ), Inventory transfers (TRN)
ImportsImport shipments (SHIP)
FleetTrips (TRIP), Vehicle expenses (VEXP)
AgricultureSeasons (SEAS), Season costs (ACST), Harvests (HARV)
LandReclamation projects (LPRJ), Project costs (LCST)
RestaurantsRestaurant orders (ORD)

Worked example — sales invoices as INV with yearly reset

  1. Open Counters › tab Sales.
  2. On the "Sales invoices" row set Prefix = INV.
  3. Keep method = Continuous sequential and tick Yearly reset.
  4. Press Save (top of the page — it saves all rows at once) and check the "Next number" column.
  5. Result: invoices number INV-00001, INV-00002… and restart from 1 on January 1st. For branch-independent series instead, choose "Per branch & year" — e.g. INV01-26-00001 for branch 01 in 2026.

Troubleshooting — counter collision

  • Status shows Duplicates (red): two documents share a number — typically after an external data import. The counter itself cannot produce duplicates; renumber/fix the imported documents, then re-check.
  • Status shows Gaps (yellow): numbers missing from the sequence, usually deleted drafts or an import that skipped numbers. Gaps are informational; new numbers continue after the last one.
  • Changed a prefix and old documents still show the old one: prefixes apply to newly issued numbers only — existing documents keep theirs.

FAQ

  • Can two document types share a prefix? Technically yes, but avoid it — distinct prefixes keep search and archiving unambiguous.
  • Can I make the counter start from a specific number? The next number follows the highest existing document; there is no manual override — this protects the no-gaps guarantee.
  • Does the yearly reset delete anything? No — it only restarts the numbering; previous years' documents are untouched.

Approvals

Route: Sidebar › Approvals/approvals

Purpose: the document approval workflow: an inbox of approval requests plus (for administrators) the rules that create them. When a rule is enabled, posting a matching document does not post it directly — it becomes a pending approval request, and the document posts automatically upon final approval. The page title shows a badge counting requests awaiting you.

Inbox tabs

TabShows
Awaiting meRequests you can act on now (your role is the current approver).
My requestsRequests created from your own documents, with their status.
AllEvery request — the audit view.
RulesVisible only to users allowed to manage the rules.

Each row shows: document type, document number, amount, requested by, date, status (Pending — with "level 2" when at the second stage — Approved or Rejected) and any notes. Pending rows you may act on offer Approve and Reject buttons.

Defining rules

The Rules tab lists one row per supported document type — Sales invoice, Purchase invoice, Receipt voucher, Payment voucher — with:

ColumnMeaning
EnabledTurns the workflow on for this document type.
Approver roleThe role whose members may approve (level 1).
Second level (optional)A second role that must approve after level 1. Leave empty for single-level approval.
Min amountOnly documents with amount ≥ this threshold need approval; smaller ones post straight through. 0 = every document.

The flow, end to end

  1. Admin enables a rule — e.g. Purchase invoice, approver role "Finance Manager", second level "General Manager", min amount 10,000.
  2. A clerk posts a purchase invoice of 15,000 → instead of posting, a Pending request appears (his "My requests" tab).
  3. Every Finance Manager sees it under Awaiting me with a badge. One clicks Approve, optionally adds a note, and confirms Approve & post.
  4. Because a second level exists, the request stays Pending "(level 2)" and moves to the General Manager's inbox.
  5. On final approval the document posts automatically (journal entry, stock, numbering). On Reject — a rejection reason is mandatory — the document stays unposted and the requester sees the reason.

FAQ

  • Can I approve my own document? If your role is the approver role, yes — assign approver roles so that this doesn't happen where separation of duties matters.
  • What happens to a rejected document? Nothing is posted; correct it and post again to create a fresh request.
  • Documents below the threshold? They post immediately, no request is created.
  • Why don't I see the Rules tab? It appears only for users permitted to manage roles/settings.

Frequently asked questions

How do I add a user?

Open Administration › Users › New, set the username, contact details and initial password, then assign one or more roles that grant the needed permissions.

How do roles and permissions work?

Permissions are grouped into roles; you assign roles to users. The protected SuperAdmin role has full access and cannot be removed.

How do I unlock a locked-out user?

In Administration you can view and unlock users who were locked after failed logins, restoring their access immediately.

What settings does the admin control?

Company profile, numbering, tax defaults, print templates, e-invoicing (ZATCA), and — for the host company — tenants, pricing plans and the platform overview.