CognitixERP User Manual

CognitixERP User Manual

Welcome to the official CognitixERP help documentation. This guide explains how to use the modular ERP platform — from company setup and accounting to sales, inventory, POS, HR, CRM, banking, and compliance.

Blazor WebAssembly + .NET 10 API 12 Business Modules Multi-Branch · Multi-Currency

Introduction

CognitixERP is a production-ready, modular enterprise resource planning (ERP) system for growing businesses that need accounting, sales, purchasing, inventory, point of sale, human resources, customer relationship management, and banking in one unified platform.

Built with Blazor WebAssembly and an ASP.NET Core REST API on .NET 10, CognitixERP delivers a fast, modern browser experience backed by a clean, maintainable server architecture. Business rules — posting, tax, FX conversion, stock valuation, and general ledger integration — always run on the backend; the web client focuses on presentation and workflows.

Whether you are a finance manager, operations lead, HR administrator, or business owner, CognitixERP gives you real-time visibility, role-based access control, and integrated workflows across modules so you can make confident, data-driven decisions.

Who is this manual for? Administrators, accountants, sales teams, warehouse staff, HR officers, and IT teams deploying or supporting CognitixERP. Module-specific step-by-step guides will be added in the sections listed in the left navigation.

Platform Overview

CognitixERP is organized as a Modular Monolith using Clean Architecture. Each business area (Billing, Financials, Inventory, and so on) is a separate module with its own domain logic, while a single API host and one web application provide a seamless user experience.

Client & Server

ComponentDescription
Cognitix.WebApp Blazor WebAssembly SPA — dashboards, forms, reports, and module pages in the browser.
Cognitix.API ASP.NET Core REST API — authentication, business logic, PDF/Excel exports, and module endpoints.
Database SQL Server, PostgreSQL, or MySQL — one logical database with module-specific schemas managed by EF Core migrations (Setup Wizard).

Architecture Principles

  • Backend business logic — calculations, posting, tax, FX, and stock rules stay in Application/Domain layers.
  • UI decoupling — the WebApp uses shared DTOs only; it never references domain entities directly.
  • Cross-module workflows — e.g. approved sales invoices create balanced journal entries; POS sales update stock and GL.
  • Multi-branch isolation — non-admin users see only data for their assigned branch unless granted broader access.
  • Role & permission gates — every sensitive page and API action is protected by page-level permissions.

Supported Environments

  • Server: Windows 10/11, Windows Server 2019+, or Linux with .NET 10; SQL Server 2019+ / Express / Azure SQL, PostgreSQL 14+, or MySQL 8+ / MariaDB.
  • Browser: Latest Chrome, Edge, or Firefox with WebAssembly support.
  • Optional: Cognitix.BiometricAgent (Windows) for HRM biometric attendance devices.

Key Capabilities

CognitixERP includes the following platform-wide capabilities across all modules:

Multi-Branch Operations

Company setup, branch switcher, and branch-scoped data for sales, stock, finance, and HR.

Multi-Currency & FX

Configurable decimal places (e.g. JPY 0, KWD 3), exchange rates, and currency revaluation.

Role-Based Access

Admin, Manager, Sales, Purchase roles with customizable page and action permissions.

Dark & Light Theme

Readable UI in both themes across Billing, Financials, POS, CRM, and other modules.

PDF & Excel Reports

QuestPDF-based exports and module analytics dashboards for finance, sales, and inventory.

Localization Ready

Shared localization resources with support for English, Bengali, Arabic, and extensible cultures.

Company Branding

Display name, logo, favicon, slogan, and timezone from Company Setup — reflected in UI and login.

Setup Wizard

First-run web installer for database, admin user, and license activation — no CLI required.

Open Setup Wizard Guide →

Audit & Security

JWT authentication, refresh tokens, account lockout, and audit trail for sensitive actions.

Compliance Profiles

Regional tax compliance (GST, ZATCA, NBR) with e-invoice gates and compliance reports.

Modules at a Glance

CognitixERP ships with 12 integrated business modules. Use the links below to jump to each module section. Each guide includes screen-by-screen instructions, screenshots, and clear usage examples so you can complete real workflows end-to-end.

Branching & Company

Company profile, branding, branches, and multi-branch operational isolation.

Open module guide →

Financials & Accounting

Chart of accounts, journal entries, trial balance, balance sheet, P&L, cash flow, tax, FX.

Open module guide →

Tax & Compliance

GST (India), ZATCA (Saudi), NBR (Bangladesh), e-invoice submission, audit trail, and tax reports.

Open module guide →

Users & Security

Users, roles, permissions, login, password policy, license settings, and preferences.

Open module guide →

HRM

Employees, attendance, leave, payroll, shifts, loans, appraisals, onboarding, and HR reports.

Open module guide →

CRM

Leads, contacts, customers, opportunities, pipeline, tickets, forecasts, and CRM analytics.

Open module guide →

Inventory

Product masters — UoM, categories, brands, products, reorder policies, alerts, and master reports.

Open module guide →

Stock

Quantities and movements — opening stock, branch stock, transfers, adjustments, thresholds, valuation.

Open module guide →

WMS

Warehouses, zones, racks, bins, putaway, picking lists, stock moves, and warehouse reports.

Open module guide →

Billing (Sales)

Quotations, sales orders, invoices, credit notes, receipts, AR aging, customer statements.

Open module guide →

Procurement

Supplier quotations, purchase orders, GRN, purchase invoices, supplier payments, AP aging.

Open module guide →

Banking

Bank accounts, cheque books, issue/clear/bounce, reconciliation, banking reports.

Open module guide →

Settings

Company profile, branches, email (SMTP), weight scales, license activation, and system configuration.

Open module guide →

Setup Wizard Guide

The Setup Wizard runs once on a new installation. It prepares the database, creates your first administrator, and activates a license or trial. You do not need dotnet ef or PowerShell migration scripts for a normal install.

Open: /setup (browser redirects here automatically until setup is complete). After success, sign in at /users/login.

Before you start

  • API is running (local: typically https://localhost:7149; production: behind nginx/IIS).
  • WebApp ApiBaseUrl points at that API (see Installation Guide).
  • Database engine is installed: SQL Server, PostgreSQL, or MySQL.
  • You know the DB host, port, username/password (or Windows auth for SQL Server).

Step 1 — Database & infrastructure

Setup Wizard Step 1 — Database and infrastructure
Step 1 of 3 — Database & infrastructure — company names, Frontend/API URLs, database engine, server, and database name. Schemas provision automatically (typically 3–8 minutes).

Example — Local SQL Server Express

  1. Open /setup (auto-opens on first run).
  2. Enter Company/Display Name, Frontend URL https://localhost:7019, API URL https://localhost:7149.
  3. Select SQL Server, DB Server .\SQLEXPRESS, choose a database name, then Continue.

Result: Connection is tested, the database is created if needed, and all module schemas are applied.

Fill the form, then click Continue. Schema provisioning usually takes 3–8 minutes — keep the tab open.

FieldWhat to enter
Company Name / Display Name Your organization names (shown later in branding screens).
Frontend URL Public WebApp URL with no trailing slash. Local example: https://localhost:7019. Production (same-origin): https://yourcompany.com.
API URL Same public origin as the site for production: https://yourcompany.com. Local API: https://localhost:7149. Do not append /api — the WebApp already calls paths like api/....
Database Engine SQL Server, PostgreSQL, or MySQL.
DB Server SQL Server: .\SQLEXPRESS, localhost, or Azure host. PostgreSQL / MySQL on the same VPS: 127.0.0.1.
Port Shown for PostgreSQL (default 5432) and MySQL (default 3306).
Database Name Any name you choose (e.g. MyCompanyERP). The wizard can create it if your login has permission.
DB Username / Password Unless you use Windows Authentication (SQL Server only).
Production tip: On a single-domain Linux deploy (nginx), Frontend URL and API URL are both https://yourcompany.com. See Production Deployment Guide.

What happens automatically:

  • Connection test
  • Database create (if needed)
  • All module schemas applied (Licensing first, then business modules)
  • API settings updated (provider, connection string, CORS, JWT basics)

Step 2 — Administrator account

Setup Wizard Step 2 — Administrator account
Step 2 of 3 — Administrator account — create the first admin (username, email, strong password). No default password ships with the package.

Example — Create the first admin

  1. Enter Admin Username, Admin Email, Password, and Confirm Password.
  2. Use at least 8 characters with upper, lower, number, and special character (e.g. @AdminPass123#).
  3. Click Continue.

Result: Primary administrator is created — store credentials safely for first login.

Create the first admin. There is no default production password in the package.

  • Username, email, and a strong password (at least 8 characters with upper, lower, number, and special character)
  • This account gets full system access — store it safely

Step 3 — License activation

Setup Wizard Step 3 — License activation
Step 3 of 3 — License activation — enter Envato username, email, and purchase code, or click Skip — 14 day trial for local evaluation.

Example — Local trial vs production activate

  1. Local: click Skip — 14 day trial (internet still recommended).
  2. Production: enter Envato Username, Email, Purchase Code → Activate Now.

Result: License is Trial or Active; wizard advances to the completion screen.

  • Activate: Envato purchase code + username/email (verified via CognitiveCircle in Production)
  • Or skip: 14-day trial
  • Local Development can start a trial without CognitiveCircle; purchase codes are still checked remotely
  • Production requires internet access and valid Licensing:ApiKey / HmacSecret

After the wizard — You're ready to go

Setup Wizard complete — You're ready to go
Setup complete — confirm API health, copy/download WebApp ApiBaseUrl JSON if needed, then Go to Login.

Example — Verify health and sign in

  1. If the API recycled, wait a few seconds (IIS / systemd) or restart locally.
  2. Open /api/system/health and confirm a healthy response.
  3. Click Go to Login (or open /users/login) with the admin from Step 2.

Result: You land on the dashboard and can continue First Steps After Install.

  1. Wait a few seconds if the API restarts (common on IIS/Linux Production).
  2. Confirm API health: GET /api/system/health.
  3. Sign in at /users/login with the admin you created.
  4. Continue with First Steps After Install (company profile, branches, users, financials…).
  5. Optional: copy the WebApp ApiBaseUrl JSON into wwwroot/appsettings.json before publishing to production.

Setup Wizard FAQ

Can I open /setup again after go-live?

No. First install only. Use Settings → Company Management and Settings → License afterward.

Provisioning failed or stuck.

Check DB service, credentials, and firewall. Drop a half-created database and retry Step 1. Support fallback: Database/apply-migrations.ps1 (see Installation Guide).

Logos do not show after upload.

On Linux, nginx must proxy /uploads/ (and preferably /api/uploads/) to the API. Also ensure API URL was entered without a trailing /api.

Where is the technical install detail?

Installation Guide · Production Deployment · Troubleshooting FAQ

First Steps After Install

CognitixERP is modular. Many screens depend on data created in earlier modules — for example, invoices need customers, tax rates, and GL mappings; POS sales need products, warehouses, and payment methods. Follow the phases below in order. Skip phases for modules you have not licensed or do not plan to use.

0 · Setup Wizard 1 · Company & Branches 2 · Users & Security 3 · Financials Core 4 · Tax & Compliance 5 · GL Integration 6 · Inventory Masters 7 · Customers & Suppliers 8 · Banking 9 · Opening Balances 10 · HRM 11 · POS & CRM 12 · Go-Live Check
Rule of thumb: configure Settings → Financials → Inventory masters → Parties (customers/suppliers) → GL mappings → Opening balances before posting any live transaction. Operational modules (Billing, Procurement, POS, Banking) assume this foundation is already in place.

0 Complete the Setup Wizard Installation

Runs once on first launch before you can use the main application. Full field-by-field guide: Setup Wizard Guide.

  1. Open /setup and complete all three steps: Database & URLs, Administrator, and License / Trial.
  2. Production tip: Frontend URL and API URL should both be your site origin (e.g. https://yourcompany.com) — do not append /api.
  3. When the wizard finishes, log in at /users/login with the admin account you created.
  4. If you are redirected back to /setup, the wizard is not complete — finish any remaining step before continuing.
CognitixERP secure sign-in screen
Login screen — enter the administrator username/email and password created in Setup Wizard Step 2, then click Sign in.

Example — First admin sign-in

  1. Open /users/login after Setup Wizard completes.
  2. Enter the admin username (or email) and password from Step 2.
  3. Click Sign in.

Result: You land on the Home dashboard with module navigation on the left.

CognitixERP Home dashboard with KPIs and charts
Home dashboard — overview of sales, POS, pending invoices, inventory alerts, recent invoices, and upcoming payments after login.

1 Company profile & branches Settings · Branching

Every transaction is scoped to a company and usually a branch. Set this up first. Full field reference: Settings module guide.

  1. Company Management — open Settings → Company Management (/settings/company-management), select your company, and complete the 3-step company setup: basic information (official name, display name, business type, industry), branding (logo & favicon), and contact details (address, phone, email, timezone).
  2. Branches — go to Settings → Branches (/settings/branches). Create each operating location; assign a branch manager if your workflow uses branch-level approval or reporting.
  3. Email settings (recommended) — Settings → Email (/settings/email) for quotation, invoice, and notification emails.
  4. License verificationSettings → License (/settings/license) to confirm all purchased modules are active.

2 Users, roles & access Users & Security

Create logins for your team before handing over module configuration to department owners. Full guide: Users & Security.

  1. Review built-in Roles at User Management → Roles (/users/roles). Adjust page-level permissions if needed.
  2. Create Users at User Management → Users (/users/management) from HRM employees and assign each user a role (e.g. Admin, Manager, Sales, Purchase).
  3. Map users to the correct branch so they only see data for locations they operate in — see branch access.
  4. Have each user test login and set profile preferences at /users/profile.

3 Financial foundation Financials

All sales, purchase, inventory, POS, and banking postings ultimately flow through the general ledger.

  1. CurrencyFinancials → Currency Management (/financials/currency): set base currency, decimal places, and symbol placement. Add foreign currencies if you trade in multiple currencies. Do this before Chart of Accounts and any monetary master data.
  2. Exchange rates (multi-currency only) — Financials → Exchange Rate Management (/financials/exchangerate).
  3. Chart of AccountsFinancials → Chart of Accounts (/financials/chartofaccounts): create or import your account structure (Assets, Liabilities, Equity, Revenue, Expenses). Required before GL mappings, opening balances, and automatic posting.
  4. Fiscal yearsFinancials → Fiscal Years (/financials/fiscalyears): define the active fiscal year and accounting periods. Transactions cannot post outside an open period.
  5. Tax ratesFinancials → Taxation (/financials/taxation): configure VAT/GST/sales tax rates used on invoices and purchase bills. Required before Billing, Procurement, and POS with tax.
  6. Payment methodsFinancials → Payment Methods (/financials/payment-methods): Cash, Bank Transfer, Card, Cheque, etc. Required before customer receipts, supplier payments, and POS.
  7. Payment journalsFinancials → Payment Journals (/financials/payment-journals): map each payment method to the correct cash/bank/clearing GL account per branch. See Payment Journals guide. Required before recording receipts, supplier payments, or POS settlements.
  8. Cost centers (optional) — Financials → Cost Centers (/financials/costcenters) if you track departmental P&L.

4 Tax compliance & e-invoicing Tax & Compliance

Configure only the regimes that apply to your country. Complete after company profile and tax rates (Phase 3). See the full Tax & Compliance module guide.

  1. Tax rates (prerequisite) — Financials → Tax & Compliance → Taxation (/financials/taxation): VAT/GST/sales tax and WHT rates used on documents before e-invoice submission.
  2. E-invoice complianceFinancials → Tax & Compliance → E-Invoice Compliance (/settings/e-invoice-compliance): enable one regional scheme (ZATCA for Saudi Arabia, GST India for India). Match company TIN/VAT/GST number from Company Setup.
  3. After go-live, monitor submissions in E-Invoice Audit (/settings/e-invoice-audit) and reconcile with regional reports (/settings/gst-reports, /settings/zatca-reports).
NBR (Bangladesh): The NBR e-invoice panel and NBR VAT report are visible in the UI but not yet complete for live production use with the National Board of Revenue. Do not rely on NBR submission for statutory filing until a future CognitixERP update marks it production-ready. Use Financials tax rates and internal reports in the meantime.

5 GL account mappings & posting rules Financials · Banking

Tells the system which Chart of Accounts line each transaction type hits. Without this, auto-posting from Billing, Inventory, POS, and Banking will fail or post to wrong accounts.

  1. GL Account MappingsFinancials → GL Account Mappings (/financials/gl-account-mappings): review default mappings for Sales, Purchases, Inventory, Tax, POS, and Clearing categories. Override per branch where needed. Requires Chart of Accounts (Phase 3).
  2. Payment method routing (optional) — Financials → Method Routing Matrix (/financials/payment-method-matrix) for advanced payment routing.
  3. Banking posting settingsBanking → Banking Posting Settings (/settings/banking-coa): map bank transaction types to GL accounts before recording bank movements.

6 Inventory & warehouse masters Inventory · Stock · WMS

Required before sales, purchases, stock transfers, or POS that deducts inventory. See the three module guides under Inventory, Stock, and WMS for full setup order.

  1. Unit of measuresInventory → Unit of Measures (/inventory/unitofmeasures). First step — see Inventory guide.
  2. Categories, brands, product groups/inventory/categories, /inventory/brands, /inventory/productgroups.
  3. ProductsInventory → Products (/inventory/products): SKU, UoM, tax, valuation, variants.
  4. Warehouses (minimum one per branch) — WMS → Warehouses (/inventory/warehouses). Requires branches. See WMS guide.
  5. Branch opening stockStock → Branch Opening Stock (/inventory/branch-opening-stock). Requires products + warehouse. See Stock guide.
  6. Reorder policies (optional) — Inventory → Reorder Policies (/inventory/reorderpolicies).
  7. Weight machine (retail/grocery only) — Settings → Weight Machine (/settings/weightmachine) if POS uses weighed items.

7 Customers & suppliers CRM · Procurement · Billing

Party master data is shared across Billing, CRM, and Procurement.

  1. CustomersCRM → Customers (/crm/customers): add billing address, tax ID, credit limit, opening balance, and default currency. Required for quotations, orders, invoices, and POS customer sales. See Customer Details guide.
  2. SuppliersProcurement → Suppliers (/procurement/suppliers): add vendor details and payment terms. Required for purchase orders, GRN, and supplier payments.

8 Bank accounts Banking

Set up after GL mappings and payment methods so bank postings reconcile correctly. Full field reference: Banking module guide.

  1. Banking Posting Settings/settings/banking-coa: map FX gain/loss, bank fees, and interest income GL accounts.
  2. Bank accountsBanking → Accounts (/banking/accounts): register each company bank account with currency, GL link (or auto-create), and reconciliation tolerance.
  3. Verify auto-created Bank-type payment journals on Payment Journals.
  4. Configure cheque books if your business uses cheque payments (/banking/cheques).
  5. Import a test statement and run reconciliation before go-live.

9 Opening balances (migration / go-live) Financials · Inventory

Only needed when migrating from another system or starting mid-period. Post once, before daily operations.

  1. GL opening balancesFinancials → Opening Balance (/financials/opening-balance): post opening journal entries for balance sheet accounts (cash, receivables, payables, equity, etc.). Requires COA, fiscal year, and GL mappings.
  2. Inventory opening stockInventory → Branch Opening Stock (/inventory/branch-opening-stock): enter on-hand quantities and valuation per warehouse/branch. Requires products and warehouses.
  3. Run Trial Balance (/financials/trialbalance) to verify debits equal credits before processing live transactions.

10 HR foundation HRM

Skip this phase if you are not using the HRM module. See the full HRM module guide.

  1. DepartmentsHRM → Departments (/hrm/departments).
  2. DesignationsHRM → Designations (/hrm/designations).
  3. Leave types, shifts, holidays, and attendance policy — configure before employee onboarding.
  4. Salary rules & structure templates — needed before payroll processing.
  5. EmployeesHRM → Dashboard → Add Employee (/hrm/employees/new): link each employee to department, designation, branch, and (optionally) a system user account.

11 POS & CRM pipeline POS · CRM

Operational modules — configure last, after all master data and GL rules are ready.

  1. POS settingsPOS → Settings (/pos/settings): default branch, receipt footer, stock rules, and payment methods accepted at the terminal. See POS Settings guide. Requires branches, products, warehouses, payment methods, payment journals, and GL mappings.
  2. CRM pipeline settings (if using sales pipeline) — CRM → Pipeline Settings (/crm/pipeline-settings): define pipelines, stages, and win/lost rules. See the full CRM module guide.

12 Go-live verification All modules

Run these end-to-end tests in a sandbox branch before processing real business data.

  1. Sales cycle — Quotation → Sales Order → Invoice → Customer Receipt. Confirm invoice posts to GL and stock reduces (if inventory item). See Billing guide.
  2. Purchase cycle — Purchase Order → Goods Receipt (GRN) → Purchase Invoice → Supplier Payment. Confirm payables and inventory valuation update correctly. See Procurement guide.
  3. POS sale — open a POS session, sell a product, close session. Verify cash GL and inventory impact. See POS guide.
  4. Bank reconciliation — import a bank statement and match at least one transaction.
  5. Review Trial Balance, Balance Sheet, and Stock Valuation reports for unexpected balances.

Quick dependency reference

You want to… Configure first
Post a sales invoice Company, branch, COA, fiscal year, tax rates, customers, products, GL mappings, payment methods
Receive goods from a supplier Suppliers, products, warehouses, GL mappings (inventory accounts)
Run POS Branches, products, warehouses, payment methods, GL mappings, POS settings
Record a bank payment COA, bank accounts, banking COA settings, GL mappings
Process payroll Departments, designations, salary rules, employees, fiscal year
Submit e-invoices Company tax details, tax rates, e-invoice compliance settings
Need installation help? See the Installation Guide for Setup Wizard steps, database provisioning, license activation, and production deployment notes.
Module Guide

Branching & Company Setup

The Branching module is the foundation of CognitixERP. It stores your legal company profile, branding (logo & favicon), timezone, and operating locations (branches). Almost every transaction — sales, purchases, inventory, POS, payroll — is scoped to a branch. Configure company details first, then create branches before any operational module.

Recommended order: (0) First-run /setup wizard (new installations) → (1) Company Management → create/edit company in the 3-step wizard → (2) Branches → add head office (base branch) → add sub-branches → (3) assign users to branches in User Management.

Part 0 — First-run installation wizard

0. Setup Wizard (new installations only)

Route: /setup (public — before login)

On a fresh install the browser opens the Setup Wizard. It creates your database (SQL Server, PostgreSQL, or MySQL), applies module schemas, creates the administrator, and activates a license or trial. See the full Setup Wizard Guide for every field and FAQ.

Wizard stepWhat you do
1 — Database & URLs Company/Display name, Frontend URL, API URL (same origin in production — no /api), database engine, host/port, database name, credentials → Continue.
2 — Administrator Create admin username, email, and strong password (no default password ships).
3 — License / Trial Envato purchase code + username/email, or Skip — 14 day trial.

After setup, log in at /users/login and continue with Part 1 (Company Setup) for legal address, tax ID, timezone, logo, and favicon.

Routes at a glance

Navigation & permissions

Menu path Route Permission page Actions
Settings → Company Management /settings/company-management CompanyManagement Read list · Create (once) · Update · Delete · View profile
Settings → Company Management → Create / Edit /settings/company-setup
/settings/company-setup/{id}
CompanyManagement Create · Update (3-step wizard)
Settings → Branches /settings/branches Branches Read · Create · Update · Delete · View profile

Part 1 — Company Setup

1. Company Management (list page)

Menu: Settings → Company Management  |  Route: /settings/company-management

This is the landing page for company configuration. CognitixERP supports one company record per installation. After a company exists, the Create Company button is disabled — use Edit instead.

Screen elements

ElementDescription
Create Company (+ button)Visible only with Create permission. Navigates to /settings/company-setup. Disabled when a company already exists.
Data tableColumns: Official Name, Display Name, Official Email, Phone Number, Website.
View (eye icon)Opens read-only company profile at /settings/company-view/{id}.
Edit (pencil icon)Requires Update permission. Opens 3-step wizard at /settings/company-setup/{id}.
Delete (trash icon)Requires Delete permission. Shows confirmation dialog before permanent removal.

FAQ — Company list

Why is Create Company disabled?

Only one company is allowed per ERP instance. Use the Edit action to update the existing record.

I don't see Company Management in the menu.

Your role needs Read permission on page CompanyManagement. Ask an administrator to update your role in User Management → Roles.

Can I delete the company and start over?

Yes, if you have Delete permission — but this removes the company master record. Branches and transactional data may become inconsistent. Prefer editing over deleting in production.

2. Company Setup wizard (create & edit)

Create route: /settings/company-setup  |  Edit route: /settings/company-setup/{company-id}

A 3-step guided form with a stepper at the top. Click completed step circles to jump back. Use Next / Previous to move between steps. On step 3, click Create Company or Update Company to save.

On save, logo/favicon upload first (if selected), then company data is saved. Branding updates immediately in the navigation drawer, browser tab favicon, and preloader.

Step 1 — Basic Information

Edit Company Setup — Basic Information step
Company Setup → Basic Info — Settings → Company Management → Edit. Fill official name, display name, business type, industry, and tax ID, then click Next.

Example — Update company identity

  1. Go to Settings → Company Management and click Edit.
  2. On Step 1 (Basic Info), set Official Name, Display Name, Business Type, and Industry Sector.
  3. Optionally enter Established Date, Registration No., and TIN / VAT / GST Number.
  4. Click Next to continue Contact, then People & Brand, then save.

Result: Company branding and legal details appear across login, invoices, and reports.

FieldRequiredDescription
Official NameYesLegal registered name — appears on invoices, compliance documents, and official reports.
Display NameYesShort trading name shown in the app header, login screen, and POS receipts.
Business TypeYesPrivate Limited, Public Limited, Proprietorship, Partnership, LLC, or Other.
Industry SectorYesIndustry classification (Retail, Manufacturing, Healthcare, IT, etc.) — used for reporting context.
Established DateNoDate the business was founded (optional).
Company Registration No.NoTrade license or company registration number.
TIN / VAT / GST NumberNoTax identification number — required for e-invoicing and tax reports. Enter the exact number your tax authority expects.

FAQ — Basic Information

Official Name vs Display Name — which goes on invoices?

Official Name is the legal name on formal documents. Display Name is the shorter brand name in the UI and customer-facing screens like POS.

Does Industry Sector affect module behaviour?

It is informational for now — it does not enable/disable modules. Module access is controlled by your license and role permissions.

Next button does nothing.

Required fields on the current step must be filled. Backend validation also requires contact and key-people fields when you submit on step 3 — complete all three steps before saving.

Step 2 — Contact Information

FieldRequiredDescription
Head Office AddressYesMulti-line registered head office address.
CityYesCity of head office.
StateYesState, division, or province.
CountryYesCountry name.
Zip / Postal CodeYesPostal code.
Phone NumberNoLandline or mobile contact.
Fax NumberNoOptional fax.
Official EmailYesPrimary company email — must be valid format. Used on document headers.
Website URLNoCompany website (optional).

FAQ — Contact Information

Is Head Office Address the same as a branch address?

Head office address is the company's registered address. Branch addresses are configured separately under Settings → Branches. They can match if your only location is the head office.

Invalid Email Address error on save.

Official Email must be a valid email format (e.g. info@company.com). It is validated on the server when you submit.

Will this address print on quotations and invoices?

Yes — company contact details from this step are used as the default company header on billing and procurement documents.

Step 3 — Key People & Branding

FieldRequiredDescription
Owner / Founder NameYesBusiness owner or founder.
CEO / Managing DirectorYesSenior executive contact.
HR Head / Contact PersonYesHR department lead — used on HR correspondence.
Emergency ContactNoOptional emergency phone or person.
Company Slogan / TaglineNoTagline shown on login screen and company profile.
TimezoneNoIANA timezone (e.g. Asia/Dhaka). Drives date/time display across the ERP. If empty, UTC is used.
Upload Company LogoNoImage file — shown in navigation drawer header and login page.
Upload Company FaviconNoImage or .ico — browser tab icon, preloader mark, and compact branding.

After save: your logo and favicon update immediately in the navigation drawer, browser tab, and login screen — no full page reload required.

FAQ — Branding & Timezone

Logo or favicon upload failed.

Use a standard image format (PNG, JPG, WEBP) or ICO for favicon. Ensure the file is not empty. Company data is not saved if upload fails — try a smaller file or contact your administrator.

Favicon updated but old icon still shows in browser.

Browsers cache favicons aggressively. Hard refresh (Ctrl+Shift+R) or clear site data for the WebApp URL.

Why set timezone here?

All date-sensitive operations — attendance, fiscal periods, report date filters — use this timezone across the ERP.

Login page shows CognitixERP instead of my company name.

Complete company setup with a Display Name and save. The login page shows your company name and logo automatically.

3. Company profile (read-only view)

Route: /settings/company-view/{company-id}

Read-only summary opened from the View action on Company Management. Sections:

  • Business Information — type, sector, established date, registration, tax number
  • Contact Information — phone, fax, email, website
  • Head Office Address — formatted address block
  • Key People — owner, CEO, HR head, emergency contact
  • System Settings — configured timezone (or "Not configured — UTC")

Click Edit in the header to open the wizard at /settings/company-setup/{id}.

FAQ — Company profile

Company not found error.

The URL ID does not match an existing company. Return to Company Management and open View from the table row.

Part 2 — Branch Setup

Branches represent physical or logical operating units (stores, offices, warehouses). Each branch has a unique 2-letter code used in POS transaction numbering and document prefixes. Create the company before adding branches.

4. Branches (list page)

Menu: Settings → Branches  |  Route: /settings/branches

Filter bar

FilterOptions
StatusAll · Active · Inactive
Branch TypeAll · Base (head office) · Sub
SearchMatches name, code, city, phone, or email (live filter)
Clear FiltersResets all filters

Table columns

ColumnDescription
Branch NameName with ★ icon if base/head office branch.
Branch Code2-letter code chip (e.g. DH, CT).
City / Contact / EmailBranch contact details.
Parent BranchParent in hierarchy, or dash if top-level.
Branch ManagerAssigned HRM employee, or dash if none.
StatusActive (green) or Inactive chip.
ActionsView · Edit · Delete

FAQ — Branch list

Add Branch fails — "No company setup found".

Complete Company Setup first (Part 1). Branches are linked to the company record automatically.

I only see one branch but we have multiple.

Non-admin users see only their assigned branch. Admin and BranchManager roles see all branches. Check your role and user branch assignment.

Can I delete a branch with transactions?

Deletion may fail if the branch is referenced by sales, inventory, or users. Prefer setting the branch to Inactive instead of deleting.

5. Add / Edit Branch dialog

Opened from Add Branch or Edit on the branch list — modal dialog (not a separate route).

Add Branch dialog on the Branches list page
Add Branch — Settings → Branches → + Add Branch. Enter branch name, 2-letter code, address, and contact details, then click Add Branch.

Example — Create a second branch

  1. Open Settings → Branches.
  2. Click + Add Branch.
  3. Enter Branch Name (e.g. Sylhet) and Branch Code (exactly 2 letters, e.g. SY).
  4. Optionally choose Parent Branch and Branch Manager, then fill Address / City / Country.
  5. Click Add Branch.

Result: The new location appears in the branch table and can be selected from the top-bar branch switcher.

Section A — Basic Information

FieldRequiredRules
Branch NameYesMax 100 characters. Descriptive name (e.g. "Dhaka Head Office").
Branch CodeYesExactly 2 letters (A–Z). Auto-uppercased on save. Used in POS numbering. Example: DH, CT.
Parent BranchNoOptional hierarchy — select a parent or "None (top level)". Cannot select self.
Branch ManagerNoHRM employee from employee list. Requires employees to exist in HRM module.

Section B — Address

FieldRequiredMax length
Address (multi-line)No500
CityNo100
StateNo100
CountryNo100
Zip / Postal CodeNo20

Section C — Contact & Status

FieldDescription
Contact NumberBranch phone (max 50 chars).
EmailBranch email — validated if provided.
Is Base Branch (switch)Mark as head office / primary branch. Shown with ★ on list and "Head Office" on profile.
Is Active (switch)Visible on Edit only. New branches are created active. Inactive branches are hidden from most operational pickers.

Dialog footer shows a preview chip with Name (CODE) before saving.

FAQ — Branch dialog

Branch code must be 2 letters — why?

Branch codes embed in POS receipt numbers and document references. Only two uppercase letters (A–Z) are accepted — no digits or special characters.

Branch Manager dropdown is empty.

Register employees first in HRM → Dashboard → Add Employee (/hrm/employees/new). The dropdown lists all active employees.

Can I have multiple base branches?

Technically the switch allows it, but best practice is one head office (base branch) per company. Sub-branches report under a parent.

What happens when I deactivate a branch?

Inactive branches remain in the database for history but are excluded from active branch pickers (POS, sales, stock). Users assigned to an inactive branch may lose access to operational screens.

Parent Branch list doesn't show my branch.

When editing, the current branch is excluded from parent options to prevent circular hierarchy. Only other active branches appear.

6. Branch profile (read-only view)

Route: /settings/branch-view/{branch-id}

Opened from the View (eye) action. Displays:

  • Address — full formatted location
  • Contact — phone and email
  • Hierarchy & Management — parent branch, manager, base branch flag
  • Status — active/inactive with description

Header shows status chip and Edit button (returns to branch list to open edit dialog).

FAQ — Branch profile

403 or branch not found when viewing.

You can only view branches your user is allowed to access. Non-admin users cannot open other branches' profiles.

7. How branches affect the rest of the ERP

FeatureBehaviour
Branch switcher (top bar)Admin and BranchManager can switch active branch. Other users are locked to their assigned branch.
Active branch stateChanging branch reloads data on subscribed pages (inventory, reports, etc.).
Billing / ProcurementDocuments are posted to the selected or assigned branch.
POSTerminal uses branch from POS Settings default or session branch. Branch code appears in receipt numbers.
WMS / WarehousesWarehouses link to branches — create branches before warehouses (WMS guide).
UsersEach user has a BranchId — controls data visibility.
Financial reportsBranch P&L comparison and branch-scoped GL reports use branch master data.

FAQ — Multi-branch operations

User sees wrong branch data after login.

Check the user's assigned branch in User Management. Admin users can switch branch from the top bar; regular users cannot.

Branch switcher is missing.

Only Admin and BranchManager roles get the switcher with all branches. Ensure at least one active branch exists.

Module Guide

Financials & Accounting

The Financials module is the accounting backbone of CognitixERP. It defines how money is measured (currency), when transactions can post (fiscal year & periods), where they land (chart of accounts & GL mappings), and how tax and payments are handled. Billing, Procurement, POS, Banking, and Payroll all post into this module automatically once setup is complete. After Financials setup, continue with the dedicated Banking guide for bank accounts, reconciliation, and cheques.

Prerequisite: complete Branching & Company Setup first (company profile, branches, timezone). Financial amounts use company timezone and branch context.

Recommended setup order

1 · Currency 2 · Exchange Rates 3 · Fiscal Year 4 · Chart of Accounts 5 · GL Mappings 6 · Tax Rates 7 · Payment Methods 8 · Payment Journals 9 · Cost Centers 10 · Opening Balance 11 · Operations 12 · Reports

Routes at a glance — setup phase

Navigation & permissions (setup screens)

Menu path Route Permission page
Financials → Currency Management/financials/currencyCurrency
Financials → Exchange Rate Management/financials/exchangerateExchangeRate
Financials → Fiscal Years/financials/fiscalyearsFiscalYears
Financials → Chart of Accounts/financials/chartofaccountsChartOfAccounts
Financials → GL Account Mappings/financials/gl-account-mappingsGlAccountMappings
Financials → Tax & Compliance → Taxation/financials/taxationTaxation
Financials → Payment Methods/financials/payment-methodsPaymentMethods
Financials → Payment Journals/financials/payment-journalsPaymentJournals
Financials → Cost Centers/financials/costcentersCostCenters
Financials → Opening Balance/financials/opening-balanceOpeningBalance

Part 1 — Foundation Setup (in order)

Step 1 — Currency Management

Menu: Financials → Currency Management  |  Route: /financials/currency

Configure this before anything else in Financials. Every amount in the ERP — invoices, stock valuation, payroll, reports — uses the base currency's decimal places and symbol. A warning banner appears at the top until a base currency is configured.

Add Currency dialog in Currency Management
Add Currency — Financials → Currency Management → Add Currency. Set Currency Code, Symbol, Name, Decimal Places, and Base vs Foreign.

Example — Set BDT as base currency

  1. Go to Financials → Currency Management.
  2. Click Add Currency (or Add Base Currency from the warning banner).
  3. Enter Code BDT, Symbol , Name Bangladeshi Taka, Decimal Places 2, and mark as Base.
  4. Save.

Result: The base-currency warning disappears and all amounts use ৳ with 2 decimal places.

How to configure

  1. Click Add Currency (or Add Base Currency from the warning banner).
  2. In the dialog, enter:
    • Currency Code — 3-letter ISO code (e.g. BDT, USD, JPY). Cannot be changed after create.
    • Symbol — display symbol (e.g. ৳, $, ¥).
    • Currency Name — full name (e.g. Bangladeshi Taka).
    • Decimal Places — 0 for JPY, 2 for USD/BDT, 3 for KWD. Preview shows format (N0, N2, N3).
    • Base vs Foreign — mark exactly one currency as Base.
  3. Save. The table shows Base/Secondary chip, decimal format, and Active status.
  4. To change base currency later, use the ★ star icon on a foreign currency row (confirmation required; blocked if journal entries already exist).

FAQ — Currency

Why do all amounts show 2 decimal places?

Decimal places come from Currency Management — not hardcoded. Set the correct decimal places on your base currency (e.g. JPY = 0, KWD = 3).

Can I delete the base currency?

No — the delete button is disabled on the base currency. Set another currency as base first, then delete the old one if it has no transactions.

Base currency not configured warning won't go away.

Create a currency and mark it as Base, or click the ★ icon on an existing currency to set it as base.

Step 2 — Exchange Rate Management (multi-currency only)

Menu: Financials → Exchange Rate Management  |  Route: /financials/exchangerate

Skip this step if you operate in a single currency. Required when you sell, purchase, or hold balances in foreign currencies. Requires Step 1 — base currency and foreign currencies added.

Add Exchange Rate dialog
Add Exchange Rate — Financials → Exchange Rate Management. Choose From/To currencies, rate, and effective date.

Example — Add USD → BDT rate

  1. Open Financials → Exchange Rate Management.
  2. Click Add Exchange Rate.
  3. Select From USD, To base BDT, enter today’s Rate and Effective Date, mark Active.
  4. Save.

Result: Foreign-currency invoices convert using this rate from the effective date forward.

How to configure

  1. Click Add Exchange Rate.
  2. Select From Currency (foreign) and confirm Base Currency (to).
  3. Enter Rate and Effective Date — the rate valid from that date forward.
  4. Mark as Active. Update rates when market rates change; add new rows with new effective dates rather than overwriting history.

FAQ — Exchange Rates

Invoice in USD but base is BDT — what rate is used?

The active exchange rate for the transaction date (or the rate effective on that date). Ensure a rate exists before posting foreign-currency documents.

When do I use Currency Revaluation?

After go-live, use /financials/currency-revaluation at period-end to post unrealized FX gain/loss. Setup exchange rates first (this step).

Step 3 — Fiscal Years & Accounting Periods

Menu: Financials → Fiscal Years  |  Route: /financials/fiscalyears

Defines your financial calendar. Journal entries, opening balances, and module auto-posting can only occur inside an open accounting period of an active fiscal year.

Add Fiscal Year dialog
Add Fiscal Year — Financials → Fiscal Years. Enter name, start/end dates, and Active status.

Example — Create FY 2025–2026

  1. Go to Financials → Fiscal Years.
  2. Click Add Fiscal Year.
  3. Name 2025-2026, set Start/End dates covering the year, toggle Active, then Save.
  4. Select the year and add monthly accounting periods (Open for current month).

Result: Journal entries and opening balances can post only inside open periods of this fiscal year.

3A — Create a fiscal year

  1. Click Add Fiscal Year.
  2. Enter Name (e.g. 2025-2026).
  3. Set Start Date and End Date — end must be after start. Start date auto-suggests a one-year range.
  4. Toggle Active on for the current operating year.
  5. Save. Use the activate (play) icon to activate an inactive year; only one should be active at a time.

3B — Accounting periods (same page, lower section)

  1. Click a fiscal year row in the top table to select it.
  2. Click Add Accounting Period in the periods section.
  3. Create periods covering the full fiscal year (monthly is typical: Jan, Feb, … Dec).
  4. Each period has Start Date, End Date, and status: Open, Pending, or Closed.
  5. Use the close-period action to close a period after month-end. Closed periods block new postings.

Year-end close: when the fiscal year end date is reached, use the year-end close icon on the active year. Admin can reopen a closed year if needed.

FAQ — Fiscal Year & Periods

Opening balance says "No accounting period found".

Create accounting periods on the Fiscal Years page that cover the fiscal year start date. Opening balance posts on the FY start date only.

Cannot post a journal entry — period closed.

The transaction date falls in a closed period. Reopen the period (reopen icon) or adjust the entry date to an open period.

Can I edit a closed fiscal year?

No — edit and delete are disabled on closed years. Admin can reopen the year, make corrections, then close again.

Step 4 — Chart of Accounts (COA)

Menu: Financials → Chart of Accounts  |  Route: /financials/chartofaccounts

Your complete list of GL accounts. Every automatic posting from Billing, Inventory, POS, and Banking targets accounts defined here. Requires Steps 1 and 3. Create COA before GL mappings and opening balances.

Add Account dialog in Chart of Accounts
Add Account — Financials → Chart of Accounts → Add Account. Set code, name, type, sub-type, and optional parent.

Example — Add a Cash account

  1. Open Financials → Chart of Accounts.
  2. Click Add Account.
  3. Code 1010, Name Cash on Hand, Type Asset, Sub-Type Cash, mark Active.
  4. Save.

Result: The account appears in COA and can be used in GL mappings and payment journals.

How to configure

  1. Review the stat cards (Asset, Liability, Equity, Revenue, Expense counts) — click to filter by type.
  2. Click Add Account or use Sync GL Accounts if your installation seeds default accounts.
  3. In the account dialog:
    • Account Code — unique numeric/alphanumeric code (e.g. 1010 Cash, 4010 Sales Revenue).
    • Account Name — descriptive name.
    • Account Type — Asset, Liability, Equity, Revenue, or Expense.
    • Account Sub-Type — Receivable, Payable, Bank, Cash, Fixed Asset, etc. (used by reports and mappings).
    • Parent Account — optional hierarchy for roll-up reports.
    • Active — inactive accounts cannot receive new postings.
  4. Build a standard structure: Current Assets → Cash/Bank/Receivables; Current Liabilities → Payables/Tax Payable; Equity → Retained Earnings; Revenue & Expense accounts for operations.

FAQ — Chart of Accounts

What does Sync GL Accounts do?

Imports or refreshes system-default GL accounts required by CognitixERP modules. Run once during initial setup, then add custom accounts manually.

Can I delete an account with transactions?

Accounts with posted history should be deactivated (set Inactive), not deleted, to preserve audit trail and report integrity.

Which accounts do I need minimum for Billing + Inventory?

At minimum: Accounts Receivable, Sales Revenue, Inventory Asset, COGS, Tax Payable, Cash/Bank. GL Mappings (Step 5) link transaction types to these accounts.

Step 5 — GL Account Mappings

Menu: Financials → GL Account Mappings  |  Route: /financials/gl-account-mappings

Tells CognitixERP which COA account each transaction type posts to. Without correct mappings, invoice approval, GRN, POS sales, and payments will fail or post to wrong accounts. Requires Step 4 — Chart of Accounts.

Add GL Account Mapping dialog
Add GL Mapping — Financials → GL Account Mappings. Choose mapping type, COA account, and All Branches or Branch Specific scope.

Example — Map Sales Revenue

  1. Open Financials → GL Account Mappings.
  2. Click Add Mapping.
  3. Select Mapping Type for sales revenue, pick your Revenue account (e.g. 4010), Scope All Branches, Active.
  4. Save. Repeat for AR, Inventory, Tax Payable, and Clearing as needed.

Result: Approved invoices and POS sales post to the correct GL accounts automatically.

How to configure

  1. Review category stat cards: Core, Tax & WHT, Inventory, Revenue & Expense, Clearing & Interim.
  2. Click a category to filter. Scan default mappings pre-seeded by the system.
  3. Click Add Mapping or edit an existing row:
    • Mapping Type — transaction type (e.g. Sales Revenue, Accounts Receivable, Inventory Asset, VAT Payable). Fixed after create.
    • Account Code — autocomplete from your COA.
    • ScopeAll Branches (default) or Branch Specific override for one location.
    • Active — inactive mappings fall back to system default.
  4. Verify Inventory, Revenue, Tax, and Clearing categories before going live with Billing or Procurement.

FAQ — GL Mappings

Invoice approved but no GL entry / posting error.

Check GL Account Mappings for Sales, AR, Tax, and Inventory categories. Ensure mapped account codes exist and are active in COA.

Branch-specific mapping vs default — which wins?

Branch-specific overrides take priority over the "All Branches" default for that branch. Other branches still use the default.

Do I need Payment Method Matrix too?

GL Mappings are required. Payment Method Matrix (/financials/payment-method-matrix) is optional advanced routing — configure after payment methods (Step 7) if needed.

Step 6 — Taxation (Tax Rates & Tax Groups)

Menu: Financials → Tax & Compliance → Taxation  |  Route: /financials/taxation

Configure VAT/GST/sales tax and withholding (WHT/TDS) rates used on invoices, purchase bills, and POS. Requires COA for WHT accounts when using Withholding category.

New Tax Rate dialog in Taxation
New Tax Rate — Financials → Taxation → Add Tax. Set name, rate, type, category, scope, and effective dates.

Example — Create VAT 15%

  1. Go to Financials → Taxation.
  2. Click Add Tax.
  3. Name VAT 15%, Rate 15, Type Percentage, Category Standard, Scope Both (or Sales), set Effective Date.
  4. Save. Optionally create a Tax Group that includes this rate for products.

Result: Invoices and POS lines can apply VAT 15% using this tax rate.

6A — Tax rates

  1. Click Add Tax.
  2. Enter Tax Name (e.g. VAT 15%), Rate, and Tax Type (Percentage or Fixed amount).
  3. Select Category: Standard, Zero Rate, Exempt, or WHT/TDS (withholding).
  4. Set Scope: Sales, Purchase, or Both.
  5. Set Effective Date and optional Expiry Date.
  6. For WHT/TDS: link payable and receivable GL accounts in the expanded dialog section.

6B — Tax groups (same page, lower section)

  1. Click Add Tax Group when a product needs multiple taxes combined (e.g. VAT + supplementary duty).
  2. Name the group, set effective date, and attach one or more tax rates from Step 6A.
  3. Assign tax groups to products in Inventory or line-level on invoices.

FAQ — Taxation

Tax not calculating on invoice.

Verify an active tax rate exists with correct Scope (Sales for invoices), effective date covers the invoice date, and the product or line has a tax assigned.

Expired tax still showing.

Rates past their Expiry Date show as expired in red. Create a new rate with a current effective date and deactivate the old one.

Where is e-invoice / GST / ZATCA setup?

Regional e-invoice gateways are configured under Tax & Compliance. Tax rates here feed those submissions.

Step 7 — Payment Methods

Menu: Financials → Payment Methods  |  Route: /financials/payment-methods

Defines how customers pay and how you record receipts — Cash, MFS (bKash/Nagad), Card, Gateway, Cheque, Other. Required for customer receipts, supplier payments, and POS. Requires COA cash/clearing accounts. GL routing is configured on Payment Journals, not on this screen.

New Payment Method dialog
New Payment Method — Financials → Payment Methods → Add. Set name, code, type, and optional auto-create journals per branch.

Example — Add CASH payment method

  1. Open Financials → Payment Methods.
  2. Click Add Payment Method.
  3. Name Cash, Code CASH, Type Cash. Optionally enable Auto-create Payment Journals for your branches.
  4. Save, then verify / map journals under Payment Journals.

Result: Customer receipts, supplier payments, and POS can select Cash as a payment method.

How to configure

  1. Click Add Payment Method.
  2. Enter Name, optional Icon emoji, and unique uppercase Code (e.g. CASH, BKASH).
  3. Select Type: Cash, MFS, Card, Gateway, Cheque, or Other.
  4. Enable Requires Reference for Card/MFS/Gateway — forces transaction ID on receipt entry.
  5. On create, use Auto-create Payment Journals to provision a branch journal + routing link in one step (Admin can select multiple branches).
  6. Bank payments: do not create a Bank-type payment method here — use Banking → New Bank Account instead (auto-creates COA + Bank-type payment journal).
  7. After saving, map each method to the correct cash/clearing GL via Payment Journals → Payment Method Lines.

FAQ — Payment Methods

System default methods — can I delete them?

Methods marked "System" are seeded defaults. You can deactivate but should not delete them if modules reference their codes.

POS payment method not appearing.

Ensure the method is Active and enabled in POS Settings. Cash methods are most common for retail POS.

Step 8 — Payment Journals (GL routing for receipts & payments)

Menu: Financials → Payment Journals  |  Route: /financials/payment-journals  |  Permission: PaymentJournals

A Payment Journal is a branch-scoped master record that tells CognitixERP which Chart of Accounts asset account to debit or credit when money moves — customer receipts, supplier payments, POS settlements, and CRM advance payments. It is not a batch payment screen and not the same as Journal Entry (/financials/journalentry): Payment Journal is configuration; Journal Entry is the posted debit/credit document.

Payment Journals list and configuration page
Payment Journals — Financials → Payment Journals. Branch-scoped journals link payment methods to cash/bank GL accounts.

Example — Review Cash journal for a branch

  1. Open Financials → Payment Journals.
  2. Filter or select your branch and locate the Cash-type journal.
  3. Confirm Default GL points to your cash account; mark Default if needed.
  4. Open Payment Method Lines and ensure CASH is linked to this journal.

Result: Cash receipts and POS cash sales post to the correct GL automatically.

Prerequisites: Chart of Accounts (cash, bank, MFS clearing asset accounts) · Payment Methods (CASH, BKASH, CARD, etc.) · Branches (one journal set per branch) · optional Banking → Bank Accounts (auto-creates Bank-type journals) — see full Bank Accounts guide. Complete before customer receipts, supplier payments, or POS go-live.

Why payment journals matter

Every operational payment screen asks for a Payment Method (what the customer or supplier used) and a Payment Journal (which GL bucket receives or sends the cash). Without journals, receipts and payments fall back to legacy GL mapping codes (1010 Cash / 1020 Bank) and cannot distinguish, for example, Dhaka petty cash from Chittagong petty cash, or bKash merchant from Nagad merchant. Payment journals also enable multi-currency locks, bank reconciliation links, and Phase 2 in-transit (outstanding) posting.

Conceptual model

ConceptDescription
Payment JournalBranch-owned container with a Default GL Account (where settled cash lives), optional Outstanding GL (in-transit), optional currency lock, and optional Bank Account link.
Payment Method LineBridge row linking one Payment Method code to one journal for that branch. Drives auto-selection on payment screens.
Journal typesCash, Bank, MFS, Card, Cheque — filters eligible GL subtypes and payment picker lists.
Default flagExactly one active journal per (Branch, Type) can be marked default — used when no Payment Method Line match exists.
Effective currencyBank-linked journals inherit the bank account currency. Others use the optional currency field, or accept any currency when set to multi-currency.

Typical branch setup examples

Journal nameTypeDefault GLPayment method lines
Dhaka Petty CashCash1010 — Cash on HandCASH
Dhaka bKash MerchantMFS1015 — bKash ClearingBKASH
Dhaka DBBL BDTBank1021 — DBBL Current (from bank account)BANK (if used)
Dhaka Visa TerminalCard1018 — Card ClearingCARD, VISA
Dhaka Cheque InwardCheque1019 — Cheques in HandCHEQUE

Page layout

  1. Branch picker (required) — autocomplete at top. All journals and lines are branch-scoped. Changing branch reloads the table and cancels any open create/edit form.
  2. New Journal — opens inline create form (disabled until a branch is selected).
  3. Journals table — lists all journals for the branch (active and inactive).
  4. Payment Method Lines panel — opens when you click the list icon on a journal row; manage method-to-journal links.

Create / Edit journal — form fields

FieldRequiredDescription
NameYesDisplay label in payment pickers and reports (max 150 chars). Example: Dhaka HSBC USD Operating.
CodeYesShort uppercase machine code (max 40 chars), unique per branch. Used in JE reference prefixes. Example: DHK-HSBC-USD. Stored uppercased on save.
TypeYesCash · Bank · MFS · Card · Cheque. Drives GL account subtype filter and payment-screen journal filtering.
Default GL AccountYesPrimary asset account debited (receipt) or credited (payment). Account picker shows Asset accounts only; subtype filtered by Type (Cash → Cash/None; Bank → Bank/None; MFS/Card/Cheque → Bank/Cash/None clearing-style).
Outstanding GL AccountNoOptional in-transit / clearing account (Phase 2). When set, payments post here first; bank reconciliation moves balance to Default GL. Shown with “Phase 2” chip in the table when configured.
CurrencyNoOptional ISO currency lock (BDT, USD, …). Leave as — multi-currency — to accept any document currency. Auto-filled from base currency on new Cash/MFS journals; locked read-only when a bank account is linked.
Bank AccountBank typeShown read-only when Type = Bank. Auto-assigned from the branch’s first active bank account on create. Links journal to Banking module for statement import and reconciliation. Default GL and currency derive from the bank record — not editable while linked.
DefaultNoWhen checked, becomes the default journal for this branch + type. Backend demotes any previous default automatically.
ActiveNoInactive journals are hidden from new payment dropdowns; historical postings remain valid. Deactivating also clears the default flag.

Type-specific behaviour

TypeGL picker constraintBank linkTypical use
CashAsset · Cash or generic subtypeNonePetty cash, POS cash drawer, branch cash on hand.
BankAuto from bank CoARequired (auto-assigned)Company bank accounts — usually auto-created with Banking → New Bank Account.
MFSAsset · clearing subtypesNonebKash, Nagad, Rocket merchant wallets.
CardAsset · clearing subtypesNonePOS card terminal, payment gateway settlements.
ChequeAsset · clearing subtypesNoneCheques received or issued before bank clearance.

Journals table columns

ColumnDescription
NameJournal name; “Linked to bank” caption when BankAccountId is set.
CodeMachine code chip.
TypeColour-coded type chip.
Default GLaccount code — account name monospace display.
Outstanding GLIn-transit account when configured; otherwise em dash.
CurrencyISO code chip, or Multi when unlocked.
DefaultStar icon when this is the branch default for its type.
StatusActive / Inactive chip.
ActionsLines (manage payment methods) · Edit · Deactivate (active rows only).

Payment Method Lines panel

Click the list icon on a journal row to open Payment Method Lines for that journal. Each line binds one global Payment Method to this journal for the current branch context.

Field / actionDescription
Select Payment MethodDropdown of active payment methods (name + code).
Add LineCreates an active line with auto-incremented sequence. Same method can exist on different journals in different branches.
SequenceDisplay order when multiple lines match (lower first). Tie-break: default journal wins.
Deactivate lineSoft-deactivates the routing link without deleting history.

Resolution query joins PaymentMethodLinePaymentJournal where journal.BranchId = payment branch, both row and journal are active, ordered by journal.IsDefault DESC, then line.Sequence ASC.

How payment screens auto-select a journal

Billing, Procurement, CRM, and POS call GetForPaymentAsync(branchId, paymentMethodCode, documentCurrencyCode). The picker applies this logic:

  1. Method → type filter — Cash methods show Cash journals; MFS → MFS; Card/Gateway → Card; Cheque → Cheque; Bank → Bank; Other → no type filter.
  2. Payment Method Line match — if a line exists for the branch + method, that journal is flagged Recommended and sorted first.
  3. Currency filter — journals locked to a different currency than the document are excluded. If any journal is explicitly locked to the document currency, only those are shown (prevents a USD receipt from picking a generic multi-currency cash journal when a dedicated USD cash journal exists).
  4. Default journal — within the filtered list, the branch default for that type is preferred.
  5. Auto-select — UI pre-selects: recommended journal → else default → else first available. User can override when multiple journals remain valid.

GL posting — customer receipt (AR)

When a customer payment is approved, Financials posts a journal entry roughly as:

LineDebitCreditAccount source
Cash/Bank inflow (net)Payment Journal Outstanding GL if set, else Default GL
WHT Receivable✓ (if WHT)Tax record GL from Taxation
Accounts ReceivableGL Mapping AR
Advance from Customers✓ (excess)GL Mapping when payment exceeds open invoices

Reference number pattern: CP-{paymentId}. The selected PaymentJournalId is stored on the payment record for audit and reporting.

GL posting — supplier payment (AP)

LineDebitCreditAccount source
Accounts PayableGL Mapping AP
Cash/Bank outflow (net)Payment Journal Default / Outstanding GL
WHT Payable✓ (if WHT)Tax record GL
Advance to Suppliers✓ (excess)GL Mapping when payment exceeds open invoices

Supplier payments enforce a balance guard on Cash/Bank/MFS GL accounts — insufficient balance blocks the payment before posting.

Phase 2 — Outstanding GL & bank reconciliation

When Outstanding GL Account is configured on a journal, the payment posts to that in-transit account first. An Outstanding Payment record is created for Banking reconciliation. When the bank statement line is matched, the balance moves from Outstanding GL to Default GL (typically the linked bank CoA). Use this for cheque clearing, gateway settlement delays, or MFS T+1 settlement patterns.

Multi-currency

  • Multi-currency journal (CurrencyCode = null) — accepts receipts/payments in any document currency; FX conversion uses exchange rates from Exchange Rates.
  • Currency-locked journal — only appears in pickers when document currency matches (e.g. dedicated USD cash journal for foreign-currency customers).
  • Bank-linked journal — currency locked to the bank account currency automatically; mismatch between payment currency and bank currency should be resolved via FX or a different journal.

WHT interaction

Withholding tax does not change which payment journal is selected. WHT adds separate GL lines (WHT Receivable on customer receipts, WHT Payable on supplier payments) alongside the journal’s cash/bank line. Configure WHT tax records in Taxation before enabling deduction on payment forms.

Auto-provisioning shortcuts

TriggerWhat is createdFollow-up
Payment Methods → Add (create)Optional per-branch journal + Payment Method Line when “Auto-create Payment Journals” branches are checked.Verify Default GL on each auto journal; set as default if needed.
Banking → New Bank AccountBank-type payment journal linked to the new account (BANK-{slug} code pattern).Mark as default Bank journal; add Payment Method Line if paying via BANK code. See Bank Accounts.

Cross-module integration

ModuleScreenPayment journal usage
BillingCustomer Receipt, Customer Payment dialog, Invoice inline paymentRequired picker — auto-resolved from method + currency + branch.
ProcurementSupplier Payment, Supplier Payment dialog, Invoice inline paymentSame resolution rules as Billing; balance guard on outflow accounts.
CRMCustomer Details → Make Payment / Pay AdvanceNavigates to Billing receipt or opens payment dialog with journal picker.
POSPOS terminal payment stepJournal auto-resolved — required before checkout. See POS payment guide.
BankingBank reconciliation, statement importBank-linked journals connect payments to bank accounts for matching. See Reconciliation.
Financials reportsPayment Journal report, Payment Method Ledger, Outstanding PaymentsAudit cash movement by journal and method.

Related setup screens (legacy / advanced)

  • Payment Method Matrix (/financials/payment-method-matrix) — optional advanced routing; Payment Method Lines on Payment Journals are the primary path.
  • Branch Cash Mapping (/financials/branch-cash-mapping) — legacy branch-specific Cash/Bank/Cheque GL overrides used when no payment journal is selected; prefer journals for new deployments.

Recommended go-live checklist (per branch)

  1. Create at least one Cash journal → Default GL = branch cash account → mark Default → add CASH Payment Method Line.
  2. For each MFS/Card method in use, create matching-type journal → map clearing GL → add method line.
  3. Register bank accounts in Banking (auto journal) or manually create Bank-type journals → verify Default GL matches bank CoA.
  4. Test one customer receipt and one supplier payment — confirm JE hits expected GL accounts.
  5. Run Payment Journal report (/financials/reports/payment-journal) and Trial Balance to verify balances.

Payment Journal report

Route: /financials/reports/payment-journal  |  Permission: FinancialsReportPaymentJournal

Transaction register filtered by date range, fiscal year, accounting period, branch, cost center, and currency. Use to reconcile journal activity against bank statements and payment method ledger.

FAQ — Payment Journals

Payment journal dropdown is empty on customer receipt.

Ensure at least one active journal exists for the receipt branch and matches the payment method type. Create a journal, add a Payment Method Line for the selected method, and verify currency lock matches the invoice/receipt currency.

Wrong GL account on posted payment.

Check the Payment Journal’s Default GL (and Outstanding GL if Phase 2). Payment methods no longer carry their own GL account — routing is journal-only. Edit the journal or select a different journal on the payment form.

Duplicate journal code error.

Journal Code must be unique within the branch. Rename or deactivate the old journal.

Bank journal Default GL is read-only.

Bank-type journals linked to a Banking account inherit GL and currency from that account. Update the bank account’s CoA link in Banking, not the journal directly.

Can I delete a payment journal?

Use Deactivate instead. Historical payments retain their stored PaymentJournalId for audit. Inactive journals are excluded from new payments.

Payment journal vs Journal Entry — which do I use?

Configure Payment Journals once during setup. Operational modules create Journal Entries automatically when you record receipts and payments. Use manual Journal Entry only for adjustments not covered by Billing, Procurement, or Banking.

Two branches share one bKash wallet — one journal or two?

Create one journal per branch (branch-scoped). If the wallet is truly centralised, post inter-branch clearing via GL mappings; do not share a single journal across branches.

Step 9 — Cost Centers (optional)

Menu: Financials → Cost Centers  |  Route: /financials/costcenters

Optional departmental or project tracking for P&L analysis. Configure before operational posting if you want cost center on every expense and journal line.

Cost Centers list page
Cost Centers — Financials → Cost Centers. Optional hierarchy for departmental / project P&L tracking.

Example — Add an Admin cost center

  1. Go to Financials → Cost Centers.
  2. Click Add Cost Center.
  3. Enter code and name (e.g. ADMIN / Administration), optional parent, then Save.

Result: Expenses and journal lines can assign this cost center for reporting.

How to configure

  1. Click Add Cost Center.
  2. Enter code, name, and optional parent for hierarchy (e.g. Admin → HR → Training).
  3. Assign cost centers on journal entries, expenses, and reports that support dimensional analysis.

FAQ — Cost Centers

Cost center required error on expense.

Your organization may require cost center on certain account types. Create centers first, then select on the transaction.

Step 10 — Opening Balance (migration / go-live)

Menu: Financials → Opening Balance  |  Route: /financials/opening-balance

Post opening GL balances when migrating from another system or starting mid-year with existing balances. Post once per branch before daily operations. Requires Steps 3, 4, 5, and branches from Branching module.

Opening Balance migration go-live screen
Opening Balance — Financials → Opening Balance. Post balanced GL opening entries once per branch at fiscal year start.

Example — Post opening balances for Head Office

  1. Open Financials → Opening Balance.
  2. Select the branch (entry date is locked to fiscal year start).
  3. Add balanced debit/credit lines for cash, bank, AR, AP, inventory, and equity.
  4. Confirm totals match, then click Post Opening Balance and check Trial Balance.

Result: Opening GL balances are posted for that branch and ready for live transactions.

How to post

  1. Select Branch — entry date is locked to fiscal year start (shown read-only).
  2. Add balanced lines — each row is a From/To pair (debit and credit accounts with amounts).
  3. Include balance sheet accounts: cash, bank, receivables, payables, inventory, equity/opening balance equity.
  4. Verify total debits equal total credits before posting.
  5. Click Post Opening Balance. Run Trial Balance to confirm.

FAQ — Opening Balance

Can I change the opening balance date?

No — opening balance must post on the fiscal year start date by design. Adjust fiscal year dates if needed before posting.

Opening balance posted twice by mistake.

Reverse via a manual journal entry or contact your administrator. Avoid re-posting — check Trial Balance after first post.

Inventory opening stock vs GL opening balance?

GL opening balance sets account balances. Inventory quantities are entered separately under Inventory → Branch Opening Stock. Both should reconcile to the same inventory asset value.

Part 2 — Daily Operations

After foundation setup, use these screens for day-to-day accounting. All posting screens validate that the transaction date falls in an open accounting period.

Journal Entry (manual GL)

Menu: Financials → Journal Entry  |  Routes: /financials/journalentry · new /financials/journalentry/new · view /financials/journalentry/{id} · edit /financials/journalentry/{id}/edit

Use for adjustments, accruals, depreciation, and transactions not created by Billing, Procurement, POS, or Banking. Module documents post automatically — do not duplicate them here.

Header fields

FieldDescription
Entry DateMust fall in an open accounting period. Blocked if period is closed.
BranchBranch scope for the entry — affects branch P&L reports.
Reference / NarrationDocument reference and description on GL ledger.
CurrencyBase or foreign; foreign lines use exchange rate for base-currency totals.

Line fields

FieldDescription
AccountCOA account from Chart of Accounts — must be active.
Debit / CreditEnter amount on one side only per line. Total debits must equal total credits.
Cost CenterOptional dimensional tag when cost center tracking is enabled.
PartyOptional customer/supplier link for party ledger reports.

FAQ — Journal Entry

Entry date outside open period.

Create or reopen an accounting period on Fiscal Years that covers the date, or change the entry date to an open period.

Expenses & recurring expenses

Routes: /financials/expenses · /financials/recurring-expenses

Record operational expenses (rent, utilities, travel). Workflow: create → approve → pay. Approved expenses post debit to expense account and credit to cash/payable via GL mappings. Recurring expenses auto-generate drafts on schedule (monthly rent, subscriptions).

Payment journals & method matrix

Routes: /financials/payment-journals · /financials/payment-method-matrix · /financials/branch-cash-mapping

Payment journals — branch-scoped GL routing containers for cash, bank, MFS, card, and cheque movements. Configure once during setup; operational modules auto-select journals on every receipt and payment. See the full Payment Journals guide. Payment method matrix — optional advanced routing. Branch cash mapping — legacy POS/cash drawer GL overrides; prefer payment journals for new setups.

Currency revaluation & period close

Routes: /financials/currency-revaluation · /financials/period-close · /financials/observability/currency

FX revaluation — at month-end, post unrealized gain/loss on foreign-currency balances using current exchange rates. Requires active fiscal year and accounting period. Period close — run FX revaluation as-of date; reverse by period label (e.g. Jan-2026). Close individual accounting periods on Fiscal Years page when month-end reconciliation is complete. Currency observability — audit trail of rate usage and conversion anomalies.

TaskMenu / RouteNotes
Manual journal entriesFinancials → Journal Entry
/financials/journalentry
Debit/credit must balance. Posts to open period only.
Record expensesFinancials → Expenses
/financials/expenses
Approve and pay expenses; posts to GL.
Payment journals (setup)Financials → Payment Journals
/financials/payment-journals
Configure GL routing for receipts & payments — see guide.
Recurring expensesFinancials → Expenses (recurring)
/financials/recurring-expenses
Automate monthly rent, subscriptions, etc.
FX revaluationFinancials → Currency Revaluation
/financials/currency-revaluation
Period-end unrealized gain/loss (multi-currency).

FAQ — Daily operations

Sales invoice already posts to GL — do I need a journal entry?

No — approved invoices, GRNs, POS sales, and banking transactions post automatically via GL mappings. Manual journals are for adjustments, accruals, and non-module transactions.

Journal entry out of balance error.

Total debits must equal total credits in base currency. Check decimal places and FX conversion on foreign-currency lines.

Part 3 — Reports & Period Close

Financial statements

Core statements filter by fiscal year, accounting period, branch, cost center, and currency.

ReportRouteWhen to use
Trial Balance/financials/trialbalanceAfter opening balance — verify debits = credits.
General Ledger/financials/ledgerAccount transaction detail with running balance.
Balance Sheet/financials/balance-sheetAssets, liabilities, equity snapshot.
Profit & Loss/financials/profit-and-lossRevenue vs expense for a period.
Cash Flow/financials/cash-flowCash movement analysis.

Financials Reports hub

Route: /financials/reports

Access with FinancialsReports or any individual report permission.

ReportRoute
Dashboard snapshot/financials/reports/dashboard-snapshot
Journal register/financials/reports/journal-register
COA register/financials/reports/coa-register
Account balance/financials/reports/account-balance
Payment method ledger/financials/reports/payment-method-ledger
Payment journal/financials/reports/payment-journal
Expense summary / register/financials/reports/expense-summary, /financials/reports/expense-register
Outstanding payments/financials/reports/outstanding-payments
Cost center P&L/financials/reports/cost-center-pl
Branch P&L comparison/financials/reports/branch-pl-comparison
FX revaluation / currency gain-loss/financials/reports/fx-revaluation, /financials/reports/currency-gain-loss
Fiscal close summary/financials/reports/fiscal-close-summary
Audit trail/financials/reports/audit-trail
Party ledger/financials/reports/party-ledger
WHT summary/financials/reports/wht-summary
ReportRouteWhen to use
Tax Summary / WHT Report/financials/tax-report, /financials/wht-reportTax period reconciliation — see Tax & Compliance.

Month-end checklist: close accounting period → run Trial Balance → review P&L → run tax reports → (multi-currency) run FX revaluation → at year-end, close fiscal year.

Setup dependency reference

You want to…Complete these Financials steps first
Post any journal entry1 Currency · 3 Fiscal Year + open period · 4 COA
Approve a sales invoice to GL1–5 (through GL Mappings) · 6 Tax (if taxable)
Record customer receipt / POS payment1–5 · 7 Payment Methods · 8 Payment Journals
Migrate opening balances1–5 · 10 Opening Balance (+ Inventory opening stock)
Run Balance Sheet1–4 minimum · posted transactions or opening balance
Multi-currency invoice1–2 Exchange Rates · 4–6
Module Guide

Banking

Banking manages company bank accounts, manual and imported bank transactions, inter-account transfers, cheque books (issue/clear/bounce), bank statement import, reconciliation against ERP payments and receipts, and banking analytics. Each bank account links to a Chart of Accounts asset and auto-creates a Bank-type Payment Journal for Billing, Procurement, and POS.

Prerequisites: Branches · Chart of Accounts (Bank asset accounts) · Currencies · Exchange Rates (multi-currency accounts) · GL Account Mappings · Payment Journals (auto-created with bank accounts) · optional Customer receipts and Supplier payments for linked-payment reconciliation.
Important concepts: Bank account balances are derived from posted banking transactions and linked module payments — not edited directly. Statement import creates statement lines that you match to system transactions (manual bank txns, customer receipts, supplier payments, outstanding in-transit payments). Cheque workflow is separate: issue → clear or bounce. Configure Banking Posting Settings before first Fee/Interest/FX adjustment posts to GL.

Recommended setup order

1 · Posting settings 2 · Bank accounts 3 · Payment journals verify 4 · Cheque books (optional) 5 · Import statement 6 · Reconcile 7 · Reports

Bank-to-ledger flow

  1. Register account — branch, currency, CoA link (or auto-create CoA + payment journal).
  2. Record movement — manual transaction, transfer, module payment, or statement import.
  3. Post — draft transactions post to GL via linked CoA; fees/interest use posting settings.
  4. Reconcile — match statement lines to system transactions; clear outstanding payments.
  5. Review — Bank Ledger, Cash Reconciliation, Unreconciled Items reports.

Routes at a glance

Navigation & permissions

Menu path (Banking)RoutePermission page
Banking → Dashboard/bankingBankingDashboard
Banking → Accounts/banking/accountsBankAccounts
Banking → Transactions/banking/transactionsBankTransactions
Banking → Cheques/banking/chequesBankCheques
Banking → Transfer/banking/transfers/newBankTransfers
Banking → Import Statements/banking/statements/importBankStatementImport
Banking → Reconciliation/banking/reconciliation/{statementId}BankReconciliation
Banking → Ledger/banking/ledgerBankLedger
Banking → Reports/banking/reportsBankingReports + report-specific
Settings → Banking Posting Settings/settings/banking-coaBankingPostingSettings (Finance/Admin)

Part 1 — Setup

Step 1 — Banking Posting Settings

Menu: Banking → Banking Posting Settings  |  Route: /settings/banking-coa  |  Access: Finance or Admin role

Maps GL accounts for bank fee, interest, and FX gain/loss postings during reconciliation and bank transaction processing. Configure once before operational banking.

Banking Posting Settings screen
Banking Posting Settings — Banking → Banking Posting Settings. Map FX gain/loss, bank fees, and interest income GL accounts before daily banking.

Example — Configure banking GL accounts

  1. Open Banking → Banking Posting Settings.
  2. Select FX Gain/Loss, Bank Fees Expense, and Interest Income accounts from your Chart of Accounts.
  3. Save.

Result: Reconciliation fees, interest, and FX adjustments post to the correct GL lines.

FieldRequiredDescription
FX Gain/Loss AccountNoRevenue/Expense account for reconciliation FX adjustments. Empty = system default FX mapping code.
Bank Fees Expense AccountNoExpense account for bank charges. Empty = default fees mapping.
Interest Income AccountNoRevenue account for bank interest credits. Empty = default interest mapping.

Step 2 — Bank Accounts

Menu: Banking → Accounts  |  Routes: list /banking/accounts · new /banking/accounts/new · edit /banking/accounts/{id}

Bank Accounts list and management page
Bank Accounts — Banking → Accounts. Create and manage bank accounts linked to branch, currency, and CoA bank asset accounts.

Example — Add a current account

  1. Go to Banking → Accounts and click New.
  2. Enter bank name, account number, branch, currency, and linked CoA bank account.
  3. Save. A Bank-type payment journal is created automatically when configured.

Result: The account appears in the list with balance and can receive deposits, withdrawals, and transfers.

Account list — filters

FilterOptions
BranchAll or specific ERP branch.
StatusAll · Active · Inactive.

Account list — columns

ColumnDescription
BankBank name + optional bank branch name.
Account NumberAccount number; IBAN and SWIFT shown when set.
BranchERP branch chip.
CurrencyAccount currency ISO code.
CoA AccountLinked GL bank asset account code.
BalanceCurrent balance in base currency (BC).
StatusActive / Inactive.

New / Edit bank account — every field

FieldRequiredDescription
Bank NameYesFinancial institution name (e.g. DBBL, HSBC).
Bank BranchNoPhysical bank branch name (not ERP branch).
Account NumberYesCompany account number at the bank.
SWIFTNoSWIFT/BIC code for international transfers.
IBANNoInternational Bank Account Number.
BranchYesERP branch that owns this account — scopes transactions and journals.
CurrencyYesAccount currency — locks payment journal currency when linked.
CoA AccountCreate: optional · Edit: yesGL bank asset account. Leave blank on create to auto-generate BANK-{slug} CoA + Bank-type payment journal.
Reconciliation ToleranceNoAmount variance allowed when auto-matching statement lines (default 0).
Dual ApprovalNoWhen enabled, large bank transactions require second approver (workflow).
External ProviderNoOpen banking feed provider name (for Pull Feed integration).
External Provider Account IdNoProvider-side account identifier for automated statement pull.
StatusEdit onlyActive accounts appear in payment pickers; inactive preserved for history.

FAQ — Bank Accounts

Auto-create CoA and Payment Journal — what happens?

When CoA is left blank on create, backend spawns a new bank asset account and Bank-type payment journal linked to this account. Verify the journal on Payment Journals and mark as default if needed.

Can I change CoA on an account with posted transactions?

CoA link is required on edit — changing it affects future postings only; historical GL remains on the original account. Consult your accountant before relinking.

Part 2 — Transactions & transfers

Dashboard

Route: /banking

KPI overview and quick actions for daily banking operations.

Banking Dashboard with balances and quick actions
Banking Dashboard — Banking home. Total balance, inflow/outflow, unreconciled lines, account table, and quick links to Ledger, Transfers, Statements, Cheques, and Reports.

Example — Start the banking day from the dashboard

  1. Open Banking from the sidebar.
  2. Review Total Balance and Unreconciled Lines.
  3. Use quick actions to open Ledger, Import Statements, or Cheque Management as needed.

Result: You see cash position and pending reconciliation work in one screen.

KPI / panelDescription
Total Balance (BC)Sum of active account balances in base currency.
Total Inflow / OutflowPeriod movement aggregates.
Unreconciled LinesStatement lines awaiting match.
Bank Accounts tablePer-account inflow, outflow, balance.
Quick actionsOpen Ledger · Transfers · Import Statements · Cheque Management · Reports.

Step 3 — Bank Transactions

Routes: list /banking/transactions · new /banking/transactions/new · edit /banking/transactions/{id}

Bank Transactions list page
Bank Transactions — Banking → Transactions. Filter by account, date, and status; create deposits, withdrawals, fees, interest, and adjustments.

Example — Post a bank deposit

  1. Open Banking → Transactions and click New.
  2. Select account, Type Deposit, date, amount, and reference.
  3. Save / Post.

Result: The deposit appears in the transaction list and updates the account balance / ledger.

List filters

FilterDescription
AccountAll or one bank account.
From / ToTransaction date range (defaults last 30 days).
StatusDraft · Posted · Reconciled · Voided.

List columns

ColumnDescription
DateTransaction date.
AccountBank name — account number.
TypeDeposit · Withdrawal · Fee · Interest · Adjustment · TransferProxy.
ReferenceExternal or internal reference.
Amount FC / Rate / Amount BCForeign currency amount, exchange rate, base currency equivalent.
StatusWorkflow status chip.

New / Edit transaction — form fields

FieldRequiredDescription
Bank AccountYesAccount to post against — shows current BC balance in picker.
DateYesTransaction date — must fall in open accounting period.
Transaction TypeYesDeposit (inflow), Withdrawal (outflow), Fee, Interest, Adjustment, TransferProxy.
Rate SourceYesSpot · Corporate · Manual · Contract — drives FX rate lookup.
CurrencyRead-onlyLocked to selected bank account currency.
Amount FCYesAmount in account currency (min 0.01).
Exchange RateYesFC→BC rate; editable when Rate Source = Manual.
Amount BCRead-onlyComputed base currency amount.
ReferenceNoCheque number, transfer ref, etc.
Rate MemoNoFX rate note for audit.
DescriptionNoMulti-line narrative.

Workflow: Save as Draft → click Post to GL. Posted transactions show status chip; only drafts are editable.

Transaction type reference

TypeDirectionTypical use
DepositInflow (+)Cash deposit, incoming transfer, misc credit.
InterestInflow (+)Bank interest credit — posts to Interest Income GL from posting settings.
WithdrawalOutflow (−)Cash withdrawal, outgoing payment.
FeeOutflow (−)Bank charges — posts to Bank Fees Expense GL.
AdjustmentEitherManual correction entry.
TransferProxySystemGenerated leg of inter-account transfer — do not create manually.

Step 4 — Inter-account Transfers

Routes: new /banking/transfers/new · list /banking/transfers

Moves funds between two bank accounts — same branch or cross-currency with FX.

Inter-account Transfers form
Inter-account Transfers — Banking → Transfers. Move money between bank accounts with optional fee and FX rate.

Example — Transfer between two accounts

  1. Open Banking → Transfers → New.
  2. Select From Account and To Account, enter Amount, Date, and optional Reference / Fee.
  3. Confirm currency/rate if cross-currency, then Save.

Result: A withdrawal posts on From and a deposit on To (plus fee if entered).

Transfer form — every field

FieldRequiredDescription
From AccountYesSource bank account — shows BC balance.
To AccountYesDestination account (cannot equal From).
Amount FCYesTransfer amount in selected currency.
CurrencyYesDefaults from From account; cross-currency warning when To differs.
Rate SourceYesSpot · Corporate · Manual · Contract.
Exchange RateYesEditable when Manual; auto-filled otherwise.
Amount BCRead-onlyBase currency equivalent preview.
DateYesTransfer date.
ReferenceNoBank transfer reference number.
Fee FCNoOptional bank transfer charge in FC.
DescriptionNoTransfer memo.
Rate MemoNoFX audit note.

Save posts withdrawal on From and deposit on To (plus fee transaction if specified).

Part 3 — Cheque management

Step 5 — Cheques

Route: /banking/cheques

Cheque management page
Cheques — Banking → Cheques. Manage cheque books and leaves (Available, Issued, Cleared, Bounced, Cancelled).

Example — Register a cheque book

  1. Open Banking → Cheques and select the Bank Account.
  2. Click New Cheque Book and enter Book Number, Start/End numbers, and Issued Date.
  3. Save, then issue leaves as outgoing/incoming cheques are used.

Result: Cheque leaves appear with status tracking for issue, clear, bounce, or cancel.

Page filters

FilterOptions
Bank AccountRequired — loads cheque books and leaves.
DirectionAll · Outgoing · Incoming.
StatusAvailable · Issued · Cleared · Bounced · Cancelled · Stale.

New Cheque Book dialog

FieldRequiredDescription
Book NumberYesInternal book identifier.
Series PrefixNoPrefix prepended to leaf numbers.
Start Number / End NumberYesCheque leaf range — total leaves = End − Start + 1.
Issued DateYesDate book received from bank.
Expiry DateNoBook validity end.
NotesNoInternal memo.

Issue Cheque dialog

FieldRequiredDescription
DirectionYesOutgoing (from cheque book) or Incoming (received cheque).
Cheque BookOutgoingSelect active book with available leaves.
Cheque NumberIncomingManual number for incoming cheques.
Cheque DateYesDate on cheque face.
Currency / Amount FC / Exchange Rate / Amount BCYesCheque amount with FX when foreign currency.
Payee NameNoPayee or drawer name.
Payee ReferenceNoSupplier/customer reference.
DescriptionNoPayment memo.

Cheque leaf actions

ActionWhenFields
ClearStatus = IssuedClearance Date (required); Exchange Rate Override (optional).
BounceStatus = IssuedBounce reason — reverses expected GL movement.
CancelAvailable or IssuedConfirmation — leaf marked Cancelled.

Cheque status lifecycle

StatusMeaning
AvailableLeaf in book, not yet used.
IssuedCheque written/received — awaiting bank clearance.
ClearedFunds settled — GL finalized.
BouncedCheque returned unpaid.
CancelledVoided before or after issue.
StalePast validity period without clearance.

Part 4 — Statements & reconciliation

Step 6 — Import Bank Statements

Route: /banking/statements/import

Import Bank Statements screen
Import Bank Statements — Banking → Statements Import. Upload CSV/Excel/MT940/OFX files or pull a feed, then start reconciliation.

Example — Import a CSV statement

  1. Open Banking → Statements Import.
  2. Select Bank Account and Provider (e.g. CSV), choose the statement file, click Import.
  3. Review Imported/Rejected counts, then click Start Reconciliation.

Result: Statement lines load into the reconciliation workspace for matching.

Field / actionDescription
Bank AccountTarget account for imported lines.
ProviderCSV · Excel · MT940 · OFX format parser.
Choose FileAccepts .csv, .xlsx, .xls, .sta, .mt940, .ofx, .qfx.
ImportUpload and parse — shows Imported/Rejected counts.
Pull FeedFetch from external provider when account has External Provider configured.
Start ReconciliationNavigate to reconciliation workspace for imported statement.

Preview lines columns: Date, External Id, Description, Amount FC, Currency, Rate, Amount BC, Match status (Matched/Unmatched).

Step 7 — Bank Reconciliation

Route: /banking/reconciliation/{statementId}

Two-panel workspace: Statement Lines (bank file) vs System Transactions (ERP). Match manually or via Auto-Match. Clears Phase 2 Outstanding Payments from Billing/Procurement when bank confirms receipt.

Bank Reconciliation two-panel workspace
Bank Reconciliation — match statement lines to system transactions (manual or Auto-Match), then Close Session.

Example — Reconcile an imported statement

  1. Open the reconciliation workspace from the imported statement.
  2. Enter Statement Balance, choose Strategy (STRICT or FUZZY), then Open Session.
  3. Click Auto Match or Match Selected line + transaction pairs.
  4. When complete, click Close Session.

Result: Matched items reconcile; outstanding payments clear when bank confirms receipts.

Session controls

Field / buttonDescription
Statement BalanceClosing balance per bank statement — locked after session opens.
StrategySTRICT (exact match) or FUZZY (tolerance + date window).
ToleranceAmount variance for fuzzy matching.
DaysDate window for fuzzy matching.
Open SessionStart reconciliation session for this statement.
Auto MatchBatch-match statement lines to system transactions.
Match SelectedManual link — select one line + one transaction.
UnmatchBreak an existing match.
Close SessionFinalize — posts variance, fee/FX adjustments; clears outstanding items.

System transaction link icons

IconMeaning
Receipt iconLinked to Billing customer receipt.
Payment iconLinked to Procurement supplier payment.

Outstanding payments panel

Lists in-transit payments (from Payment Journal Outstanding GL) awaiting bank confirmation. Auto-match or manual match moves balance from Outstanding GL to bank CoA on session close.

Step 8 — Bank Ledger

Route: /banking/ledger

Bank Ledger register screen
Bank Ledger — Banking → Ledger. Account register with date filters, CSV export, and jump to Financials GL Ledger.

Example — Review a month’s ledger

  1. Open Banking → Ledger.
  2. Select Account and From/To dates, then Load.
  3. Optionally Export CSV or open the linked GL Ledger.

Result: You see In/Out movements with FC/BC amounts for the selected period.

Filter / columnDescription
AccountSelect bank account.
From / ToDate range filter.
LoadRefresh register.
Export CSVDownload ledger extract.
Open GL LedgerJump to Financials General Ledger for linked CoA account.
ColumnsDate, Type, Direction (In/Out), Reference, Description, Currency, Amount FC, Rate, Amount BC.

Part 5 — Reports

Step 9 — Banking reports hub

Route: /banking/reports

23 banking analytics and control reports.

Banking reports hub page
Banking Reports Hub — Banking → Reports. Open account summary, cash flow, reconciliation, cheque, FX, and control reports from one place.

Example — Open Account Summary

  1. Go to Banking → Reports.
  2. Open Account Summary (or any needed report from the hub).
  3. Apply filters and review / export as required.

Result: You get balances and control reports without leaving the Banking module.

ReportRoutePermissionPurpose
Account Summary/banking/reports/account-summaryBankingAccountSummaryBalances across all accounts.
Bank Ledger/banking/reports/bank-ledgerBankingBankLedgerDetailed account register report.
Transaction Register/banking/reports/transaction-registerBankingTransactionRegisterAll bank transactions by period.
Cash Flow/banking/reports/cash-flowBankingCashFlowCash movement analysis.
Balance Trend/banking/reports/balance-trendBankingBalanceTrendAccount balance over time.
Transaction Volume/banking/reports/transaction-volumeBankingTransactionVolumeCount/volume by type.
Transfer Summary/banking/reports/transfer-summaryBankingTransferSummaryInter-account transfer register.
Account Register/banking/reports/account-registerBankingAccountRegisterMaster list of bank accounts.
Unreconciled Items/banking/reports/unreconciled-itemsBankingUnreconciledItemsOpen statement lines without match.
Unreconciled Aging/banking/reports/unreconciled-agingBankingUnreconciledAgingAge of unmatched items.
Reconciliation Summary/banking/reports/reconciliation-summaryBankingReconciliationSummaryClosed session outcomes.
Reconciliation Variance/banking/reports/reconciliation-varianceBankingReconciliationVarianceStatement vs book variances.
Statement Import Log/banking/reports/statement-import-logBankingStatementImportLogImport history and errors.
Match Performance/banking/reports/match-performanceBankingMatchPerformanceAuto-match success rates.
Draft vs Posted/banking/reports/draft-postedBankingDraftPostedPending draft transactions.
Linked Payments/banking/reports/linked-paymentsBankingLinkedPaymentsModule payments tied to bank txns.
Cheque Summary/banking/reports/cheque-summaryBankingChequeSummaryCheque status totals.
Cheque Register/banking/reports/cheque-registerBankingChequeRegisterAll cheque leaves detail.
Cheque Aging/banking/reports/cheque-agingBankingChequeAgingOutstanding issued cheques by age.
Approval Queue/banking/reports/approval-queueBankingApprovalQueueTransactions awaiting dual approval.
Approval Audit/banking/reports/approval-auditBankingApprovalAuditApproval trail history.
FX Exposure/banking/reports/fx-exposureBankingFxExposureForeign currency account exposure.
Fee & Interest/banking/reports/fee-interestBankingFeeInterestBank fees and interest summary.

Cross-module integration

ModuleIntegration point
FinancialsCoA bank accounts, GL posting on post/reconcile, FX/fees/interest GL from posting settings, Payment Journals auto-created per account.
BillingCustomer receipts with Bank payment method link to bank account via payment journal — appear in reconciliation.
ProcurementSupplier payments with Bank method — linked payment icon in reconciliation.
POSBank tender uses Bank-type payment journal tied to branch bank account.
Payment JournalsBank-type journals link BankAccountId — see Payment Journals guide.

Before go-live checklist

TaskDepends on
Configure Banking Posting Settings (FX, fees, interest)CoA expense/revenue accounts
Register each company bank accountBranch, currency, optional auto CoA
Verify Payment Journal per accountPayment Journals
Post opening bank balanceOpening Balance or first Deposit transaction
Import test statement and reconcile one monthCSV sample from bank
Run Unreconciled Items reportAfter first reconciliation close
Setup cheque books (if using cheques)Active bank account

FAQ — Banking

Bank balance does not match GL Trial Balance.

Compare Bank Ledger report with Financials General Ledger for the linked CoA account. Look for unposted draft transactions, unreconciled module payments, or opening balance posted only on one side.

Auto-match finds nothing.

Increase tolerance and date window, switch to FUZZY strategy, or verify system transactions are Posted (not Draft). Ensure customer receipts/supplier payments used the correct bank payment journal.

Cannot edit a bank transaction.

Only Draft status transactions are editable. Posted or Reconciled entries must be voided/adjusted via a reversing Adjustment transaction.

Payment journal missing after creating bank account.

Auto-journal creation is best-effort — if it failed, create a Bank-type journal manually on Payment Journals and link the bank account. Check server logs for the warning.

Module Guide

Tax & Compliance

Tax & Compliance connects your ERP documents to regional e-invoice gateways and statutory tax reports. It builds on company identity (Branching), tax rates (Financials), and operational documents from Billing and POS. When enabled, approved sales invoices and POS receipts can be submitted automatically to ZATCA (Saudi Arabia) or GST India; submissions are tracked in an audit log with retry support.

Prerequisites: complete Branching & Company Setup (Official Name, TIN/VAT/GST number) and Financials → Taxation (active tax rates) before enabling e-invoice compliance.
Tax compliance and e-invoicing settings screen
E-Invoice Compliance — Settings → E-Invoice Compliance. Enable one regional scheme (e.g. ZATCA / GST) after company tax ID and tax rates are configured.

Example — Open e-invoice compliance settings

  1. Complete Company TIN/VAT/GST and Financials tax rates first.
  2. Go to Settings → E-Invoice Compliance (/settings/e-invoice-compliance).
  3. Enable only the scheme that applies to your country and fill the required credentials / profile fields.
  4. Test with a sample approved invoice, then monitor E-Invoice Audit.

Result: Approved sales documents can submit to the configured gateway and appear in the audit log.

NBR (Bangladesh) — not production-ready yet: CognitixERP includes an NBR compliance tab and NBR VAT report for future use, but NBR integration is not yet complete. It is not suitable for live NBR e-invoice submission or statutory filing in this release. Full NBR support for Bangladesh is planned for a future update. For Bangladesh deployments today, configure tax rates in Financials and use Tax Summary / WHT reports internally until NBR is marked ready.

Recommended setup order

Follow these steps in sequence. Steps 5–7 apply only to your country’s scheme (ZATCA or GST India for production).

1 · Company tax ID 2 · Tax rates 3 · E-Invoice profile 4 · Test submission 5 · E-Invoice audit 6 · Regional reports 7 · Tax & WHT reports

Routes at a glance

Navigation & permissions

Menu path Route Permission page
Financials → Tax & Compliance → Taxation/financials/taxationTaxation
Financials → Tax & Compliance → E-Invoice Compliance/settings/e-invoice-complianceEInvoiceCompliance
Financials → Tax & Compliance → E-Invoice Audit/settings/e-invoice-auditEInvoiceAudit
Financials → Tax & Compliance → Tax Summary/financials/tax-reportTaxation
Financials → Tax & Compliance → WHT Report/financials/wht-reportWhtReport
Financials → Tax & Compliance → GST Reports/settings/gst-reportsGstReports
Financials → Tax & Compliance → ZATCA Reports/settings/zatca-reportsZatcaReports
Financials → Tax & Compliance → NBR Reports/settings/nbr-reportsNbrReports

Part 1 — Setup (in order)

Step 1 — Company tax identity (Branching)

Menu: Settings → Company Setup → Step 1 (Basic Information)  |  Route: /settings/company-setup

E-invoice gateways validate your legal name and tax registration against submitted documents. Enter these before configuring compliance profiles.

Company tax identity fields in Company Setup
Company tax identity — Settings → Company Setup → Basic Information. Set Official Name and TIN / VAT / GST Number before enabling e-invoice profiles.

Example — Enter company tax registration

  1. Open Settings → Company Management → Edit (Step 1 Basic Info).
  2. Confirm Official Name matches your tax registration.
  3. Enter TIN / VAT / GST Number exactly as the authority expects.
  4. Save the company wizard.

Result: Compliance profiles can pre-fill TRN/GSTIN/TIN and pass identity alignment checks.

FieldUsed for
Official NameDefault legal name on compliance profiles and e-invoice payloads.
TIN / VAT / GST NumberPre-fills TRN (ZATCA), GSTIN (India), or TIN (NBR). Must match your tax authority registration exactly.

See Branching guide — Company Setup Step 1 for full field details.

FAQ — Company tax identity

Health dashboard shows “Tax identity misaligned”.

The TIN/VAT/GST number on Company Setup does not match the number saved on your active compliance profile. Update one side so both match character-for-character (including formatting your gateway expects).

Different GSTIN per branch?

Use the Branch Scope dropdown on E-Invoice Compliance to create a separate profile per branch. Each branch profile can override the default tax ID from company setup.

Step 2 — Tax rates & tax groups (Financials)

Menu: Financials → Tax & Compliance → Taxation  |  Route: /financials/taxation

Compliance submissions read tax amounts from invoice and POS lines. Without active tax rates, documents may post to GL but fail compliance validation or report with zero tax. Complete Financials Steps 1–4 (Currency through COA) first; see Financials Step 6 — Taxation for full instructions.

Tax rates and tax groups in Financials Taxation
Tax rates & groups — Financials → Taxation. Create Standard/Zero/Exempt/WHT rates and optional tax groups used on invoices and POS.

Example — Add a sales tax rate for e-invoicing

  1. Go to Financials → Taxation.
  2. Click Add Tax and create a Standard rate with Scope Sales (or Both).
  3. Set Effective Date on or before your first live invoice.
  4. Assign the rate/group to products or invoice lines.

Result: Approved documents carry tax amounts that compliance gateways and reports can validate.

Minimum for compliance

  1. Create at least one Standard rate with correct Scope (Sales for outbound e-invoices).
  2. Set Effective Date on or before your first live invoice date.
  3. Assign tax or tax groups to products (Inventory) or invoice lines (Billing).
  4. For India GST: ensure line tax breakdown maps to CGST/SGST/IGST as applicable.
  5. For WHT/TDS reporting later: configure WHT category rates with payable/receivable GL links.

FAQ — Tax rates before compliance

Can I enable e-invoice before tax rates?

You can save a compliance profile, but submissions from zero-tax lines will not match statutory returns. Configure tax rates first.

GST India — HSN validation failed on submit.

Enable Validate HSN on submit in the GST India compliance panel only after products have valid HSN codes in Inventory. Fix product master data, then retry from E-Invoice Audit.

Step 3 — E-Invoice Compliance profiles

Menu: Financials → Tax & Compliance → E-Invoice Compliance  |  Route: /settings/e-invoice-compliance

Configure regional e-invoice integration. The page shows a health summary (enabled schemes, certificate expiry, failed submissions in last 24 hours, tax identity alignment) and a Branch Scope selector. Choose All Branches for a company-wide profile or a specific branch for branch-level registration.

Three scheme tabs are available — enable only the scheme that applies to your country for production. Do not enable multiple live gateways unless you genuinely operate under multiple regimes.

E-Invoice Compliance profiles with scheme tabs
E-Invoice Compliance profiles — Financials → E-Invoice Compliance. Choose Branch Scope, enable one scheme (ZATCA / GST India / NBR preview), set Environment and failure policy.

Example — Enable a sandbox compliance profile

  1. Open Financials → Tax & Compliance → E-Invoice Compliance.
  2. Select Branch Scope (All Branches or one branch).
  3. Open your country tab, set Environment to Sandbox, fill required IDs/credentials, enable the scheme.
  4. Save. Confirm health summary shows the scheme enabled before testing documents.

Result: Approved invoices/POS receipts can submit to the sandbox gateway and appear in E-Invoice Audit.

Common settings (all schemes)

SettingDescription
EnabledTurns on automatic submission when invoices/POS receipts are approved (subject to failure policy).
EnvironmentSandbox — test credentials and sample data presets. Production — live gateway; sandbox TRN/GSTIN/credentials are blocked.
On failure policyWarn only — document approves even if gateway rejects. Block approval — invoice cannot finalize until submission succeeds (recommended for go-live).
Legal nameRegistered business name sent to the gateway. Defaults from Company Setup.
Submit sales return complianceWhen on, credit notes / sales returns also trigger compliance submission.
Show QR on POS receiptPrints compliance QR on POS receipts when submission succeeds (ZATCA, GST, NBR panels).

3A — ZATCA (Saudi Arabia)

  1. Select the ZATCA tab.
  2. Enter TRN, optional Legal name (Arabic), and Device ID.
  3. For Sandbox: switch environment — preset test values load automatically. Save profile; sandbox may auto-provision a certificate.
  4. For Production: enter OTP from ZATCA portal, click Onboard CSID, or paste PEM certificate and private key then Upload Certificate.
  5. Save profile. Confirm green Certificate active chip before go-live.

3B — GST India

FieldDescription
GSTIN15-character GST identification — must match company registration.
IRN threshold amountMinimum invoice value requiring IRN (e-invoice).
Seller state code2-digit state code for place-of-supply logic.
GSP credentialsClient ID, Client Secret, Username, Password from GST Suvidha Provider.
B2C POS IRNSubmit IRN for retail POS receipts above threshold.
Composition schemeEnable if registered under composition — affects tax calculation.
Default RCMReverse charge mechanism default on purchase lines.
Validate HSN on submitBlock submission if product HSN missing/invalid.
Default payment modeCash/Credit/Bank for e-invoice payload.
  1. Select the GST India tab.
  2. Enter GSTIN, IRN threshold amount, and Seller state code (required).
  3. Enter GSP/API credentials: Client ID, Client Secret, Username, Password.
  4. Configure toggles: B2C POS IRN submission, composition scheme, default reverse charge (RCM), HSN validation, default payment mode.
  5. Start in Sandbox with preset credentials; switch to Production only with live GSTIN and production API keys.
  6. Save profile. GST India uses API credentials — no PEM certificate upload.

3C — NBR (Bangladesh) — preview only

Not ready for production: The NBR tab lets you save TIN and certificate placeholders, but live NBR e-invoice submission is incomplete in this release. Do not enable NBR for statutory filing. Wait for the next CognitixERP update that completes NBR integration.
  1. Select the NBR tab only for evaluation or future testing.
  2. Fields available today: TIN, Show QR on POS, PEM certificate/key (same pattern as ZATCA).
  3. Do not treat successful saves as proof of NBR acceptance — gateway integration is still being completed.

FAQ — E-Invoice Compliance

Sandbox vs Production — which first?

Always complete at least one successful test cycle in Sandbox (sample invoice → audit log → regional report) before switching Environment to Production and entering live credentials.

“Block approval” stopped my invoice.

The gateway rejected submission. Open E-Invoice Audit, read the error message, fix data (tax ID, certificate, line tax), use Retry, or temporarily set policy to Warn only while debugging (not recommended long term).

Certificate expiring soon warning.

Renew certificate with your tax authority before expiry. Upload new PEM certificate and private key, or re-run ZATCA CSID onboarding with a fresh OTP.

Can I use NBR for my Bangladesh company now?

No — not for live NBR compliance. Use Financials tax rates and internal Tax Summary reports until CognitixERP ships a completed NBR integration in a future update.

Step 4 — Post compliant documents (Billing & POS)

Once Step 3 is enabled, compliance runs at document approval time — not at draft save.

Posting compliant Billing and POS documents
Post compliant documents — approve sales invoices (Billing) or finalize POS sales so e-invoice submission triggers automatically when compliance is enabled.

Example — Submit via an approved sales invoice

  1. Create a sales invoice with tax lines and a valid customer.
  2. Approve / post the invoice (not draft save).
  3. If failure policy is Block, fix any gateway errors before finalizing; if Warn only, check Audit for status.
  4. For POS, finalize the sale and confirm QR appears when Show QR is enabled.

Result: A submission row is created in E-Invoice Audit for that document.

SourceWhen submission triggersNotes
Sales invoice (Billing)Invoice approved / postedUses customer, line tax, and company profile for active scheme.
POS receiptPOS sale finalizedQR on receipt if enabled; GST B2C IRN depends on threshold and B2C toggle.
Credit note / sales returnWhen return approvedOnly if Submit sales return compliance is enabled on profile.

Requires: customers and products set up, GL mappings configured, and tax assigned to lines. See Billing and POS module guides.

FAQ — Document submission

Invoice approved but no audit row.

Check that compliance is Enabled for your branch scope, the invoice date falls within an open fiscal period, and the active scheme matches your country. Draft invoices never submit.

POS receipt missing QR code.

Enable Show QR on POS receipt on the compliance profile and confirm submission status is Success in E-Invoice Audit.

Step 5 — E-Invoice Audit (monitor & retry)

Menu: Financials → Tax & Compliance → E-Invoice Audit  |  Route: /settings/e-invoice-audit

Central log of every compliance submission. Filter by branch, scheme (ZATCA / GST India / NBR), and status. Use this page daily during rollout and month-end reconciliation.

E-Invoice Audit monitor and retry screen
E-Invoice Audit — Financials → E-Invoice Audit. Filter by branch/scheme/status, review submissions, and Retry failed rows after fixing credentials or data.

Example — Retry a failed submission

  1. Open Financials → Tax & Compliance → E-Invoice Audit.
  2. Filter Status to Failed (and your scheme), then Refresh.
  3. Open the failed row, fix the root cause (tax ID, HSN, certificate, credentials).
  4. Click Retry and confirm status becomes Success.

Result: The document is re-submitted and the audit log updates with the new status/reference.

How to use

  1. Set filters (branch, scheme, status) and click Refresh.
  2. Review columns: submitted time, document type, scheme, status, reference/IRN, tax amount.
  3. For failed rows, open details, fix root cause, then click Retry.
  4. For GST India e-way bill eligible rows, use the e-way bill action when available.
  5. Link back to E-Invoice Compliance from the header to adjust credentials or certificates.

FAQ — E-Invoice Audit

Retry still fails with authentication error.

Credentials or certificate expired. Update on E-Invoice Compliance, save, then retry. For GST India, verify Client ID/Secret and username/password are production keys when Environment is Production.

Who needs access to this screen?

Finance managers and IT admins with the EInvoiceAudit permission. Compliance settings (EInvoiceCompliance) can be restricted to administrators only.

Part 2 — Regional & financial tax reports

Step 6A — GST Reports (India)

Menu: Financials → Tax & Compliance → GST Reports  |  Route: /settings/gst-reports

Available when GST India compliance is enabled. Set date range and branch, click Refresh, then export PDF, Excel, or CSV.

TabPurpose
GSTR-1Outward supplies — document-level taxable value and CGST/SGST/IGST totals.
GSTR-3BSummary return figures for the period.
GSTR-2AInward supplies (purchase-side) view for reconciliation.
GSTR-2BAuto-drafted ITC statement view for supplier invoice matching.

FAQ — GST Reports

“GST not enabled” message.

Enable and save GST India on E-Invoice Compliance first. Reports aggregate submitted and posted tax data for the selected period.

Step 6B — ZATCA Reports (Saudi Arabia)

Menu: Financials → Tax & Compliance → ZATCA Reports  |  Route: /settings/zatca-reports

VAT return-style summary for the date range: total taxable value, total VAT, standard-rated VAT, and document lines with clearance references. Export to PDF, Excel, or CSV.

FAQ — ZATCA Reports

Clearance reference missing on a line.

Submission may have failed or predates compliance enablement. Check E-Invoice Audit for that invoice and retry successful submission.

Step 6C — NBR Reports (Bangladesh) — preview only

Menu: Financials → Tax & Compliance → NBR Reports  |  Route: /settings/nbr-reports

Not for statutory use yet: This report layout is provided ahead of full NBR integration. Figures may not reflect live NBR portal data. Do not file NBR VAT returns from this screen until a future update completes NBR support.

When NBR is fully supported, this page will summarize taxable value and VAT for the selected period with export options — same pattern as ZATCA Reports.

Step 7 — Tax Summary Report (Financials)

Menu: Financials → Tax & Compliance → Tax Summary  |  Route: /financials/tax-report

Internal reconciliation of tax collected and paid by tax rate and period — independent of e-invoice gateway. Use alongside regional reports (GST/ZATCA) or alone when e-invoicing is not enabled (e.g. Bangladesh until NBR is ready).

  1. Select fiscal year and accounting period (or custom date range).
  2. Optionally filter by branch.
  3. Generate report and export if needed.

FAQ — Tax Summary

Tax Summary differs from GSTR-1 totals.

Tax Summary includes all GL-posted tax transactions; GSTR-1 focuses on outward supplies submitted under GST compliance. Investigate timing (period boundaries) and failed submissions in E-Invoice Audit.

Step 8 — WHT Report (withholding tax)

Menu: Financials → Tax & Compliance → WHT Report  |  Route: /financials/wht-report

Tracks withholding tax payable to suppliers and receivable from customers when WHT/TDS tax rates are configured in Taxation. Set date range and branch, then generate.

TabContents
WHT PayableAmounts withheld on supplier payments — by supplier and rate.
WHT ReceivableAmounts withheld by customers on your sales.
TransactionsDetailed WHT transaction register for the period.

Requires: WHT category tax rates with GL accounts in Taxation.

FAQ — WHT Report

Report is empty.

No transactions used WHT tax rates in the date range. Assign WHT rates on purchase/sales lines and ensure invoices are approved.

Setup dependency reference

You want to…Complete these steps first
Submit ZATCA e-invoice on approval1 Company tax ID · 2 Tax rates · 3A ZATCA profile + active certificate · GL mappings
Generate GST IRN (India)1–2 · 3B GST India credentials · products with HSN · approved sales invoice/POS
Retry a failed submission5 E-Invoice Audit (after fixing profile or document data)
File GSTR-1 / 3B figures3B enabled · successful submissions in period · 6A GST Reports
Reconcile VAT (Saudi)3A ZATCA enabled · 6B ZATCA Reports vs E-Invoice Audit
Internal tax reconciliation (any country)2 Tax rates · 7 Tax Summary
WHT return preparation2 WHT tax rates · supplier/customer transactions · 8 WHT Report
NBR live e-invoice (Bangladesh)Not available yet — wait for future CognitixERP update

Month-end compliance checklist: E-Invoice Audit (zero failures) → regional report (GST/ZATCA) → Tax Summary → WHT Report (if applicable) → close accounting period in Financials.

Module Guide

HRM (Human Resource Management)

The HRM module covers the full employee lifecycle — organisation structure, attendance, leave, payroll, loans, performance appraisals, onboarding/offboarding, and HR analytics. It integrates with branch assignment, user accounts, and Financials for payroll posting.

Prerequisites: Branching & Company (branches) · Financials (fiscal year, COA, GL mappings for payroll accounts) · optional Users & Security to link employees to login accounts.
Attendance Kiosk (modern self-service): a browser-based clock-in terminal at /hrm/kiosk — employees punch in/out with Employee Code + PIN and a webcam photo on check-in. No fingerprint hardware required. See the dedicated Attendance Kiosk guide below.

Biometric devices (optional): deploy Cognitix.BiometricAgent on Windows to sync ZKTeco-style fingerprint/face terminals with Daily Attendance. Kiosk and biometric can run together — HR reconciles all sources on Daily Attendance.

Recommended setup order

1 · Org structure 2 · Leave & holidays 3 · Shifts 4 · Attendance policy 5 · Payroll rules 6 · Employees 7 · Leave allocation 8 · Daily ops 9 · Payroll run 10 · Performance 11 · Reports

Routes at a glance

Navigation & permissions (key screens)

Menu path (HRM)RoutePermission page
HRM → Dashboard / Org Chart/hrm/dashboard, /hrm/org-chartDashboard
HRM → Departments/hrm/departmentsDepartments
HRM → Designations/hrm/designationsDesignations
HRM → Grades/hrm/gradesGrades
HRM → Contracts / Onboarding/hrm/contracts, /hrm/boarding-templatesContracts, BoardingTemplates
HRM → Shifts (all shift screens)/hrm/shiftsShifts, ShiftAssignments, etc.
HRM → Daily Attendance / Kiosk/hrm/daily-attendance, /hrm/kioskDailyAttendance
HRM → Leave Types / Applications / Allocations/hrm/leave-typesLeaveTypes, LeaveApplications, LeaveAllocations
HRM → Salary Rules / Templates / Payroll/hrm/salary-rulesSalaryRules, PayrollAndBenefits
HRM → Loans / Advances/hrm/loans, /hrm/salary-advancesEmployeeLoans, SalaryAdvances
HRM → Appraisals/hrm/appraisalsAppraisals
HRM → Reports/hrm/reportsHRMReports + report-specific

Part 1 — Organisation foundation (in order)

Step 1 — Departments

Menu: HRM → Departments  |  Route: /hrm/departments

Create your department tree first — every employee, payroll cost report, and org chart node rolls up to a department.

HRM Departments list and add dialog
Departments — HRM → Departments. Build the org tree (name, code, parent) before registering employees.

Example — Add a Finance department

  1. Open HRM → Departments and click Add Department.
  2. Enter name Finance, optional code FIN, and parent if it sits under Operations.
  3. Save. Assign a department head after employees exist.

Result: Finance appears in the department tree and can be selected on employee records and payroll cost reports.

Dialog fields

FieldRequiredDescription
Department NameYesDisplay name (e.g. Finance, Sales, Warehouse).
Department CodeNoShort code for reports and imports.
Parent DepartmentNoBuild hierarchy — sub-departments roll up to parent in org chart.
Department HeadNoEmployee assigned as manager — dropdown populated after employees exist.
ActiveYesInactive departments hidden from new employee assignment.
  1. Click Add Department.
  2. Enter name, optional code, and parent department for hierarchy.
  3. Save. Assign department head after employees are registered.

FAQ — Departments

Cannot delete department with employees.

Reassign or terminate employees first, or set department Inactive instead of deleting.

Step 2 — Designations

Menu: HRM → Designations  |  Route: /hrm/designations

Job titles (Manager, Accountant, Sales Executive). Required when registering employees.

HRM Designations list page
Designations — HRM → Designations. Define job titles used on employee profiles and payslips.

Example — Add Accountant designation

  1. Go to HRM → Designations and click Add.
  2. Enter name Accountant, optional description, keep Active.
  3. Save.

Result: Accountant is available in the designation dropdown when registering or editing employees.

FieldDescription
Designation NameTitle shown on employee profile and payslip.
DescriptionOptional role summary.
ActiveInactive designations excluded from new hires.

Step 3 — Grades (optional)

Menu: HRM → Grades  |  Route: /hrm/grades

Pay bands or job grades for structured compensation. Link grades to salary structure templates if used.

HRM Grades list page
Grades — HRM → Grades. Optional pay bands (e.g. G1–G5) for structured compensation planning.

Example — Add grade G3

  1. Open HRM → Grades and add grade code G3 with optional min/max salary range.
  2. Save and link the grade on employee records or salary templates as needed.

Result: G3 is selectable on employee employment details for HR planning reports.

FieldDescription
Grade Name / CodeIdentifier (e.g. G1, Senior, Executive).
Min / Max salary rangeOptional bounds for HR planning — not enforced on payroll automatically.

Step 4 — Approval workflows

Menu: HRM → Approval Workflows  |  Route: /hrm/approval-workflows

Define multi-level approvers for leave, overtime, salary advances, and payroll adjustments before employees submit requests.

HRM Approval Workflows configuration
Approval Workflows — HRM → Approval Workflows. Set multi-level approvers for leave, OT, advances, and payroll adjustments.

Example — Leave approval (Supervisor → HR)

  1. Open HRM → Approval Workflows and create a Leave workflow.
  2. Add Level 1 = reporting manager, Level 2 = HR role.
  3. Save before employees submit leave applications.

Result: New leave requests appear in each approver’s pending queue in order.

SettingDescription
Workflow typeLeave, Overtime, Salary Advance, Payroll Adjustment, etc.
Approval levelsOrdered list — Level 1 (supervisor) → Level 2 (HR) → Level 3 (director).
Approver role / userWho receives pending approval notifications at each level.
Auto-approve thresholdOptional — small amounts skip upper levels.

Part 2 — Leave, holidays & shifts

Step 5 — Leave types

Menu: HRM → Leave Types  |  Route: /hrm/leave-types

HRM Leave Types configuration
Leave Types — HRM → Leave Types. Define Annual, Sick, Casual, Unpaid, and related entitlement rules.

Example — Create Annual leave (18 days)

  1. Open HRM → Leave Types and add Annual.
  2. Set paid, default allocation 18 days/year, requires approval, half-day allowed.
  3. Save, then grant balances in Leave Allocations.

Result: Employees can apply Annual leave; unpaid types deduct as LWP in payroll when configured.

  1. Create types: Annual, Sick, Casual, Unpaid, Maternity, etc.
  2. Configure per type: paid/unpaid, max days per year, accrual frequency, carry-forward limit, requires approval, half-day allowed.
  3. Set whether leave deducts from payroll (LWP) for unpaid types.
FieldDescription
Leave Type NameShown on leave application form.
Default allocationAnnual entitlement days — applied via Leave Allocations.
AccrualMonthly/yearly accrual vs fixed annual grant.
Requires approvalRoutes through Approval Workflows when enabled.

Step 6 — Holidays & holiday calendar

Routes: /hrm/holidays · /hrm/holiday-calendar

Define public/company holidays per year. Calendar view helps HR and employees plan leave around closures.

HRM Holidays and holiday calendar
Holidays — HRM → Holidays / Holiday Calendar. Public and company closures used by attendance and leave planning.

Example — Add Independence Day

  1. Open HRM → Holidays and add the holiday name, date, and year.
  2. Confirm it appears on the holiday calendar view.

Result: That date is treated as a non-working day for attendance and leave calculations.

Step 7 — Shifts & schedules

HRM Shifts configuration
Shifts — HRM → Shifts. Define start/end times, grace minutes, and overnight flags before assigning employees.

Example — Create Morning shift (09:00–18:00)

  1. Open HRM → Shifts and add Morning with start 09:00, end 18:00, grace 15 minutes.
  2. Assign employees via Shift Assignments with an effective date.

Result: Late detection and working hours use this shift when attendance is recorded.

Configure in this order:

StepScreenRoute
7AShifts/hrm/shifts
7BShift Rotations/hrm/shift-rotations
7CShift Assignments/hrm/shiftassignments
7DShift Schedules/hrm/shiftschedules
7EShift Swap (operations)/hrm/shift-swap

Shifts define start/end times, grace minutes, and break rules; assignments link employees before attendance is recorded.

ScreenKey fields
ShiftsName, start time, end time, grace period (late tolerance), overnight flag, active.
Shift RotationsCycle pattern (e.g. 2-day morning → 2-day evening) for rotating teams.
Shift AssignmentsEmployee + shift + effective date range.
Shift SchedulesCalendar view of who works which shift per day.
Shift SwapEmployee requests swap — manager approves; updates schedule.

Step 8 — Attendance & overtime policies

Routes: /hrm/attendance-policy · /hrm/overtime-policy

Set late-entry rules, half-day thresholds, weekend handling, and overtime calculation before processing attendance.

HRM Attendance Policies page
Attendance Policies — HRM → Attendance Policy. Late thresholds, half-day rules, weekend/holiday handling.
HRM Overtime Policies page
Overtime Policies — HRM → Overtime Policy. OT multipliers, minimum blocks, and pre-approval rules.

Example — Late after 15 min + 1.5× weekday OT

  1. Open Attendance Policy — set late after 15 minutes and half-day threshold as needed.
  2. Open Overtime Policy — set weekday OT multiplier 1.5×, minimum block 30 minutes.
  3. Save both before daily attendance go-live.

Result: Punches calculate late minutes and OT hours that flow into payroll.

Policy areaTypical settings
Attendance policyLate after X minutes, half-day after Y hours absent, weekend days, holiday override, biometric vs manual source.
Overtime policyOT rate multiplier, minimum OT block (30 min), weekday vs weekend OT rules, requires pre-approval.

Part 3 — Payroll configuration

Step 9 — Salary rules & structure templates

Routes: /hrm/salary-rules · /hrm/salary-structure-templates

HRM Salary Rules page
Salary Rules — HRM → Salary Rules. Earnings and deductions (fixed or formula) used in payroll.
HRM Salary Structure Templates page
Salary Structure Templates — HRM → Salary Structure Templates. Bundle salary rules into packages assigned to employees.

Example — Standard staff package

  1. Create salary rules for Basic, House Rent, and Tax deduction.
  2. Create a structure template that includes those rules.
  3. Assign the template on each employee’s compensation section.

Result: Payroll generate uses the template components instead of zero net pay.

  1. Salary rules — earnings (Basic, HRA, Transport) and deductions (Tax, PF) with formula or fixed amount.
  2. Structure templates — bundle rules into reusable packages assigned to employees.
  3. Loan types (/hrm/loan-types) — before employee loan applications.

FAQ — Payroll setup

Payroll run shows zero net pay.

Verify employee has an active salary structure template assigned and salary rules reference valid GL accounts in Financials mappings.

Part 4 — Employees & contracts

Step 10 — Onboarding templates & contracts

Routes: /hrm/boarding-templates · /hrm/contracts

Onboarding checklists for new hires; employment contracts with start/end dates and visa tracking for expiry reports.

HRM Onboarding Templates page
Onboarding Templates — HRM → Boarding Templates. Checklists for new-hire tasks before day one.
HRM Contracts page
Contracts — HRM → Contracts. Employment contracts with start/end dates and visa expiry tracking.

Example — Permanent contract + onboarding checklist

  1. Create an onboarding template with tasks (ID copy, bank details, laptop).
  2. Create a contract with start date and optional end/visa expiry.
  3. Link both when registering the employee.

Result: HR tracks boarding progress; contract/visa expiry reports flag renewals.

Step 11 — Employee registration

Menu: HRM → Dashboard → Add Employee  |  Routes: /hrm/dashboard · /hrm/employees/new · profile /hrm/employees/{id}

  1. Open HRM Dashboard — KPI cards: total employees, active, on leave, new hires (30 days).
  2. Click Add Employee — multi-section form.
  3. Complete sections below and save.
HRM Employee registration form
Employee Registration — HRM → Add Employee. Personal, employment, compensation, shift, access, and documents.

Example — Register a new accountant

  1. From HRM Dashboard, click Add Employee.
  2. Enter personal details, department Finance, designation Accountant, join date, and salary structure.
  3. Set shift, optional kiosk PIN, and link a user account for self-service.
  4. Save.

Result: Employee appears in headcount, can punch attendance, and is ready for leave allocation and payroll.

Employee form — key sections

SectionFields
PersonalFull name, employee code, gender, date of birth, blood group, photo, national ID, contact phone/email, emergency contact.
EmploymentDepartment, designation, grade, branch, join date, employment type (permanent/contract), reporting manager.
CompensationSalary structure template, bank account for payroll, payment mode.
Shift & attendanceDefault shift assignment, attendance policy group, biometric ID (if using agent).
System accessLink to Users account — enables My Attendance and leave self-service.
DocumentsContract upload, visa/passport with expiry (feeds visa expiry report).
Kiosk PIN (Step 7 — Statutory)4–6 digit PIN for Attendance Kiosk. Leave empty to allow kiosk access without PIN (not recommended in shared offices).

Profile routes: view /hrm/employees/{id} · edit /hrm/employees/edit/{id}

FAQ — Employees

Branch manager dropdown empty in Branching module.

Register the employee in HRM first, then select them as Branch Manager in Settings → Branches.

Employee cannot log in to apply leave.

Create a user in User Management from the employee record and link the user account on the employee profile.

Step 12 — Leave allocations

Menu: HRM → Leave Allocations  |  Route: /hrm/leave-allocations

Assign opening leave balances per employee and leave type for the fiscal/year period. Run after employees and leave types exist.

HRM Leave Allocations page
Leave Allocations — HRM → Leave Allocations. Grant opening balances per employee and leave type for the period.

Example — Allocate 18 Annual days

  1. Open HRM → Leave Allocations.
  2. Select employee, leave type Annual, period year, and days = 18.
  3. Save.

Result: Leave applications deduct from this balance; reports show remaining days.

Part 5 — Daily operations

Step 13 — Attendance

Routes: /hrm/daily-attendance · /hrm/kiosk · /hrm/my-attendance

HRM Daily Attendance page
Daily Attendance — HRM → Daily Attendance. Record, import, or review check-in/out and late/OT hours.

Example — Review today’s punches

  1. Open HRM → Daily Attendance for today’s date.
  2. Filter by branch/department; correct missed punches or approve regularizations.

Result: Clean attendance data is ready for overtime and payroll processing.

ScreenPurpose
Daily AttendanceHR records or imports check-in/out; syncs with biometric agent.
Attendance Kiosk/hrm/kiosk — self-service terminal (code + PIN + webcam). Full kiosk guide →
My AttendanceEmployee self-view of own records.
Late Entry Records/hrm/late-entry-records — audit late arrivals.
Attendance Regularization/hrm/attendance-regularization — approve missed punch corrections.
Overtime Records/hrm/overtime-records — approved OT hours for payroll.

Attendance Kiosk — detailed guide

Menu: HRM → Attendance Kiosk  |  Route: /hrm/kiosk  |  Permission: DailyAttendance (Read)

What it is: Attendance Kiosk is a full-screen, touch-friendly clock terminal that runs in any modern browser. Employees mark themselves In/Out without logging into CognitixERP — ideal for reception desks, factory gates, retail back-office tablets, or any shared PC at the entrance. On check-in, the device captures a webcam photo stored with the attendance record for HR audit.
HRM Attendance Kiosk terminal screen
Attendance Kiosk — HRM → Attendance Kiosk (/hrm/kiosk). Shared terminal: employee code + PIN + webcam check-in/out.

Example — Punch In at reception

  1. Open the kiosk on a dedicated tablet (HTTPS) and allow camera.
  2. Employee enters code and PIN, then taps CHECK IN.
  3. Confirm success message; fields clear for the next person.

Result: Daily Attendance shows In time with photo; late minutes apply per shift policy.

Kiosk vs other attendance methods

MethodWho uses itHardwareBest for
Attendance Kiosk Any employee at shared terminal PC/tablet + webcam; no login Small/medium offices, shops, warehouses without biometric devices
Biometric Agent + device Employee scans finger/face ZKTeco-style terminal + Windows agent service High-volume factories, strict access control
Daily Attendance (HR) HR/admin None — manual entry or import Corrections, remote workers, bulk import
My Attendance Logged-in employee Personal phone/PC with user account Self-service view only (not a kiosk punch)

Prerequisites (configure before go-live)

  1. Employees registered with unique Employee Code (Step 11).
  2. Kiosk PIN set per employee (Employee Registration → Step 7 Statutory, or Edit Employee). Recommended 4–6 digits.
  3. Shift assigned to employee (Step 7 — Shifts) — drives late detection.
  4. Attendance policy configured (Step 8) — grace minutes, half-day rules.
  5. Company timezone set in Branching — kiosk clock and punch times use company timezone.

HR setup — deploy a kiosk terminal

  1. Use a dedicated tablet or PC at the entrance (avoid personal laptops).
  2. Install Chrome or Edge. Use HTTPS URL — browsers block webcam on insecure HTTP except localhost.
  3. Log in once as a user with DailyAttendance Read permission (or keep session pinned for the kiosk account).
  4. Navigate to /hrm/kiosk and press F11 for fullscreen (optional).
  5. When the browser asks Allow camera, click Allow — required for check-in photo capture.
  6. Pin the kiosk tab; disable sleep/screen lock on the device during working hours.
  7. Train employees: Code → PIN → Check In/Out. Form auto-clears after each successful punch.

Kiosk screen — what employees see

UI elementBehaviour
Live clockCurrent time and date (company timezone).
Webcam previewLive video feed; green border when employee is already checked in today. Shows camera-off icon if permission denied.
Employee CodeType or scan barcode of employee code — name appears when code matches an active employee.
Status chipIf already In today, shows In since hh:mm and button switches to CHECK OUT.
PINMasked password field — verifies identity before punch.
CHECK IN / CHECK OUTLarge button — green for In, orange/warning for Out. Press Enter after entering code.
Status messageSuccess or error alert — auto-clears after 5 seconds.
Branding footerCompany display name + “ATTENDANCE KIOSK”.

Employee punch — step by step

  1. Stand in front of the webcam (face visible in preview).
  2. Enter your Employee Code — confirm your name appears below the camera.
  3. Enter your PIN (if HR assigned one).
  4. Click CHECK IN (morning arrival) or CHECK OUT (end of shift).
  5. Wait for success message — e.g. ✓ Ahmed — In at 09:02 AM or ✓ Ahmed — Out (8.5 hrs).
  6. Fields reset automatically — next employee can punch immediately.

What happens in the system

EventSystem action
Check InCreates/updates today's Daily Attendance summary; captures JPEG photo from webcam; records device type as Biometric/kiosk source; calculates late minutes against assigned shift (if not flexible shift); auto-creates Late Entry record when late.
Check OutRecords checkout time; calculates total working hours and overtime minutes per attendance policy; no photo on checkout (check-in photo retained).
HR reviewOpen /hrm/daily-attendance — photo thumbnail on row; click to view full captured photo dialog.
PayrollWorking hours, late minutes, and OT flow into payroll run (Step 15).

PIN security rules

ScenarioResult
Employee has no Kiosk PIN setPIN field can be left empty — punch allowed (convenient but less secure).
Employee has PIN setMust enter matching PIN — empty or wrong PIN shows Invalid PIN.
HR resets PINEdit employee → Kiosk PIN field → Save. Tell employee privately; do not share on group chat.

FAQ — Attendance Kiosk

Camera access denied — can employees still punch?

The kiosk shows a warning but check-in may still proceed; however the photo will be missing. Fix browser site permissions (lock icon → Camera → Allow) and reload. HTTPS is required on production URLs.

Employee not found after entering code.

Verify the employee is Active, code matches exactly (case-insensitive), and belongs to the company. Inactive or terminated employees are excluded from the kiosk employee list.

Already checked in — press button again to Check Out.

If employee forgot they punched In, the kiosk detects open check-in and switches the button to CHECK OUT. If already checked out today, message shows Already checked out today.

Can one tablet serve multiple branches?

The kiosk loads all active employees company-wide. For branch isolation, use separate kiosk URLs per branch login (branch-scoped user) or deploy one terminal per location.

Missed punch — employee forgot to check out.

HR corrects via Daily Attendance edit, or employee submits /hrm/attendance-regularization for manager approval.

Kiosk vs Biometric Agent — do I need both?

No. Kiosk is software-only (webcam + PIN). Biometric Agent is for physical fingerprint/face hardware. Many sites use kiosk only; factories may use biometric only or both.

Does kiosk work on mobile phone browser?

Yes, but a fixed tablet/PC at the entrance is recommended. Mobile front-camera works for photo capture; ensure employees allow camera permission.

Step 14 — Leave applications

Menu: HRM → Leave Applications  |  Route: /hrm/leave-applications

Employees or HR submit leave requests; approval workflow routes to managers. Approved leave deducts from allocation balance.

HRM Leave Applications page
Leave Applications — HRM → Leave Applications. Submit and approve leave; approved days deduct from allocation balance.

Example — Apply 2 days Annual leave

  1. Open HRM → Leave Applications and create a new application.
  2. Select employee, leave type Annual, dates, and submit.
  3. Manager/HR approves via the approval workflow.

Result: Leave is Approved; allocation balance decreases; unpaid types can feed LWP in payroll.

Step 15 — Payroll & benefits processing

Menu: HRM → Payroll and Benefits  |  Route: /hrm/payroll-benefits

HRM Payroll and Benefits processing page
Payroll & Benefits — HRM → Payroll and Benefits. Generate, review, approve, and post pay runs for the period.

Example — Run March payroll

  1. Open HRM → Payroll and Benefits and select the March pay period.
  2. Click Generate Payroll, review draft payslips, then Approve & Post.
  3. Print payslips or export the payroll register from Reports.

Result: Salary expense and net payable post to GL; employees get payslips for the month.

  1. Select pay period (month) aligned with Financials open accounting period.
  2. Click Generate Payroll — system calculates per employee: basic + allowances − deductions − LWP − loan EMI − advance recovery + overtime.
  3. Review draft payslips — drill into components per employee.
  4. Submit for approval (if workflow configured) then Approve & Post.
  5. GL posting: salary expense, employer contributions, net payable, deduction liabilities — via Financials GL mappings.
  6. Print payslips or export payroll register from Reports.

FAQ — Payroll run

Leave without pay not deducted.

Ensure leave applications are approved with unpaid leave type and dates fall inside the pay period.

Loan deduction missing.

Verify active employee loan with EMI schedule and payroll deduction flag enabled.

Related: Salary Advances (/hrm/salary-advances), Employee Loans (/hrm/loans).

Part 6 — Performance & separation

Step 16 — Appraisals, goals & skills

Routes: /hrm/appraisal-templates · /hrm/appraisals · /hrm/goals · /hrm/skills

HRM Appraisals page
Appraisals — HRM → Appraisals. Cycles, templates, reviewers, and employee scoring.
HRM Goals page
Goals — HRM → Goals. Track employee objectives alongside appraisal cycles.

Example — Start Q2 appraisal cycle

  1. Create an appraisal template with KPIs and rating scale.
  2. Open a cycle, assign reviewers, and score employees.
  3. Link or review goals for the same period.

Result: Performance scores and goals are available for HR planning and reports.

  1. Create appraisal templates (KPIs, rating scales).
  2. Open appraisal cycle, assign reviewers, score employees.
  3. Track goals and skill matrix for workforce planning.

Step 17 — Resignations & terminations

Routes: /hrm/resignations · /hrm/terminations

Manage voluntary exit workflow and involuntary separation. Final settlement ties into last payroll run.

HRM Resignations page
Resignations — HRM → Resignations. Voluntary exit workflow with notice and clearance before final settlement.
HRM Terminations page
Terminations — HRM → Terminations. Involuntary separation; last payroll and access deactivation follow settlement.

Example — Process a resignation

  1. Open HRM → Resignations and record the employee, last working day, and reason.
  2. Complete clearance; run final settlement with the last payroll period.
  3. For involuntary exit, use Terminations instead with the appropriate reason and effective date.

Result: Employee exits the active headcount; final pay and access follow your separation checklist.

Step 18 — HRM reports

Menu: HRM → Reports  |  Route: /hrm/reports

HRM Reports hub page
HRM Reports — HRM → Reports. Headcount, attendance, leave, payroll, contracts, and audit reports.

Example — Export monthly attendance

  1. Open HRM → Reports and choose Monthly Attendance.
  2. Select month/branch filters and export or print.

Result: Management receives a filtered attendance register for the period.

ReportRoute
Headcount/hrm/reports/headcount
Daily / monthly attendance/hrm/reports/daily-attendance, /hrm/reports/monthly-attendance
Leave balance / applications / utilization/hrm/reports/leave-balance, etc.
Payroll summary / payslip register / components/hrm/reports/payroll-summary, etc.
Employee listing/hrm/reports/employee-listing
Overtime / late entry / regularization/hrm/reports/overtime, etc.
Shift schedule/hrm/reports/shift-schedule
Contract / visa expiry/hrm/reports/contract-expiry, /hrm/reports/visa-expiry
Loan & advance outstanding/hrm/reports/loan-advance
Department cost / headcount movement/hrm/reports/department-cost, etc.
Appraisal performance / boarding pipeline/hrm/reports/appraisal-performance, etc.
HR audit trail/hrm/reports/audit-trail

Setup dependency reference

You want to…Complete these HRM steps first
Register any employee1 Departments · 2 Designations
Assign leave balance5 Leave types · 11 Employees · 12 Leave allocations
Record daily attendance7 Shifts · 8 Attendance policy · 11 Employees · optional Kiosk PIN
Deploy attendance kiosk11 Employees (code + PIN) · 7 Shifts · 8 Policy · HTTPS browser + webcam
Run monthly payroll9 Salary rules/templates · 11 Employees · 13 Attendance · 14 Leave (if LWP)
Employee self-service leaveUser account linked · 5 Leave types · 12 Allocations
Performance review cycle11 Employees · 16 Appraisal templates
Module Guide

CRM (Customer Relationship Management)

CRM manages your sales and support funnel — contacts, leads, customers, opportunities, sales pipelines, activities, support tickets, forecasts, and analytics. Won opportunities can feed into Billing quotations and sales orders when your process connects CRM accounts to operational customers.

Prerequisites: Branching (branches) · Users (sales reps with CRM permissions) · optional Billing customers for invoicing after deal closure.

Recommended setup order

1 · Pipeline settings 2 · Lost reasons 3 · Sales teams 4 · Contacts 5 · Leads 6 · Customers 7 · Opportunities 8 · Activities 9 · Pipeline board 10 · Tickets 11 · Automation 12 · Forecasts 13 · Reports

Routes at a glance

Navigation & permissions (key screens)

Menu path (CRM)RoutePermission page
CRM → Dashboard/crmCrmDashboard
CRM → Contacts/crm/contactsContacts
CRM → Leads/crm/leadsLeads
CRM → Customers/crm/customersCustomers
CRM → Opportunities/crm/opportunitiesOpportunities
CRM → Sales Teams/crm/salesteamsSalesTeams
CRM → Activities/crm/activitiesActivities
CRM → Pipeline Settings/crm/pipeline-settingsPipelineSettings
CRM → Lost Reasons/crm/lostreasonsLostReasons
CRM → Automation / Duplicates/crm/automation-rules, /crm/duplicatesAutomationRules, DuplicateDetection
CRM → Tickets/crm/ticketsTickets
CRM → Sales Pipeline / Forecasts/crm/sales-pipeline, /crm/salesforecastsSalesPipelinePage, SalesForecasts
CRM → Conversion / CLV dashboards/crm/conversiondashboard, /crm/customerlifetimevalueConversionDashboard, CustomerLifetimeValue
CRM → Reports/crm/reportsCRMReports + report-specific

Part 1 — Pipeline foundation (in order)

Step 1 — Pipeline settings

Menu: CRM → Pipeline Settings  |  Route: /crm/pipeline-settings

Configure before leads or opportunities. Defines how deals move from first contact to won/lost.

CRM Pipeline Settings page
Pipeline Settings — CRM → Pipeline Settings. Create pipelines, ordered stages, probability %, and Won/Lost terminals.

Example — Standard Sales pipeline

  1. Open CRM → Pipeline Settings and click Add Pipeline.
  2. Name it Standard Sales, mark Default, and add stages Prospecting → Qualification → Proposal → Negotiation.
  3. Set probability % per stage; mark one Won and one Lost stage.

Result: New opportunities can select this pipeline; the Sales Pipeline board shows these stages.

  1. Click Add Pipeline — name it (e.g. Standard Sales), mark one as Default.
  2. For each pipeline, add Stages in order (Prospecting → Qualification → Proposal → Negotiation).
  3. Set Probability % per stage for weighted forecast.
  4. Mark exactly one stage as Won and one as Lost (terminal stages).
  5. Keep pipeline Active for use on new opportunities.

FAQ — Pipeline settings

Cannot create opportunity — no pipeline stages.

Create at least one active pipeline with stages before adding opportunities. Set a default pipeline for auto-selection.

Step 2 — Lost reasons

Menu: CRM → Lost Reasons  |  Route: /crm/lostreasons

Standard reasons when marking deals lost (Price, Competitor, No budget, Timing). Required before closing opportunities as lost — drives lost-deals and lost-reasons reports.

CRM Lost Reasons list page
Lost Reasons — CRM → Lost Reasons. Standard labels used when closing opportunities as lost.

Example — Add Price and Competitor reasons

  1. Open CRM → Lost Reasons and add Price and Competitor.
  2. Keep both Active so they appear on the opportunity close dialog.

Result: Lost deals require a reason; Lost Reasons reports show coaching insights.

FieldDescription
Reason NameShort label shown on opportunity close dialog.
DescriptionOptional detail for sales coaching.
ActiveInactive reasons hidden from new selections but preserved on historical deals.

Step 3 — Sales teams

Menu: CRM → Sales Teams  |  Routes: /crm/salesteams · members /crm/salesteams/{team-id}/members

CRM Sales Teams page
Sales Teams — CRM → Sales Teams. Group reps for opportunity ownership and revenue-by-team reports.

Example — Create Inside Sales team

  1. Open CRM → Sales Teams and add Inside Sales.
  2. Open members and add CRM users/employees to the team.
  3. Assign opportunities and forecasts to this team.

Result: Revenue-by-team and scorecard reports can filter by Inside Sales.

  1. Create teams (e.g. Inside Sales, Field Sales).
  2. Add members — link CRM users/employees as team members.
  3. Assign opportunities and forecasts to teams for revenue-by-team reports.

Part 2 — Contacts, leads & customers

Step 4 — Contacts

Menu: CRM → Contacts  |  Routes: /crm/contacts · /crm/contacts/{id}

Individual people (name, email, phone, job title, company link). Contacts attach to leads, customers, and opportunities as stakeholders and activity targets.

CRM Contacts list page
Contacts — CRM → Contacts. People linked to leads, customers, and opportunities for follow-up.

Example — Add a procurement contact

  1. Go to CRM → Contacts and click Add.
  2. Enter name, email, phone, job title Procurement Manager, and link to a customer if known.
  3. Assign an owner and save.

Result: The contact appears in search and can be targeted on activities and opportunities.

FieldDescription
First / Last NameContact person name — searchable across CRM.
Email / PhonePrimary communication channels; used in duplicate detection.
Company / Customer linkAssociate contact with CRM customer account.
Job TitleRole at customer organization (e.g. Procurement Manager).
OwnerSales rep responsible for follow-up.

Step 5 — Leads

Menu: CRM → Leads  |  Routes: /crm/leads · /crm/leads/{id}

CRM Leads list page
Leads — CRM → Leads. Capture prospects, qualify status, then convert to CRM customers.

Example — Add a website lead and qualify

  1. Open CRM → Leads and click Add Lead.
  2. Enter company/name, source Website, owner, and expected value.
  3. Log a call, move status to Qualified, then convert to customer.

Result: A CRM customer is created from the lead; you can open opportunities against that account.

  1. Click Add Lead — dialog fields below.
  2. Log activities (calls, meetings, tasks) against the lead from detail page or Activities screen.
  3. Update status through qualification stages (New → Contacted → Qualified → Converted / Lost).
  4. When qualified, convert to customer (/crm/customers/new/{lead-id}).
FieldDescription
Lead Name / CompanyProspect identity.
SourceWebsite, Referral, Campaign, Cold Call — feeds lead source report.
Status / PriorityPipeline position and urgency (Low/Medium/High).
Assigned OwnerSales rep responsible.
Expected ValueEstimated deal size before opportunity creation.

FAQ — Leads

How do I convert a lead to a customer?

Open the lead and use convert, or navigate to /crm/customers/new/{lead-id}. The wizard carries contact details into the new CRM customer; you can then create opportunities against that account.

Step 6 — CRM customers (detailed guide)

Menu: CRM → Customers  |  Routes: /crm/customers · new /crm/customers/new · from lead /crm/customers/new/{lead-id} · details /crm/customers/{id}  |  Permission: Customers

What it is: The customer record is the shared party master for sales operations — used by Billing (quotations, orders, invoices, receipts), CRM (opportunities, activities), and POS (customer sales). Customer Details is the AR counterpart to Supplier Details — a read-only dashboard with ledger, sales history, payments, and CRM collaboration tabs.
CRM Customers list page
CRM Customers — CRM → Customers. Shared party master for Billing, CRM opportunities, and POS.

Example — Create a B2B customer

  1. Open CRM → CustomersNew (or convert from a qualified lead).
  2. Complete Profile (Business, company, contact, branch), Financials, Currency, and Addresses.
  3. Save, then open Customer Details to view ledger and CRM tabs.

Result: The customer is available for quotations, invoices, opportunities, and POS sales.

Create customer — 4-step wizard (/crm/customers/new)

Also opened when converting a qualified lead — wizard pre-fills contact data from the lead.

Step 1 — Profile

FieldRequiredDescription
Contact TypeYesIndividual (B2C) or Business (B2B) — shown as B2C/B2B chip on Customer Details.
Company NameYes (Business)Legal or trading name of customer organization.
First Name / Last NameYesCustomer or contact person name — forms Display Name on details page.
EmailYesPrimary email — used on invoices and CRM email threads.
Phone NumberYesPrimary phone — searchable on Customer Receipt screen.
Alternative Phone NumberNoSecondary contact number — shown on profile card when set.
Tax IDNoCustomer tax registration (VAT/GST/TIN) — flows to billing documents and compliance.
BranchYesOwning branch — scopes customer ledger, default document branch, and CRM activities.

Step 2 — Financials

FieldRequiredDescription
Opening BalanceNo (default 0)Accounts receivable opening balance for migration — reconcile with Financials AR GL.
Credit LimitNo (default 0)Maximum outstanding allowed — displayed on Customer Details profile; enforce in sales process.
Default WHT TaxNoWithholding tax record — auto-fills WHT on new customer receipts/payments (requires WHT taxes in Taxation settings).

Step 3 — Currency

FieldRequiredDescription
Preferred CurrencyNoDefault transaction currency on quotations, orders, and invoices.
Preferred Rate TypeNoSpot or Corporate — exchange rate source for FC documents.
Allow Multiple CurrenciesNo (default on)When enabled, customer can transact in currencies beyond preferred currency.
Allowed CurrenciesNoMulti-select permitted currencies — enabled when multi-currency checkbox is on.

Step 4 — Addresses (repeatable — Add Address button)

FieldRequiredDescription
Address TypeNoBilling, Shipping, or other — chip shown on profile addresses card.
Street 1 / Street 2NoAddress lines.
City / State / Postal Code / CountryNoLocation — default billing/shipping on sales documents.

Quick create — Customer dialog (from list or document pickers)

Tabbed modal with Profile, Financials, Currency, and Addresses — same fields as wizard. Right panel shows live Customer Summary preview (name, email, branch, currency, opening balance, credit limit).

Edit customer — EditCustomerDialog (from Customer Details or list)

Same profile and financial fields. Additional edit-mode behaviour:

  • Currency guard — if invoices exist, preferred currency may be locked; alert shows reason and lock date.
  • Duplicate With New Currency — enter currency code + Duplicate button to clone customer in new currency (parallel to supplier duplicate).
  • Business type uses Contact Person First/Last Name fields (optional) separate from company name.

Customer Details page (/crm/customers/{id})

Read-only dashboard — the central hub for customer relationship and receivables. Layout mirrors Supplier Details: left profile column + right tabbed content panel.

Page header — actions

ButtonAction
Make PaymentNavigates to /billing/customer-receipt/{customerId} — record receipt against open invoices.
Pay AdvanceOpens Customer Payment dialog with type Advance — records prepayment without linking to a specific invoice.
EditOpens EditCustomerDialog — refreshes page on save.
DeleteConfirmation dialog — removes customer and returns to list (blocked if transactions exist).

Left column — profile card

DisplayDescription
Avatar + Display NameCustomer name with B2B/B2C type chip in header.
Company Name chipShown for B2B customers when company name is set.
FC currency chipWarning chip when customer uses foreign preferred currency.
EmailPrimary email address.
Phone NumberPrimary phone.
Alternative PhoneSecondary phone — shown only when set.
Tax IDTax registration — shown only when set.
CurrencyPreferred currency code + “(Multi)” when multiple currencies allowed.
Due BalanceTotal outstanding AR — FC amount with BC equivalent for foreign-currency customers.
AdvanceUnallocated customer advance balance (prepayments held on account).
Credit LimitConfigured maximum credit exposure.
Last Payment DateDate of most recent receipt — shown when available.
Addresses cardRepeatable address blocks with type chip, street, city/state/postal, country.

Right column — tabs

Tab 1 — Ledger

ElementDescription
Date Range picker + FilterFilter ledger transactions by period (default: last month to today).
Opening Balance KPIPeriod opening balance in display currency (FC converted for FC customers).
Closing Balance KPIRunning balance at end of filtered period.
Ledger table columnsDate · Description · Debit · Credit · Balance — AR sub-ledger style (invoices increase debit/receivable, receipts increase credit).

Tab 2 — Sales

All billing and POS invoices for this customer (latest first).

ColumnDescription
Invoice NumberSales invoice reference.
DateIssue date.
Due DatePayment due date.
StatusWorkflow chip: Draft · Sent · Partially Paid · Paid · Overdue · Cancelled.
Payment StatusDue · Partial · Paid.
Total AmountInvoice total in document currency (FC) or base currency (BC).

Tab 3 — Payments

Two sections — payment history and advance applications.

SectionColumns / behaviour
Payment historyInvoices with payment activity (Partial or Paid): Reference · Date · Payment Status · Total Amount. Make Payment button repeats header action.
Advance AppliedInvoice · Date · Amount (BC) · Status (Applied/Reversed) · Reverse button (↩) to undo advance allocation on an invoice.

Tab 4 — Activities

CRM activity timeline filtered to this customer — calls, meetings, tasks logged from Activities module.

Tab 5 — Emails

Email thread panel linked to customer entity — correspondence history.

Tab 6 — Notes

Internal chatter/notes — team comments on the customer account.

Tab 7 — Documents

File attachment panel — upload contracts, ID copies, signed agreements.

Customer Payment dialog (from Pay Advance or invoice actions)

FieldRequiredDescription
Balance summaryRead-onlyInvoice context: Invoice, Total, Remaining Due — or customer-wide: Total Sales, Total Paid, Due Balance.
AmountYesReceipt amount — FC or BC label based on invoice/customer currency.
Payment TypeYesDue Payment · Opening Balance · Advance.
Paid OnYesReceipt date.
Payment MethodYesCash / Bank / Cheque / MFS / Card — from Financials payment methods.
Payment JournalYesAuto-resolved GL journal — branch + payment method + document currency. See Payment Journals guide.
Bank AccountYes (Bank)Bank journal picker when paying by bank.
FX Rate Type / Custom RateFC onlySpot / Corporate / Custom for foreign currency receipts.
WHT Tax / WHT Rate (manual)NoWithholding on receipt — Cr AR full / Dr Cash net / Dr WHT Receivable.
Payment NoteNoMemo or reference number.

Customer Receipt page (/billing/customer-receipt/{customerId?})

Bulk receipt entry — mirrors Supplier Payment page: select customer → view open invoices → enter payment amount with FIFO allocation → download receipt. Reached from Customer Details Make Payment button.

FAQ — Customers & Customer Details

CRM customer vs Billing — same record?

Yes — CRM Customers is the billing party master. Invoices, receipts, and POS sales all reference this customer ID. No separate Billing customer screen exists.

Cannot change customer currency after first invoice.

Currency locks once transactions exist. Use Duplicate With New Currency in Edit Customer dialog to create a parallel customer record.

Opening balance vs Financials AR GL.

Customer opening balance feeds the customer ledger Opening KPI. Financials GL AR opening must match total customer opening balances — reconcile before go-live.

How to reverse an advance applied to wrong invoice?

Open Customer Details → Payments tab → Advance Applied table → click ↩ Reverse on the row. Advance returns to unallocated balance.

Sales tab empty but customer has POS sales.

Sales tab loads all invoices linked to customer ID including POS. Verify invoice was posted with this customer selected; check branch filter if using multi-branch.

Convert lead to customer — what carries over?

Navigate to /crm/customers/new/{lead-id} — wizard pre-fills name, email, phone, tax ID, addresses, and branch from lead contact. Complete financials and currency steps before saving.

Part 3 — Opportunities & pipeline operations

Step 7 — Opportunities

Menu: CRM → Opportunities  |  Routes: /crm/opportunities · /crm/opportunities/{id}

CRM Opportunities list page
Opportunities — CRM → Opportunities. Deals linked to customers, pipeline stage, value, and close date.

Example — Create a negotiation deal

  1. Open CRM → Opportunities and add a new opportunity.
  2. Link customer, Standard Sales pipeline, stage Negotiation, expected revenue, and close date.
  3. Move stages as the deal progresses; mark Won or Lost (with lost reason) when done.

Result: The deal appears on the Sales Pipeline board and contributes to weighted forecast.

  1. Create opportunity — link customer, pipeline, stage, expected value, weighted amount, close date, sales team.
  2. Move stage as deal progresses (edit detail or drag on Sales Pipeline board).
  3. Add products/line items or quote references when integrated with Billing.
  4. Mark Won (terminal won stage) or Lost with lost reason from Step 2.
FieldDescription
Opportunity NameDeal title.
Pipeline / StageCurrent position — stage probability drives forecast weighting.
Expected RevenueDeal value in base currency.
Expected Close DateTarget close — used in stage aging and deal cycle reports.
Win ProbabilityDefaults from stage; can override manually.

FAQ — Opportunities

Forecast shows wrong weighted value.

Weighted value = expected revenue × stage probability %. Update stage or probability on the opportunity.

Step 8 — Activities

Menu: CRM → Activities  |  Route: /crm/activities

Tasks, calls, meetings, and emails logged against leads, customers, or opportunities. Drives activity summary reports and team follow-up discipline.

Activity typeTypical use
TaskFollow-up to-do with due date and assignee.
CallPhone conversation log with outcome notes.
MeetingScheduled meeting with location/video link.
EmailLogged email correspondence (manual entry).

Filter Activities list by owner, type, status (open/completed), and related entity.

Step 9 — Sales pipeline board

Menu: CRM → Sales Pipeline  |  Route: /crm/sales-pipeline

Kanban view of open opportunities by stage. Drag cards to advance deals; totals show pipeline value per stage.

CRM Sales Pipeline Kanban board
Sales Pipeline Board — CRM → Sales Pipeline. Kanban of open opportunities by stage with stage totals.

Example — Drag a deal to Proposal

  1. Open CRM → Sales Pipeline.
  2. Drag an opportunity card from Qualification to Proposal.
  3. Confirm stage totals update for both columns.

Result: Opportunity stage and win probability update; forecasts use the new weighted value.

FAQ — Sales pipeline

Deal will not move to the next stage on the board.

Confirm the opportunity uses an active pipeline and the target stage exists. Won/lost stages are terminal — create a new opportunity for a follow-on deal instead of reopening a closed one.

Part 4 — Support & automation

Step 10 — Support tickets

Menu: CRM → Tickets  |  Routes: /crm/tickets · /crm/tickets/{id}

Customer support cases with priority, status, SLA tracking, and assignment. Use ticket summary and SLA compliance reports for service desk KPIs.

CRM Support Tickets page
Support Tickets — CRM → Tickets. Cases with priority, status, assignment, and SLA tracking.

Example — Log a high-priority ticket

  1. Open CRM → Tickets and create a ticket linked to the customer.
  2. Set priority High, assign an owner, and update status through resolution.

Result: Ticket summary and SLA reports reflect open/resolved times for service KPIs.

FAQ — Tickets

SLA report shows no breaches — are SLAs configured?

Tickets need priority and status workflow with open/resolved timestamps. Review ticket detail for assignment and resolution times; SLA compliance report compares against your configured targets.

Step 11 — Automation & duplicate detection

Routes: /crm/automation-rules · /crm/duplicates

Automation rules — trigger actions on lead/opportunity events (assign owner, create task). Duplicate detection — merge or resolve duplicate contacts/customers before data quality issues spread.

CRM Automation rules page
Automation — CRM → Automation Rules / Duplicates. Event-driven actions and duplicate merge tools.

Example — Auto-assign new website leads

  1. Open CRM → Automation Rules and add a rule for new leads with source Website.
  2. Action: assign owner to Inside Sales lead queue / create a follow-up task.
  3. Optionally review Duplicates and merge matching contacts.

Result: New matching leads get an owner/task automatically; duplicate noise is reduced.

Part 5 — Forecasts, dashboards & reports

Step 12 — Forecasts & analytics dashboards

Routes: /crm/salesforecasts · /crm/conversiondashboard · /crm/customerlifetimevalue

CRM Forecasts and analytics dashboards
Forecasts & Analytics — Sales forecasts, conversion dashboard, and customer lifetime value views.

Example — Compare forecast vs pipeline

  1. Open Sales Forecasts for the current period and set team targets.
  2. Compare weighted pipeline value to target; check Conversion and CLV dashboards.

Result: Managers see target gaps, conversion rates, and account revenue potential.

  • Sales forecasts — period targets vs pipeline weighted value.
  • Conversion dashboard — lead-to-customer and stage conversion rates.
  • Customer lifetime value — revenue potential by account.

Step 13 — CRM reports

Menu: CRM → Reports  |  Route: /crm/reports

CRM Reports hub page
CRM Reports — CRM → Reports. Pipeline, win/loss, leads, activities, tickets, and forecast reports.

Example — Run win/loss for the quarter

  1. Open CRM → Reports and choose Win / Loss.
  2. Filter by date range and team, then export or print.

Result: Sales leadership gets closed-won vs closed-lost performance for coaching.

ReportRoute
Pipeline summary/crm/reports/pipeline-summary
Win / loss/crm/reports/win-loss
Revenue by team / person/crm/reports/revenue-by-team, /crm/reports/revenue-by-person
Top deals / deal cycle time/crm/reports/top-deals, /crm/reports/deal-cycle-time
Lead pipeline / lead source/crm/reports/lead-pipeline, /crm/reports/lead-source
Opportunity register/crm/reports/opportunity-register
Conversion funnel/crm/reports/conversion-funnel
Lost deals / lost reasons/crm/reports/lost-deals, /crm/reports/lost-reasons
Forecast vs actual/crm/reports/forecast-vs-actual
Customer CLV / entity snapshot/crm/reports/customer-clv, /crm/reports/entity-snapshot
Activity summary / team scorecard/crm/reports/activity-summary, /crm/reports/team-scorecard
Stage aging/crm/reports/stage-aging
Ticket summary / register / SLA/crm/reports/ticket-summary, etc.
Quote pipeline / campaign performance/crm/reports/quote-pipeline, /crm/reports/campaign-performance

Setup dependency reference

You want to…Complete these CRM steps first
Create any opportunity1 Pipeline settings · 6 Customers (or lead converted)
Use sales pipeline board1 Pipeline · 7 Opportunities
Mark deal lost with reason2 Lost reasons · 7 Opportunities
Team revenue report3 Sales teams · 7 Opportunities with values
Convert lead to customer5 Leads · 4 Contacts (optional)
Invoice after won deal7 Won opportunity · Billing customer master
SLA ticket reporting10 Tickets with priority/status workflow
Module Guide

Inventory

The Inventory menu covers product master data — units of measure, categories, brands, products (with variants), discount types, reorder policies, alerts, warranty claims, and master-data reports. It does not include warehouse structure (see WMS) or quantity movements (see Stock).

Prerequisites: Branching & Company (branches) and Financials (currency, tax rates for taxable products, GL mappings for inventory asset).
Cross-guide go-live order: Inventory masters → WMS warehouse (at least one) → Stock opening quantities → WMS operations (putaway, picking). This manual lists guides in app menu order (Inventory → Stock → WMS); for first-time setup, create one warehouse from the WMS guide before Branch Opening Stock.

Recommended setup order

1 · Unit of Measures 2 · Categories 3 · Brands 4 · Product Groups 5 · Discount Types 6 · Products 7 · Reorder Policies 8 · Alerts & Warranty 9 · Reports

Routes at a glance

Navigation & permissions

Menu path (Inventory group)RoutePermission page
Inventory → Dashboard/inventoryInventoryDashboard
Inventory → Products/inventory/productsProducts
Inventory → Product Groups/inventory/productgroupsProductGroups
Inventory → Brands/inventory/brandsBrands
Inventory → Categories/inventory/categoriesCategories
Inventory → Discount Types/inventory/discounttypesDiscountTypes
Inventory → Unit of Measures/inventory/unitofmeasuresUnitOfMeasures
Inventory → Reorder Policies/inventory/reorderpoliciesReorderPolicies
Inventory → Alerts/inventory/alertsAlerts
Inventory → Warranty Claims/inventory/warranty-claimsWarrantyClaims
Inventory → Analytics / Aging/inventory/analytics, /inventory/agingInventoryAnalytics, InventoryAging
Inventory → Reports/inventory/reportsReport-specific permissions

Part 1 — Master data setup (in order)

Step 1 — Unit of Measures

Menu: Inventory → Unit of Measures  |  Route: /inventory/unitofmeasures

Configure before products. Every product links to one base UoM (Piece, Kg, Litre, Box, etc.).

Inventory Unit of Measures page
Unit of Measures — Inventory → Unit of Measures. Base and derived units (Piece, Kg, Carton) used on every product.

Example — Add Piece and Carton

  1. Open Inventory → Unit of Measures and add Piece (pc) as a base unit.
  2. Add Carton as derived with conversion factor 12 Pieces.
  3. Save both before creating products.

Result: Products can select Piece as base UoM and Carton as purchase/sales UoM.

FieldDescription
NameFull unit name (Kilogram, Piece, Carton).
SymbolShort code (kg, pc, ctn).
Base unitMark if this is a base UoM; derived units reference a base with conversion factor.
Conversion factorFor derived units — e.g. 1 Carton = 12 Pieces.
ActiveInactive UoM cannot be assigned to new products.
  1. Click Add.
  2. Enter name, symbol, and base/derived relationship.
  3. Save. Repeat for all units your catalogue uses.

FAQ — Unit of Measures

Cannot save product — UoM required.

Create at least one active unit of measure first. Products cannot exist without a UoM.

Step 2 — Categories

Menu: Inventory → Categories  |  Route: /inventory/categories

Organise products for browsing, reporting, and POS. Supports hierarchy (parent/child categories).

Inventory Categories page
Categories — Inventory → Categories. Hierarchical product classification for browsing, tax defaults, and reports.

Example — Electronics → Phones

  1. Open Inventory → Categories and add top-level Electronics.
  2. Add child category Phones under Electronics.
  3. Assign the category when creating products (Step 6).

Result: Products inherit category defaults (e.g. tax) and appear in category summary reports.

  1. Add top-level categories (e.g. Electronics, Grocery).
  2. Add sub-categories where needed.
  3. Assign categories when creating products (Step 6).

Step 3 — Brands

Menu: Inventory → Brands  |  Route: /inventory/brands

Optional but recommended for retail and distribution. Used in product master and category/brand summary reports.

Inventory Brands page
Brands — Inventory → Brands. Manufacturer/label master for product filtering and brand reports.

Example — Add a brand

  1. Open Inventory → Brands and add the brand name.
  2. Keep Active so it appears on the product registration wizard.

Result: Products can link this brand; Category & Brand Summary reports include it.

Step 4 — Product Groups

Menu: Inventory → Product Groups  |  Route: /inventory/productgroups

Bundle related products for pricing or reporting (optional). Can be configured after initial product load.

Inventory Product Groups page
Product Groups — Inventory → Product Groups. Bundles for pricing tiers, default UoM, and reporting.

Example — Create Retail Fast Movers group

  1. Open Inventory → Product Groups and add Retail Fast Movers.
  2. Set optional default UoM if the group should auto-fill on product select.

Result: Products in this group share reporting/pricing defaults on the wizard.

Step 5 — Discount Types

Menu: Inventory → Discount Types  |  Route: /inventory/discounttypes

Define percentage or fixed discounts referenced on sales lines and POS (optional before go-live).

Inventory Discount Types page
Discount Types — Inventory → Discount Types. Percentage or fixed discounts for Billing and POS lines.

Example — Add 10% promotional discount

  1. Open Inventory → Discount Types and add a percentage discount of 10%.
  2. Save; optionally set it as default on a product in Step 6 Pricing.

Result: Sales and POS lines can apply this discount type from the picker.

Step 6 — Add Product (5-step registration wizard)

Menu: Inventory → Products → Add Product  |  Routes: /inventory/products · new /inventory/products/new · edit /inventory/products/edit/{id} · view /inventory/products/view/{id}  |  Permission: Products

Why this matters: The product master is the foundation for Billing, Procurement, POS, and Stock. Every field on this wizard affects pricing, tax, stock tracking, GL posting, supplier POs, and barcode scanning downstream. Complete all five steps before setting status to Active.
Inventory Add Product registration wizard
Add Product — Inventory → Products → Add Product. Five-step wizard: Identification → Categorization → Pricing & Tax → Inventory Behaviour → Media.

Example — Register a Finished Good SKU

  1. Open Inventory → Products → Add Product.
  2. Step 1–2: Name, SKU, Finished Good, base UoM, category/brand.
  3. Step 3–4: Purchase/sale price, costing method, Available for Sale, Status = Active.
  4. Step 5: Optional image → Save Product.

Result: Product appears on the products list and can be used on Billing, POS, and opening stock.

Wizard navigation

  • Horizontal stepper: Identification → Categorization → Pricing & Tax → Inventory Behaviour → Media & Extras.
  • Next validates the current step; Previous goes back without losing data.
  • Click a completed step in the stepper to jump back (edit mode).
  • Save Product appears only on Step 5 — creates/updates the product and optional variant SKUs.

Prerequisites before Add Product

Master dataRouteWhy needed
Unit of Measure/inventory/unitofmeasuresRequired on Step 2 — base UoM for all qty fields.
Category/inventory/categoriesAuto-fills default tax from category on select.
Product Group/inventory/productgroupsAuto-fills default UoM from group on select.
Brand/inventory/brandsOptional — reporting and filtering.
Tax rates / groupsFinancials → TaxationStep 3 tax multi-select.
SuppliersProcurement → SuppliersStep 1 supplier linkage + auto-reorder PO.
GL mappingsFinancials GL mappingsDefault accounts unless product-level override set.

For size/colour variant products, use Product Templates (/inventory/product-templates) or enable Variants on Step 3 during registration — the system generates child SKUs from attribute combinations.

Product Type — options (Step 1)

TypeStock trackedTypical use
Raw MaterialYesInputs for manufacturing or assembly.
Finished GoodYesStandard sellable inventory item — most retail SKUs.
ServiceNoNon-stockable — labour, consulting, delivery fee lines.
ConsumableNoInternal use (office supplies) — not sold or tracked in stock.
Semi-FinishedYesWIP / intermediate manufacturing stage.
AssetSeparateFixed assets (machinery) — not regular inventory.
Packaging MaterialYesCartons, labels used to pack finished goods.
By-ProductYesSecondary output from manufacturing process.

Wizard Step 1 — Identification

FieldRequiredDescription
Product NameYesDisplay name on invoices, POs, POS, and reports. Changing name triggers SKU auto-suggestion if SKU was auto-generated.
SpecificationNoShort technical spec or model description — shown on product view.
SKUYesUnique stock-keeping unit code. Auto-generated from product name via backend when left empty — uniqueness validated against database. Used in bulk import, opening stock, and reports.
BarcodeNoPrimary scan code for POS and document line barcode scan. QR scanner button simulates a scan for testing.
HSNNo*Harmonized System Nomenclature code — required for GST India e-invoice on taxable goods.
Product TypeYesControls whether stock is tracked and which modules list the item (see table above).

Supplier Linkage (optional table — Add Supplier button)

ColumnRequiredDescription
SupplierPer rowVendor from Procurement supplier master.
Supplier Product CodeNoVendor's own catalogue/SKU reference for this item.
Purchase PriceNoSupplier-specific buy price — used as reference on PO lines.
Lead Time (Days)NoExpected delivery days from this supplier.
Min Order QtyNoMinimum quantity this supplier accepts per order.
PreferredNoCheckbox — only one preferred supplier per product. Used by Auto Reorder on Step 4 to select PO vendor.

Wizard Step 2 — Categorization

FieldRequiredDescription
Product GroupNoBundle for pricing tiers and reporting. Quick-add (+) opens dialog. On select, backend may auto-fill default UoM if base UoM empty.
Unit of MeasureYesBase UoM for stock qty, opening stock, and inventory transactions. If UoM type is Weight, product becomes weight-based — enables scale read on procurement GRN and weight POS.
BrandNoBrand master link — quick-add (+) dialog. Inactive brands show (Inactive) badge in edit mode.
CategoryNoCategory master link — quick-add (+) dialog. On select, backend auto-fills default tax on Step 3 if no tax selected yet.
Warranty PeriodNoNumeric warranty duration — feeds /inventory/warranty-claims module.
Purchase UoMNoAlternate unit for buying — e.g. buy in Carton while base UoM is Piece. Default: Same as Base UoM.
Sales UoMNoAlternate unit for selling — e.g. sell in Box while base is Piece. Default: Same as Base UoM.
UoM Conversion FactorConditionalShown when Purchase UoM is set — e.g. 1 Carton = 12 Pieces. Applied automatically on PO receipt and SO shipment qty conversion.

Wizard Step 3 — Pricing & Tax

Core pricing

FieldRequiredDescription
Purchase PriceYesStandard buy price in base currency (BC) — drives inventory valuation and COGS. Helper text confirms BC context.
Sale PriceYesDefault sell price in BC — used on Billing/POS lines unless branch or customer rate overrides.
Costing MethodYesFIFO · LIFO · Weighted Average — determines how unit cost is calculated on stock moves and Product Valuation Report.
Discount TypeNoDefault line discount from Inventory discount types — quick-add (+) dialog.
Tax Inclusive / ExclusiveYesTax Inclusive = sale price includes tax. Tax Exclusive = tax added on top — enables tax multi-select below.
Select TaxConditionalMulti-select taxes and tax groups (shown when Tax Exclusive). Chips show Sales/Purchase scope. Effective tax rate preview alert sums percentage taxes.

Foreign Currency Purchase Price (expandable panel)

FieldRequiredDescription
Purchase CurrencyNoForeign currency for imported cost — clearable to use base currency only.
Foreign Purchase PriceNoUnit cost in FC — disabled until currency selected.
Exchange Rate to BaseNoBase per 1 FC unit — auto-loads from exchange rates when currency/date changes. Progress bar while loading.
BC Equivalent alertRead-onlyShows computed base-currency purchase price after FX conversion — this value feeds Purchase Price (BC).

Variants (registration only — Add Variants button)

FieldDescription
Attribute NameVariant dimension — e.g. Colour, Size, Material.
Attribute ValuesEach value row: Value text + optional Price Adjustment (+/− from base sale price).
Variant count previewSuccess alert shows how many SKUs will be generated (Cartesian product of all attribute values) on save.

Remove Variants clears all attribute rows. Variant child SKUs are created on save — template parent cannot receive stock directly.

GL Account Overrides (expandable — accountant use)

FieldGL roleFallback
Income AccountSales revenue on invoiceGlobal GL mapping by product group/category
COGS AccountCost of goods sold on shipmentGlobal mapping
Inventory AccountInventory asset on receipt/adjustmentGlobal mapping
Purchase AccountPurchase expense (non-stock items)Global mapping

Resolution order at posting: Product override → Product Group → Category → Global mapping.

Branch-Specific Pricing (Add Branch Price button)

ColumnDescription
BranchBranch for price override.
Sale PriceBranch sell price — blank uses default Sale Price.
Purchase PriceBranch buy price — blank uses default Purchase Price.

Wizard Step 4 — Inventory Behaviour

SettingTypeDescription
Serial Number TrackingToggleEach unit gets unique serial — mandatory entry on procurement GRN (Received) and enforced on picking for serial products.
Batch Number TrackingToggleLot/batch grouping with expiry — batch dialog on GRN; FEFO picking uses batch expiry.
Available for SaleToggleWhen on, product appears in Billing quotation/order/invoice and POS product pickers.
Product StatusSelectDraft (work in progress) · Active (operational) · Obsolete (no new transactions) · Discontinued (phased out). Only Active products appear on new documents.
Expiry DateDateProduct-level expiry for perishable items — complements batch expiry on transactions.
Alert ThresholdNumberLow-stock alert quantity — triggers inventory alerts when on-hand falls below this level (separate from reorder policy min).

Reorder Policy (expandable panel on Step 4)

FieldRequiredDescription
Min Stock LevelIf auto-reorderTrigger point — when stock falls below, reorder suggestion/PO is generated.
Max Stock LevelIf auto-reorderTarget ceiling after reorder — must be greater than min.
Reorder QuantityIf auto-reorderQty to order each time policy fires.
Lead Time (Days)If auto-reorderSupplier delivery lead time for planning.
Auto Reorder EnabledNoWhen on, system can auto-create procurement PO when stock hits minimum — uses Preferred supplier from Step 1.
Preferred supplier alertRead-onlyInfo chip showing which supplier will be used for auto PO.

Wizard Step 5 — Media & Extras

Product Image

DetailDescription
UploadClick or drag image — PNG, JPG, WEBP accepted. Preview shown immediately.
UsageDisplayed on product view and POS terminal product grid.
Validation errorShown below upload area if file type/size invalid.

Multi-Barcodes (Add Barcode button)

ColumnDescription
Barcode TypeEAN-13 · EAN-8 · UPC-A · Code128 · QR · DataMatrix · Other.
Barcode ValueScannable code — multiple packaging levels (case, inner pack, unit).

Primary Barcode on Step 1 is the default scan field; multi-barcode table adds alternate codes resolved during POS/Billing barcode scan.

Customer-Specific Pricing (Add Rate button)

ColumnDescription
Customer TypeFree-text customer segment name — e.g. Wholesale, VIP, Distributor.
PriceSpecial sell price for that customer type — applied when customer matches segment rules.
FieldRequiredDescription
Internal NotesNoStaff-only notes — not printed on customer documents. Multi-line text area.

Click Save Product on Step 5. Set status Active on Step 4 before go-live. Post opening stock via Branch Opening Stock.

Edit product (/inventory/products/edit/{id})

Same 5-step wizard pre-filled with existing data. Differences from registration:

  • Variants section not shown on edit — manage variants via Product Templates.
  • Inactive product groups, brands, categories, discount types show (Inactive) badge but remain selectable for historical products.
  • Supplier rows, branch prices, barcodes, and multi-rates load from saved product.

Field impact — where each setting is used

Field / settingBilling / POSProcurementStock / WMSFinancials
SKU / BarcodeLine scan, searchPO/GRN lines, bulk importOpening stock, transfers
Product Type = ServiceSellable, no stock checkPO as expense lineNo stock movesRevenue only
Sale / Purchase PriceDefault line priceDefault PO costOpening stock valuationCOGS calculation
Costing MethodReceipt cost layerTransfer/adjustment costValuation report
Tax / HSNInvoice tax, complianceInput tax on GRNTax GL accounts
Serial / Batch trackingGRN serial/batch entryPicking serial scan
Auto Reorder + Preferred supplierAuto PO creationReorder suggestions
GL overridesRevenue accountPurchase accountInventory accountJournal posting

Recommended first product checklist

  1. Step 1: Name, SKU, Finished Good type, primary barcode.
  2. Step 2: Base UoM (Piece/kg), category with default tax.
  3. Step 3: Purchase + sale price, costing method, tax exclusive + VAT tax.
  4. Step 4: Available for Sale on, Status = Active, set alert threshold.
  5. Step 5: Upload image (optional), Save Product.
  6. Verify on /inventory/products list → post opening stock.
  7. Test on Billing invoice line and POS scan.

FAQ — Add Product

Invoice or POS cannot find product.

Product must be Active, type must be stockable or Service, and Available for Sale toggle must be on for sales pickers.

SKU already exists error.

SKU must be globally unique. Edit the SKU manually or change product name to regenerate auto-SKU.

GST HSN validation fails on e-invoice.

Enter valid HSN code on Step 1 before approving taxable sales invoices.

GRN requires serial numbers I did not set up.

Enable Serial Number Tracking on Step 4 only if you need per-unit serials — once stock exists, toggling tracking may be restricted.

Weight scale button on procurement GRN.

Set base UoM to a Weight type unit (kg, g, lb) on Step 2 — product becomes weight-based automatically.

Auto reorder PO not created.

Enable Auto Reorder on Step 4, set min/max/qty, mark a preferred supplier on Step 1, and ensure stock fell below minimum.

Template parent vs variant SKU.

Stock posts to variant SKUs only — never to template parent. Use Step 3 Variants or Product Templates to generate variant products.

Step 7 — Reorder Policies

Menu: Inventory → Reorder Policies  |  Route: /inventory/reorderpolicies

Minimum/maximum stock rules per product. Drives low-stock alerts and WMS reorder suggestions. Requires products (Step 6). Stock quantities help but are not required to create policies.

Inventory Reorder Policies page
Reorder Policies — Inventory → Reorder Policies. Min/max stock rules and optional auto-reorder to procurement.

Example — Set min 10 / max 50 for a SKU

  1. Open Inventory → Reorder Policies and click Add Policy.
  2. Select product and branch, set min 10, max 50, reorder qty 40.
  3. Optionally enable Auto reorder, then use Trigger Auto Reorders when stock is low.

Result: Low stock raises alerts and can suggest/create procurement POs.

  1. Click Add Policy, select product and branch/warehouse scope.
  2. Set minimum, maximum, and reorder quantity.
  3. Enable Auto reorder if procurement integration should suggest POs.
  4. Use Trigger Auto Reorders to evaluate all policies on demand.

Step 8 — Alerts & Warranty Claims

Routes: /inventory/alerts · /inventory/warranty-claims

Alerts — active low-stock and policy violations; badge appears on the top bar notification icon. Warranty Claims — track customer warranty returns linked to serialised or warrantied products.

Inventory Alerts page
Alerts — Inventory → Alerts. Active low-stock and policy violations with top-bar notification badge.
Inventory Warranty Claims page
Warranty Claims — Inventory → Warranty Claims. Customer warranty returns for serialised or warrantied products.

Example — Review low-stock and log a warranty claim

  1. Open Inventory → Alerts to review products below threshold or reorder min.
  2. Open Warranty Claims, link customer/product (and serial if tracked), and set claim status.

Result: Ops sees stock risk early; warranty returns are auditable in reports.

Step 9 — Inventory reports & analytics

Menu: Inventory → Reports  |  Route: /inventory/reports

Inventory Reports and analytics hub
Inventory Reports & Analytics — Inventory → Reports. Product register, alerts, warranty, aging, and analytics.

Example — Export product master register

  1. Open Inventory → Reports and choose Product Master Register.
  2. Filter by category/brand if needed, then export or print.

Result: Catalogue snapshot is ready for audit or go-live checklist.

ReportRoute
Reports hub/inventory/reports
Dashboard snapshot/inventory/reports/dashboard-snapshot
Product master register/inventory/reports/product-master-register
Category & brand summary/inventory/reports/category-brand-summary
Alert summary/inventory/reports/alert-summary
Warranty claims report/inventory/reports/warranty-claims-report
Inventory analytics/inventory/analytics
Inventory aging/inventory/aging

Setup dependency reference

You want to…Complete these Inventory steps first
Create any product1 UoM · 2 Categories (recommended)
Sell on POS / invoice1–6 Products with tax and prices
Low-stock alerts6 Products · 7 Reorder policies · stock quantities (Stock)
Procurement auto-suggest7 Reorder policies with auto reorder enabled
Module Guide

Stock

The Stock menu covers on-hand quantities and movements — stock levels, branch opening stock, branch stock view, transfers between warehouses, adjustments, minimum thresholds, valuation, and stock reports.

Prerequisites: Inventory products and UoM · Branches · at least one WMS warehouse · GL mappings for inventory asset (posting from adjustments/transfers).

Recommended setup order

1 · Stock Management 2 · Branch Opening Stock 3 · Branch Stock 4 · Min Thresholds 5 · Stock Transfers 6 · Stock Adjustments 7 · Valuation Report 8 · Stock Reports

Routes at a glance

Navigation & permissions

Menu path (Stock group)RoutePermission page
Stock → Stock/inventory/stockStockManagement
Stock → Branch Opening Stock/inventory/branch-opening-stockBranchOpeningStock
Stock → Branch Stock/inventory/branch-stockBranchStock
Stock → Stock Transfers/inventory/stocktransfersStockTransfers
Stock → Stock Adjustments/inventory/stockadjustmentsStockAdjustments
Stock → Minimum Stock Thresholds/inventory/minimumstockthresholdsMinimumStockThresholds
Stock → Product Valuation Report/inventory/productvaluationreportProductValuationReport
Stock → Reports/inventory/stock/reportsReport-specific permissions

Part 1 — Stock setup & operations (in order)

Step 1 — Stock Management (overview)

Menu: Stock → Stock  |  Route: /inventory/stock

Read-only overview of product quantities by warehouse. Use after opening stock is posted to verify balances before go-live.

Stock Management overview page
Stock Management — Stock → Stock. Read-only quantities by warehouse for go-live verification.

Example — Verify balances after opening stock

  1. Post opening stock (Step 2), then open Stock → Stock.
  2. Filter by warehouse and confirm on-hand matches your migration sheet.

Result: You confirm warehouse balances before live sales or transfers.

Step 2 — Branch Opening Stock (detailed guide)

Menu: Stock → Branch Opening Stock  |  Route: /inventory/branch-opening-stock  |  Permission: BranchOpeningStock

What it does: Branch Opening Stock is how you load initial on-hand quantities when migrating from another system or at go-live. It creates stock records at branch/warehouse/bin level and sets unit cost for inventory valuation. This is separate from Financials GL opening balance — both must reconcile to the same inventory asset value.
Branch Opening Stock entry page
Branch Opening Stock — Stock → Branch Opening Stock. Load initial on-hand qty and unit cost (single, template, bulk, or reverse).

Example — Single SKU opening at Main WH

  1. Open Stock → Branch Opening Stock in Single Product mode.
  2. Select branch, date, product, qty, unit cost (BC), and warehouse.
  3. Save, then verify on Stock Management and Product Valuation.

Result: On-hand stock and valuation are set for go-live; reconcile with Financials inventory GL.

Prerequisites

  1. Branches created.
  2. Products registered (Active status).
  3. At least one WMS warehouse per branch (required for warehouse-level stock).
  4. Optional: Zone → Rack → Bin structure for bin-level placement.
  5. Financials — base currency configured; foreign currency + exchange rates if importing FC costs.

Four entry modes (toolbar)

ModeWhen to use
Single ProductOne SKU at a time, or multi-select from product catalog with per-line qty/cost.
Template BulkProduct has variants (size/colour) — set opening qty for all variants of a template in one grid.
Bulk ImportHundreds/thousands of SKUs — enter rows manually or paste from spreadsheet (SKU/barcode, qty, cost, warehouse name).
ReverseAdmin correction — undo mistaken opening stock with mandatory reason (audit trail).

Mode A — Single Product

Default mode. Two sub-modes via toggle:

  • One Product — single SKU dropdown.
  • Multiple Products — search catalog, multi-select rows, add to list with default quantity; edit qty and unit cost per line before save.
FieldRequiredDescription
BranchYesBranch receiving stock. Filters warehouse dropdown.
DateYesOpening date — typically fiscal year start or migration cut-over date.
ProductYesStandalone products (not template parents). Variants selectable individually.
QuantityYesOn-hand qty in base UoM. Zero allowed — info banner explains zero-qty use (placeholder row without valuation).
Unit Cost (BC)Yes*Cost per unit in base currency — drives Product Valuation report. *Can be 0 when qty is 0.
Currency (FC)NoOptional foreign currency for imported cost.
FC Unit CostNoCost in foreign currency — auto-converts to BC when exchange rate set.
Exchange RateNoBase per FC unit — can auto-load from Exchange Rate Management for the opening date.
WarehouseRecommendedDestination warehouse. Empty = unassigned branch-level stock only.
Zone / Rack / BinNoCascading WMS location — bin requires rack, rack requires zone, zone requires warehouse.
Location summaryInfo alert shows full path e.g. Main WH / Receiving / A-01 / Bin-03.
Also create Putaway RuleNoCheckbox — auto-creates a product-level putaway rule pointing to the selected zone/rack/bin so future GRNs land in the same slot. See Putaway guide.

Serial / batch products: when product has Serial Number Tracking or Batch Number Tracking enabled, additional fields appear to enter serial numbers or batch/lot for each opening quantity line.

Mode B — Template Bulk

  1. Select Branch and Date.
  2. Choose a Product Template — shows variant count chip.
  3. Grid loads all variants with attributes (Size: L, Colour: Red). Check Include per row.
  4. Enter Quantity and Unit Cost (BC) per included variant.
  5. Set shared Stock Location (warehouse → zone → rack → bin) applied to all selected variants.
  6. Optional: Also create Putaway Rules — one rule per included variant product.
  7. Click Save Selected Variants.

Mode C — Bulk Import

Best for large migrations. Each row:

ColumnDescription
SKUProduct SKU — required if barcode empty.
BarcodeAlternative identifier — system matches SKU or barcode.
QuantityOpening qty.
Unit Cost (BC)Base currency cost.
Warehouse NameOptional — must match warehouse name in WMS; blank uses branch default logic.

Use Add Row for manual entry or paste from Excel. Click Import — result summary shows success/failure counts; failed rows list error per row (unknown SKU, invalid warehouse, etc.).

Mode D — Reverse (correction)

Warning banner — irreversible stock reduction. Fields: Branch, Product, Quantity to reverse, optional Warehouse (or branch-level), mandatory Reason text.

Use when opening stock was posted twice or wrong quantity entered. Does not auto-reverse GL — reconcile Financials separately if inventory asset was affected.

After posting — verification

  1. /inventory/stock — verify quantities by warehouse.
  2. /inventory/branch-stock — branch aggregate view.
  3. /inventory/productvaluationreport — total value vs Financials inventory GL.
  4. /inventory/stock/reports/opening-stock-summary — audit register of opening entries.
  5. /inventory/wms/reports/stock-movements-register — move type Opening Stock.

FAQ — Branch Opening Stock

Warehouse dropdown is empty.

Create an active warehouse for the selected branch under WMS → Warehouses first.

GL inventory value does not match stock value.

Opening stock sets quantities × unit cost here. GL inventory asset balance is set in Financials → Opening Balance. Both must use the same valuation — reconcile with Product Valuation Report.

Should I tick “Also create Putaway Rule”?

Yes for go-live efficiency — it seeds putaway rules so future GRNs and receipts auto-suggest the same bin without re-entering location manually.

Can I enter opening stock before WMS bins exist?

Yes — warehouse-level only (skip zone/rack/bin). Add bin structure later and use Stock Moves to re-slot inventory.

Bulk import row failed — product not found.

Verify SKU/barcode exactly matches product master. Product must be Active. Template parent SKUs cannot receive stock — use variant SKU.

Step 3 — Branch Stock

Menu: Stock → Branch Stock  |  Route: /inventory/branch-stock

Branch-scoped stock summary — filter by branch to see aggregated quantities across warehouses in that branch.

Branch Stock summary page
Branch Stock — Stock → Branch Stock. Aggregated quantities across warehouses for a selected branch.

Example — Check Dhaka branch totals

  1. Open Stock → Branch Stock and select the branch.
  2. Review aggregated qty per product across warehouses in that branch.

Result: Branch managers see total available stock without opening each warehouse.

Step 4 — Minimum Stock Thresholds

Menu: Stock → Minimum Stock Thresholds  |  Route: /inventory/minimumstockthresholds

Quick threshold rules per product/branch (complements Inventory reorder policies). Triggers appear in Alerts when stock falls below minimum.

Minimum Stock Thresholds page
Minimum Stock Thresholds — Stock → Minimum Stock Thresholds. Per product/branch floors that feed Alerts.

Example — Set threshold of 20 units

  1. Open Stock → Minimum Stock Thresholds and add a rule for product + branch.
  2. Set minimum qty (e.g. 20) and save.

Result: When on-hand falls below 20, Inventory Alerts and below-minimum reports flag the SKU.

Step 5 — Stock Transfers

Menu: Stock → Stock Transfers  |  Route: /inventory/stocktransfers

Move stock between warehouses (same branch or inter-branch). Full workflow with approval gates.

Stock Transfers list page
Stock Transfers — Stock → Stock Transfers. Move stock between warehouses with Approve → Ship → Receive workflow.

Example — Replenish store from main warehouse

  1. Create a transfer: source Main WH → destination Store WH, add lines and qty.
  2. Submit → Approve → Ship → Receive at destination.

Result: Source stock decreases on ship; destination increases on receive; register shows Completed.

Status workflow

StatusMeaningAvailable actions
Pending ApprovalCreated, awaiting manager approval.Approve · Reject · Cancel
ApprovedApproved but not yet shipped.Ship (In Transit) · Cancel
In TransitStock deducted from source; in movement.Receive (Complete)
CompletedReceived at destination — final.View only
RejectedApproval denied.View only
CancelledCancelled before completion.View only

Create transfer — fields

FieldDescription
Source / Destination WarehouseFrom and to locations — can cross branches.
Transfer DateDocument date.
Line itemsProduct, quantity, serial/batch if tracked.
NotesReason for transfer (replenishment, balancing).
  1. Click Create Stock Transfer.
  2. Select source and destination warehouse, add products and quantities.
  3. Submit → Approve → Ship → Receive at destination.
  4. Detail view: /inventory/stocktransfers/details/{id}

FAQ — Stock Transfers

Insufficient stock at source on approve.

Available quantity at source warehouse is less than transfer qty. Reduce quantity or post stock adjustment first.

Step 6 — Stock Adjustments

Menu: Stock → Stock Adjustments  |  Route: /inventory/stockadjustments

Correct quantities after cycle counts, damage, or shrinkage. Approved adjustments update stock and post to GL (inventory adjustment accounts via GL mappings).

Stock Adjustments page
Stock Adjustments — Stock → Stock Adjustments. Increase/decrease qty after cycle count, damage, or shrinkage with GL impact.

Example — Write off damaged units

  1. Open Stock → Stock Adjustments and create a decrease for the warehouse.
  2. Select product, qty, reason Damage, then submit/approve.

Result: On-hand drops; inventory adjustment posts via GL mappings; register keeps the audit trail.

FieldDescription
Branch / WarehouseLocation of adjustment.
Adjustment TypeIncrease or decrease quantity.
ReasonCycle count, damage, theft, expiry write-off.
Product linesQty change, unit cost for GL valuation impact.

Detail route: /inventory/stockadjustments/{id}

Step 7 — Product Valuation Report

Menu: Stock → Product Valuation Report  |  Route: /inventory/productvaluationreport

Total inventory value by product using each item's costing method. Reconcile with Financials balance sheet inventory asset.

Step 8 — Stock reports

Menu: Stock → Reports  |  Route: /inventory/stock/reports

Stock Reports hub page
Stock Reports — Stock → Reports. On-hand, transfers, adjustments, opening stock, and threshold reports.

Example — Run below-minimum stock

  1. Open Stock → Reports and choose Below Minimum Stock.
  2. Filter by branch/warehouse and export for replenishment.

Result: Ops gets a list of SKUs under threshold to transfer or purchase.

ReportRoute
Stock on hand/inventory/stock/reports/stock-on-hand
Branch stock summary/inventory/stock/reports/branch-stock-summary
Below minimum stock/inventory/stock/reports/below-minimum-stock
Overstock/inventory/stock/reports/overstock
Stock transfer register/inventory/stock/reports/stock-transfer-register
Stock adjustment register/inventory/stock/reports/stock-adjustment-register
Opening stock summary/inventory/stock/reports/opening-stock-summary
Stock in/out summary/inventory/stock/reports/stock-in-out-summary
Reserved vs available/inventory/stock/reports/reserved-vs-available
Costing method summary/inventory/stock/reports/costing-method-summary
Reorder policy coverage/inventory/stock/reports/reorder-policy-coverage
Module Guide

WMS (Warehouse Management)

The WMS menu covers physical warehouse structure and floor operations — warehouses, zones, racks, bins, putaway rules, picking lists, internal stock moves, reorder suggestions, and warehouse performance reports.

Go-live chain (critical): Warehouse structureBranch Opening Stock (with bin + optional putaway rule) → Putaway Rules (GRN auto-location) → Picking Lists (order fulfilment). Opening stock without bins still works, but picking accuracy depends on bin-level stock.
Prerequisites: Branches · Inventory products (for putaway/picking lines). For opening stock with bin location, complete Steps 1–4 before Branch Opening Stock.

Recommended setup order

1 · Warehouses 2 · Zones 3 · Racks 4 · Bins 5 · Putaway Rules 6 · Picking Lists 7 · Stock Moves 8 · Reorder Suggestions 9 · WMS Reports

Routes at a glance

Navigation & permissions

Menu path (WMS group)RoutePermission page
WMS → Warehouses/inventory/warehousesWarehouses
WMS → Putaway Rules/inventory/putaway-rulesPutawayRules
WMS → Picking Lists/inventory/picking-listsPickingLists
WMS → Stock Moves/inventory/stock-movesStockMoves
WMS → Reorder Suggestions/inventory/reorder-suggestionsReorderSuggestions
WMS → Reports/inventory/wms/reportsReport-specific permissions

Part 1 — Warehouse structure (in order)

Step 1 — Warehouses

Menu: WMS → Warehouses  |  Route: /inventory/warehouses

Create at least one warehouse per operating branch before stock entry, GRN, or POS stock deduction. Requires branch from Branching module.

WMS Warehouses list page
Warehouses — WMS → Warehouses. Create branch warehouses (type, default, active) before stock or GRN.

Example — Add Main Store as default

  1. Open WMS → Warehouses and click Add Warehouse.
  2. Enter name Main Store, select branch, type Standard, mark Default and Active.
  3. Save, then use Zones to build zone → rack → bin (Steps 2–4).

Result: Opening stock, GRN, and POS can select this warehouse; default is used when none is set on the product.

  1. Click Add Warehouse.
  2. Complete dialog fields below.
  3. Mark as Default (star badge) if primary warehouse for the branch — one default per branch.
  4. Use row Zones action to build bin structure (Steps 2–4).

Warehouse dialog fields

FieldRequiredDescription
Warehouse NameYesDescriptive name (Main Store, Cold Room).
BranchYesBranch this warehouse belongs to — stock is branch-scoped.
AddressNoPhysical location (multi-line).
Warehouse TypeYesStandard, Bonded, Cold storage, Hazmat — affects handling rules in reports.
ActiveYesInactive warehouses excluded from operational pickers.
DefaultNoPrimary warehouse for branch — used when product has no explicit default.

FAQ — Warehouses

GRN or POS says no warehouse.

Create an active warehouse for the user's branch and set a default warehouse on products where required.

Step 2 — Warehouse Zones

Route: /inventory/warehouses/{warehouse-id}/zones

Divide a warehouse into zones (Receiving, Bulk, Picking, Cold storage, Quarantine). Open from Warehouses list → Zones action.

WMS Warehouse Zones page
Warehouse Zones — from Warehouses → Zones. Divide the warehouse (Receiving, Bulk, Picking, Cold, Quarantine).

Example — Add Receiving and Picking zones

  1. On Warehouses list, open Zones for Main Store.
  2. Add Receiving (type Receiving) and Picking (type Picking); keep Active.

Result: Zones appear for rack creation and putaway rule targets.

FieldDescription
Zone Name / CodeIdentifier within warehouse.
Zone TypeReceiving, Storage, Picking, Staging, etc.
ActiveInactive zones hidden from putaway rules.

Step 3 — Racks

Route: /inventory/warehouses/{warehouse-id}/zones/{zone-id}/racks

Aisle/rack identifiers within a zone. Required before bin-level putaway and picking.

WMS Racks page
Racks — within a zone. Aisle/rack codes (e.g. A-01) before creating bins.

Example — Add rack A-01 in Picking

  1. Open the Picking zone → Racks.
  2. Add rack code A-01 with optional capacity, then save.

Result: Rack is ready for bin slots used by putaway and picking.

FieldDescription
Rack Name / Codee.g. A-01, B-02.
CapacityOptional max weight/volume for utilization reports.

Step 4 — Bins

Route: /inventory/warehouses/…/racks/{rack-id}/bins

Smallest storage location. Stock tracked at bin level on opening stock, GRN putaway, picking, and internal stock moves.

WMS Bins page
Bins — within a rack. Smallest storage slot for opening stock, GRN putaway, picking, and stock moves.

Example — Add pickable bin A-01-03

  1. Open rack A-01 → Bins and add code A-01-03.
  2. Set optional max capacity and mark Pickable.
  3. Use this path in putaway rules and opening stock location.

Result: Stock can sit at Zone / Rack / Bin; pickers and putaway resolve this slot.

FieldDescription
Bin Name / CodeUnique within rack (e.g. A-01-03).
Max CapacityQty or volume limit — feeds bin utilization report.
PickableWhether pickers can take stock from this bin.

Part 2 — Warehouse operations (after structure + stock)

Step 5 — Putaway Rules (summary)

Menu: WMS → Putaway Rules  |  Route: /inventory/putaway-rules

Putaway tells CognitixERP where incoming stock should be stored — which zone, rack, and bin. Rules run automatically on goods receipt (GRN), opening stock (optional checkbox), and branch-level resolution. Full Putaway guide →

WMS Putaway Rules page
Putaway Rules — WMS → Putaway Rules. Map product/category to zone → rack → bin for incoming receipts.

Example — Default putaway to Bulk storage

  1. Open WMS → Putaway Rules, select branch and warehouse.
  2. Add a default (All Products) rule targeting Bulk zone → rack → bin, priority 50.
  3. Optionally add a higher-priority product or category rule for fast movers.

Result: GRN and receipts resolve a target bin; audit trail shows the matched rule instead of default-warehouse warning.

Putaway Rules — detailed guide

Route: /inventory/putaway-rules  |  Permission: PutawayRules

What putaway is: In warehouse operations, putaway is the process of moving received goods from the dock/receiving area to their permanent storage location. CognitixERP automates this decision with rules — when stock arrives, the system resolves the target bin so operators (or opening stock forms) know exactly where to place inventory.

When putaway runs

TriggerBehaviour
Procurement GRNOn goods receipt, system resolves putaway location per product and suggests/stores bin placement.
Branch Opening StockWhen you tick Also create Putaway Rule on opening stock, a product-level rule is seeded for future receipts. Location fields on the opening form also place stock at bin level immediately.
Branch-level resolutionWhen warehouse is not pre-selected, system checks all active warehouses in the branch (default warehouse first) for a matching rule.
No rule matchFalls back to default warehouse — logged as “default location” in audit trail (warning chip).

Page layout

  1. Filter bar: select BranchWarehouse (required before adding rules).
  2. Left panel: rules table sorted by priority.
  3. Right panel: Putaway Audit Trail — timeline of recent resolutions (product, location, reference doc, qty, timestamp). Expand “See more” for full history.

Rule resolution order (how the engine picks a rule)

For each product in a warehouse, the system evaluates rules in this order — first match wins within each tier (lowest priority number = highest precedence among ties):

  1. Product-specific rule — exact product ID match.
  2. Category rule — product's category (only when no product rule exists).
  3. Default rule — no product, no category (“All Products” chip in UI).

Among multiple rules in the same tier, lower Priority number wins (e.g. priority 5 beats priority 10).

Add / Edit Putaway Rule — dialog fields

SectionFieldDescription
BasicPriority1–999. Lower = evaluated first among rules in the same tier.
Product (optional)Most specific — rule applies only to this SKU. When set, category is disabled.
Category (optional)Applies to all products in category. Cannot combine with product on same rule.
Target locationZoneWarehouse zone (Receiving, Bulk, Cold, etc.).
RackEnabled after zone selected — aisle/rack within zone.
BinEnabled after rack selected — precise storage slot.
NotesOperator instructions (e.g. “Heavy items — ground level only”).
FEFOEnable FEFOFirst-Expiry-First-Out — for perishable goods; routes items with expiry dates to designated zones.
Max days to expiryOnly applies FEFO rule when product expiry is within N days (e.g. 30 for short-life dairy).
StatusActiveInactive rules are ignored; delete soft-deactivates (preserves audit history).

Recommended setup patterns

PatternExample rules (priority order)
General retail10 = Fast movers → Picking zone bin · 50 = Default → Bulk storage zone
Cold chain10 = Category “Dairy” + FEFO → Cold zone · 20 = Category “Frozen” → Frozen zone
High-value serial items5 = Product “iPhone 15” → Secure cage bin · 100 = Default

Go-live workflow with Opening Stock

  1. Create warehouse structure (zone/rack/bin).
  2. Post opening stock with bin location + tick Also create Putaway Rule.
  3. Verify rules appear on Putaway Rules page for that warehouse.
  4. Post first GRN — confirm audit trail shows resolved location (not default warehouse warning).
  5. Run /inventory/wms/reports/putaway-rule-coverage — find products without rules.

FAQ — Putaway

Audit trail shows “Default warehouse” warning chip.

No matching active rule existed for that product/category. Create a product or category rule, or a catch-all default rule with low priority number.

Product rule vs category rule — which wins?

Product-specific always beats category. Category beats generic default.

Can one product have two putaway rules?

Yes, but only the highest-precedence (lowest priority number) product rule applies per receipt. Use different priorities intentionally — not duplicates at same priority.

FEFO vs FIFO picking — difference?

FEFO on putaway rules controls where to store incoming expiry-dated goods. FIFO on picking lists controls which bin to pick from when fulfilling orders.

Step 6 — Picking Lists (summary)

Menu: WMS → Picking Lists  |  Route: /inventory/picking-lists

Warehouse pick documents generated from sales orders/invoices — tells pickers which bin to take stock from. Full Picking List guide →

WMS Picking Lists page
Picking Lists — WMS → Picking Lists. Pick tickets from sales orders/invoices with bin locations and status workflow.

Example — Complete a pick for a sales order

  1. Confirm a sales order (or approve invoice) so a picking list is generated.
  2. Open WMS → Picking Lists, assign a picker, confirm each line qty.
  3. Mark Done when all lines are picked.

Result: Stock is deducted from bins; fulfilment advances; picking register shows Done.

Picking Lists — detailed guide

Route: /inventory/picking-lists  |  Permission: PickingLists

What a picking list is: A picking list (pick ticket) is a warehouse worker's instruction sheet. When a sales order or invoice requires stock, CognitixERP generates a list showing each product, quantity, and exact bin location (Zone / Rack / Bin). Workers confirm picks line-by-line; on completion stock is deducted and the sales fulfilment pipeline advances.

How picking lists are created

SourceWhen
Sales Order confirmedSystem auto-generates picking list for the order warehouse (event-driven).
Sales Invoice approvedDirect invoices (no prior order) trigger picking list generation — idempotent (won't duplicate if already exists).
API / manualWarehouse managers can generate via API with pick strategy parameter.

Each list has a unique number (e.g. PICK-2026-0001) and links to source order/invoice number shown in detail dialog subtitle.

Pick strategies

When generating, the system selects source bins using:

StrategyLogicBest for
FIFO (default)First In, First Out — oldest stock in bin first.General merchandise, standard retail.
FEFOFirst Expiry, First Out — bins with nearest expiry date first.Food, pharma, cosmetics with batch expiry.
Nearest BinMinimizes travel distance from dispatch area.Large warehouses with long aisles.
BatchGroups picks by batch/lot number.Regulated industries requiring lot traceability.

List page — filters and tabs

  1. Select BranchWarehouse.
  2. Tabs filter by status with badge counts: All · Draft · Assigned · In Progress · Done · Cancelled.
  3. Click a row to open the detail dialog.

Picking list status workflow

StatusCodeMeaningNext actions
Draft0Generated, not yet assigned to a worker.Assign worker · Cancel
Assigned1Picker assigned; picking not started.Confirm line picks · Cancel
In Progress2At least one line picked; others pending.Continue picking · Complete · Backorder
Done3All lines picked (or backorder completed). Stock deducted.View only · reports
Cancelled4Pick aborted — no stock movement.View only

Detail dialog — picker workflow

Summary section: Pick strategy, scheduled date, item count, source order/invoice reference.

Assign Worker: Search user by name/username → Assign. Shows currently assigned picker name.

Pick Items table — one row per bin pick:

ColumnDescription
ProductProduct name.
BinFormatted location chip — e.g. Picking Zone / Rack B2 / Bin B2-04.
BatchLot number when batch-tracked.
SerialFor serial-tracked products: Scan button opens serial picker; must scan before confirm.
Qty to PickRequired quantity from this bin.
Qty PickedEditable — defaults to full qty; can enter partial for short pick.
StatusPending · Picked · Short (partial).
ActionEnter qty → click ✓ checkmark to confirm line pick.

Progress bar at bottom shows picked lines vs total lines.

Footer actions:

  • Cancel — abort entire pick list.
  • Backorder — visible when short-pick lines exist; completes picked qty and creates follow-up for remainder.
  • Complete — enabled when no line is still Pending; deducts stock, records stock moves, may trigger billing fulfilment event.

Line item status

StatusMeaning
Pending (0)Not yet picked from bin.
Picked (1)Full or accepted quantity confirmed.
Short (2)Partial quantity — less than qty to pick; triggers backorder option.

End-to-end fulfilment flow

  1. Customer order confirmed or invoice approved in Billing.
  2. Picking list auto-generated with bin lines per pick strategy.
  3. Warehouse supervisor assigns picker.
  4. Picker walks bins, confirms each line (scans serial if required).
  5. Supervisor clicks Complete — stock deducted from bins; stock move audit created.
  6. Invoice/order fulfilment status updates; goods ready for dispatch/packing.

Reports

  • /inventory/wms/reports/picking-list-register — all picks by period.
  • /inventory/wms/reports/picking-performance — picker productivity metrics.
  • /inventory/wms/reports/pending-warehouse-tasks — open picks and transfers.

FAQ — Picking Lists

No picking list after invoice approved.

Invoice must contain stockable products with stock in the selected warehouse. Check warehouse on invoice and stock on hand report.

Cannot confirm serial product pick.

Click Scan on the serial column and select/enter valid serial number in stock at that bin before pressing ✓.

Complete button disabled.

Every line must be Picked or Short — no Pending lines remaining. Confirm each line with checkmark first.

Short pick — what happens to remaining qty?

Use Backorder to close the pick with partial fulfilment; system can generate follow-up pick for unpicked quantity.

Duplicate picking lists for same order.

Generation is idempotent — active list reused. Cancelled lists (status 4) are ignored; new generation allowed if previous was cancelled.

Bin location shows “—”.

Stock may be at warehouse level without bin assignment. Run putaway or opening stock with bin location; regenerate pick after re-slotting.

Step 7 — Stock Moves

Menu: WMS → Stock Moves  |  Route: /inventory/stock-moves

Internal movements between bins/zones within the same warehouse (replenishment, re-slotting). Distinct from inter-warehouse Stock Transfers.

WMS Stock Moves page
Stock Moves — WMS → Stock Moves. Internal bin/zone moves inside one warehouse (not inter-warehouse transfers).

Example — Replenish picking bin from bulk

  1. Open WMS → Stock Moves and create a move in the same warehouse.
  2. Select product, qty, from Bulk bin → to Picking bin.
  3. Confirm the move.

Result: Bin balances update; stock movements register logs the internal move.

Step 8 — Reorder Suggestions

Menu: WMS → Reorder Suggestions  |  Route: /inventory/reorder-suggestions

Review system-generated purchase suggestions from Reorder Policies and current stock levels. Convert to procurement PO where integrated.

WMS Reorder Suggestions page
Reorder Suggestions — WMS → Reorder Suggestions. Policy-driven purchase suggestions from current stock levels.

Example — Convert low-stock suggestion to PO

  1. Open WMS → Reorder Suggestions after policies/stock are below min.
  2. Review suggested qty and preferred supplier, then convert to a procurement PO.

Result: Purchasing gets an actionable PO draft instead of guessing reorder qty.

Step 9 — WMS reports

Menu: WMS → Reports  |  Route: /inventory/wms/reports

WMS Reports hub page
WMS Reports — WMS → Reports. Movements, picking, putaway, capacity, and reorder reports.

Example — Check putaway rule coverage

  1. Open WMS → Reports and choose Putaway Rule Coverage.
  2. Find products without rules and add rules before the next GRN wave.

Result: Fewer receipts fall back to default warehouse; bins stay consistent.

ReportRoute
Stock movements register/inventory/wms/reports/stock-movements-register
Picking list register/inventory/wms/reports/picking-list-register
Picking performance/inventory/wms/reports/picking-performance
Putaway log/inventory/wms/reports/putaway-log-report
Putaway rule coverage/inventory/wms/reports/putaway-rule-coverage
Warehouse capacity utilization/inventory/wms/reports/warehouse-capacity-utilization
Bin/rack utilization/inventory/wms/reports/bin-rack-utilization
Reorder suggestions report/inventory/wms/reports/reorder-suggestions
Pending warehouse tasks/inventory/wms/reports/pending-warehouse-tasks
Zone stock distribution/inventory/wms/reports/zone-stock-distribution

Setup dependency reference

You want to…Complete these WMS steps first
Post GRN or POS stock deduction1 Warehouse (minimum)
Bin-level opening stock1–4 Warehouse → Zone → Rack → Bin
Auto putaway on receipt1–4 structure · 5 Putaway rules
Fulfil sales order picking1–4 · 6 Picking lists · stock on hand (Stock)
Internal bin transfer1–4 · 7 Stock moves
Module Guide

Billing (Sales)

Billing covers the full order-to-cash cycle — customer quotations, sales orders, sales invoices, sales returns, credit notes, customer receipts, receivables aging, and billing analytics. Shipped or Delivered invoices deduct stock and post sales/COGS journals to the general ledger. Customer receipts reduce AR through Financials payment journals.

Prerequisites: CRM Customers (party master) · Inventory products (active SKUs) · Financials (currencies, payment methods, payment journals, GL mappings) · Tax & Compliance (VAT/GST/WHT) · WMS warehouse (picking on order confirm) · optional Banking (bank journals for receipts).
Important concepts: Customers are managed in CRM → Customers — Billing documents reference the same customer record. Sales Returns and Credit Notes are accessed from the Invoices list actions, not the main menu. Confirmed sales orders auto-generate picking lists in WMS.

Recommended setup order

1 · Customers (CRM) 2 · Quotations 3 · Sales orders 4 · Sales invoices 5 · Ship / Deliver 6 · Customer receipts 7 · Returns & credit notes 8 · AR aging & reports

Order-to-cash flow

  1. Quotation — price proposal (Draft → Approve).
  2. Sales Order — convert from approved quotation or create manually (Pending → Confirm).
  3. Picking — WMS picking list auto-created on order confirm.
  4. Invoice — convert from confirmed/shipped order or create manually (Draft → Approved).
  5. Fulfilment — mark Shipped or Delivered → stock OUT + sales GL.
  6. Receipt — customer payment from invoice, Customer Receipt page, or Customer Details.
  7. Adjustments — sales return (qty/stock) or credit note (monetary AR credit) from invoice actions.

Routes at a glance

Navigation & permissions

Menu path (Billing)RoutePermission page
Billing → Dashboard/billingBillingDashboard
Billing → Quotations/billing/quotationsQuotations
Billing → Orders/billing/ordersOrders
Billing → Invoices/billing/invoicesInvoices
Billing → Customer Receipt/billing/customer-receiptCustomerReceipt
Billing → Reports/billing/reportsBillingReports + report-specific

Dashboard

Menu: Billing → Dashboard  |  Route: /billing

KPI overview — quotation pipeline value, open orders, invoice totals by workflow status, receivables snapshot, and quick links to create quotation, order, or invoice.

Part 1 — Sales documents

Step 1 — Customer quotations

Menu: Billing → Quotations  |  Routes: /billing/quotations · editor /billing/quotation/{id?} · preview /billing/quotation-preview/{id} · from CRM /billing/quotation?opportunityId={id}

Price proposal to customer before committing to an order. Can be created from a CRM opportunity (prefilled customer and value). Approved quotations convert to sales orders.

Billing Customer Quotations list page
Customer Quotations — Billing → Quotations. Price proposals; approve then convert to sales orders.

Example — Quote → Approve → Convert

  1. Open Billing → Quotations → Add Quotation; select customer and line items.
  2. Save as Draft, optionally Send Email, then Approve.
  3. Click Convert to Order.

Result: Status becomes Converted and a sales order is created from the quote.

Status workflow

StatusMeaningHow reached
DraftSaved, editable.Save in editor.
SentEmailed to customer.Send Email action (PDF/email dialog).
ApprovedAccepted internally.Approve action on list.
RejectedDeclined.Reject action (with notes).
ExpiredPast expiry date.After Expiry Date passes.
ConvertedLinked to sales order.Convert to Order (requires Approved).
CancelledVoided.Cancel action.

List actions

Add Quotation · Edit · Preview · Send Email · Approve · Convert to Order · Reject · Duplicate · Cancel · Delete.

Quotation editor — header fields

FieldRequiredDescription
Quotation NumberNoAuto-generated if left empty.
Quotation DateYesDocument date.
Expiry DateYesQuote validity end date.
BranchNoPosting branch — disabled unless Admin/Branch Manager.
Branch CodeRead-onlyDerived from branch.
Customer NameYesCRM customer autocomplete — defaults to Walking Customer on new quotes. New Customer opens CRM.
Shipping AddressRead-onlyFrom customer address records.
Billing AddressRead-onlyFrom customer address records.
CurrencyNoTransaction currency — defaults from customer preferred currency or base.
Exchange RateRead-onlyDaily rate for BC equivalent in summary.
Shipping ChargeNoDocument-level freight.
Service ChargeNoDocument-level service fee.
Prepared ByNoHRM employee — editable for Admin/Branch Manager only.
Note to CustomerNoCustomer-facing remarks on PDF/email.

Line items

ColumnRequiredDescription
ProductPer lineInventory product autocomplete.
SKURead-onlyProduct SKU.
QTYPer lineQuoted quantity in base UoM.
UnitRead-onlyUnit of measure.
Unit PricePer lineBranch/customer price — shows price source chip.
VAT %NoLine tax rate (0–100).
Discount %NoLine discount (0–100).
SubtotalRead-onlyCalculated line total.

Toolbar: Add Item · Scan Barcode (barcode input + Enter).

Step 2 — Sales orders

Menu: Billing → Orders  |  Routes: /billing/orders · new /billing/orders/new · from quote /billing/orders/new?fromQuotationId={id} · edit /billing/orders/edit/{id} · preview /billing/orders/{id}

Formal sales commitment. Confirming an order reserves stock and auto-generates a WMS picking list. Confirmed or Shipped orders convert to invoices.

Billing Sales Orders list page
Sales Orders — Billing → Orders. Confirm to reserve stock and generate picking; convert to invoice when ready.

Example — Confirm order and convert to invoice

  1. Create or open a Pending sales order with customer and lines.
  2. Click Confirm — stock reserves and a picking list is created.
  3. After pick/ship, click Convert to Invoice.

Result: Order is Converted; invoice draft carries customer and lines for fulfilment billing.

Status workflow

StatusMeaningAvailable actions
PendingDefault on save — editable.Edit · Confirm · Reject · Cancel · Delete · Send Email · PDF
ConfirmedStock reserved; picking list created.Convert to Invoice · Reject · Cancel · PDF
ShippedGoods dispatched.Convert to Invoice · PDF
DeliveredFulfilment complete.View only
Rejected / CancelledVoided — stock reservation released.View only
ConvertedInvoice created from order.View only

Rule: Order must be Confirmed or Shipped before Convert to Invoice. Quotation must be Approved before Convert to Order.

Picking column on list links to /inventory/picking-lists when picking list exists — see Picking guide.

Order editor — header fields

Same structure as quotation, with these differences:

FieldRequiredDescription
Order NumberNoAuto-generated if empty.
Order DateYesOrder document date.
Expiry DateYesOrder validity end.
BranchNoChanging branch reloads branch-scoped products and stock display.
CurrencyNoFiltered by customer currency policy.
Customer / Addresses / Charges / Prepared By / NoteSame as quotation.

Line items show branch stock availability. Edit and Delete allowed only while Pending.

Step 3 — Sales invoices

Menu: Billing → Invoices  |  Routes: /billing/invoices · new /billing/invoices/new · from order /billing/invoices/new?fromOrderId={id} · edit /billing/invoices/edit/{id} · preview /billing/invoices/{id}

Fulfilment = Shipped or Delivered: Marking an invoice Shipped or Delivered triggers stock deduction (stock OUT), sales revenue journal, and COGS posting. Direct invoices (no prior order) may also auto-generate a picking list on Approve.
Billing Sales Invoices list page
Sales Invoices — Billing → Invoices. Approve for AR; Shipped/Delivered posts stock OUT and sales/COGS GL.

Example — Approve then Deliver

  1. Create invoice (from order or direct) with customer, due date, and lines.
  2. Approve, then mark Shipped or Delivered.
  3. Optionally record payment inline or via Customer Receipt.

Result: Stock decreases, revenue/COGS post to GL, and AR shows Due until paid.

Workflow status

StatusStock / GL effectPayment allowed
DraftNone — fully editable; FX editable.No
ApprovedAR recognized; direct invoice may trigger picking.Yes
ShippedStock OUT + Sales/COGS GL posted.Yes
DeliveredFinal fulfilment — same stock/GL path if Shipped skipped.Yes
CancelledLocked — no edits.No

Payment status (separate axis)

StatusMeaning
DueNo payment recorded.
PartialSome receipt allocated.
PaidFully settled.

Invoice editor — header fields

FieldRequiredDescription
Invoice NumberNoAuto-generated if empty (e.g. INV-xxxxxxxx).
Issue DateYesInvoice date.
Due DateYesPayment due — drives AR aging.
Branch / Branch CodeNo / Read-onlyScopes stock, numbering, and journals.
Customer NameYesCRM customer autocomplete.
Shipping / Billing AddressRead-onlyFrom customer records.
CurrencyNoMay lock when customer has single allowed currency.
Rate TypeNo (Draft only)Spot / Corporate / Custom / Contract.
Exchange RateNo (Draft only)Editable in Draft; read-only after save.
Shipping Charge / Service ChargeNoDocument-level charges.
Prepared ByNoSales employee.
Note to CustomerNoPrinted on invoice PDF.
Payment TermsNoDue On Receipt · Net 7 · Net 14 · Net 30.
Status (workflow)YesDraft / Approved / Shipped / Delivered selector.

Line items

Same columns as quotation/order — Product, SKU, QTY, Unit, Unit Price, VAT %, Discount %, Subtotal. Totals refreshed from backend tax engine.

Inline payment section (when status = Approved, Shipped, or Delivered)

FieldRequiredDescription
Payment method togglesNoCash, Bank, dynamic methods, MFS, Card, Credit Note, Advance Payment.
MFS Method / Card MethodYes (if active)Sub-method selection.
Bank AccountYes (Bank)Payment journal / bank account picker.
Payment JournalYesAuto-resolved GL journal — branch + payment method + document currency. See Payment Journals guide.
Pay AmountNoCash collection at save.
Change / ReturnRead-onlyOverpayment change due.
DueRead-onlyRemaining outstanding preview.
Payment Status previewRead-onlyDue / Partial / Paid chip.

Save persists as Draft first, then applies selected workflow status and optional inline payment.

Invoice list actions

Edit · Preview · Download PDF · Send Email · Approve · Shipped · Delivered · Make Payment · Sales Return · Credit Note · Delete (Draft only).

Payment filter chips: All · Due · Partial · Paid.

FAQ — Sales invoices

Stock did not decrease after approving invoice.

Stock OUT posts on Shipped or Delivered, not on Approved alone (unless your pipeline config differs). Mark Shipped after approval.

Picking list not generated.

Order-based invoices inherit picking from confirmed sales order. Direct invoices may generate picking on Approve — verify warehouse and stockable products.

Cannot edit invoice.

Delivered and Cancelled invoices are locked. Create credit note or sales return for corrections.

Payment section disabled.

Receipt blocked until invoice is at least Approved. Draft invoices cannot record payments.

Step 4 — Sales returns

Route: /billing/sales-return/{invoiceId}  |  Accessed from Invoices list → Sales Return action.

Return goods from customer against a shipped/delivered invoice. Restores inventory stock and posts revenue reversal journal. Separate from credit notes — does not auto-create a credit note.

Billing Sales Returns page
Sales Returns — from Invoices → Sales Return. Qty-based goods return; stock IN + revenue reversal.

Example — Return 2 units from an invoice

  1. On Invoices list, open Sales Return for a Shipped/Delivered invoice.
  2. Enter Return Qty on the lines (e.g. 2), optional reason, then Submit.

Result: Stock increases; revenue reverses; return appears on Sales Returns report.

Status workflow

StatusEffect
CreatedReturn document saved.
ReceivedAtomic on submit — stock IN + revenue reversal GL posted.

Return editor fields

Invoice summary (read-only): Invoice Number, Customer, Total Amount.

ColumnRequiredDescription
ProductDisplayOriginal invoice line.
Sold QtyDisplayOriginal invoiced quantity.
Previously ReturnedDisplayQty already returned on this invoice.
Return QtyYes (selected lines)Qty to return now — max = available; disabled if fully returned.
FieldRequiredDescription
ReasonNoFree-text return reason for audit trail.

Submit requires sum of Return Qty > 0.

Step 5 — Credit notes

Route: /billing/credit-note/{invoiceId}  |  Accessed from Invoices list → Credit Note action  |  Permission: CreditNotes

Monetary credit against invoice (price adjustment, goodwill credit, billing error). Reduces AR; optional immediate refund to cash/bank or hold as customer advance. GST/e-invoice compliance submission when enabled.

Billing Credit Notes page
Credit Notes — from Invoices → Credit Note. Amount-based AR credit; optional refund or customer advance.

Example — Issue a price-adjustment credit

  1. From Invoices list, open Credit Note for the invoice.
  2. Enter amount (≤ invoice total), reason, leave Refund Now off to hold as advance (or turn on for cash refund).
  3. Issue the credit note.

Result: AR reduces; advance or refund posts; no stock movement (unlike Sales Return).

Status workflow

StatusMeaning
IssuedCreated on Issue — GL posted; compliance submitted if configured.
AppliedCredit applied to customer AR balance.
CancelledReversed — journal entry reversed.

Credit note editor fields

Invoice summary (read-only): Invoice Number, Invoice Total (maximum credit), Customer, Currency.

FieldRequiredDescription
AmountYesCredit amount — min 0, max = invoice total.
ReasonNoExplanation — defaults to “Return” if blank on submit.
Refund NowNoOff = credit held as customer advance. On = immediate cash/bank refund.
Payment AccountYes (if Refund Now)Cash or Bank GL account for refund posting.

Post-issue view: GST breakdown, compliance QR/status, Download Receipt PDF, Back to Invoices.

Part 2 — Receipts & receivables

Step 6 — Customer receipts

Menu: Billing → Customer Receipt  |  Routes: /billing/customer-receipt · pre-selected /billing/customer-receipt/{customerId}

Record customer payments against open invoices, opening balances, or advance deposits. Posts Dr Cash/Bank (net) / Dr WHT Receivable / Cr AR via payment journals. FIFO allocation across oldest open invoices first.

Billing Customer Receipt page
Customer Receipts — Billing → Customer Receipt. Collect against open invoices with FIFO allocation and payment journals.

Example — Collect full due balance

  1. Open Billing → Customer Receipt and select the customer.
  2. Confirm open invoices and Pay Amount (defaults to total due).
  3. Choose payment method/journal and submit.

Result: Oldest invoices settle first; invoice payment status becomes Partial/Paid; cash/bank journal posts.

Payment entry points

  • Customer Receipt page — bulk pay with FIFO allocation.
  • Customer Payment dialog — from invoice list Make Payment or Customer Details.
  • Invoice editor inline payment — pay while saving approved invoice.
  • Customer Details → Make Payment / Pay Advance — navigates to receipt or advance dialog.

Customer Receipt page — Step 1: Select customer

FieldRequiredDescription
Search CustomerYesAutocomplete by name or phone — pre-filled from route param.
Summary tableRead-onlyTotal Sales, Total Paid, Due Balance (BC + FC columns).

Step 2: Open invoices (read-only)

Invoice list with FIFO allocation preview — oldest due invoices paid first on submit.

Step 3: Payment form

FieldRequiredDescription
Pay AmountYesMin 0.01 — pre-filled to total due balance.
Payment DateYesReceipt posting date (defaults today).
Payment MethodNoCASH, BANK, or dynamic Financials payment methods.
Payment JournalYesAuto-resolved GL journal — branch + payment method + document currency. See Payment Journals guide.
Bank AccountYes (Bank)Bank journal picker.
WHT TaxNoWithholding tax record from Taxation.
WHT Rate (manual)NoManual WHT % when no tax record.
WHT AmountRead-onlyGL breakdown preview.
NotesNoPayment reference or memo.

Step 4: Result (read-only)

Payment ID, per-invoice allocation breakdown, unallocated advance amount, Download Receipt PDF, New Receipt / View Invoices buttons.

FAQ — Customer receipts

Payment allocated to wrong invoice.

Bulk receipt uses FIFO (oldest due first). For a specific invoice, use Make Payment from that invoice row or Customer Payment dialog with invoice context.

Unallocated amount after payment.

Excess over all open invoices is held as customer advance — visible on Customer Details Advance Applied tab.

Step 7 — AR aging & receivables

Routes: Report /billing/reports/ar-aging · Legacy dashboard /billing/ar-aging · Customer statement /billing/reports/customer-statement

Monitor outstanding customer invoices by aging bucket and follow up on overdue receivables.

Customer-level ledger and statement available on Customer Details Ledger and Sales tabs.

Part 3 — Reports

Step 8 — Billing reports hub

Menu: Billing → Reports  |  Route: /billing/reports

9 analytics reports — each card visible when user has matching report permission.

Billing Reports hub page
Billing Reports Hub — Billing → Reports. AR aging, statements, collections, sales/tax summary, and registers.

Example — Run AR Aging

  1. Open Billing → Reports and choose AR Aging.
  2. Filter by as-of date/branch and export for collections follow-up.

Result: Outstanding invoices appear by aging bucket for credit control.

ReportRoutePermissionPurpose
AR Aging/billing/reports/ar-agingReceivablesAgingOutstanding receivables by bucket.
Customer Statement/billing/reports/customer-statementBillingCustomerStatementCustomer ledger for date range.
Collections/billing/reports/collectionsBillingCollectionReportReceipts collected by period.
Sales Summary/billing/reports/sales-summaryBillingSalesSummaryTotal sales by period/customer/product.
Tax Summary/billing/reports/tax-summaryBillingTaxSummaryOutput VAT/GST by period.
Credit Notes/billing/reports/credit-notesBillingCreditNoteReportCredit note register.
Sales Returns/billing/reports/sales-returnsBillingSalesReturnReportReturn register.
Quotation Conversion/billing/reports/quotation-conversionBillingQuotationConversionQuote-to-order conversion rate.
Audit Trail/billing/reports/audit-trailBillingAuditTrailDocument change history.

Cross-module integration summary

ModuleIntegration point
CRMCustomer master, addresses, preferred currency, WHT default, opportunity → quotation, Customer Details payments.
InventoryProduct lines, branch prices, stock display on orders; stock reservation on order confirm; stock OUT on invoice Shipped/Delivered; stock IN on sales return.
WMS / PickingPicking list auto-generated on sales order confirm — see Picking guide.
FinancialsSales/COGS journals on Shipped/Delivered; AR on invoice; payment journals on receipt; WHT Receivable; credit note GL.
Tax & ComplianceLine VAT, WHT on receipts, credit note e-invoice/GST submission.
POSPOS sales create linked invoices — see POS guide; appear on Customer Details Sales tab and AR reports.

Sales return vs credit note

DocumentUse whenStockGL
Sales ReturnPhysical goods returned — qty-based.Stock INRevenue reversal + COGS reversal
Credit NotePrice correction, billing error, goodwill — amount-based.No stock movementAR credit; optional cash refund or advance

Before go-live checklist

TaskDepends on
Register customers with credit limitCRM Customers · Financials currencies
First Quote → Order → Confirm → Pick → Invoice → DeliverProducts · Warehouse · GL revenue/COGS mappings
Verify stock after Deliver/inventory/stock
Test customer receipt with WHTPayment journals · WHT GL mapping
Reconcile AR GL vs customer ledgerCustomer Details · AR Aging report
Module Guide

Point of Sale (POS)

POS is CognitixERP’s retail checkout module — cashier sessions, product search, cart management, multi-tender payments, receipt printing, stock deduction, billing invoice creation, and automatic GL posting. Every completed sale creates a POS transaction, reduces branch stock, posts revenue/VAT/cash (or AR for credit sales), and optionally submits e-invoice compliance (ZATCA/GST).

Prerequisites: Branches · Inventory products (active SKUs with branch prices) · WMS warehouse (stock source for deduction) · Financials (currencies, tax rates, payment methods, payment journals, GL mappings for Sales/POS) · Tax & Compliance (optional QR/IRN on receipts) · optional CRM customers (credit/partial sales, foreign currency) · Settings → Weight Machine (weighed products only).
Important concepts: A POS Session must be open before selling — it tracks opening/closing cash and ties transactions to a cashier. POS creates a linked Billing invoice on checkout; stock is deducted immediately (not on a separate Ship/Deliver step). Credit (Due) sales post to AR and require a registered customer. Walk-in customers use the system walk-in customer configured in appsettings.json (WalkInCustomerId).

Recommended setup order

1 · POS Settings 2 · Payment journals 3 · Coupons (optional) 4 · Open session 5 · Terminal sale 6 · Close session 7 · Reports

Retail sale flow

  1. Configure — POS Settings (branch default, business rules, receipt footer).
  2. Open session — select branch, count opening cash in drawer.
  3. Sell — search/scan products → cart → customer (optional) → payment → checkout.
  4. Receipt — print/PDF; compliance QR when enabled.
  5. Close session — count closing cash; system shows variance vs expected.
  6. Review — Sales History, Cash Reconciliation, Session Summary reports.

Routes at a glance

Navigation & permissions

Menu path (POS)RoutePermission page
POS → Terminal/pos/terminalPOSTerminal
POS → Sales History/pos/sales-historyPOSSalesHistory
POS → Sessions/pos/sessionsPOSSessions
POS → Coupons/pos/discountsPOSDiscounts (Manager/Admin role)
POS → Settings/pos/settingsPOSSettings
POS → Reports/pos/reportsPOSReports + report-specific

Part 1 — Setup

Step 1 — POS Settings

Menu: POS → Settings  |  Route: /pos/settings

Global POS behaviour — default branch, receipt footer, stock rules, credit policy, and compliance QR toggle. Save once before cashiers open the terminal.

POS Settings page
POS Settings — POS → Settings. Default branch, receipt footer, negative-stock and credit rules, compliance QR.

Example — Configure before first shift

  1. Open POS → Settings and set Default Branch.
  2. Enter receipt footer text; leave Allow Negative Stock off; keep Require Customer for Credit on.
  3. Save, then open the terminal for cashiers.

Result: New sessions pre-select the branch; credit sales need a CRM customer; overselling is blocked.

Terminal configuration

FieldRequiredDescription
Default BranchNoPre-selected branch when terminal loads and session overlay opens. Cashiers can change per session.
Receipt Footer NoteNoText printed at bottom of every receipt (e.g. return policy, thank-you message). Default: “Thank you for your purchase!”

Business rules

SettingDefaultDescription
Allow Negative StockOffWhen off, checkout blocks if cart quantity exceeds available stock (unless setting enabled). When on, sale proceeds and stock can go negative.
Require Customer for CreditOnWhen on, Due (credit) sales require a selected CRM customer — walk-in cannot run on account. When off, walk-in credit is allowed (not recommended).

Compliance section

FieldDescription
Show QR on POS ReceiptWhen e-invoice compliance is configured (/settings/e-invoice-compliance), toggles compliance QR printing on POS receipts after successful submission.
Open Compliance SettingsLink to global compliance profile — ZATCA, GST India, NBR (future).

Walk-in customer

Anonymous retail sales attach to the system walk-in customer ID configured in appsettings.json under WalkInCustomerId. Ensure this CRM customer exists before go-live. Cannot be changed from the POS Settings UI.

Step 2 — Coupons (discount codes)

Menu: POS → Coupons  |  Route: /pos/discounts  |  Access: Manager or Admin role + POSDiscounts

Promotional coupon codes cashiers apply at the terminal. Backend validates eligibility (dates, min order, usage limits) when Apply is clicked on the terminal.

POS Coupons discount codes page
Coupons — POS → Coupons. Percentage or fixed promo codes with dates, min order, and usage limits.

Example — Create SUMMER25 (25% off)

  1. Open POS → Coupons and add code SUMMER25, type Percentage, value 25.
  2. Set Valid From/Until and optional min order / max discount.
  3. Save Active; cashiers enter the code on the terminal and click Apply.

Result: Eligible carts get the discount; usage count increments against the max limit.

List filters

FilterOptions
SearchCode or description text.
Discount TypeAll · Percentage · Fixed Amount.
StatusAll · Active · Inactive.

Coupon list columns

ColumnDescription
CodeUnique coupon code entered at terminal (immutable after create).
DescriptionInternal label.
Type / ValuePercentage (e.g. 25%) or fixed amount.
Min Order / Max DiscountFloor and cap on discount application.
UsageTimes used vs max (0 max = unlimited ∞).
Valid UntilExpiry date; red when past.
StatusActive / Inactive chip.

Add / Edit coupon dialog — fields

FieldRequiredDescription
Coupon CodeYesUppercase-style code (e.g. SUMMER25) — locked on edit.
DescriptionNoHuman-readable note.
Discount TypeYesPercentage or Fixed.
ValueYesPercent or fixed currency amount.
Minimum Order AmountNoCart subtotal must meet this before coupon applies.
Max Discount AmountNoCap on percentage discounts.
Max Usage CountNo0 = unlimited redemptions across all terminals.
Valid FromYesStart date.
Valid UntilNoEnd date — leave empty for no expiry.
BranchNoScope coupon to one branch, or all branches when empty.
ActiveEdit onlyInactive coupons rejected at terminal.

Part 2 — Terminal operations

Step 3 — POS Terminal

Menu: POS → Terminal  |  Route: /pos/terminal

Full-screen retail UI. Blocked until a session is open. Layout: left sidebar (categories, customer, discount) · centre product grid · right cart and payment panel.

POS Terminal retail UI
POS Terminal — POS → Terminal. Full-screen checkout: products, cart, payment; requires an open session.

Example — Complete a cash sale

  1. Open POS → Terminal, select branch, and open a session with opening cash.
  2. Scan/add products, optional customer or coupon, then tender Cash.
  3. Complete sale and print/email receipt.

Result: Stock deducts, payment journal posts, and a Billing-linked invoice/receipt is created.

Session gate (overlay)

Shown when no active session exists for the cashier.

Field / actionDescription
Select BranchBranch for this session — defaults from POS Settings.
Open SessionOpens dialog — enter opening cash balance (0 allowed).

Open session dialog

FieldRequiredDescription
BranchRead-onlySelected branch name.
CashierRead-onlyLogged-in user.
Opening Cash BalanceYesPhysical cash counted in drawer before first sale. Min 0.

Header bar

DisplayDescription
Company nameFrom company profile.
Branch / CashierActive session context.
ClockCompany timezone date/time.
Close SessionOpens close-session dialog (count closing cash).

Left sidebar — customer & discount

FieldDescription
CategoriesFilter product grid — All Products or inventory category name.
Search CustomerCRM autocomplete — sets transaction customer and preferred currency/FX rate. Clear = Walk-in.
Currency chipShown when customer uses foreign currency — displays code and exchange rate.
Discount amountManual cart-level discount in document currency.
Coupon Code + ApplyValidates coupon via backend; replaces/adds to discount.
Hold SaleParks current cart — resume from held list. Multiple held sales supported.

Product grid

ElementDescription
Search / barcodeText search by name/SKU; USB barcode scanners append digits + Enter (auto-add to cart).
Product cardImage, name, category, branch sale price, stock qty. Click or Add button adds to cart.
Stock displayBranch warehouse available qty — red when zero.

Cart line fields

FieldDescription
QuantityEditable — step 1 for normal UoM; 0.001 for weight-based products.
Scale ReadWeight products — reads connected scale (/settings/weightmachine).
Item DiscountPer-line discount amount sent to backend.
UoM hintConversion factor when sales UoM differs from stock UoM (e.g. 1 Box = 12 units).
Line totalQty × price − item discount + tax.

Cart summary

RowDescription
SubtotalSum of line nets before cart discount.
VATOutput tax from product tax rates.
DiscountCart-level + coupon discount.
Total PayableAmount due in document currency.
FX panelWhen customer currency ≠ base — shows BC equivalent and rate source (Spot/Corporate/Custom).

Payment panel — every field

ControlDescription
CashCash tender — uses Cash-type payment journal. Shows tendered amount and change for full cash sales.
BankBank transfer — select bank payment journal from dropdown (one per linked bank account).
MFSMobile financial services — sub-select bKash/Nagad/etc. from Financials payment methods.
CardCard terminal — sub-select Visa/MasterCard/etc.
Dynamic methodsOther active payment methods from Financials (Cheque, Gateway, Other).
DueCredit sale — no payment collected; posts full amount to AR. Requires customer when setting enabled.
SplitMulti-tender dialog — divide total across Cash/Bank/MFS/Card methods in one sale.
Payment JournalRead-only auto-resolved field — branch + method + currency. Required before checkout. See Payment Journals guide.
Full / PartialFull pays entire total; Partial collects less and leaves remainder as customer due (requires customer).
Amount PaidPartial payment amount — remaining due shown below.
Tendered AmountCash full payment — customer handed cash; change calculated.
ReferenceOptional transaction ID for Card/MFS/Bank/dynamic methods.

Checkout actions

ButtonAction
Cancel / New SaleClears cart (with confirmation if items present).
CheckoutCompletes sale — stock OUT, invoice create, GL post, receipt modal.

Keyboard shortcuts

KeyAction
F1New sale (clear cart).
F2Clear search / focus product search.
F4Hold current sale.
F8Checkout (when cart not empty and session open).
EscapeClose receipt modal.
Barcode scanner EnterRapid digit sequence + Enter adds matching SKU to cart.

Close session dialog

FieldDescription
Session summaryOpening balance, cash collected, total sales, transaction count, expected cash.
Actual Closing Cash BalancePhysical count — variance vs expected shown (overage/shortage).

Cash variance posts to GL via POSCashVarianceEvent when session closes with non-zero variance.

Receipt modal (post-checkout)

Print receipt, download PDF, start new sale. Compliance QR embedded when submission succeeds and setting enabled.

FAQ — POS Terminal

Payment journal empty / checkout blocked.

Create active payment journals for the session branch with Payment Method Lines for each tender type. See Payment Journals guide.

Insufficient stock error.

Enable Allow Negative Stock in POS Settings, or reduce quantity / receive stock via GRN or Branch Opening Stock.

Due button disabled.

Select a CRM customer first, or disable Require Customer for Credit in settings (not recommended).

Product not found on scan.

Verify SKU/barcode on product master, branch price exists, and product status is Active.

Part 3 — Sessions, history & controls

Step 4 — POS Sessions

Menu: POS → Sessions  |  Route: /pos/sessions

Supervisor view of cashier sessions per branch — open/close, expand transactions, void/refund, X/Z reports.

POS Sessions supervisor page
POS Sessions — POS → Sessions. Open/closed cashier shifts with void/refund and X/Z reports.

Example — Close shift and run Z report

  1. Open POS → Sessions and select the branch.
  2. Close the open session after counting closing cash (or close from Terminal).
  3. Run Z Report for the closed session; use Void/Refund on a txn only with a reason.

Result: Shift is closed with cash variance; Z report is available for end-of-day reconciliation.

Filter

FieldDescription
BranchRequired branch selector — reloads session list.

Session table

ColumnDescription
CashierUser who opened the session.
Opened At / Closed AtSession timestamps.
StatusOpen (green) or Closed.
Total Sales / TransactionsAggregates for the session.
Actions menuClose Session (open only) · X Report · Z Report (closed only).

Expanded transaction list

Click expand icon to load transactions for that session.

Column / actionDescription
Transaction #POS receipt number.
CustomerCRM name or Walk-in.
StatusCompleted · Voided · Refunded.
VoidManager action — requires reason; reverses stock and GL.
RefundManager action — requires reason; reverses stock and posts refund GL.

Void / Refund dialogs

FieldRequiredDescription
Void Reason / Refund ReasonYesAudit text — mandatory before confirm.

Step 5 — Sales History

Menu: POS → Sales History  |  Route: /pos/sales-history

Read-only transaction register with KPI bar, search, branch filter, detail preview, print/PDF receipt, and compliance status column.

POS Sales History page
Sales History — POS → Sales History. Transaction register with KPIs, filters, detail preview, and receipt reprint.

Example — Find and reprint a receipt

  1. Open POS → Sales History and filter by branch or search transaction number.
  2. Select a row to open the detail panel (lines, payments, compliance).
  3. Use Print / PDF to reprint the receipt if needed.

Result: Cashiers/managers can audit completed sales and reprint receipts without reopening the terminal.

Filters & KPI bar

ElementDescription
SearchTransaction number or customer name.
BranchAll Branches or specific branch.
KPI tilesTotal txns, Completed, Voided, Total Sales (BC).

Detail panel (selected transaction)

SectionContents
Transaction infoCustomer, currency, FX rate, linked Billing invoice ID.
Line itemsProduct, qty, unit price, discount, tax, line total.
PaymentsMethod, amount, journal, reference per tender line.
ComplianceSubmission status chip (Success/Failed/Pending).
Print / PDFReprint receipt — logged in Receipt Audit report.

Part 4 — Reports

Step 6 — POS reports hub

Menu: POS → Reports  |  Route: /pos/reports

15 operational reports — each card visible when user has matching report permission or hub access.

POS Reports hub page
POS Reports Hub — POS → Reports. Session, sales, tender, void/refund, and receipt audit reports.

Example — Run Session Summary

  1. Open POS → Reports and choose Session Summary.
  2. Filter by date range and branch, then export for management.

Result: Multi-session sales and tender totals are ready for daily reconciliation.

ReportRoutePermissionPurpose
Session Summary/pos/reports/session-summaryPOSSessionSummaryReportMulti-session rollup for period.
Cash Reconciliation/pos/reports/cash-reconciliationPOSCashReconciliationReportDrawer audit per session — opening, sales, variance.
Cashier Performance/pos/reports/cashier-performancePOSCashierPerformanceReportProductivity and accuracy by cashier.
Void & Refund Audit/pos/reports/void-refund-auditPOSVoidRefundReportControl report for voided/refunded txns.
Sales Detail/pos/reports/sales-detailPOSSalesDetailReportLine-level sales register.
Product Mix/pos/reports/product-mixPOSProductMixReportTop sellers by product/category.
Tender Mix/pos/reports/tender-mixPOSTenderMixReportPayment breakdown Cash/Card/MFS/Bank/Due.
Hourly Sales/pos/reports/hourly-salesPOSHourlySalesReportPeak-hour patterns.
Coupon Usage/pos/reports/coupon-usagePOSCouponUsageReportDiscount code redemptions.
Tax Summary/pos/reports/tax-summaryPOSTaxSummaryReportOutput VAT by rate (POS only).
Due Sales/pos/reports/due-salesPOSDueSalesReportWalk-in/credit sales with unpaid balance.
Multi-Currency/pos/reports/multi-currencyPOSMultiCurrencyReportFC vs BC totals by currency code.
Session Comparison/pos/reports/session-comparisonPOSSessionComparisonReportCurrent vs prior equal-length period.
Inventory Impact/pos/reports/inventory-impactPOSInventoryImpactReportStock movement from POS sales.
Receipt Audit/pos/reports/receipt-auditPOSReceiptAuditReportReprint audit trail.

GL posting on completed sale

POSTransactionCompletedEvent posts journal entry reference POS-{transactionNumber}:

LineDebitCreditAccount source
Cash/Bank/MFS/Card (per payment line)Payment Journal Default/Outstanding GL
DiscountSales discount GL mapping (when discount > 0)
Sales revenueGL Mapping SalesRevenue or product income account
Output VATTax record GL or OutputVAT mapping
Due / partial unpaidAR account (GlMappingType.AR) for remaining balance

Stock deducts at checkout via inventory shipment — same product/warehouse as branch default WMS flow.

Transaction status reference

StatusCodeMeaning
Draft0Cart in progress (not persisted as completed sale).
Completed1Sale finalized — stock OUT, GL posted, invoice linked.
Voided2Cancelled after completion — stock restored, GL reversed.
Refunded3Money returned — stock restored, refund GL posted.

Cross-module integration

ModuleIntegration point
InventoryBranch products, prices, stock qty on grid; stock OUT on checkout; IN on void/refund.
BillingLinked sales invoice per transaction — appears on Customer Details Sales tab and AR reports.
CRMCustomer picker, credit limit, preferred currency and FX on terminal.
FinancialsPayment journals, tax rates, GL mappings (Sales/POS category), cash variance JE on session close.
Tax & ComplianceLine VAT; optional QR/IRN on receipt — see Compliance guide.
WMSWarehouse stock source for availability and deduction.

Before go-live checklist

TaskDepends on
Configure POS Settings (branch, rules, footer)Branches · /pos/settings
Cash + MFS/Card payment journals per branchPayment Journals
Walk-in customer ID in appsettingsCRM customer record
Test sale: Cash → receipt → Trial BalanceProducts · warehouse stock · GL POS mappings
Test session close with cash countOpen session · at least one cash sale
Run Cash Reconciliation reportClosed session
Test barcode / weight product (if used)SKU barcode · weight machine settings
Module Guide

Procurement (Purchasing)

Procurement covers the full procure-to-pay cycle — supplier master data, supplier quotations, purchase orders, goods receipt (GRN), purchase invoices, purchase returns, supplier debit notes, supplier payments, payables aging, and analytics. Approved purchase invoices post to accounts payable; marking an invoice Received increases branch stock and posts inventory GL entries. Payments reduce AP through Financials payment journals.

Prerequisites: Branches · Financials (currencies, exchange rates, payment methods, payment journals, GL mappings) · Tax & Compliance (VAT/GST/WHT rates) · Inventory products (active SKUs for PO/invoice lines) · WMS warehouse (stock receipt on GRN) · optional Banking (bank account journals for supplier payments).
Important concepts: There is no separate RFQ screen — capture supplier prices in Supplier Quotations. There is no standalone GRN page — goods receipt is the Purchase Invoice status Received (with serial/batch capture when required). Purchase Returns and Debit Notes are accessed from the Invoices list actions, not the main menu.

Recommended setup order

1 · Suppliers 2 · Supplier quotations 3 · Purchase orders 4 · Purchase invoices 5 · GRN (Received) 6 · Supplier payments 7 · Returns & debit notes 8 · AP aging & reports

Procure-to-pay flow

  1. Quotation — capture supplier prices (Draft → Approve).
  2. Purchase Order — convert from approved quotation or create manually (Pending → Confirm).
  3. Purchase Invoice — convert from confirmed PO or create manually (Draft → Approved).
  4. GRN — mark invoice Received → stock in + inventory GL + optional serial/batch.
  5. Payment — pay from invoice, Supplier Payment page, or Supplier Details (with WHT/FX).
  6. Settlement — allocations update invoice payment status; full payment sets workflow Paid.

Routes at a glance

Navigation & permissions

Menu path (Procurement)RoutePermission page
Procurement → Suppliers/procurement/suppliersSuppliers
Procurement → Quotations/procurement/quotationsSupplierQuotations
Procurement → Orders/procurement/purchase-ordersPurchaseOrders
Procurement → Invoices/procurement/invoicesPurchaseInvoices
Procurement → Supplier Payment/procurement/supplier-paymentSupplierPayment
Procurement → Reports/procurement/reportsProcurementReports + report-specific

Part 1 — Supplier master

Step 1 — Suppliers

Menu: Procurement → Suppliers  |  Routes: /procurement/suppliers · new /procurement/suppliers/new · details /procurement/suppliers/{id}

Vendor party master for all procurement documents. Each supplier belongs to a branch, carries AP opening balance, preferred currency, optional WHT default, and repeatable addresses. Supplier Details is a read-only dashboard (ledger, purchases, payments); edit via dialog from list or details page.

Procurement Suppliers list page
Suppliers — Procurement → Suppliers. Vendor master for quotations, POs, invoices, and payments.

Example — Register a B2B supplier

  1. Open Procurement → Suppliers → New.
  2. Complete Profile (Business, company, branch), Financials, Currency, and Addresses.
  3. Save, then open Supplier Details to view ledger and purchase tabs.

Result: Supplier appears in PO/invoice pickers and can receive payments against AP.

Create supplier — 4-step wizard (/procurement/suppliers/new)

Step 1 — Profile

FieldRequiredDescription
Supplier TypeYesIndividual or Business — controls which name fields are mandatory.
Company NameYes (Business)Legal or trade name of vendor organization.
First Name / Last NameYes (Individual); optional (Business)Contact person name.
EmailNoPrimary contact email for PO/invoice correspondence.
Phone NumberNoContact phone — searchable on Supplier Payment screen.
Tax IDNoSupplier tax registration number (VAT/GST/TIN).
BranchYesOwning branch — scopes supplier ledger and default warehouse context.

Step 2 — Financials

FieldRequiredDescription
Opening BalanceNo (default 0)Accounts payable opening balance for migration — reconcile with Financials AP GL.
Is ActiveNo (default true)Inactive suppliers hidden from new document pickers but preserved on history.
Default WHT TaxNoWithholding tax record — auto-fills WHT rate on new purchase invoices for this supplier.

Step 3 — Currency

FieldRequiredDescription
Preferred CurrencyNoDefault transaction currency on quotations, POs, and invoices.
Preferred Rate TypeNoSpot or Corporate — which exchange rate table to use.
Allow Multiple CurrenciesNoWhen enabled, supplier can transact in currencies beyond preferred currency.
Allowed CurrenciesNoMulti-select of permitted currencies — shown when multi-currency is enabled.

Step 4 — Addresses (repeatable rows)

FieldRequiredDescription
Address TypeNoBilling, Shipping, or other address classification.
Street 1 / Street 2NoAddress lines.
City / State / Postal Code / CountryNoLocation fields for supplier correspondence and tax jurisdiction.

Quick edit — Supplier dialog (from list)

Same profile, currency, and address fields as wizard. Additional behaviour in edit mode:

  • Opening Balance is required in dialog (migration/correction use).
  • Currency change may be blocked if transactions exist — alert shown with option to Duplicate With New Currency (clone supplier in new currency).
  • Dialog does not include Default WHT Tax — set WHT on wizard create or on individual invoices.

Supplier Details page (/procurement/suppliers/{id})

Read-only dashboard with actions:

SectionContent
Profile headerName, type chip, currency, email, phone, tax ID, due balance, advance balance, opening balance, last payment date, addresses.
Ledger tabAP sub-ledger: Date, Description, Debit, Credit, Balance. Filter by Date Range.
Purchases tabInvoice Number, Date, Due Date, Total, Paid, Outstanding per invoice.
Payments tabPayment history + Advance Applied table (with reverse advance action).
ActionsMake Payment · Pay Advance · Edit (opens dialog) · Delete.

FAQ — Suppliers

Cannot change supplier currency after first invoice.

Currency is locked once transactions exist. Use Duplicate With New Currency in edit dialog to create a parallel supplier record.

Opening balance vs Financials AP GL.

Supplier opening balance here feeds supplier ledger. Financials GL opening AP must match total supplier opening balances — reconcile before go-live.

Part 2 — Procurement documents

Step 2 — Supplier quotations

Menu: Procurement → Quotations  |  Routes: /procurement/quotations · editor /procurement/quotation/{id?} · preview /procurement/quotation-preview/{id}

Capture supplier price offers before committing to a purchase order. Use when comparing vendors or recording RFQ responses. Approved quotations convert directly to purchase orders.

Procurement Supplier Quotations page
Supplier Quotations — Procurement → Quotations. Vendor price offers; approve then convert to PO.

Example — Quote → Approve → Convert to PO

  1. Add a quotation with supplier, lines, and expiry date.
  2. Approve, then click Convert to Order.

Result: Status becomes Converted and a Pending purchase order is created from the quote.

Status workflow

StatusMeaningHow reached
DraftSaved, not finalized.Save in editor.
SentCommunicated to supplier.Send Email action (PDF/email).
ApprovedAccepted internally.Approve action on list.
RejectedDeclined.Reject action (with notes).
ExpiredPast expiry date.System/business rule after Expiry Date.
ConvertedLinked to PO.Convert to Order (requires Approved).
CancelledVoided.Cancel action.

List actions

Preview · Edit · Send Email · Approve · Convert to Order · Reject · Cancel · Delete · Download PDF.

Quotation editor — header fields

FieldRequiredDescription
Quotation NumberNoAuto-generated or manual document number.
Quotation DateYesDocument date.
Expiry DateYesLast valid date for supplier offer.
BranchNoReceiving branch — disabled if user cannot access all branches.
Branch CodeRead-onlyDerived from selected branch.
Deliver ToRead-onlyBranch delivery address display.
Supplier NameYesSupplier autocomplete — New Supplier button opens Supplier dialog.
CurrencyNoDocument currency — defaults from supplier preferred currency.
Exchange RateRead-onlyFX rate for base currency equivalent in summary.
Shipping ChargeNoFreight amount added to document total.
Service ChargeNoAdditional service fee.
RemarksNoInternal or supplier-facing notes.

Line items

ColumnRequiredDescription
ProductPer lineInventory product autocomplete.
SKURead-onlyProduct SKU after selection.
QTYPer lineQuoted quantity in product base UoM.
UnitRead-onlyUnit of measure from product master.
Unit PricePer lineSupplier quoted unit price — editable from product default.
VAT %NoTax rate per line — from product/tax setup.
Discount %NoLine discount percentage.

Toolbar: Add Item · Scan Barcode · Add by Barcode.

Summary panel (read-only): Subtotal, Shipping, Service, VAT, Discount, Total Amount, FX note.

Step 3 — Purchase orders

Menu: Procurement → Orders  |  Routes: /procurement/purchase-orders · new /procurement/purchase-orders/new · edit /procurement/purchase-orders/edit/{id} · preview /procurement/purchase-orders/{id}

Formal commitment to supplier. Create manually or convert from an approved quotation. Confirmed POs convert to purchase invoices. Does not affect stock or GL until invoice is received.

Procurement Purchase Orders page
Purchase Orders — Procurement → Orders. Confirm commitment, then convert Confirmed POs to invoices.

Example — Confirm PO and convert to invoice

  1. Create or open a Pending PO with supplier and lines.
  2. Confirm the order, then Convert to Invoice.

Result: PO becomes Completed; invoice draft carries supplier and lines for GRN/AP.

Status workflow

StatusMeaningAvailable actions
PendingDefault on save — editable.Edit · Confirm · Reject · Cancel · Delete · Duplicate · Send Email · PDF
ConfirmedApproved for procurement.Convert to Invoice · Reject · Cancel · Duplicate · PDF
RejectedDeclined.View only
CancelledVoided before fulfilment.View only
CompletedConverted to invoice.View only

Rule: PO must be Confirmed before Convert to Invoice. Quotation must be Approved before Convert to Order.

PO editor — header fields (same structure as quotation, plus)

FieldRequiredDescription
Purchase Order NumberRead-onlySystem-generated PO number.
Order DateYesPO document date.
Processed ByNoEmployee autocomplete — buyer/processor from HRM employee master.
Branch / Branch Code / Deliver ToSame as quotation.
Supplier / Currency / Exchange RateSame as quotation.
Shipping Charge / Service Charge / RemarksNoSame as quotation.

Line items

Same columns as quotation: Product, SKU, QTY, Unit, Unit Price, VAT %, Discount %, line Subtotal.

Save on create sets status Pending. Edit and Delete allowed only while Pending.

Step 4 — Purchase invoices & goods receipt (GRN)

Menu: Procurement → Invoices  |  Routes: /procurement/invoices · editor /procurement/invoice/{id?} · preview /procurement/invoice-preview/{id}

GRN = Received status: CognitixERP does not use a separate goods receipt note screen. When you set a purchase invoice to Received, the system performs GRN — increments branch stock, creates inventory transactions (respecting FIFO/LIFO/weighted average costing), posts inventory GL journal (Dr Inventory / Dr VAT / Cr AP), and triggers putaway resolution for bin placement on receipt.
Procurement Purchase Invoices and GRN page
Purchase Invoices & GRN — Procurement → Invoices. Set status to Received for stock IN + inventory/AP GL.

Example — Receive goods (GRN)

  1. Open or create a purchase invoice from a Confirmed PO.
  2. Approve if needed, then set Purchase Status to Received and save.
  3. Verify stock on hand and putaway audit for bin placement.

Result: Stock increases, AP and inventory journals post, and payment status remains Due until paid.

Workflow status

StatusStock / GL effectPayment allowed
DraftNone — fully editable; FX/rate editable.No
ApprovedAP recognized on ledger.Yes
ShippedIn transit — no stock receipt yet.Yes
ReceivedGRN — stock in + inventory GL posted (once).Yes
PaidSet when fully paid.
CancelledLocked — no edits.No

Payment status (separate from workflow)

StatusMeaning
DueNo payment recorded.
PartialSome payment allocated; outstanding remains.
PaidFully settled including debit note adjustments.

Invoice editor — header fields

FieldRequiredDescription
Issue DateYesSupplier invoice date.
Due DateNoPayment due date — drives AP aging buckets.
BranchNoBranch receiving goods.
Branch CodeRead-onlyBranch identifier.
Shipping AddressRead-onlyBranch ship-to address.
Purchase StatusYesWorkflow selector: Draft / Approved / Shipped / Received.
Supplier NameYesSupplier autocomplete.
CurrencyNoDocument currency — may lock after first save.
Rate TypeNo (Draft only)Spot / Corporate / Custom / Contract — FX source.
Exchange RateNo (Draft only)Base per FC unit — editable only in Draft.
Shipping ChargeNoFreight added to invoice total.
Service ChargeNoService fee.
WHT Rate %NoWithholding tax rate — defaults from supplier WHT setup.
Supplier GSTINConditionalRequired for taxable invoices before Received (GST India).
Supplier IRNConditionalE-invoice IRN — required for GST India Received status.
Verify Supplier IRNButton — validates IRN via compliance API (edit mode).
NotesNoFree-text remarks.

Line items (card layout per row)

FieldRequiredDescription
ProductPer lineInventory product selection.
SKURead-onlyProduct SKU.
QTYPer lineInvoice quantity. When Received + weight-based product: Scale Read button reads weight from connected scale.
UnitRead-onlyProduct UoM.
Unit PricePer lineCost per unit — drives inventory valuation on receipt.
VAT %NoInput tax rate per line.
Discount %NoLine discount.

GRN capture — when status = Received

FeatureWhen shownDescription
Serial Numbers panelReceived + serial-tracked productOpen serial picker — count must match QTY exactly before save.
Batch Number panelReceived + batch-tracked productSet batch/lot number and expiry date via batch dialog.
Scale ReadReceived + weight-based productReads live weight into QTY field.

Saving with Received status: system may create invoice as Approved first, then call status API to Received — triggering stock increment, inventory items, and GL posting in one pipeline.

Inline payment section (when status = Approved, Shipped, or Received)

FieldRequiredDescription
Payment method togglesNoCash, Bank, dynamic methods, MFS, Card, Credit Note, Advance.
MFS MethodYes (if MFS)bKash, Nagad, etc.
Card MethodYes (if Card)Visa, MasterCard, etc.
Bank AccountYes (Bank)Payment journal / bank account picker.
Payment JournalYesAuto-resolved GL journal — branch + payment method + document currency. See Payment Journals guide.
Pay AmountNoPayment amount — label shows FC or BC context.
Change / ReturnRead-onlyOverpayment change due.
DueRead-onlyRemaining outstanding after payment.

Invoice list actions

Edit · Approve · Mark Shipped · Mark Received · Make Payment · Purchase Return · Debit Note · Delete (Draft only).

FAQ — Purchase invoices & GRN

Stock did not increase after saving invoice.

Invoice must be status Received, not merely Approved or Shipped. Shipped records AP but does not receipt stock.

Cannot mark Received — GSTIN/IRN error.

For taxable GST India invoices, enter Supplier GSTIN and IRN, then verify IRN before setting Received.

Serial product save failed.

When status is Received and product is serial-tracked, enter exactly one serial number per unit in the serial panel.

Payment section disabled.

Payment is blocked until invoice is at least Approved. Draft invoices cannot record payments.

Step 5 — Purchase returns

Route: /procurement/purchase-return/{invoiceId}  |  Accessed from Invoices list → Purchase Return action on Received invoice.

Return goods to supplier against a received purchase invoice. Decrements branch stock on receive. Not in main menu — open from invoice row action.

Procurement Purchase Returns page
Purchase Returns — from Invoices → Purchase Return. Qty return to supplier; stock OUT on receive.

Example — Return damaged units

  1. On a Received invoice, open Purchase Return.
  2. Enter Return Qty on affected lines and Submit.

Result: Stock decreases; return register updates; follow with debit note if AP credit is needed.

Status workflow

StatusEffect
ApprovedCreated on submit via API.
ReceivedAuto-called after create — stock decremented via receipt reverse.
CreditedSupplier credit applied (domain state).
CancelledReverses stock if already received.

Return editor fields

Invoice summary (read-only): Invoice Number, Supplier, Total Amount.

ColumnRequiredDescription
ProductDisplayOriginal invoice line product.
Purchased QtyDisplayNet purchased quantity after prior returns.
Previously ReturnedDisplayQuantity already returned on this invoice.
Return QtyYes (selected lines)Quantity to return — max = available (purchased minus prior returns).

Submit creates return and auto-receives — stock out immediately.

Step 6 — Supplier debit notes

Route: /procurement/debit-note/{invoiceId}  |  Accessed from Invoices list → Debit Note action.

Financial adjustment reducing amount owed to supplier (price correction, short shipment credit, quality claim). Reduces invoice payable and posts GL on issue. Reflected in payment dialogs as debit note deductions.

Procurement Supplier Debit Notes page
Supplier Debit Notes — from Invoices → Debit Note. Amount-based AP reduction (no stock move).

Example — Issue a price-correction debit

  1. From Invoices list, open Debit Note for the invoice.
  2. Enter amount (≤ invoice total) and reason, then Issue.

Result: Payable reduces; payment dialogs show the debit deduction; no stock change.

Status workflow

StatusMeaning
IssuedCreated on submit — GL posted; optional GST compliance submission.
AppliedReduces invoice outstanding in payment calculations.
CancelledReverses journal entry.

Debit note editor fields

Invoice summary (read-only): Invoice Number, Invoice Total (maximum debit amount), Supplier.

FieldRequiredDescription
AmountYesDebit amount — cannot exceed invoice total.
ReasonNoExplanation for audit trail and supplier correspondence.
Supplier GSTINNoGST compliance — supplier tax ID.
Supplier IRNNoE-invoice reference for GST India debit note submission.

Part 3 — Payments & payables

Step 7 — Supplier payments

Menu: Procurement → Supplier Payment  |  Routes: /procurement/supplier-payment · pre-selected /procurement/supplier-payment/{supplierId}

Record payments against open invoices, opening balances, or advance deposits. Posts Dr AP / Cr Cash (net) / Cr WHT Payable via Financials payment journals. Supports multi-currency, WHT deduction, and FIFO bulk allocation across open invoices.

Procurement Supplier Payments page
Supplier Payments — Procurement → Supplier Payment. Pay open invoices with FIFO allocation and WHT.

Example — Pay supplier due balance

  1. Open Procurement → Supplier Payment and select the supplier.
  2. Confirm open invoices; enter Payment Amount (defaults toward due).
  3. Choose method/journal (and WHT if applicable), then submit.

Result: Oldest invoices settle first; AP reduces; cash/bank and WHT journals post.

Payment entry points

  • Supplier Payment page — bulk pay with FIFO allocation.
  • Supplier Payment dialog — from invoice list or Supplier Details (single invoice or supplier-wide).
  • Invoice editor inline payment — pay while editing approved invoice.
  • Supplier Details → Make Payment / Pay Advance — supplier dashboard actions.

Supplier Payment page — Step 1: Select supplier

FieldRequiredDescription
Search SupplierYesAutocomplete by name or phone.
Summary tableRead-onlyTotal Purchase, Total Paid, Due Balance (BC + FC).

Step 2: Open invoices (read-only)

Columns: Invoice Number, Issue Date, Due Date, Total, Rate, Paid, Outstanding, Aging days.

Step 3: Payment form

FieldRequiredDescription
Payment AmountYesTotal payment — allocated FIFO across oldest invoices first.
Payment DateYesPayment posting date.
Payment MethodNoCASH, BANK, or dynamic codes from Financials payment methods.
Payment JournalYesAuto-resolved GL journal — branch + payment method + document currency. See Payment Journals guide.
Bank AccountYes (Bank)Bank journal picker — links to Banking accounts.
WHT TaxNoWithholding tax record selection.
WHT Rate (manual)NoManual WHT % when no tax record selected.
WHT AmountRead-onlyCalculated withholding preview.
NotesNoPayment reference or memo.

Step 4: Result (read-only)

Payment ID, Total Paid, Journal reference, Unallocated amount, per-invoice allocation breakdown, Download Receipt.

Supplier Payment dialog — additional fields

FieldRequiredDescription
AmountYesPayment amount — FC/BC label based on context.
Payment TypeYesDue Payment · Opening Balance · Advance.
Paid OnYesPayment date.
Payment NoteNoMemo text.
Payment MethodYesCash / Bank / Cheque / MFS / Card.
FX Rate TypeFC onlySpot / Corporate / Custom for foreign currency payment.
Custom RateNoManual exchange rate override.
WHT Tax / WHT Rate (manual)NoWithholding on payment — Dr AP full / Cr Cash net / Cr WHT Payable.

Payment record status

StatusMeaning
PendingRecorded, awaiting approval (if workflow enabled).
ApprovedPosted to GL.
ReversedPayment reversed — AP restored.

FAQ — Supplier payments

Payment allocated to wrong invoice.

Bulk pay uses FIFO (oldest due first). For specific invoice payment, use Make Payment from that invoice row or Supplier Payment dialog with invoice context.

Unallocated amount after payment.

Excess over all open invoices is held as supplier advance — visible on Supplier Details Advance Applied tab.

WHT not deducted.

Select WHT Tax record or enter manual WHT Rate before submitting. Verify WHT Payable GL mapping in Financials.

Step 8 — AP aging & payables

Routes: Dashboard /procurement/ap-aging · Report /procurement/reports/payables-aging · Open payables /procurement/reports/open-payables

Monitor outstanding supplier invoices by aging bucket and take action on overdue payables.

AP Aging dashboard (/procurement/ap-aging)

Field / displayDescription
As Of DateSnapshot date for aging calculation.
SearchFilter by invoice number or supplier name.
KPI tilesOutstanding totals per bucket: 0–30, 31–60, 61–90, 90+ days past due.
Detail tableInvoice Number, Supplier, Issue Date, Due Date, Days Past Due, Bucket, Currency, Rate, Outstanding FC, Outstanding BC.

Part 4 — Reports

Step 9 — Procurement reports hub

Menu: Procurement → Reports  |  Route: /procurement/reports

18 analytics reports — each card visible only when user has the matching report permission.

Procurement Reports hub page
Procurement Reports Hub — Procurement → Reports. Payables aging, statements, spend, GRN variance, and audit.

Example — Run Payables Aging

  1. Open Procurement → Reports and choose Payables Aging.
  2. Filter by as-of date/branch and export for payment planning.

Result: Open supplier invoices appear by aging bucket for cash planning.

ReportRoutePermissionPurpose
Payables Aging/procurement/reports/payables-agingPayablesAgingAP aging by supplier and bucket.
Supplier Statement/procurement/reports/supplier-statementProcurementSupplierStatementSupplier ledger for date range.
Payment Report/procurement/reports/paymentsProcurementPaymentReportAll supplier payments by period.
Purchase Summary/procurement/reports/purchase-summaryProcurementPurchaseSummaryTotal purchases by period/supplier.
Open Payables/procurement/reports/open-payablesProcurementOpenPayablesAll unpaid invoice balances.
Tax Summary/procurement/reports/tax-summaryProcurementTaxSummaryInput VAT/GST by period.
WHT Deduction/procurement/reports/wht-deductionProcurementWhtReportWithholding tax deducted on payments.
Purchase Returns/procurement/reports/purchase-returnsProcurementPurchaseReturnReportReturn register.
Debit Notes/procurement/reports/debit-notesProcurementDebitNoteReportSupplier debit note register.
Quotation Conversion/procurement/reports/quotation-conversionProcurementQuotationConversionQuote-to-PO conversion rate.
PO Pipeline/procurement/reports/po-pipelineProcurementPoPipelineOpen POs by status.
Supplier Spend Ranking/procurement/reports/supplier-spend-rankingProcurementSupplierSpendRankingTop suppliers by spend.
Multi-Currency/procurement/reports/multi-currencyProcurementMultiCurrencyFC purchase exposure.
PDC Maturity/procurement/reports/pdc-maturityProcurementPdcMaturityPost-dated cheque maturity schedule.
PO–Invoice Variance/procurement/reports/po-invoice-varianceProcurementPoInvoiceVariancePrice/qty differences PO vs invoice.
Receipt vs Invoice/procurement/reports/receipt-vs-invoiceProcurementReceiptVsInvoiceGRN received qty vs invoiced qty.
Supplier Performance/procurement/reports/supplier-performanceProcurementSupplierPerformanceDelivery and quality metrics.
Audit Trail/procurement/reports/audit-trailProcurementAuditTrailDocument change history.

Cross-module integration summary

ModuleIntegration point
InventoryProduct lines on all documents; stock receipt on Invoice Received; stock out on purchase return; auto-reorder can create POs from reorder policies.
WMS / PutawayPutaway rules resolve bin on GRN receipt — see Putaway guide.
FinancialsAP journal on Received; payment journals on supplier payment; WHT Payable; FX revaluation on FC invoices.
Tax & ComplianceLine VAT, invoice WHT, GSTIN/IRN on Received, debit note GST submission.
BankingBank account selection on bank-method payments.
HRMProcessed By employee on purchase orders.

Before go-live checklist

TaskDepends on
Register suppliers with opening balanceBranches · Financials currencies · WHT taxes
First PO → Invoice → ReceivedProducts · Warehouse · GL inventory mappings
Verify stock after GRN/inventory/stock · putaway audit trail
Reconcile AP GL vs supplier ledgerSupplier Details ledger · Open Payables report
Test supplier payment with WHTPayment journals · WHT GL mapping
Module Guide

Users & Security

Users & Security controls who can sign in, what they can see and change, and what actions are recorded. CognitixERP uses JWT authentication with refresh tokens, role-based page permissions (View / Create / Edit / Delete per screen), branch-scoped data access, forced password change for new accounts, temporary login lockout, and a searchable audit log.

Prerequisites: Branches (user branch assignment) · Setup Wizard admin account (first login) · optional HRM employees (create users from employee records).
Important concepts: Permissions are enforced at the page level — each ERP screen maps to a permission name (e.g. UserManagement, Invoices). The Admin role bypasses all permission checks. Non-admin users only see menu items and actions their role allows. Users are tied to one branch; only Admin and BranchManager can switch branches from the top bar.

Recommended setup order

1 · Review roles 2 · Create users 3 · Assign branch + role 4 · Test login 5 · Audit review

Security flow

  1. Authenticate — user signs in at /users/login; JWT access token issued (default 60 minutes).
  2. Authorize — each route checked against role permissions; denied users see Access Denied.
  3. Scope — branch middleware filters transactional data to the user’s branch (or active branch for Admin).
  4. Audit — login, user/role changes, and security events written to audit log.

Routes at a glance

Navigation & permissions

Menu path (User Management)RoutePermission page
User Management → Users/users/managementUserManagement
User Management → Roles/users/rolesRoleManagement
User Management → Audit Logs/users/auditAuditViewer
App bar → Profile avatar/users/profileUserProfile
Login (public)/users/loginNone — anonymous
Force password change/users/change-password-forceAuthenticated only

Part 1 — Authentication

Step 1 — Login & session

Route: /users/login  |  Access: Public (redirects to Setup Wizard if not complete)

Primary sign-in screen. Displays company branding (logo, favicon, tagline) from Company Management. Already-authenticated users with a valid token are redirected to the dashboard.

Secure Sign In — Welcome Back login form
Secure Sign In — username/email + password, with encrypted session notice. Company branding appears on the left panel.

Example — Sign in as Sales user

  1. Open /users/login.
  2. Enter the Sales user’s username (or email) and password.
  3. Click Sign in.

Result: Menu items match the Sales role permissions; branch data is limited to the user’s assigned branch.

Login form — fields

FieldRequiredDescription
Username or emailYesAccepts either username or registered email address.
PasswordYesHashed server-side; visibility toggle on the field.
Sign inSubmits credentials; shows progress while authenticating.

Session behaviour

MechanismDetail
Access token (JWT)Default lifetime 60 minutes (Jwt:AccessTokenMinutes in API config).
Refresh tokenValid 7 days; stored in browser session storage; rotated on refresh.
Must change passwordWhen flag set, user is redirected to /users/change-password-force before any other page.
License lockExpired/invalid license redirects all users to /settings/license except login.
LogoutFrom User Profile — revokes refresh token and clears local session.

Login lockout

After 5 failed attempts within a 15-minute window for the same username/email, the account is temporarily locked for 15 minutes. Failed attempts and lockouts are recorded in Audit Logs. Successful login resets the counter.

Login error messages

MessageCause
Invalid username or passwordWrong credentials, inactive account, or user not found.
Too many login attemptsTemporary lockout active — wait 15 minutes.
Unable to sign inServer or network error.

Step 2 — Force password change

Route: /users/change-password-force  |  Trigger: Admin-created users (default MustChangePassword = true) or admin reset

Force password change screen
Force Password Change — shown after first login or admin reset. Old password + new password before accessing the app.

Example — First login after admin create

  1. Sign in with the temporary password from User Management.
  2. On the force-change screen, enter Old Password, New Password, and Confirm.
  3. Submit, then sign in again with the new password.

Result: Must-change flag clears; user can open the dashboard with the new credentials.

FieldRequiredDescription
Old PasswordYesCurrent (temporary) password.
New PasswordYesMust meet password policy (Setup Wizard uses same validator).
Confirm New PasswordYesMust match New Password.

On success the session is cleared and user must sign in again with the new password.

Part 2 — User & role administration

Step 3 — User Management

Menu: User Management → Users  |  Route: /users/management  |  Permissions: View list · Create (from employee) · Update · Delete

Create User from Employee dialog on User Management page
Create User from Employee — User Management → Users → Create User from Employee. Select branch, role, username, and password, then Submit.

Example — Create a Purchase user from an employee

  1. Go to User Management → Users.
  2. Click Create User from Employee.
  3. Select the employee’s Branch, choose role Purchase, set Username and Password.
  4. Click Submit.
  5. Ask the user to sign in; they may be prompted to change password on first login.

Result: The new username appears in the User Management list and can access Purchase-related screens only.

User list — columns

ColumnDescription
UsernameUnique login identifier — cannot change after create.
EmailContact email; also accepted at login.
Full NameDisplay name from linked employee or profile.
ActionsEdit (dialog) · Delete (confirmation).

Create User from Employee dialog — fields

Primary workflow: link an HRM employee who does not yet have a login.

FieldRequiredDescription
BranchYesERP branch — scopes data access; locked on edit.
EmployeeCreate onlyLists employees in selected branch without an existing user account.
RoleYesSingle role assignment (Admin, Manager, Sales, Purchase, or custom).
UsernameYesUnique login name — read-only after create.
PasswordCreate: yesInitial password; user typically forced to change on first login.

Edit User dialog — additional fields

FieldRequiredDescription
Employee NameRead-onlyLinked employee display name.
RoleYesChange assigned role — takes effect on next permission load.
New PasswordNoLeave blank to keep current password; fill to reset.
EmailYesUpdate contact email.
Phone NumberNoOptional contact phone.
Is ActiveYesInactive users cannot sign in (attempts logged as failed login).

Step 4 — Roles & Permissions

Menu: User Management → Roles  |  Route: /users/roles  |  Permissions: View · Create role · Update permissions · Delete role

Role and Permission screen with module permission matrix
Role & Permission — select a role on the left, switch module tabs (Banking, Billing, …), then tick View / Create / Edit / Delete per page. Use Grant All / Revoke All for bulk changes, then Save.

Example — Grant Banking View to Manager

  1. Open User Management → Roles.
  2. Select the Manager role.
  3. Open the BANKING module tab.
  4. Tick View for the pages this manager should see (or click Grant All for that module).
  5. Click Save.

Result: Manager users see Banking menu items allowed by those permissions on next login / permission refresh.

Built-in roles (seeded at install)

RoleDescriptionDefault access summary
AdminSuper-user — full access to all modules and reports.Bypasses permission matrix; can switch branches; marked “Super” in UI.
ManagerSupervisory cross-module access.Inherits Purchase + Sales operational pages; adds Financials read reports, Banking read, HRM manager pages, Compliance read.
SalesSales team.Full Billing, CRM, POS; product/stock read for quoting and POS.
PurchaseProcurement team.Full Procurement + Inventory/WMS operational pages and reports.
BranchManager (custom)Multi-branch supervisor — not seeded by default.Create a role named exactly BranchManager for branch switcher and all-branch data access (does not bypass page permissions like Admin).

Create custom roles with New Role, set name/description, tick permissions per module tab, then Save.

Role editor — fields

Field / controlDescription
Role NameUnique identifier shown in user assignment dropdown.
DescriptionOptional internal note.
SaveCreates new role or updates name, description, and permission set.
DeleteRemoves custom role (built-in roles should be edited, not deleted).

Permission matrix — per page

Organized by module tabs (Dashboard, Users, HRM, Billing, POS, Procurement, Inventory, Financials, Banking, Compliance, Branching, etc.).

ActionControls
ViewSee the page in navigation and open read-only screens.
CreateAdd new records; shows Create buttons and dialogs.
EditModify existing records; enables edit/save actions.
DeleteRemove records; shows delete icons and confirmations.
Grant All / Revoke AllBatch toggle all four actions for every page in the current module tab.

Page names in the matrix match permission tags elsewhere in this manual (e.g. BankAccounts, CustomerReceipt). Report pages often have View-only grants.

Part 3 — Self-service & audit

Step 5 — User Profile

Route: /users/profile  |  Access: App bar avatar (when UserProfile View granted)

User Profile self-service page
User Profile — app bar avatar → Profile. Update contact info, password, language, theme, and photo.

Example — Update email and switch to Bengali

  1. Open Profile from the app bar avatar.
  2. Update Email / Full Name and Save personal information.
  3. Under Preferences, set Language to Bengali (or enable Dark Mode).

Result: Contact details update; UI reloads in the selected language/theme.

Sidebar identity panel

ElementDescription
Avatar / initialsProfile picture or initials from full name.
Branch chipUser’s assigned branch name.
Language chipCurrent UI language.
Theme chipLight or Dark mode indicator.
Upload Profile PictureImage upload (accepts image/*).
Save PicturePosts to API; persists URL in user preferences.
LogoutEnds session and returns to login.

Personal Information — fields

FieldEditableDescription
UsernameNoRead-only identifier.
EmailYesRequired; validated as email format.
Full NameYesDisplay name in app bar and reports.
Phone NumberYesOptional contact number.

Change Password — fields

FieldRequiredDescription
Current PasswordYesVerify identity before change.
New PasswordYesReplacement password.
Confirm New PasswordYesMust match New Password.

Preferences

SettingOptionsBehaviour
LanguageEnglish (en-US) · Bengali (bn-BD) · Arabic (ar-SA)Saves preference and reloads UI with RTL for Arabic.
Dark ModeOn / Off toggleApplies instantly; persisted per user.

Step 6 — Audit Logs

Menu: User Management → Audit Logs  |  Route: /users/audit  |  Permission: AuditViewer View

Users Audit Logs page
Audit Logs — User Management → Audit Logs. Security and system events with filters, KPIs, and detail view.

Example — Review failed logins this week

  1. Open User Management → Audit Logs.
  2. Filter Module = Security, Action = LoginFailed, From = 7 days ago.
  3. Open View on a row to inspect full details.

Result: Failed login attempts appear with timestamps for lockout investigation.

Summary KPI cards

KPIDescription
TotalAll audit events in current query scope.
TodayEvents recorded today.
Failed Logins (7d)Failed authentication attempts in last 7 days.
SecuritySecurity-classified events count.
SystemSystem-classified events count.
By ModuleTop 4 modules by event volume.

Filters

FilterDescription
SearchFree-text search across log fields.
ModuleSecurity · Banking · Billing · Procurement · CRM · Maintenance · System · General · All.
ActionLogin · LoginFailed · Logout · UserCreated · UserUpdated · UserDeleted · PasswordChanged · RoleCreated · RoleUpdated · RoleDeleted · RoleAssigned · RoleRevoked · PermissionAssigned · PermissionRevoked · PermissionUpdated · SystemAction · All.
From / ToDate range (UTC-normalized on query).
Per Page25 · 50 · 100 rows.
Load / Clear FiltersApply or reset filter set.
RefreshReload latest events from header button.

Audit table — columns

ColumnDescription
TimestampLocal date/time of event.
User NameActor (blank for anonymous failed logins).
ModuleModule chip (colour-coded).
ActionAction chip + severity (Success / Warning / Critical).
DetailsHuman-readable description.
DataTruncated affected-data payload preview.
ViewOpens detail dialog with full timestamp, severity, and complete Affected Data JSON/text.

Part 4 — Access control model

Branch access

Role / behaviourBranch visibility
AdminBranch switcher dropdown when multiple active branches exist; can view/switch any branch.
BranchManagerSame switcher capability as Admin for operational oversight.
Other rolesRead-only branch chip — data scoped to assigned branch only; no switcher.

See Branching guide for branch master setup and multi-branch FAQs.

How permissions enforce UI

  • Navigation — menu groups hidden when user lacks module View permission.
  • Routes — direct URL access blocked with Access Denied page if View missing.
  • Buttons — Create/Edit/Delete wrapped in CgxPermissionGate; hidden when action not granted.
  • Cache — permissions cached ~8 minutes (PermissionsTtlMinutes); reloaded on login and auth state change.

Cross-module integration

ModuleIntegration
HRMUsers created from employees inherit name/branch; employee profile links user account for self-service.
BranchingUser BranchId drives data isolation middleware on API.
All modulesEvery screen registers a page permission — configure via Roles before go-live.
Settings → LicenseLicense enforcement redirects locked tenants; Admin resolves at /settings/license.

Before go-live checklist

TaskDepends on
Review built-in roles (Admin, Manager, Sales, Purchase)Roles
Create custom roles if needed (e.g. Cashier, Finance)Module permission list
Create user for each team member from HRM employeeHRM employees · branches
Verify branch assignment per userBranches
Test login with non-admin role — confirm menu matches expectationsRole saved
Review Audit Logs after first loginsAudit Viewer
Configure SMTP for password reset emails (optional)Settings → Email

FAQ — Users & Security

User cannot see a menu item they need.

Grant View on the page permission in Roles. Remember Admin bypasses checks — test with the user’s actual role. Permissions reload on next login or after cache TTL (~8 min).

User sees Access Denied on a direct link.

The role lacks View on that route’s page permission. Add View (and Create/Edit/Delete as needed) on /users/roles.

No employees appear when creating a user.

Select the correct branch first. Only employees without an existing login appear. Create the employee in HRM first.

User locked out after failed logins.

Wait 15 minutes or verify credentials. Check Audit Logs for LoginFailed events. Ensure account is Active in User Management.

Branch switcher missing for manager.

Only Admin and BranchManager roles get the switcher. Assign BranchManager role or use Admin for multi-branch oversight.

Module Guide

Settings

The Settings menu holds tenant-wide configuration that is not tied to a single operational module — company legal profile and branding, branch master, outbound email (SMTP), POS/inventory weight-scale hardware, and CodeCanyon license activation. Most screens require Admin or explicit page permissions under the Settings module group.

Prerequisites: Setup Wizard complete · at least one company record · Branching base branch (for branch-specific hardware) · Admin or CompanyManagement / SmtpSettings permissions.
Related settings elsewhere: Banking Posting Settings live under Banking menu (/settings/banking-coa) — see Banking guide. E-invoice compliance profiles live under Tax & Compliance — see Compliance guide. Deep company/branch operational detail is also in the Branching & Company guide; this Settings guide focuses on the Settings → menu routes and field-level reference.

Recommended setup order

1 · Company management 2 · Branches 3 · Email (SMTP) 4 · License 5 · Weight machine (optional)

Routes at a glance

Navigation & permissions

Menu path (Settings)RoutePermission page
Settings → Company Management/settings/company-managementCompanyManagement
Settings → Branches/settings/branchesBranches
Settings → Weight Machine Settings/settings/weightmachineWeightMachineSettings
Settings → Email Settings/settings/emailSmtpSettings
Settings → License/settings/licenseLicenseSettings

Part 1 — Company & branches

Step 1 — Company Management

Menu: Settings → Company Management  |  Route: /settings/company-management

Lists the legal company profile (typically one record per tenant). Drives login branding, document headers, tax ID on e-invoices, and company timezone for all users.

Company list — columns

ColumnDescription
Official NameLegal registered name on statutory documents.
Display NameShort name shown in app bar, login, and reports.
Official EmailPrimary company contact email.
Phone NumberMain company phone.
WebsiteCompany website URL.
ActionsView · Edit · Delete (Create disabled when company exists).

Step 1b — Company Setup wizard (create / edit)

Routes: new /settings/company-setup · edit /settings/company-setup/{id}

Three-step wizard. Saving updates live branding (logo, favicon, display name) and company timezone.

Company Setup wizard from Settings
Company Setup Wizard — Settings → Company Setup. Basic info, contact, key people, logo/favicon, and timezone.

Example — Update logo and timezone

  1. Open edit from Company Management or go to /settings/company-setup/{id}.
  2. Complete Basic and Contact steps, then on Key People & Branding upload logo and set timezone.
  3. Save.

Result: Login branding and company clock update across the app.

Step 1 — Basic Information

FieldRequiredDescription
Official NameYesLegal entity name.
Display NameYesTrading / app display name.
Business TypeYesEnum — sole proprietorship, partnership, company, etc.
Industry SectorYesIndustry classification for reporting context.
Established DateNoCompany founding date.
Company Registration NoNoTrade license / registration number.
TIN / VAT / GST NumberNoTax identifier — required for e-invoicing and compliance.

Step 2 — Contact Information

FieldRequiredDescription
Head Office AddressYesMulti-line registered address.
City / State / Country / ZipYesAddress components for documents and compliance.
Phone NumberNoLandline or main switchboard.
Fax NumberNoFax if printed on letterhead.
Official EmailYesValidated email format.
Website URLNoPublic website.

Step 3 — Key People & Branding

FieldRequiredDescription
Owner / Founder NameYesProprietor or founder for statutory forms.
CEO / Managing DirectorYesSenior signatory name.
HR Head / Contact PersonYesHR primary contact.
Emergency ContactNoAfter-hours contact.
Company Slogan / TaglineNoShown on login screen under brand name.
TimezoneNoIANA timezone — drives company clock, dates, and fiscal day boundaries.
Company LogoNoImage upload — nav drawer, login, documents.
Company FaviconNoBrowser tab icon (.ico or image).

Step 2 — Branches (Settings menu)

Menu: Settings → Branches  |  Routes: list /settings/branches · view /settings/branches/{id}

Operational locations for data scoping, stock, banking, and user assignment. Same data as Branching module — opened here from Settings for administrators. Field-level branch dialog reference: Branching guide.

Branches list from Settings menu
Branches — Settings → Branches. Base and sub-branches for stock, banking, and user scoping.

Example — Add a sub-branch

  1. Open Settings → Branches and click Add/Create.
  2. Enter name, code, type Sub, parent = HQ, optional manager from HRM.
  3. Save and keep Active.

Result: Branch appears in the list and can be assigned to users, warehouses, and documents.

List filters

FilterOptions
StatusAll · Active · Inactive.
Branch TypeAll · Base · Sub.
SearchName, code, city text search.

List columns

ColumnDescription
Branch NameStar icon marks base branch.
Branch CodeShort unique code (e.g. HQ, WH1).
City / Contact / EmailLocation and contact details.
Parent BranchFor sub-branches in hierarchy.
Branch ManagerHRM employee assigned as manager.
StatusActive / Inactive chip.
ActionsView · Edit · Delete.

Part 2 — System configuration

Step 3 — Email Settings (SMTP)

Menu: Settings → Email Settings  |  Route: /settings/email

Configures outbound SMTP for system emails (password reset, notifications). Settings are stored in the database and override default appsettings.json SMTP placeholders.

Email Settings SMTP configuration page
Email Settings (SMTP) — Settings → Email Settings. Host, port, auth, from identity, and Send Test.

Example — Configure Gmail SMTP and test

  1. Open Settings → Email Settings.
  2. Set host smtp.gmail.com, port 587, SSL on, username + app password, From Email/Name.
  3. Enter a Test Recipient and click Send Test, then Save.

Result: Test mail arrives; password-reset and notification emails can send.

SMTP Server section

FieldRequiredDescription
SMTP HostYesServer hostname (e.g. smtp.gmail.com).
PortYes1–65535 — typically 587 (TLS) or 465 (SSL).
Enable SSLNoToggle TLS/SSL for connection.

Authentication section

FieldRequiredDescription
Username / EmailYesSMTP login username.
Password / App PasswordYesSMTP password; use app-specific password for Gmail.

Sender Identity section

FieldRequiredDescription
From EmailYesEnvelope sender address recipients see.
From NameYesDisplay name (e.g. CognitixERP Notifications).

Test configuration

Field / actionDescription
Test RecipientEmail address for test message.
Send TestSaves settings first, then sends test email.
SavePersists SMTP configuration.
ResetReloads saved values from server.

Step 4 — License

Menu: Settings → License  |  Route: /settings/license  |  Access: Available when license locked; Admin typically

CodeCanyon / Envato purchase verification. When license is inactive or trial expired, the app redirects all routes here until activation succeeds.

License activation and status page
License — Settings → License. View status/bound domain; Activate or Re-verify with Envato purchase code.

Example — Activate with purchase code

  1. Open Settings → License.
  2. Enter Envato username, email, and purchase code from CodeCanyon downloads.
  3. Click Activate (or Re-verify if already stored).

Result: Status becomes Active with bound domain; app unlocks for normal use.

Current Status panel (read-only)

FieldDescription
StatusActive, Trial, Locked, PendingEnvatoVerify, etc.
License TypeEnvato-detected license tier.
ProductItem title and Envato item ID.
Bound DomainDomain registered with license server.
Trial EndsTrial expiry UTC timestamp.
Last VerifiedLast successful Envato check.
Pending Envato SinceWhen verification entered pending state.

Activate / Re-verify form

FieldRequiredDescription
Envato UsernameActivateYour CodeCanyon/Envato account username.
Envato EmailActivateEmail on Envato purchase.
Purchase CodeActivateCodeCanyon purchase code from download page.
ActivateFirst-time or changed purchase binding.
Re-verifyRe-check existing stored license with Envato.

Trial warning banners appear when ≤7 days remain; error banner when locked.

Step 5 — Weight Machine Settings

Menu: Settings → Weight Machine Settings  |  Route: /settings/weightmachine

Serial-port profiles for electronic weighing scales used at POS or goods receiving. One active profile per scope (global or branch) supplies live weight readings to inventory/POS screens.

Weight Machine Settings page
Weight Machine Settings — Settings → Weight Machine Settings. Serial-port scale profiles for POS/GRN weight read.

Example — Add an active COM scale profile

  1. Open Settings → Weight Machine Settings and add a profile.
  2. Set COM port, baud rate, and branch/global scope; mark Active.
  3. Test read from POS Scale Read or procurement GRN on a weight-based product.

Result: Live weight fills qty on weight-based SKUs at the terminal or GRN.

Profile list — columns

ColumnDescription
NameProfile label (e.g. Front Counter Scale).
Port NameCOM port (Windows) or device path.
Baud Rate / Data BitsSerial communication parameters (default 9600 / 8).
BranchBranch scope or Global.
ActiveGreen chip if active profile; Activate button otherwise.
ActionsEdit · Delete.

Add / Edit profile dialog — fields

FieldRequiredDescription
NameYesProfile identifier.
Port NameYesSerial port identifier.
Baud RateYesDefault 9600 on new profiles.
Data BitsYesDefault 8 on new profiles.
BranchNoGlobal (all branches) or specific branch.
Set as Active ProfileNoMake this the live reading source on save.
Test ConnectionReads net weight from scale without saving list.

Header actions: Test Connection (uses active profile) · Add New Profile.

Audit log table: Date, Profile Name, Action, Field, Old/New Value, Changed By — last 50 changes.

Cross-module integration

SettingUsed by
Company / timezone / logoLogin, nav branding, printed documents, compliance e-invoice issuer details.
BranchesAll modules — users, stock, banking, billing, HRM branch scoping.
SMTPUser password reset, notification emails from API.
LicenseEntire application access — middleware blocks when locked.
Weight machineInventory/POS weighted product capture via serial port.

Before go-live checklist

TaskDepends on
Complete company setup wizard with logo, favicon, timezoneSetup Wizard Step 1
Verify TIN/VAT/GST on company if using complianceTax & Compliance
Register all branches (base + sub)Branches
Configure SMTP and send test emailValid mail server credentials
Activate CodeCanyon license on production domainPurchase code
Calibrate weight scale profile (if used)Scale connected to server/COM port

FAQ — Settings

Login page shows wrong company name or logo.

Update Display Name, logo, and favicon in Company Setup wizard. Changes apply on next page load; clear browser cache if favicon persists.

All users redirected to License page.

Trial expired or Envato verification failed. Open /settings/license, enter purchase code, and Activate or Re-verify.

Test email fails but credentials are correct.

Check port/SSL combination (587 + SSL on, or 465). For Gmail use an App Password, not the main account password. Ensure firewall allows outbound SMTP.

Weight reading always zero or connection error.

Confirm correct COM port, baud rate matches scale manual, profile is Active, and API server has physical access to the serial port. Use Test Connection on the profile dialog.

Cannot create second company record.

CognitixERP supports one company profile per tenant — Create is disabled when a company already exists. Edit the existing record instead.

Please Contact us

  1. Sign up at https://cognitivebd.com
  2. Create a Support Ticket.
  3. Within 48hr we will reply.

Or email support@cognitivebd.com with your purchase code, version, and screenshots/logs.