ERP Deep Dive: Understanding Commas Inside Out
This guide teaches you everything you need to know about ERP systems and how Commas works under the hood. No accounting background required β we explain every concept from scratch using plain language and real-world analogies.
By the end of this session, you will understand what every module does, why financial transactions must always balance, how data flows through the system, and what to look for when testing each feature.
12
Sections
60
Minutes
0
Prerequisites
100%
Practical
1What Is an ERP?
~5 minutes
ERP stands for Enterprise Resource Planning. Despite the intimidating name, the concept is simple: it is a single software system that manages all the core operations of a business in one place.
Think of it this way
Imagine you run a shop. You have one notebook for tracking what you sell (sales), another for what you buy (purchases), another for your bank balance, another for what customers owe you, and another for your employees' salaries. An ERP is like combining all those notebooks into one big book where everything is connected. When you record a sale, it automatically updates your inventory, your bank balance, and what the customer owes you.
What does an ERP manage?
| Business Area | What It Covers | In Commas |
|---|---|---|
| Finance & Accounting | General ledger, chart of accounts, financial statements | Chart of Accounts, Journals, Trial Balance, P&L, Balance Sheet |
| Sales | Quotes, orders, invoices, receipts, credit notes | Quotes > Orders > Invoices > Receipts |
| Purchasing | Purchase orders, bills, goods receipt, returns | POs > Goods Receipt > Bills > Payments |
| Inventory | Stock levels, movements, counts, valuation | Items, Stock Levels, Stock Count, Movements |
| Banking | Bank accounts, reconciliation, payments | Bank Accounts, Reconciliation, Batch Payments |
| Tax & Compliance | VAT/GST returns, tax calculations | VAT Returns, VAT Adjustments, Tax Payments |
| Payroll | Employee management, salary, deductions | Employees, Pay Runs, Payslips |
| Reporting | Financial reports, analytics, dashboards | 49+ reports including Trial Balance, P&L, Balance Sheet |
| Administration | Users, roles, permissions, audit trail | User Management, 70+ Permissions, Audit Log |
The Golden Rule of ERP
Everything is connected. When you create a sales invoice in Commas, the system simultaneously: (1) records the sale as revenue, (2) records the VAT owed to the government, (3) records what the customer owes you, and (4) updates the general ledger. This is not four separate actions β it is one atomic operation. This interconnectedness is what makes testing an ERP different from testing a simple CRUD app.
How Commas implements this
Commas is a cloud-based, multi-tenant ERP designed specifically for SMEs in Nigeria and South Africa. It runs on Next.js + Supabase (PostgreSQL), uses Row-Level Security for data isolation, and implements double-entry bookkeeping with a central posting engine. Every financial transaction goes through this engine, guaranteeing that the books always balance.
2Double-Entry Bookkeeping
~10 minutes β This is the most important concept in the entire system
Double-entry bookkeeping is a 500-year-old system invented in Italy. It is the foundation of every accounting system in the world, including Commas. The core rule is devastatingly simple:
Every transaction has two sides.
For every debit, there must be an equal credit.
Total Debits = Total Credits β Always.
Think of it this way
Think of your personal life. You buy a laptop for β¦200,000 using your bank account. Two things happened simultaneously: (1) you gained a laptop (asset goes up), and (2) your bank balance went down by β¦200,000. The money didn't vanish β it changed form. Double-entry bookkeeping simply records both sides of every transaction.
Debits and Credits
Forget what "debit" and "credit" mean in everyday language. In accounting, they are simply the left side and right side of a journal entry. Which side increases or decreases depends on the type of account:
| Account Type | Increased By | Decreased By | Normal Balance | Example |
|---|---|---|---|---|
| Asset | Debit | Credit | Debit | Bank, Accounts Receivable, Inventory, Equipment |
| Liability | Credit | Debit | Credit | Accounts Payable, Loans, VAT Payable |
| Equity | Credit | Debit | Credit | Owner's Capital, Retained Earnings |
| Revenue | Credit | Debit | Credit | Sales Revenue, Service Income |
| Expense | Debit | Credit | Debit | Rent, Salaries, Utilities, Cost of Goods |
The DEALER mnemonic
Debits increase DEAL accounts (Dividends, Expenses, Assets, Losses). Credits increase CRIG accounts (Capital, Revenue, Income, Gains). This is all you need to remember.
Example: Recording a Sale
Adebayo Trading sells 10 laptops at β¦100,000 each to a customer on credit (they will pay later). VAT is 7.5%.
Journal Entry: Sales Invoice #INV-001
What just happened? Three things were recorded in one transaction:
- Accounts Receivable (asset) went UP by β¦1,075,000 β the customer owes us money
- Sales Revenue (revenue) went UP by β¦1,000,000 β we earned income
- VAT Output (liability) went UP by β¦75,000 β we collected tax that we owe the government
Example: Receiving Payment
The customer pays the full β¦1,075,000 into our bank account.
Journal Entry: Receipt #REC-001
Now: Bank went UP (we received cash), Accounts Receivable went DOWN (customer no longer owes us). The money moved from "owed to us" to "in our bank". Total debits still equal total credits.
How Commas implements this
In Commas, you never manually type journal entries for sales, purchases, or payments. Instead, you create documents (invoices, bills, receipts) and click "Post". The posting engine automatically generates the correct double-entry journal entries behind the scenes. The General Ledger > Journal Entries page shows you what was generated. As a tester, you should verify that every posted document creates a balanced journal entry.
3Chart of Accounts
~7 minutes
The Chart of Accounts (CoA) is the master list of every account in the system. Think of it as the filing system for all money that flows through the business. Every transaction touches at least two accounts from this list.
Think of it this way
If your business were a library, the Chart of Accounts would be the Dewey Decimal System β it defines the categories and subcategories where every "book" (transaction) gets filed. Without it, you'd have a pile of transactions with no organization.
The Five Account Types
Every account in the Chart of Accounts belongs to exactly one of five types. These five types are the building blocks of all financial reporting:
Balance Sheet Accounts
These accounts carry forward forever. They represent what you have, what you owe, and what belongs to the owners.
- 1. Assets β What the business owns (cash, equipment, inventory, receivables)
- 2. Liabilities β What the business owes (loans, payables, tax owed)
- 3. Equity β The owner's stake (capital invested + accumulated profits)
Income Statement Accounts
These accounts reset to zero at year-end. They measure performance during a period.
- 4. Revenue β Money earned (sales, services, interest income)
- 5. Expenses β Money spent to earn that revenue (rent, salaries, supplies)
The Accounting Equation
Assets = Liabilities + Equity
This equation must always hold true. If assets are β¦10 million, then liabilities plus equity must also be β¦10 million. The Balance Sheet report proves this. If it doesn't balance, something is seriously wrong.
Account Numbering Convention
Commas auto-generates a Chart of Accounts when you create an organization. Accounts are numbered:
| Number Range | Type | Examples |
|---|---|---|
| 1000 β 1999 | Assets | 1000 Cash, 1100 Bank, 1200 Accounts Receivable, 1300 Inventory |
| 2000 β 2999 | Liabilities | 2000 Accounts Payable, 2100 VAT Payable, 2200 Loans |
| 3000 β 3999 | Equity | 3000 Owner's Capital, 3100 Retained Earnings |
| 4000 β 4999 | Revenue | 4000 Sales Revenue, 4100 Service Income, 4200 Interest Income |
| 5000 β 5999 | Cost of Sales | 5000 Cost of Goods Sold |
| 6000 β 7999 | Expenses | 6000 Salaries, 6100 Rent, 6200 Utilities, 6300 Office Supplies |
How Commas implements this
Navigate to General Ledger > Chart of Accounts to see the full list. You can add new accounts, edit existing ones, and see the running balance for each. Accounts can be marked as "header" (grouping only, no transactions posted) or "posting" (accepts transactions). When testing, verify that the default CoA is generated correctly for Nigeria (NGN) and South Africa (ZAR).
4The General Ledger
~5 minutes
The General Ledger (GL) is the complete record of every financial transaction that has ever happened in the business. It is the single source of truth. Every report in the system β Trial Balance, Income Statement, Balance Sheet β is generated by reading from the General Ledger.
Think of it this way
If the Chart of Accounts is the filing system, the General Ledger is the actual filing cabinet with all the documents in it. Each drawer (account) contains every transaction that touched that account, in chronological order.
Journal Entries
The GL is made up of journal entries. Each journal entry has:
- Date β When the transaction occurred
- Reference β The document that caused it (e.g., INV-001, BILL-005)
- Lines β Two or more lines, each hitting a different account with a debit or credit
- Narration β A human-readable description
How Documents Become Journal Entries
How Commas implements this
Navigate to General Ledger > Journal Entries to see all entries. You can also create manual journal entries (for adjustments, corrections, or accruals). When testing, the most critical check is: after posting any document, navigate to Journal Entries and verify that a new balanced entry was created with the correct accounts and amounts.
5Subledgers (The Detail Behind the Summary)
~10 minutes β This is where the magic of an ERP really shines
The General Ledger tells you that "Accounts Receivable is β¦5,000,000" but it doesn't tell you which customers owe that money. That's what subledgers are for.
A subledger (also called a subsidiary ledger) is a detailed breakdown of a single GL account. The total of all entries in the subledger must always equal the balance in the corresponding GL account. This is called reconciliation.
Think of it this way
The General Ledger is like a company-wide scorecard: "We are owed β¦5 million." The Customer Subledger is the detailed list: "Customer A owes β¦2M, Customer B owes β¦1.5M, Customer C owes β¦1.5M." The sum of the parts must always equal the whole.
Commas Has Five Subledgers
| Subledger | Tracks | Related GL Account | Key Reports |
|---|---|---|---|
| Customer Ledger | What each customer owes you (Accounts Receivable) | Accounts Receivable (Asset) | Customer Statement, AR Aging, Customer Ledger Entries |
| Vendor Ledger | What you owe each supplier (Accounts Payable) | Accounts Payable (Liability) | Vendor Statement, AP Aging, Vendor Ledger Entries |
| Bank Ledger | Every transaction in each bank account | Bank (Asset) | Bank Statement, Bank Reconciliation |
| Inventory Ledger | Stock quantities and cost per item | Inventory (Asset) | Stock Levels, Stock Movements, Valuation Report |
| VAT Ledger | Tax collected (output) and tax paid (input) | VAT Output / VAT Input (Liability/Asset) | VAT Return, VAT Summary |
Customer Ledger Deep Dive
Let's trace a full customer lifecycle:
Customer Ledger: Adebayo Trading β Customer 'Lagos Electronics'
Vendor Ledger Deep Dive
The vendor ledger works the same way but in reverse β it tracks what you owe:
Vendor Ledger: Adebayo Trading β Supplier 'China Imports Ltd'
Inventory Ledger Deep Dive
The inventory ledger tracks the quantity and cost of each item:
Inventory Ledger: Item 'HP Laptop ProBook 450'
The Reconciliation Principle
The sum of every subledger must equal its parent GL account. If the Customer Ledger says customers owe β¦5M total, the Accounts Receivable GL account must also show β¦5M. If they don't match, there's a bug. This is a critical test case for QA.
How Commas implements this
Each subledger has its own section in the sidebar: Customers > Customer Ledger, Suppliers > Vendor Ledger, Banking > Bank Ledger, etc. The posting engine writes to both the GL and the relevant subledger simultaneously. When testing, always verify both: check that the GL entry is balanced AND that the subledger entry matches.
6Financial Statements
~8 minutes
Financial statements are the output of the accounting system. They are generated automatically from the General Ledger data. There are four main statements:
1. Trial Balance
The Trial Balance lists every account and its balance (debit or credit). Its purpose is to prove that total debits = total credits. If they don't match, something was posted incorrectly.
Trial Balance as at 31 May 2026 (simplified)
2. Income Statement (Profit & Loss)
The Income Statement answers: "Did we make money or lose money this period?"It shows Revenue minus Expenses = Net Profit (or Loss).
Income Statement: May 2026
3. Balance Sheet
The Balance Sheet is a snapshot of "What do we own, what do we owe, and what's left for the owners?" at a specific moment in time. It must always satisfy:
Assets = Liabilities + Equity
Balance Sheet as at 31 May 2026
4. Cash Flow Statement
Shows where cash came from and where it went, categorized into operating activities (daily business), investing activities (buying/selling assets), and financing activities (loans, owner contributions).
How Commas implements this
All four statements are available under Reports in the sidebar. They are generated in real-time from GL data. Key QA checks: (1) Trial Balance must always balance, (2) Balance Sheet equation must hold, (3) Net Profit on the Income Statement must match the "Net Profit" line on the Balance Sheet, (4) reports should respect date range filters.
7Document Flow in Commas
~8 minutes
Commas follows an industry-standard document flow inspired by Microsoft Dynamics Business Central. Documents progress through statuses and can be converted from one type to another.
Sales Flow (Order-to-Cash)
Sales Document Flow
Purchase Flow (Procure-to-Pay)
Purchase Document Flow
Document Statuses Explained
| Status | Meaning | Can Edit? | GL Impact? |
|---|---|---|---|
| Draft | Document is being prepared, not yet final | Yes | No β nothing posted to GL yet |
| Posted | Document is finalized and GL entries created | No | Yes β journal entries created |
| Partial | Partially paid or partially fulfilled | No | Yes β some payments/receipts applied |
| Paid / Closed | Fully settled or completed | No | Yes β fully reconciled |
| Cancelled / Voided | Document reversed | No | Yes β reversal entries created |
Draft vs Posted β The Critical Distinction
A draft document has ZERO financial impact. It's just a saved form. Only when a document is posted does it create journal entries and affect the GL. This is an essential test case: verify that draft documents do NOT appear in financial reports, and posted documents DO.
How Commas implements this
Every document page in Commas follows the same pattern: a list view with status badges, a detail view with action buttons (Post, Pay, Convert), and a form view for creation/editing. The status badge is color-coded: gray for draft, blue for posted, yellow for partial, green for paid/closed, red for cancelled. When testing, verify that all status transitions work correctly and that invalid transitions are blocked (e.g., you cannot edit a posted invoice).
8The Posting Engine
~5 minutes
The posting engine is the heart of Commas. It is a single function that every module calls when a document needs to create financial entries. It guarantees that:
- Total debits always equal total credits (balanced entries)
- The correct accounts are used (via Posting Groups)
- Subledger entries are created alongside GL entries
- The operation is atomic (all or nothing β if any part fails, nothing is saved)
Posting Groups
Posting Groups are configuration rules that tell the posting engine whichGL accounts to use. Instead of hardcoding "when selling goods, credit account 4000", the system looks up the Posting Group:
| Posting Group Type | Purpose | Example Configuration |
|---|---|---|
| General Business Posting Group | Categorizes customers/vendors by type | DOMESTIC, FOREIGN, GOVERNMENT |
| General Product Posting Group | Categorizes items by type | GOODS, SERVICES, MATERIALS |
| General Posting Setup | Maps Business Γ Product β GL Accounts | DOMESTIC + GOODS β Sales Account 4000, COGS Account 5000 |
| Customer Posting Group | Maps customer type β AR account | TRADE β AR Account 1200 |
| Vendor Posting Group | Maps vendor type β AP account | TRADE β AP Account 2000 |
| Inventory Posting Group | Maps item type β inventory GL account | GOODS β Inventory Account 1300 |
Think of it this way
Posting Groups are like a recipe book for the posting engine. When you post an invoice for selling GOODS to a DOMESTIC customer, the engine looks up the recipe: "DOMESTIC + GOODS β credit Sales Revenue (4000), debit COGS (5000), debit AR (1200)". This makes the system flexible β different product types can post to different GL accounts.
Posting Engine Flow
How Commas implements this
The posting engine lives in lib/services/posting.service.ts. When testing, the key things to verify are: (1) every posted document creates balanced GL entries, (2) the correct GL accounts are used based on Posting Groups, (3) if you misconfigure a Posting Group (leave an account blank), the posting should fail gracefully with an error message, not create partial entries.
9Multi-Tenant Architecture & Security
~5 minutes
Commas is a multi-tenant application. This means multiple companies (organizations) share the same database and application, but each one can only see their own data.
Think of it this way
Think of an apartment building. Everyone lives in the same building (same database), but each tenant has their own apartment with a lock on the door. You can't walk into your neighbor's apartment. That's multi-tenancy.
How Data Isolation Works
Every table in the database has an org_id column. This is the "apartment number". Supabase Row-Level Security (RLS) policies automatically filter data so that users can only see rows where org_id matches their organization.
Row-Level Security Example
Roles & Permissions
Within each organization, users are assigned roles. Commas has 12 built-in roles:
| Role | Access Level | Example Permissions |
|---|---|---|
| Owner | Full access to everything | All permissions + can delete org, manage billing |
| Admin | Full access to everything | All permissions except org deletion |
| Finance Manager | Full financial access | All financial operations, reports, journals |
| Accountant | Day-to-day accounting | Invoices, bills, receipts, journals, reports |
| Sales User | Sales operations only | Quotes, invoices, receipts, customers |
| Purchasing User | Purchasing operations only | POs, bills, payments, suppliers |
| Inventory User | Inventory operations only | Items, stock levels, counts, movements |
| Bank User | Banking operations only | Bank accounts, reconciliation, transfers |
| Payroll Admin | Payroll operations | Employees, pay runs, payslips |
| Auditor | Read-only access to everything | Can view all data but cannot create or modify |
| Read Only | Read-only access to assigned areas | View permissions only |
| Member | Basic access | Dashboard and profile only |
There are 70+ granular permissions (like view_invoices, create_invoices, post_invoices, delete_invoices) that can be customized per role via the Access Control page.
How Commas implements this
When testing: (1) Create two organizations and verify data is completely isolated between them, (2) Test each role by changing a user's role and verifying they can only access permitted pages, (3) Verify that the Admin > Access Control page correctly shows and toggles permissions, (4) Verify the audit log captures who did what and when.
10Commas Modules Overview
~7 minutes
Here is a complete map of every module in Commas and what it does:
General Ledger
| Feature | What It Does | Key Test Cases |
|---|---|---|
| Chart of Accounts | Master list of all accounts | Default CoA generated, accounts CRUD, balance display |
| Journal Entries | Manual and auto-generated GL entries | Create manual entry, verify balanced, view auto-generated |
| Posting Groups | Maps documents to GL accounts | Business/Product/Customer/Vendor groups configured correctly |
| Opening Balances | Set initial balances for migration | Post GL/customer/supplier/bank opening balances, verify TB |
Sales
| Feature | What It Does | Key Test Cases |
|---|---|---|
| Quotes | Create proposals for customers | CRUD, status flow (draftβsentβacceptedβconverted), convert to invoice/order |
| Sales Orders | Confirmed orders before invoicing | CRUD, release, partial invoicing, full invoicing, convert from quote |
| Invoices | Bills sent to customers | CRUD, post (verify GL), email/PDF, credit notes, recurring templates |
| Receipts | Record customer payments | Create, apply to invoice, verify bank + AR updated, over/under payment |
| Credit Notes | Reverse/adjust invoices | Create from invoice, post (verify GL reversal), apply to balance |
| Recurring Invoices | Auto-generate invoices on schedule | Create template, generate now, verify frequency calculation |
Purchasing
| Feature | What It Does | Key Test Cases |
|---|---|---|
| Purchase Orders | Orders sent to suppliers | CRUD, release, goods receipt, 3-way matching |
| Goods Receipt | Record received inventory | Receive against PO, partial receive, verify stock updated |
| Bills | Invoices from suppliers | CRUD, post (verify GL), create from PO |
| Payments | Pay supplier bills | Create, apply to bill, batch payments, verify bank + AP |
| Purchase Returns | Return goods to suppliers | Create return, auto credit note, verify stock adjustment |
Banking
| Feature | What It Does | Key Test Cases |
|---|---|---|
| Bank Accounts | Manage bank account records | CRUD, linked GL account, running balance |
| Reconciliation | Match bank statement to system records | Upload statement, auto-match, manual match, post differences |
| Transfers | Move money between bank accounts | Create, verify both accounts updated, GL entries balanced |
| Bank Feeds | Auto-import transactions | Connect feed, mapping rules, auto-categorization |
Inventory
| Feature | What It Does | Key Test Cases |
|---|---|---|
| Items | Product/service catalog | CRUD, item categories, units, pricing, posting groups |
| Stock Levels | Current quantity per item per location | Verify updates after sale/purchase, low stock alerts |
| Stock Counts | Physical inventory verification | Create count, enter actual qty, post adjustments |
| Stock Movements | Transfer between locations | Create movement, verify source/destination updated |
| Bundles | Kits / composite items | Create bundle with components, verify stock deduction on sale |
Other Modules
| Module | Features | Key Test Cases |
|---|---|---|
| Payroll | Employees, pay runs, payslips, deductions | Create employee, run payroll, verify deductions, generate payslips |
| VAT & Tax | VAT returns, adjustments, payments | Generate return from transactions, file, pay, verify GL |
| Reports (49+) | Trial Balance, P&L, Balance Sheet, aging, etc. | Date filters, data accuracy, CSV/PDF export, print |
| Expenses | Expense claims and petty cash | Create expense, approve, reimburse, verify GL |
| Debtors Management | Collections, write-offs, communication | Aging buckets, send reminders, write off bad debt |
| Administration | Users, roles, audit log, settings | Invite user, change role, verify permissions, check audit trail |
| Accountant Tools | External accountant portal | Invite accountant, shared notes, recurring journals, TB export |
11Testing an ERP: What to Look For
~5 minutes
Testing an ERP is fundamentally different from testing a regular web application. Here are the specific things you should always check:
1. Financial Integrity Checks
These are the highest priority. A financial bug can cause real monetary harm to users.
- β Trial Balance must always balance β After any operation, total debits must equal total credits
- β Balance Sheet equation must hold β Assets = Liabilities + Equity, always
- β Subledger reconciliation β Sum of customer balances = AR account balance
- β VAT calculations β 7.5% in Nigeria, 15% in South Africa, applied correctly
- β No rounding errors β Amounts must use proper decimal handling, no floating-point issues
2. Status Flow Checks
- Documents can only move through valid status transitions (Draft β Posted, not Posted β Draft)
- Draft documents cannot appear in financial reports
- Posted documents cannot be edited (only reversed via credit notes)
- Cancelled documents create reversal entries in the GL
3. Data Isolation Checks
- Organization A cannot see Organization B's data (test with two browser sessions)
- Document numbers are unique per organization (both orgs can have INV-001)
- Switching orgs clears all cached data from the previous org
4. Cross-Module Consistency
- After posting a sales invoice: check GL, customer ledger, inventory ledger, and VAT ledger
- After recording a payment: check bank ledger AND the invoice status changed to "Paid"
- After a stock count adjustment: check inventory GL account matches new valuation
- After a credit note: check the original invoice balance and the GL reversal
5. Edge Cases
- Zero-amount invoices and credit notes
- Overpayments (pay more than the invoice amount)
- Partial payments across multiple invoices
- Converting a quote with many line items (10+)
- Items with 0% VAT rate
- Deleting the last owner of an organization (should be blocked)
- Very large amounts (test with amounts over β¦1 billion)
- Special characters in customer/supplier names
- Backdated transactions (posting to a previous month)
6. The "Follow the Money" Test
The Ultimate ERP Test
Pick any business scenario (sell goods, buy inventory, pay salaries) and trace the money through every system it touches. If you sell goods on credit and then receive payment, you should be able to see: (1) the invoice, (2) the GL journal entry from the invoice, (3) the customer ledger entry, (4) the receipt, (5) the GL journal entry from the receipt, (6) the bank ledger entry, (7) the invoice status changed to "Paid", (8) the customer balance went to zero. If any link in the chain is missing or wrong, you've found a bug.
12ERP Glossary
Quick reference for terms you will encounter
| Term | Definition | Example in Commas |
|---|---|---|
| Account | A category for recording transactions | Sales Revenue (4000), Bank (1100) |
| Accounts Payable (AP) | Money you owe to suppliers | Vendor Ledger shows AP per supplier |
| Accounts Receivable (AR) | Money customers owe you | Customer Ledger shows AR per customer |
| Aging Report | Shows overdue amounts by time bucket (30/60/90 days) | Reports > AR Aging or AP Aging |
| Balance Sheet | Snapshot of Assets, Liabilities, Equity at a point in time | Reports > Balance Sheet |
| Bill | Invoice FROM a supplier (what you owe them) | Purchasing > Bills |
| Chart of Accounts (CoA) | Master list of all accounts in the system | General Ledger > Chart of Accounts |
| Credit Note | Reversal or reduction of an invoice | Sales > Credit Notes or Purchasing > Credit Notes |
| Debit | Left side of a journal entry | Increases assets and expenses |
| Credit | Right side of a journal entry | Increases liabilities, equity, and revenue |
| Double Entry | Every transaction has equal debits and credits | All postings in Commas use double-entry |
| Fiscal Year | The 12-month period used for financial reporting | Settings > Organization > Financial Year |
| General Ledger (GL) | Complete record of all financial transactions | General Ledger > Journal Entries |
| Goods Receipt | Recording that inventory was physically received | Purchasing > Purchase Orders > Receive |
| Income Statement | Revenue minus Expenses = Profit or Loss | Reports > Income Statement (P&L) |
| Invoice | Bill sent to a customer for goods/services | Sales > Invoices |
| Journal Entry | A set of debit/credit lines that record a transaction | General Ledger > Journal Entries |
| Narration | Description text on a journal entry | Auto-generated or manual description |
| Opening Balance | Starting balances when migrating to a new system | Settings > Opening Balances |
| Posting | Finalizing a document to create GL entries | Click "Post" on an invoice or bill |
| Posting Group | Configuration that maps documents to GL accounts | Settings > Posting Groups |
| Purchase Order (PO) | Formal request to buy goods from a supplier | Purchasing > Purchase Orders |
| Quote | Price proposal sent to a customer | Sales > Quotes |
| Receipt | Record of payment received from a customer | Sales > Receipts |
| Reconciliation | Matching system records to external records (bank statement) | Banking > Reconciliation |
| RLS | Row-Level Security β database enforces data isolation per org | Every table filtered by org_id |
| Sales Order | Confirmed customer order before invoicing | Sales > Sales Orders |
| Subledger | Detailed breakdown of a GL account by entity | Customer Ledger, Vendor Ledger, Bank Ledger |
| Three-Way Match | Matching PO + Goods Receipt + Bill before payment | Purchasing module verification |
| Trial Balance | List of all account balances (must balance) | Reports > Trial Balance |
| VAT | Value Added Tax β 7.5% Nigeria, 15% South Africa | Auto-calculated on invoices and bills |