Welcome to Goju Cloud
Your complete business management platform. This guide covers every feature from daily operations to advanced financial reporting — written for ordinary business users.
What is Goju Cloud?
Goju Cloud is a cloud-based Enterprise Resource Planning (ERP) system designed for Tanzanian businesses of all sizes — from small retail shops to multi-branch financial institutions. It combines savings and loan management, point-of-sale, inventory control, human resources, full accounting, and intelligent agency banking into one unified platform.
Banking Operations
Manage customer savings, issue loans, track repayments, and send balance alerts — all from one screen.
Point of Sale
Fast checkout, barcode scanning, batch/serial tracking, and real-time inventory deduction.
Human Resources
Full HR suite: employee directory, payroll, leave management, attendance, and performance reviews.
Full Accounting
Double-entry general ledger, trial balance, income statement, balance sheet, and cash flow reports.
Agency Intelligence
Import mobile money SMS data, detect fraud patterns, reconcile float balances, and audit agency operations.
Multi-Branch
Manage multiple branches from one account. Switch between branches instantly, each with isolated data.
Quick Navigation
Getting Started
Everything you need to start using Goju Cloud from day one.
Step 1 — Logging In
- Open your browser and go to your Goju Cloud URLYour system administrator will provide your organization's unique web address, for example:
app.yourcompany.com - Enter your email address and passwordUse the credentials provided by your branch manager or IT administrator when your account was created.
- Complete OTP verification (if enabled)If your account has two-factor authentication enabled, you will receive a one-time PIN via SMS or email. Enter this PIN to proceed.
- Verify your device (first-time login, if Device Trust is enabled)If your Tenant Owner has turned on Device Trust, logging in from a device the system hasn't seen before puts you on a "waiting for approval" screen until an administrator approves it — see Profile & Security.
- You are now logged inYou will be taken to your branch dashboard, which shows your today's financial summary.
Step 2 — Select Your Active Branch
If you manage multiple branches or have been assigned to a specific branch, you must activate the correct branch before performing any transactions. Look for the branch switcher at the top of your dashboard and select the correct branch from the dropdown.
Step 3 — Understand Your Role
Your view of the system depends on your role. The three main user types are:
| Role | What They See | Typical Users |
|---|---|---|
| Branch Staff | Full operational menus — Savings, Loans, POS, Inventory, Finance, HR, etc. | Cashiers, accountants, HR officers, branch managers |
| Tenant Owner | Company-level management — branches, staff, subscription, company dashboard | Business owner, managing director |
| SaaS Admin | Platform-level tools — all tenants, subscriptions, plans, system settings | Goju Cloud support team |
Step 4 — Explore the Menu
The top navigation bar contains all your modules. On a desktop, the menus appear horizontally at the top. Click any menu to expand its sub-items. The menu you see depends on your assigned permissions.
Dashboard
Your command centre — a real-time summary of your branch's financial health.
Overview
The Dashboard is the first screen you see after logging in. It gives branch managers and staff an instant overview of the day's activity, outstanding balances, and business performance at a glance.
Key Metrics Displayed
Dashboard Charts
- Income vs Expenses Chart — A bar chart comparing revenue and spending for the current period
- Sales Trend — A line chart showing daily/weekly sales volume
- Savings Portfolio — Total customer savings balance over time
- Loan Portfolio — Outstanding loan balance and repayment trend
How to Interpret the Dashboard
| Card / Metric | What it means | Action if concerning |
|---|---|---|
| Today's Income | Total money received today across all transactions | If unusually low, check if POS terminal was used or loan repayments were posted |
| Low Stock Items | Products with stock below the minimum threshold | Click the number to see which products — create a Purchase Order immediately |
| Outstanding Loans | Total amount owed to your branch by customers with loans | If growing, review your loan portfolio report for overdue accounts |
| Today's Expenses | Total expense vouchers posted today | Compare with your daily budget — investigate unusually high spending |
Profile & Security Settings
Every user — Branch Staff, Tenant Owner, or SaaS Admin — has a personal profile page for managing their own identity and login security.
Overview
Your profile page is where you update your personal details (name, phone, email, photo, password) and control the security features that protect your own login — two-factor verification (OTP), trusted devices, and the automatic inactivity screen lock. Only you can see and change your own settings; a manager cannot change your password for you, though a Tenant Owner or SaaS Admin can reset a forgotten one.
Navigation
Click your name or avatar in the top-right corner of any screen → My Profile. Direct URL: /profile.
Concepts
| Term | Meaning |
|---|---|
| OTP (One-Time PIN) | A temporary numeric code sent to you at login time, in addition to your password. Proves that you — not just someone who guessed your password — are logging in. |
| OTP Delivery Channel | Whether your one-time PIN arrives by SMS or Email. SMS requires a phone number on your profile; you cannot select SMS without one. |
| Trusted Device | A phone, tablet, or computer the system recognises because you have already verified it once. Device Trust is a Tenant Owner setting — when it is turned on, staff logging in from an unrecognised device must be approved before they can access the system. |
| Screen Lock | An automatic lock that engages after a period of inactivity, hiding your screen until you re-enter your password. It protects the till or computer if you step away without logging out. |
| Forced Password Change | When your account is created (or your password is reset) by an administrator, you are given a temporary password. The system forces you to set your own password on first login before you can do anything else. |
Screen Walkthrough — My Profile
| Field / Button | What it does |
|---|---|
| Profile Picture | Upload a JPG, PNG, or WEBP photo (max 2 MB). It is automatically resized and shown next to your name across the system. |
| First Name / Last Name | Your display name, shown on every transaction, approval, and activity log entry you create. |
| Email Address | Used for login (if your account uses email login) and for email OTP. Changing it marks your email as unverified again. |
| Phone Number | Required if you want SMS OTP. Also used by staff to reach you and by the system for SMS balance alerts you send to customers. |
| Change Password section | Leave blank to keep your current password. To change it, enter your Current Password plus a New Password and confirmation. |
| Save Changes | Applies all edits at once. Every change is written to the activity log under your name. |
| Delete My Account | Permanently removes your login. Requires you to re-enter your current password to confirm — this cannot be undone from the user side. |
Two-Factor Authentication (OTP)
From your profile page, open the Security tab. Two independent controls live here:
- Enable/Disable 2FA — a toggle switch. Clicking it opens a confirmation box asking for your current password before the change takes effect (so someone who is already logged in at your desk cannot silently turn your protection off).
- OTP Delivery Channel — a separate card with two radio options, SMS and Email, plus a "Save Channel" button. You can change this independently of turning 2FA on or off, so you can switch channels without disabling protection first.
Trusted Devices (Tenant Owner)
This control is only visible to the Tenant Owner. When Device Trust is switched on (again requiring your password to confirm), every staff member's first login from a device the system has not seen before is held for approval. The staff member sees a "waiting for approval" screen; the Tenant Owner reviews and approves or denies the device from the same Security area. Denying a device immediately signs that pending session out with the message: "Your device access request was denied by the administrator..."
Screen Lock & Password Re-Confirmation
The system automatically locks your screen after a period of inactivity. To unlock, simply enter your password again — you are not signed out, and any unsaved form data on other tabs is preserved.
Separately, a handful of especially sensitive pages — My HR Profile, My Accounts, and My Payslips — ask you to re-confirm your password every time you open them, even if you unlocked your screen a moment ago. This is intentional: these pages show personal salary and account information, so the system never assumes a recent unlock is enough.
Step-by-Step — Changing Your Password
- Open My ProfileClick your name in the top-right corner.
- Scroll to Change PasswordEnter your current password, then your new password twice.
- Click Save ChangesIf the current password is wrong, correct it and save again.
- You stay logged inYour existing session continues; use the new password the next time you log in.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "The current password is incorrect" | Typo, or Caps Lock is on | Retype carefully; if you truly forgot it, ask your Tenant Owner or a SaaS Admin to reset it for you. |
| Can't switch OTP channel to SMS | No phone number on file | Add and save a phone number on your profile first. |
| Stuck on "waiting for approval" after login | Device Trust is enabled and this is a new device | Ask your Tenant Owner to approve the device from Security settings, or log in from a previously trusted device. |
| System forces me to set a new password before I can do anything | Your account was just created or reset by an administrator | This is expected — set a new password different from the temporary one you were given. |
Self-Service (My Area)
Every employee — cashier, accountant, HR officer — has a personal area to view their own HR record, financial accounts, payslips, attendance, and to apply for a staff loan, without needing HR or accounting permissions.
Overview
My Area exists so staff do not have to ask HR or a manager for information about their own employment. If your user account is linked to an Employee record, you automatically get access to the five self-service pages below. If you see "No Employee Profile Linked," ask HR to link your login to your employee record.
Navigation
Click your name in the top-right corner to reach: My HR Profile, My Accounts, My Loan, My Payslips, and My Attendance.
My HR Profile
A read-only view of your own employee record — department, position, employment date, and salary structure. Sensitive figures (National ID, savings/loan balances) are hidden behind a "Show Values" toggle so they are not visible at a glance over your shoulder. You cannot edit this page yourself; ask HR to update your record.
My Accounts
Shows any savings or loan accounts opened in your own name as a customer of the business (for example, a staff savings account), including the officer assigned to manage them. Click through to view a full statement.
My Loan (Staff Loans)
View your current staff loan and your loan history, and apply for a new staff loan yourself — no HR permission required, only a linked employee record.
My Payslips
A list of every finalized payslip you have ever been paid, grouped by year. Only payslips from approved or paid payroll runs appear — a payroll that is still in draft is never visible to staff.
Step-by-Step — Applying for a Staff Loan
- Open My LoanClick your name → My Loan.
- Click Apply for LoanOnly available if you have no active loan application in progress.
- Enter the amount you want to borrowExample: Neema Joseph requests TZS 600,000.
- Enter your proposed monthly deductionExample: TZS 100,000 per month — the system will use this to work out how many payroll cycles the loan will take to repay.
- Choose a start date and (optionally) state a purposeExample purpose: "School fees for children."
- SubmitYour request enters the same approval queue HR uses for loans they create directly, with status Pending.
Step-by-Step — Clocking In and Out (My Attendance)
- Open My AttendanceClick your name → My Attendance. You'll see a live clock and today's status.
- Click Clock InRecorded instantly using the server's time — there is no location or photo check, so use it honestly.
- Work your shiftIf you clock in after your shift's start time plus its grace period, you are marked late for that day.
- Click Clock Out at the end of your shiftThe system calculates hours worked and any overtime automatically.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "No Employee Profile Linked" | Your login was never connected to an HR employee record | Ask HR (Personnel → Employees) to link your user account to your employee record. |
| My Payslips is empty even though I was paid | The payroll run for that month is still Draft or Processing | Wait for HR to Approve the payroll — payslips appear the moment it is approved. |
| Can't apply for a new staff loan | You already have an active or pending loan | Wait until your existing loan is cleared, or ask HR about early settlement. |
| Asked to re-enter my password when opening My Accounts / My HR Profile / My Payslips | These pages always re-confirm your password for privacy, regardless of recent activity | This is expected behavior — simply enter your password again. |
Related Topics: Profile & Security Employees Staff Loans Payroll Attendance
Creating Your Account
How a new business becomes a Goju Cloud tenant.
Overview
A Goju Cloud account (called a Tenant) belongs to one business — for example, "Moshi Hardware" or "Kilimanjaro Pharmacy." Every tenant gets its own isolated data, its own branches, its own chart of accounts, and its own staff logins, invisible to every other tenant on the platform.
Screen Walkthrough — The Sign-Up Wizard
Visiting the public sign-up page walks you through four steps:
- Choose a PlanPick a subscription plan card — each shows its price, billing interval, and the number of users, branches, and storage it includes.
- Business DetailsEnter your company name, phone number, email address, and city, plus your first branch's name, location, phone, and email.
- Your AccountEnter your own name, login email, and a password (with a live strength meter). This becomes your Tenant Owner login.
- Review & LaunchCheck the summary of everything you entered, accept the terms, and click "Launch My Business."
What Happens Behind the Scenes
Once sign-up is fully live, submitting the wizard will automatically: create your tenant and first branch, build your starting chart of accounts, register you as both the Tenant Owner and the first HR employee, and take you to the payment page to activate your subscription. Until then, new accounts are provisioned by the Goju Cloud team using the same underlying setup — the only difference is that your subscription is marked active and paid immediately, with no checkout step.
FAQ
Billing & Payments
Understanding your subscription, viewing your organization profile, and how online payments work.
Concepts
| Term | Meaning |
|---|---|
| Plan | A package of features and limits (number of users, branches, storage) at a fixed price and billing interval (daily, weekly, monthly, or yearly). |
| Subscription | Your tenant's current record of which plan you're on, its status, and its renewal date. A new subscription is created every time you sign up or renew. |
| Payment Transaction | A single payment attempt against a subscription — card or mobile money — tracked from initiation through to completion or failure. |
Navigation — Organization → Subscription
The Tenant Owner can view billing information at Organization → Subscription:
- Subscription History — every subscription your business has ever had, with its plan and dates.
- Organization Profile — your business name, phone, email, city, logo, and an optional announcement banner shown to your own staff; plan and usage metrics (staff count, branch count, active plan, plan price) are shown alongside it. The Tenant Owner can edit these details and upload a new logo at any time (requires the
settings-editpermission). - System Status Toggle — the Tenant Owner can temporarily take their own organization offline for all staff except themselves (for example, during a data clean-up). This is separate from Goju Cloud's platform-wide maintenance mode.
How Online Payment Works
When a payment is required (for example, during self-service sign-up once it is live), Goju Cloud uses Snippe, a Tanzanian payment gateway, to process the transaction securely — Goju Cloud never stores your card or mobile money PIN.
- Checkout PageShows your plan, billing interval, and price in TZS. Choose Card Payment (Visa, Mastercard, debit cards — instant) or Mobile Money (M-Pesa, Airtel Money, HaloPesa, Mixx — a USSD push to your phone).
- Enter your phone number (Mobile Money only)Example:
+255 7XX XXX XXX. You will receive a USSD prompt on this number. - Confirm the paymentCard payments redirect you to a secure Snippe payment page. Mobile money payments show a "waiting for confirmation" screen while you approve the USSD prompt on your phone.
- Payment confirmedOnce Snippe confirms the payment, your subscription is automatically activated — you do not need to do anything else.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "No pending subscription in session" | You navigated to the payment page without a payment currently in progress, or your session expired | Restart from Organization → Subscription, or contact Goju Cloud to trigger a renewal. |
| Mobile money USSD prompt never arrives | Network delay, or an incorrect phone number was entered | Double-check the number and try again; if it persists, choose Card Payment instead. |
| Payment shows as failed or cancelled | You cancelled at the Snippe page, or your bank/mobile wallet declined the transaction | Retry the payment; contact your bank or mobile money provider if it keeps declining. |
Related Topics: Creating Your Account Branches
Customer Savings
Manage customer savings accounts — deposits, withdrawals, statements, and SMS alerts.
Overview
The Savings module manages your customers' savings accounts. Every deposit and withdrawal is automatically posted to the general ledger as a double-entry transaction, creating a complete and auditable financial record.
Key Features
- Open and manage individual savings accounts per customer
- Deposit and withdraw funds with immediate GL posting
- Generate individual account statements
- View a complete savings portfolio report across all accounts
- Send balance SMS alerts to customers
- Reverse incorrect transactions
- Assign accounts to specific staff members
- Repay loans directly from a savings balance
How to Make a Deposit
- Go to Savings & Loans → Customer SavingsThe savings index shows all accounts for your branch with current balances.
- Click "Deposit" in the top toolbar or find the customer's accountYou can search by customer name, account number, or phone number.
- Fill in the Deposit FormSelect the customer's savings account, enter the amount, choose the source (cash or bank), and add any notes.
- Submit the formThe system posts a transaction: Debit Cash/Bank → Credit Savings Liability. The customer's account balance updates immediately.
- Send an SMS receipt (optional)Click "Send Balance SMS" on the account to notify the customer of their updated balance.
Scenario: Neema Mollel walks into Maji Mazuri Traders' branch in Arusha and wants to deposit TZS 500,000 into her savings account.
The teller (Kelvin Mrema) does the following:
- Opens Savings & Loans → Customer Savings
- Clicks Deposit
- Searches for "Neema Mollel" and selects her account
- Enters TZS 500,000, selects "Cash" as the source
- Clicks Confirm Deposit
Accounting Journal Entry created automatically:
| Account | Debit | Credit |
|---|---|---|
| Cash (Till) | TZS 500,000 | |
| Customer Savings Liability | TZS 500,000 |
This increases the cash balance and records the obligation to the customer.
How to Process a Withdrawal
- Go to Savings & Loans → Customer SavingsFind the customer's account using the search function.
- Click "Withdraw"Select the account and enter the withdrawal amount. The system checks that the account balance is sufficient.
- Confirm the withdrawalThe system posts: Debit Savings Liability → Credit Cash/Bank.
Account Statement
To view a complete history of all deposits and withdrawals for a specific customer account:
- Go to Customer Savings
- Click on the account or click Statement
- Select the date range and click Generate
- The statement shows every transaction with a running balance
Savings Portfolio Report
The portfolio report shows a summary of all savings accounts: total deposits, total withdrawals, current balances, and account counts. Go to Savings → Report to access this view. You can filter by date and export to PDF.
Reversing a Transaction
If a deposit or withdrawal was made in error, you can reverse it. Go to the account statement, find the transaction, and click Reverse. The system creates an equal and opposite journal entry, restoring the previous balance.
savings-reverse permission. All reversals are permanently logged in the audit trail. Never delete transactions — always reverse them.Staff Data Isolation
By default, branch staff can only see savings accounts assigned to them or unassigned accounts. Staff with the savings-view-all permission can see every account in the branch. Branch owners see all accounts automatically.
Best Practices
- Always verify the customer's identity (national ID or account number) before making a deposit or withdrawal
- Send an SMS balance confirmation to the customer after every transaction
- Never process a withdrawal that would make an account go below TZS 0
- Reconcile your cash float against posted deposits and withdrawals at end of day
- If a customer asks to repay a loan from their savings, use the Repay from Savings feature rather than withdrawing and re-depositing separately
Frequently Asked Questions
savings-view-all permission, or assign that specific account to you.Customer Loans
Issue loans, collect repayments, track outstanding balances, and manage your loan portfolio.
Overview
The Loans module manages the full lifecycle of customer loans — from issuing a new loan to tracking repayments and clearing completed loans. All transactions automatically post to the general ledger.
Loan Lifecycle
How to Issue a Loan
- Go to Savings & Loans → Customer LoansThe loans index lists all active loan accounts with outstanding balances.
- Click "Issue Loan"The loan issue form opens. Select the customer, choose or create their loan account, enter the loan amount, interest rate, and repayment terms.
- Submit the formThe system creates the loan account and posts: Debit Loan Asset → Credit Cash/Bank (disbursement goes out).
Scenario: Emmanuel Lema applies for a business loan of TZS 2,000,000 from Kilimanjaro Hardware's financial desk.
| Account | Debit | Credit |
|---|---|---|
| Loans Receivable (Asset) | TZS 2,000,000 | |
| Cash / Bank | TZS 2,000,000 |
The asset account tracks what is owed to the business. Cash decreases because it went out to the customer.
How to Record a Repayment
- Go to Savings & Loans → Customer Loans → RepayFind the customer's loan account.
- Enter the repayment amountThis can be a partial or full repayment. Select the payment source (Cash or Bank).
- SubmitThe system reduces the loan balance and posts: Debit Cash → Credit Loans Receivable.
Repay from Savings
A customer can repay their loan directly from their own savings balance without physically withdrawing cash. On the loan account, click Repay from Savings, select the savings account, and confirm. The system transfers the amount internally.
Clearing a Loan
When a loan is fully repaid, click Clear Loan on the loan account. This marks the account as closed in the system. The outstanding balance must be zero to proceed.
Loan Portfolio Report
Go to Customer Loans → Report to see a summary of all loan accounts: total issued, total collected, total outstanding, and overdue accounts. Filter by date, customer, or status.
Account Statement
Every loan account has a detailed statement showing each disbursement and repayment with dates, amounts, and the running outstanding balance.
Best Practices
- Always confirm the customer's identity before issuing a loan
- Use the SMS Balance feature to remind customers of their outstanding balance
- Review the portfolio report weekly to identify overdue accounts
- Assign a staff member to each loan account for accountability
POS Terminal
Fast, accurate point-of-sale checkout with barcode scanning and automatic inventory deduction.
Overview
The POS Terminal is designed for retail staff at the counter. It supports barcode scanning, flexible payment methods, and handles all three inventory tracking modes — standard, batch, and serial — automatically.
Starting a Sale
- Go to Commerce → POS TerminalThe terminal opens with an empty cart on the right and a product search area on the left.
- Scan a barcode or search for a productType the product name or barcode, or use a USB barcode scanner connected to your computer. The system checks the product's tracking mode automatically.
- Set quantity and confirmFor standard products, enter the quantity. For batch-tracked products, the system suggests the best batch (FEFO — First Expiry, First Out). For serial-tracked products, scan or select the specific unit's serial number.
- Apply discounts (if applicable)You can apply an item-level or cart-level discount.
- Select payment method and checkoutChoose: Cash, Bank Transfer, or Mobile Money. Enter the amount paid. The system calculates change automatically.
- Complete the saleThe system deducts stock, posts the GL entries, and prints/displays the receipt.
Scenario: Asha Msuya buys 2 cartons of rice (TZS 45,000 each) and 1 bottle of cooking oil (TZS 8,500) at Mwananchi Supermarket. She pays with TZS 100,000 cash.
Journal Entry posted automatically:
| Account | Debit | Credit |
|---|---|---|
| Cash (Till) | TZS 98,500 | |
| Sales Revenue | TZS 85,000 | |
| VAT Payable | TZS 13,500 | |
| COGS (Cost of Goods Sold) | TZS 60,000 | |
| Inventory Asset | TZS 60,000 |
Change given to customer: TZS 1,500. Stock is automatically deducted from inventory.
Handling Batch-Tracked Products
For products like medicines, food, or chemicals that have expiry dates, the POS uses FEFO (First Expiry, First Out) to automatically suggest which batch to sell first. A popup will show the recommended batch — you can confirm or choose a different batch.
Handling Serial-Tracked Products
For products like electronics, phones, or appliances with serial numbers, the system asks you to scan or enter the specific serial number being sold. Each serial is tracked individually and cannot be sold twice.
Customers on the POS
You can link a sale to a specific customer for record-keeping. Use the customer search on the terminal before completing checkout. This helps build a customer purchase history.
Reversing a Sale
If a sale was made in error or a customer returns goods:
- Go to Commerce → Sales History
- Find the sale by date, amount, or reference number
- Click Reverse
- The system restores the stock and reverses all journal entries
pos-reverse permission. The original receipt is marked as "Reversed" and a new reversal receipt is generated.Best Practices
- Use a barcode scanner for speed and accuracy — manual entry increases error risk
- Always confirm the amount tendered before pressing checkout
- Never leave the POS terminal logged in unattended
- Reconcile your cash drawer against POS totals at the end of each shift
Sales History
View, search, and manage all completed POS sales.
Go to Commerce → Sales History to see every sale made at your branch. You can filter by date, amount, cashier, customer, and payment method. Click any sale to view its full receipt including all items, quantities, and journal entry reference.
Sales Report
Go to Commerce → Sales Report for an aggregated view of sales performance over any period. The report includes:
- Total sales amount
- Number of transactions
- Average sale value
- Top-selling products
- Sales by payment method
- Sales by cashier
The report can be exported to PDF for management review.
Invoices (Accounts Receivable)
Create and manage customer invoices with a full approval workflow and GL integration.
Overview
The Invoice module manages Accounts Receivable — money owed to your business by customers who have received goods or services but not yet paid. Unlike POS sales (which are paid immediately), invoices allow credit sales with payment due later.
Invoice Status Workflow
How to Create an Invoice
- Go to Commerce → Invoices → Create InvoiceThe invoice form opens with a header section and a line items table.
- Fill in the headerSelect the customer, choose an invoice date, set the due date, and add any reference notes.
- Add line itemsAdd each product or service, enter the quantity, unit price, and whether VAT applies. Totals are calculated automatically.
- Save as Draft or Submit for ApprovalA draft can be edited. Submitting sends it to the approver queue.
- Approver reviews and approvesStaff with the
invoice-approvepermission can approve or reject the invoice. - Post to GLOnce approved, a staff member with
invoice-postpermission clicks Post. This creates the GL entry: Debit Accounts Receivable → Credit Revenue. - Record payment when receivedWhen the customer pays, click "Record Payment", choose the amount and payment account. The system posts: Debit Cash/Bank → Credit Accounts Receivable.
Scenario: Arusha Electronics Centre supplies 10 laptops to a government office on credit, invoice value TZS 15,000,000 with 18% VAT, due in 30 days.
| Account | Debit | Credit |
|---|---|---|
| Accounts Receivable | TZS 17,700,000 | |
| Sales Revenue | TZS 15,000,000 | |
| VAT Payable (Output) | TZS 2,700,000 |
When the government pays on day 28: Debit Bank TZS 17,700,000 / Credit Accounts Receivable TZS 17,700,000.
Invoice Status Badges
AR Aging Report
Go to Commerce → Invoices → Aging Report to see all outstanding invoices grouped by how long they have been unpaid: 0-30 days, 31-60 days, 61-90 days, and 90+ days. This is essential for chasing overdue payments. Click Explain with AI on this report for a plain-language summary of your collection risk — see Explain Reports with AI.
Print and PDF Export
Any posted invoice can be printed or exported as a PDF to send to the customer. Go to the invoice detail page and click Print or Export PDF.
Best Practices
- Always set a realistic due date and follow up before it passes
- Review the AR Aging Report weekly to catch overdue invoices early
- Never cancel a posted invoice without management approval — use reversal instead
- Reconcile your total Accounts Receivable against the AR Aging Report monthly
Inventory Management
Complete stock control — standard, batch, and serial tracking — with physical stocktaking, variance reporting, and full GL integration.
What the Inventory Module Does
The Inventory module is the single source of truth for everything your business holds in stock. Every movement — purchasing, selling, adjusting, or transferring — is recorded automatically, along with the corresponding accounting journal entry. No stock can enter or leave without a traceable record.
Product Catalogue
Central product list with SKU, barcode, pricing, categories, and minimum stock thresholds.
Batch & Serial Tracking
Track products by expiry date (FEFO batches) or by individual unit (serial numbers).
Purchasing
Raise purchase orders, receive goods from suppliers, and auto-post to Accounts Payable.
Physical Stock Count
Freeze a snapshot, dispatch teams to count, approve variances, and post adjustments to GL — all within one structured workflow.
Reports & Analytics
Seven dedicated reports: overview, stock ledger, valuation, performance, batch, expiry, serial, variance, and shrinkage.
GL Integration
Every stock movement creates a journal entry automatically — no manual accounting needed after initial setup.
Tracking Modes — Choose the Right One for Each Product
| Mode | Best For | How it Works | Examples |
|---|---|---|---|
| Standard | Generic commodities | Tracks total quantity only. Fast and simple — no extra fields required. | Flour, sugar, fabric, stationery |
| Batch Tracking | Perishable or expiry-dated goods | Each stock intake is assigned a batch number and expiry date. The system uses FEFO (First Expiry, First Out) to sell the soonest-expiring batch first. | Medicines, food products, chemicals, cosmetics |
| Serial Tracking | High-value, individually identifiable items | Each unit has a unique serial number recorded from purchase through to sale. A serial cannot be sold twice. | Mobile phones, laptops, televisions, generators |
Inventory Dashboard
Go to Inventory → Dashboard for a live overview of your stock position. The dashboard shows:
- Top-moving products — the products that moved the most units this month
- Recent stock movements — a live feed of the last purchases, sales, and adjustments
- Low stock alerts — click any item to go directly to its product page or create a purchase order
- Inventory log — go to Inventory → Inventory Log for a full, filterable record of every stock movement across all products
Products
Your product catalogue — the master list of everything your business buys and sells.
Viewing and Searching Products
Go to Inventory → Products. The product list shows all products with their current stock quantity, selling price, and status. Use the search box to find by name or SKU. Use the category filter to narrow by product type. Use the tracking type filter to show only batch or serial products.
Product Fields
| Field | Description | Notes |
|---|---|---|
| Product Name | Display name shown on receipts, reports, and POS terminal | Keep names consistent — avoid duplicates |
| SKU | Your internal stock keeping unit code | Must be unique per branch |
| Barcode | EAN-13 or other barcode for scanner use | Leave blank if no barcode label exists |
| Category | Groups products for reports and filtering | Set up categories before adding products |
| Buying Price | Cost price paid to your supplier | Used for COGS and inventory valuation |
| Selling Price | Price charged to customers at POS | Can be overridden per sale if permitted |
| Stock Quantity | Current units on hand (system-maintained) | Never edit directly — use adjustments |
| Minimum Stock | Quantity below which a low-stock alert fires | Set based on your reorder lead time |
| Unit | Unit of measure (Kg, Pcs, Ltrs, Carton, Box…) | Used on receipts and purchase orders |
| Tracking Type | None / Batch / Serial | Cannot be changed after stock exists |
| Active | Inactive products cannot be sold on POS | Deactivate instead of deleting |
Adding a New Product
- Go to Inventory → Products → Add ProductThe product creation form opens.
- Fill in name, SKU, category, and pricingAt minimum, a name and selling price are required. Add a barcode if you use a scanner at the POS.
- Choose the Tracking TypeSelect None (standard), Batch, or Serial. This choice is permanent once stock exists for the product.
- Set the Minimum Stock thresholdThis is the quantity below which the system warns you to reorder. Set it based on how long a restock takes — typically 1–2 weeks of usage.
- Save the productThe product is now active and appears in the POS terminal and purchase orders.
Editing a Product
Click any product row to open the product detail page. Click Edit to modify name, pricing, minimum stock, or category. You cannot change the tracking type if stock movements exist.
Product Categories
Go to Inventory → Categories to create and manage product categories. Categories appear in product filters, the inventory overview report, and the POS terminal product browser. Keep categories broad (Electronics, Food, Medicine) rather than too specific.
Best Practices
- Use a consistent SKU format (e.g.,
MED-001,ELEC-022) so searching is predictable - Enter barcodes for all products you sell frequently — it makes POS checkout much faster
- Set minimum stock levels before you go live — low stock alerts are only useful if the threshold is realistic
- Deactivate products you no longer carry instead of deleting them — deletion removes the history
Batch Tracking
Track products by batch and expiry date — the system enforces FEFO selling to prevent expired stock from reaching customers.
What is a Batch?
A batch (also called a lot) is a group of units of the same product that were produced or received together and share the same expiry date. Every time you receive batch-tracked stock, you record the batch number and expiry date. The system tracks each batch separately and knows exactly how many units remain in each batch.
FEFO — First Expiry, First Out
When a batch-tracked product is sold at the POS terminal, the system automatically selects the batch with the earliest expiry date. This prevents older stock from sitting unused while newer stock is sold. The cashier sees a recommendation on screen and should follow it unless there is a specific reason not to.
Managing Batches
Go to Inventory → Batches to see all batches across all products. The batch list shows each batch with its product name, batch number, expiry date, quantity remaining, cost price, and status (Active / Expired / Exhausted).
Adding a Batch Manually
- Go to Inventory → Batches → Add BatchOr receive stock via a Purchase Order — batches are created automatically during goods receipt.
- Select the productThe product must have Tracking Type = Batch.
- Enter the batch numberUse the manufacturer's lot number (e.g.,
LOT-2025-001). Must be unique per product. - Enter the expiry date and quantity receivedThe stock quantity for this product increases by the quantity you enter here.
- Enter the cost price per unitThis is used for inventory valuation and COGS calculation when the batch is sold.
- SaveThe batch is now active and available for sale on the POS terminal.
Batch Status
- Active — batch has remaining quantity and is not yet expired
- Expiring Soon — within your configured warning window (default 30 days)
- Expired — past the expiry date; the system will not allow normal sale of expired stock
- Exhausted — all units have been sold or written off; quantity is zero
Expiry Report
Go to Inventory → Reports → Expiry Report to see all batches expiring within a chosen window (7 / 30 / 60 / 90 days). Review this report weekly. For each expiring batch, decide:
- Discount it to sell quickly before expiry
- Return it to the supplier (raise a return purchase order)
- Write it off using a Stock Adjustment with reason "Expired"
Serial Number Tracking
Track individual units from purchase to sale — no unit can be sold twice, and every unit's history is permanently recorded.
How Serial Tracking Works
When a serial-tracked product is received (via Purchase Order or manual batch entry), each individual unit is registered with its unique serial number. From that point, the system tracks that specific unit through every stage: In Stock → Sold → Returned → Damaged. You can look up any serial number at any time to see its complete history.
Serial Number Status
Selling a Serial-Tracked Product at POS
When a cashier scans or searches for a serial-tracked product at the POS terminal, a panel appears asking them to scan or type the specific serial number of the unit being sold. The system looks up that serial number, confirms it is Available, and adds it to the cart. After checkout, the serial status changes to Sold — it cannot be sold again.
Managing Serial Numbers
Go to Inventory → Serial Numbers to see all registered serials across all products. Filter by product, status, or date range. You can search for any specific serial number to find its full history: when received, from which purchase order, when sold, and which receipt it appears on.
Adding Serials Manually
If you receive serial-tracked stock without a purchase order, go to Inventory → Batches → Add Batch with the serial product selected. On the batch form, you will see a serial number input field — enter each serial number on its own line. Each line creates one Available unit.
Serial Report
Go to Inventory → Reports → Serial Report to export a complete list of all serial numbers with their current status, purchase date, and sale reference (if sold). Useful for insurance claims, warranty management, and government compliance audits.
Stock Adjustments
Manually correct stock quantities for damage, loss, theft, or data entry errors — with a full GL entry for every correction.
When to Use Adjustments
Stock adjustments are used when the system's quantity does not match what you physically have, and the cause is not a sale, purchase, or transfer. Common reasons include:
- Damaged goods that cannot be sold
- Theft or unexplained shrinkage
- Product expiry write-off
- Data entry correction after initial setup
- Found stock (quantity is higher than expected)
How to Create an Adjustment
- Go to Inventory → Adjustments → CreateSelect the product and, for batch/serial products, the specific batch or serial number being adjusted.
- Enter the new quantityThe adjustment is calculated as: New Quantity − Current Quantity = Adjustment. Enter what you actually counted, not the difference.
- Choose a reasonSelect from the reason list: Damaged, Expired, Theft, Recount, Found Stock, Opening Balance, Other. You can add a free-text note.
- SubmitThe system updates the stock quantity and posts the journal entry automatically.
Scenario: 50 units of paracetamol (book value TZS 15,000 total) are found expired during the weekly check. The pharmacist adjusts them out with reason "Expired".
| Account | Debit | Credit |
|---|---|---|
| Inventory Shrinkage / Loss Expense | TZS 15,000 | |
| Inventory Asset | TZS 15,000 |
Inventory Log
Go to Inventory → Inventory Log to see every stock movement ever recorded — purchases in, sales out, adjustments, transfers — with the date, reference, quantity change, and the user who made the change. The log can be filtered by product, movement type, date range, and exported to CSV.
Stock Transfer Between Branches
To move stock from one branch to another:
- Go to Inventory → Products, open the product
- Click Transfer Stock
- Select the destination branch and enter the quantity to transfer
- The system creates a Transfer Out on your branch and a Transfer In on the destination branch simultaneously
inventory-adjust permission. The receiving branch must belong to the same tenant.Adjustment Permission Requirements
inventory-adjust— create adjustments and inter-branch transfers- All adjustments are logged in the Audit Log with before/after quantities and the user who submitted
- Large adjustments (over a configurable threshold) may be flagged for manager review
Purchasing
Raise purchase orders, receive goods, and manage your supplier directory — all linked to accounts payable and inventory.
Purchase Order Workflow
A PO can also be Cancelled instead of following the workflow above — but only while it's still Draft or Submitted. Once any goods have been received against it, it can no longer be cancelled.
Creating a Purchase Order
- Go to Inventory → Purchase Orders → CreateRequires the
purchasing-createpermission. Select the supplier, order date, and expected delivery date (must be on or after the order date). - Add line itemsFor each product, enter the quantity ordered and the unit price. If the product has a purchasing unit of measure configured (for example, buying in "bags" of 25 kg), the price auto-suggests based on the product's buying price × the bag size.
- Save as Draft, or SubmitA draft can still be edited freely. Submitting (requires
purchasing-submit) locks the line items — only header details like the expected date or notes remain editable. - Receive goods when deliveredClick Receive Goods on the submitted PO (requires
purchasing-receive). Enter the actual quantities received for each line — they can differ from what was ordered, but never exceed the outstanding quantity. - Enter batch/serial details and choose a payment methodFor batch-tracked products, enter the batch number and a future expiry date. For serial-tracked products, enter one unique serial per unit received. Choose whether this delivery is being paid Cash or bought On Credit.
- Confirm receiptStock increases immediately and the purchase posts to the ledger. The PO status becomes Partially Received or Received depending on whether every line was fully delivered.
Scenario: Mwananchi Pharmacy orders 500 units of Panadol at TZS 800 each (total TZS 400,000) from Kilimanjaro Pharma Distributors on credit, 30-day payment terms, and receives the full quantity.
| Account | Debit | Credit |
|---|---|---|
| Inventory Asset (Medicines) | TZS 400,000 | |
| Accounts Payable | TZS 400,000 |
If Mwananchi Pharmacy had instead paid cash on delivery, the credit side would be Cash instead of Accounts Payable. When the pharmacy later pays its 30-day credit purchase: Debit Accounts Payable TZS 400,000 / Credit Bank TZS 400,000.
Partial Deliveries
If a supplier delivers only part of the order (e.g., 300 of the 500 ordered), receive what arrived. The PO moves to Partially Received status and remains open, showing the outstanding quantity. When the remaining 200 arrive, receive them against the same PO — the quantity received can never exceed what's still outstanding, and the PO automatically moves to Received once every line is fully delivered.
Suppliers
Go to Inventory → Suppliers to manage your supplier directory (requires supplier-view to see it, supplier-create to add or edit). Each supplier record stores:
- Company name, contact person, phone, and email
- Physical address and tax registration (TIN) number
- Payment terms in days (defaults to 30)
- Notes and an Active/Inactive status
- Complete purchase history — every PO raised against this supplier
Tips
- ✔ Always create a PO before goods arrive — do not receive stock without a PO reference.
- ✔ Check the supplier's delivery note quantity against what you physically count before confirming receipt in the system.
- ✔ Set up all suppliers in the directory before creating your first PO — it keeps accounts payable accurate from day one.
- ✔ Only tick "Update product cost" when the new delivery's price genuinely reflects current market cost — not for a one-off discounted or promotional purchase.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Can't edit a purchase order's line items | The PO has already been submitted — only Draft POs allow item edits | Cancel and recreate it if it hasn't been received yet, or receive it and adjust stock separately afterward. |
| Can't cancel a purchase order | Some or all goods have already been received against it | A PO with any receiving history cannot be cancelled — this protects your inventory and accounts payable records. |
| "Duplicate serial number" error at receiving | A serial number was already used on an earlier delivery, or entered twice in the same batch | Check the physical unit's serial number again — every serial must be unique across your entire inventory. |
Related Topics: Products Batch Tracking Serial Numbers Chart of Accounts
Inventory Reports
Seven dedicated reports giving you complete visibility into stock levels, movements, valuation, and performance.
Go to Inventory → Reports to access all inventory reports. Every report supports date range filtering, search, and export (CSV or PDF where applicable). The reports available are:
1 — Inventory Overview
Menu: Inventory → Reports → Overview | Purpose: Management-level snapshot of stock health with ApexCharts visualizations.
- Total stock value at cost price, broken down by category
- Bar chart: stock value per category
- Low stock count — how many products are below their minimum threshold
- Top 10 products by value held
Use this report in your weekly management meeting to answer: "What is our inventory worth today, and where is it concentrated?"
2 — Stock Ledger
Menu: Inventory → Reports → Stock Ledger | Purpose: Full movement history for any product with a running balance.
| Column | Meaning |
|---|---|
| Date & Time | When the movement was recorded |
| Movement Type | Purchase In, Sale Out, Adjustment, Transfer In/Out, Stock Count |
| Reference | The PO number, sale receipt, or adjustment ID that caused the movement |
| Qty In / Qty Out | Units added to or removed from stock |
| Running Balance | Stock on hand after this movement |
| Unit Cost | Cost price of the unit at time of movement |
Select a product and date range, then click Filter. Export to CSV for spreadsheet analysis.
3 — Valuation Report
Menu: Inventory → Reports → Valuation | Purpose: Total inventory value at cost price across all products.
This report is what an auditor will ask for to verify the Inventory Asset balance on your balance sheet. It shows every product's quantity on hand multiplied by its cost price, with a grand total. Export to PDF for your annual audit package.
4 — Performance Report
Menu: Inventory → Reports → Performance | Purpose: Which products are selling, which are sitting still.
The performance report ranks products by units sold and revenue generated over a selected period. Use it to decide:
- Which products to restock urgently (high sales velocity)
- Which products to discount or discontinue (no movement in 90 days)
- Which categories are driving the most revenue
5 — Batch Report
Menu: Inventory → Reports → Batch Report | Purpose: All batches with their remaining quantities and expiry status.
Filter by product or expiry status (Active / Expiring / Expired / Exhausted). Use this alongside the Expiry Report to plan your batch management actions.
6 — Expiry Report
Menu: Inventory → Reports → Expiry Report | Purpose: Batches expiring within your chosen window — designed to be actioned, not just read.
Select your warning window: 7, 30, 60, or 90 days. The report lists every batch expiring within that window with the product name, batch number, expiry date, quantity remaining, and estimated value at risk. Export to CSV to share with your procurement team.
7 — Serial Report
Menu: Inventory → Reports → Serial Report | Purpose: Complete registry of all serial numbers with their current status and history.
Filter by product, status, or date received. Search for any specific serial number to instantly see when it was received, which purchase order it came from, and which sale it was included in. Export to CSV for insurance or warranty documentation.
Stock Count (Physical Stocktaking)
A structured, multi-step workflow for physically counting your inventory, comparing it to the system's book quantities, and posting any variances to the general ledger.
Why Stock Count Exists
Even the best inventory system accumulates small discrepancies over time — a sale entered with the wrong quantity, goods received but not recorded, theft, or damage. A physical stock count lets your team count what is actually on the shelves, compare it to what the system expects, identify every discrepancy, and correct it — with a full management approval chain before anything touches the ledger.
Unlike a simple manual adjustment, Stock Count is a structured process: it freezes the book quantities at a point in time, allows multiple team members to count simultaneously, routes findings through a manager for approval, and finally posts a single consolidated journal entry for all variances.
Count Types
| Type | When to Use | Scope |
|---|---|---|
| Periodic Count | Full stocktake — usually monthly, quarterly, or annually | Every product in the branch. Takes longer but gives the most complete picture. |
| Cycle Count | Rotating spot checks on a subset of products throughout the year | A selected category or zone counted regularly without shutting down operations. |
| Spot Check | Quick verification of one or a few products after suspecting a discrepancy | Targeted — fast to complete, useful for investigating a specific concern. |
The Complete Stocktaking Workflow
Session Statuses
| Status | Meaning | Who Triggers It |
|---|---|---|
| Draft | Session created but snapshot not yet frozen. No counting can begin. | Created automatically when a new session is saved. |
| Counting | Snapshot frozen. Counting is active — staff can enter physical quantities. | Manager clicks Freeze & Start Counting. |
| Awaiting Approval | All counting complete. Submitted to manager for review. | Manager clicks Submit for Approval. |
| Approved | Manager has reviewed and approved the count. Ready to post. | Approver clicks Approve on the Approval page. |
| Posted | Variance journal entries posted to GL. Inventory quantities updated. Terminal state. | Authorized user clicks Post to Ledger. |
| Cancelled | Session abandoned. No changes to inventory or GL. Terminal state. | Any user with permission clicks Cancel Session. |
Step 1 — Create a Session
- Go to Inventory → Stock Count → New SessionThe session creation form appears.
- Enter a titleUse a descriptive title: "June 2026 Full Stocktake" or "Medicines Cycle Count — Week 23". This appears in all reports and exports.
- Choose the Count TypePeriodic, Cycle Count, or Spot Check. This is for your own classification — it does not restrict which products are counted.
- Add optional notesUseful for recording any special instructions, the team assigned, or the time counting is expected to start.
- Click SaveThe session is created in Draft status. A unique session number (e.g.,
SC-2026-001) is assigned automatically.
Step 2 — Freeze the Inventory Snapshot
On the session detail page, click Freeze & Start Counting. This is the most important action in the process — understand what it does before clicking:
- The system captures the current book quantity of every product in your branch at this exact moment. This becomes the expected quantity for counting.
- After freezing, sales, purchases, and other movements can continue normally — they will NOT change the snapshot. The snapshot is a fixed reference point.
- The session moves to Counting status and item cards are generated for every active product.
- This action cannot be undone — if you need to abandon the session, Cancel it instead.
Step 3 — Enter Physical Counts
Once frozen, click Enter Counts on the session detail page. This opens the Physical Count Entry interface, covered in detail in the next section.
During counting, the session detail page shows live progress: how many items have been counted, how many remain pending, and a running summary of variances found so far.
Step 4 — Submit for Approval
When all items have been counted, return to the session detail page and click Submit for Approval. Before submitting, the system checks whether any items are still in Pending status — if so, it warns you and shows the count. You may submit even with pending items (they will be counted as "not counted"), or go back and count them first.
After submission, the session moves to Awaiting Approval status. The counting interface is locked — no more counts can be entered.
Physical Count Entry
The counting interface — designed to work with a barcode scanner or manual item selection, with live variance feedback as you count.
Interface Layout
The entry screen is split into two panels side by side:
Barcode / SKU Input — scan or type to auto-select the matching item from the list on the right.
Current Item Card — shows the selected product's details: name, SKU, batch or serial info, book quantity, and a live-updating variance display as you type the physical count.
Action buttons — Save Count, Skip (assume correct), Flag for Recount.
Paginated table of all items in this session. Filter by status: Pending, Counted, Recount, or All. Search by product name or SKU.
Each row shows: product name, batch/serial, book quantity, physical quantity entered (if counted), variance, and status badge. Click the edit icon on any row to load that item into the left panel.
The highlighted row is the currently active item. Green text = no variance. Red text = shortage. Blue text = overage.
Counting with a Barcode Scanner
- Connect your USB or Bluetooth barcode scanner to the computerThe scanner acts as a keyboard — it types the barcode and presses Enter automatically.
- Click on the barcode input box at the top of the left panelThe cursor must be in that field for scanning to work.
- Scan the product barcodeThe system finds the matching item in the session and loads it into the current item card on the left. The item is also highlighted in the list on the right.
- Enter the physical quantity you countedType the number in the Physical Count field. The variance displays instantly — positive (green) means more than expected, negative (red) means less.
- Optionally add a variance reason and notesIf there is a variance, explain it: "Damaged packaging", "Found extra in backroom", "Stolen".
- Click Save CountThe count is saved and the system automatically loads the next pending item for you. Continue scanning or typing the next SKU.
Counting Manually (Without a Scanner)
If you do not have a barcode scanner, use the item list on the right panel:
- Use the search field to find the product by name or SKU
- Click the edit icon on the item row to load it into the left panel
- Enter the physical count, add notes if needed, and click Save Count
- The system advances to the next pending item automatically
Variance Actions
| Button | What It Does | When to Use |
|---|---|---|
| Save Count | Records the physical quantity you entered. Calculates and stores the variance. Moves to next pending item automatically. | Normal counting — use for every item you physically count. |
| Skip (→) | Marks the item as counted with zero variance — assumes the physical quantity equals the book quantity without counting. | Items you are confident are correct (e.g., sealed, intact, recently received) and do not want to physically count. |
| Flag for Recount (↺) | Marks the item as Recount Requested. It stays in the pending queue. Another team member can count it fresh. | When you are unsure of your count (interrupted mid-count, item hard to access, quantity disputed). |
Batch-Tracked Products
Each batch of a batch-tracked product appears as a separate line item in the count list. You count each batch individually. The item card shows the batch number and expiry date so you know exactly which batch you are counting.
Serial-Tracked Products
Each registered serial number appears as its own line item. To count a serial item, scan or enter its serial number in the barcode input — it will match the correct line. The physical quantity for each serial is always 0 (not found / not counted) or 1 (confirmed present).
Bulk Import via CSV
If you have a large number of items, your team can count on paper and then import the results via CSV. This is useful for warehouse stocktakes where internet connectivity may be limited.
- Download the count templateOn the session detail page, click Export → Count Template (CSV). This downloads a CSV pre-filled with every item's SKU, batch number, and serial number — ready for your counters to fill in the physical quantities.
- Fill in the CSVOpen the file in Excel or Google Sheets. Add the physical quantity in the
physical_qtycolumn for each row. Add notes or a reason in the optional columns. - Import the completed CSVOn the session detail page, use the Import CSV panel to upload your completed file. The system processes each row and applies the counts.
- Review the import resultsA summary shows how many rows were imported, how many were skipped (product not found, wrong SKU), and any errors. Review the skipped rows and correct them manually if needed.
Progress Bar and Stats
The top of the entry page shows a live progress bar and three stat tiles: Total items, Counted, and Items with variance. The progress bar fills as items are counted. When it reaches 100%, all items have been counted and you are ready to submit for approval.
Approval & GL Posting
Manager review of variances, recount requests, and final posting of variance journal entries to the general ledger.
Step 5 — Manager Review
After submission, a staff member with the inventory-stockcount-approve permission goes to the session and clicks Review & Approve. The approval screen shows:
- A summary of all items: how many have variances, total gain value, total loss value, and net variance
- The full item table with columns: Product, Batch/Serial, Book Qty, Physical Qty, Variance, Variance %, Variance Value (TZS), Status
- For items with variance, a Request Recount button allows the approver to send specific items back for a fresh count
Requesting a Recount During Approval
If a variance looks suspicious — unusually large, for a high-value item, or without a clear reason — the manager can click Request Recount on that specific item. The item is flagged as Recount Requested. The session goes back to Counting status for those specific items only. Counters can then re-enter the physical quantity. Once all recounted, resubmit for approval.
Step 6 — Approve
Once satisfied with all counts and variances, the approver clicks Approve. The session moves to Approved status. The count is now final — no more changes to individual item counts are possible.
Step 7 — Post to General Ledger
A user with the inventory-stockcount-post permission (typically the accountant or branch manager) clicks Post to Ledger on the approved session. This action:
- Calculates the net variance for every item that has a non-zero variance
- Creates a single consolidated journal entry covering all variances
- Updates the actual inventory quantities in the system to match the physical count
- Moves the session to Posted status — permanently locked
Scenario: After a periodic stocktake at Kilimanjaro Hardware, the count finds:
- Surplus of 5 units of PVC Pipe @ TZS 8,000/unit = TZS 40,000 gain
- Shortage of 2 units of Power Drill @ TZS 95,000/unit = TZS 190,000 loss
Single consolidated journal entry posted:
| Account | Debit | Credit | Notes |
|---|---|---|---|
| Inventory Asset | TZS 40,000 | Surplus PVC Pipe gain | |
| Stock Variance Gain | TZS 40,000 | ||
| Stock Shrinkage Expense | TZS 190,000 | Missing Power Drills | |
| Inventory Asset | TZS 190,000 |
Net impact: Inventory Asset decreases by TZS 150,000 (net loss). Both sides balance.
Export Options on the Session Detail Page
At any point after freezing, the session detail page offers exports via the Export dropdown in the Count Items table header:
| Export | Contents | When Useful |
|---|---|---|
| Excel (CSV) | Every item: SKU, batch/serial, book qty, physical qty, variance, variance %, cost, variance value, reason, status | Detailed analysis in Excel; sharing with management |
| Variance PDF | Formatted report with company letterhead, summary totals, and item-by-item variance table | Formal audit documentation, filing with accountant |
| Count Template (CSV) | Item list with empty physical_qty column — ready for counters to fill | Before counting, to dispatch teams with paper or offline counting |
| Browser print of the current item table view | Quick hard copy for on-shelf reference during counting |
Stock Count Permissions
The stocktaking module has the most granular permission set in the system — seven separate permissions, allowing each step to be restricted to the right person.
| Permission | View Sessions | Create Session | Enter Counts | Bulk Import | Approve | Post to GL | View Reports |
|---|---|---|---|---|---|---|---|
inventory-stockcount-view | ✓ | — | — | — | — | — | — |
inventory-stockcount-create | ✓ | ✓ | — | — | — | — | — |
inventory-stockcount-count | ✓ | — | ✓ | — | — | — | — |
inventory-stockcount-manage | ✓ | ✓ | ✓ | ✓ | — | — | — |
inventory-stockcount-approve | ✓ | — | — | — | ✓ | — | — |
inventory-stockcount-post | ✓ | — | — | — | ✓ | ✓ | — |
inventory-stockcount-report | ✓ | — | — | — | — | — | ✓ |
inventory-stockcount-post permission should be restricted to the branch accountant or branch manager — it is the only permission that can directly change GL account balances through the stocktaking path.Best Practices for Stocktaking
- Close the branch during a full periodic stocktake — sales happening while counting introduces variances that are hard to reconcile. If you cannot close, freeze the snapshot at the start of the day before opening.
- Use two-person counts — one person counts, one records. They swap and recount anything that differs. This reduces human error significantly.
- Count high-value items last and recount them — discrepancies in high-value products have the biggest financial impact. Always recount them at least once.
- Investigate every variance before approving — a shortage without an explanation should not be approved. Ask the warehouse team before the approver clicks Approve.
- Run stocktakes regularly — quarterly cycle counts catch problems far earlier than an annual full count. Small discrepancies are easier to trace when found soon after they occur.
- Archive PDF exports — after posting, export the Variance PDF and store it with your audit files. It is the formal record of what was counted, by whom, and what was approved.
inventory-stockcount-count permission can be on the entry screen simultaneously. Each saves their own counts independently. This is the recommended approach for large stocktakes — divide the product list between team members and count in parallel.Stock Variance Report
Aggregated variance analysis across multiple posted and approved stock count sessions, with gain/loss summaries and CSV/PDF export.
What It Shows
Go to Inventory → Reports → Stock Variance. This report aggregates data from all stock count sessions that have been approved or posted within a selected date range. It is designed to answer: "Across all our stocktakes this quarter, how much did we gain or lose, and which sessions had the biggest discrepancies?"
Table Columns
| Column | Meaning |
|---|---|
| Session # | The unique session identifier (e.g., SC-2026-001) |
| Title | The descriptive title you gave the session when creating it |
| Type | Periodic, Cycle Count, or Spot Check |
| Status | Approved or Posted |
| Total Items | Number of product lines counted in this session |
| Variance Items | Number of lines where physical quantity differed from book quantity |
| Gain (TZS) | Total value of surpluses found (physical > book) |
| Loss (TZS) | Total value of shortages found (physical < book) |
| Net (TZS) | Gain minus Loss. Negative means net loss to inventory. |
Filtering
- Date range — filter by session creation date (defaults to last 90 days)
- Count type — show only Periodic, Cycle, or Spot Check sessions
- Search — find a specific session by title or session number
Export
- CSV — all sessions with full column data, ready for spreadsheet analysis or management reporting
- PDF — formatted report with company letterhead, summary stats band (sessions count, total gain, total loss, net variance), and a full item table. Suitable for board meeting packs or audit files.
- Print — browser print of the current filtered view
Shrinkage Report
Monthly trend analysis of inventory loss from posted stock count sessions — with a bar chart for visual management review.
What Shrinkage Is
Shrinkage is the loss of inventory value due to theft, damage, spoilage, administrative errors, or unexplained missing stock. The Shrinkage Report measures the cumulative value of all negative variances (shortages) from posted stock count sessions, grouped by month.
Unlike the Variance Report (which shows both gains and losses per session), the Shrinkage Report focuses entirely on losses — it is the right report to take to a management meeting when asking: "How much did we lose last quarter, and is the trend getting better or worse?"
Accessing the Report
Go to Inventory → Reports → Shrinkage Report. Set the date range (defaults to the last 6 months) and click Filter.
What You See
- Three summary cards — Total Shrinkage (TZS), Months with Data, and Average Monthly Shrinkage (TZS)
- Monthly trend bar chart — each bar is one month's total shrinkage value. A growing bar height month-over-month is a warning sign.
- Monthly breakdown table — Month, Items Affected (count of shortage lines), Shrinkage Value (TZS), and a running total at the bottom
Interpreting the Chart
| What You See | What it Might Mean | Action |
|---|---|---|
| Consistent monthly shrinkage of similar amounts | Expected operational loss — breakage, minor expiry, measurement rounding | Set a shrinkage budget; flag months that exceed it |
| One very large spike in a single month | Possible counting error or one significant loss event | Review that month's session variance report; investigate high-value items |
| Steadily rising month-over-month | Systemic problem — increasing theft, poor stock handling, supplier short-delivery | Escalate to management; increase count frequency; review access controls |
| Zero shrinkage in a month | No stock count was posted in that month (no data), or zero shortages | Check whether a stocktake was scheduled for that month |
Export Options
- Excel (CSV) — downloads the monthly table with totals for spreadsheet analysis
- Print — browser print of the current filtered view including the chart
Shrinkage as a KPI
A common benchmark is to measure shrinkage as a percentage of total inventory value or total sales. For example, if your monthly sales are TZS 10,000,000 and your shrinkage is TZS 150,000, your shrinkage rate is 1.5%. Retail industry averages typically range from 0.5% to 2.0%. Track this monthly and set an internal target.
Chart of Accounts
The financial backbone of your business — a structured list of all accounts used in your general ledger.
Overview
The Chart of Accounts (COA) is the master list of every financial account your business uses. All transactions in Goju Cloud post to these accounts automatically. The COA is organized in a hierarchy: parent accounts contain child accounts, and only leaf (posting) accounts receive actual transactions.
Account Types
| Type | Normal Balance | Examples |
|---|---|---|
| Asset | Debit | Cash, Bank, Accounts Receivable, Inventory, Loans Given |
| Liability | Credit | Customer Savings, Accounts Payable, VAT Payable, Loan Received |
| Equity | Credit | Share Capital, Retained Earnings, Profit Reserve |
| Revenue | Credit | Sales Revenue, Interest Income, Commission Income |
| Expense | Debit | Salaries, Rent, Cost of Goods Sold, Utilities |
Viewing the Chart of Accounts
Go to Finance → Ledger → Chart of Accounts to see a tree view of all accounts with their current balances. You can also export the COA to PDF for auditors.
Account Statements
Click any account in the COA to view its complete transaction history — every debit and credit entry with dates, references, and running balances.
Blocking an Account
Accounts can be blocked to prevent new transactions from posting. This is useful for discontinued product accounts or accounts under investigation. Go to Finance → Ledger → User Accounts, select the account, and click Block.
Journal Entries
Create manual double-entry bookkeeping entries for adjustments and corrections.
Overview
Journal entries allow accountants to make direct postings to the general ledger — for items like depreciation, accruals, or corrections that cannot be processed through another module.
Creating a Journal Entry
- Go to Finance → Ledger → Journal Entries → CreateThe journal entry form has a header section (date, reference, narration) and a lines section.
- Add debit and credit linesAdd at least one debit line and one credit line. The total debits must exactly equal total credits — the system enforces this.
- Post the entryOnce saved, the entry posts immediately to the affected accounts. You cannot edit a posted journal — only reverse it.
Scenario: Serengeti Wholesale Shop accrues rent of TZS 350,000 for the month but hasn't paid yet.
| Account | Debit | Credit |
|---|---|---|
| Rent Expense | TZS 350,000 | |
| Accrued Liabilities | TZS 350,000 |
What is Migration Mode?
When you move an existing business into Goju Cloud, every customer's loan and savings balance from the old system must be brought in as an opening balance. Migration Mode temporarily unlocks individual customer accounts in the journal entry form so you can post those balances. It is not accessible from any menu — you activate it by typing a special URL directly in the browser address bar.
?migration=1 flag is silently ignored for all other users — their account selector stays in normal mode.
Step 1 — Open Migration Mode in the browser:
In the browser address bar, type your site URL followed by /accounting/journals/create?migration=1 and press Enter.
A yellow Migration Mode Active banner appears at the top of the form, confirming the mode is on. The account selector now shows every individual customer account — each listed as:
Firstname Lastname (Account Number) — Customer Loan or Customer Savings
Step 2 — Post customer loan balance (asset — money owed TO the business):
A loan is an asset. DR the customer's GCL account to bring the receivable onto the books; CR OPEN_BAL as the balancing equity entry.
| Account | Debit | Credit |
|---|---|---|
| Amina Hassan (ACC-00123) — Customer Loan (GCL) | TZS 2,500,000 | |
| Opening Balance Equity (OPEN_BAL) | TZS 2,500,000 |
Step 3 — Post customer savings balance (liability — money owed BY the business):
Savings are a liability — the business holds the customer's money. CR the customer's GCS account to record what is owed; DR OPEN_BAL as the balancing equity entry.
| Account | Debit | Credit |
|---|---|---|
| Opening Balance Equity (OPEN_BAL) | TZS 800,000 | |
| Amina Hassan (ACC-00123) — Customer Savings (GCS) | TZS 800,000 |
Repeat Step 2 and Step 3 for every customer — one journal per customer per account type. Use the same date (your migration cut-off date) for all entries so the opening balance sheet is consistent.
Step 4 — Close Migration Mode:
When all customers have been posted, simply close that browser tab or navigate away. There is no disable button — the mode only activates when the URL contains ?migration=1. Regular journal entry links never include that parameter.
/accounting/journals/create) customer accounts disappear from the selector again.
Reserve accounts — like TITHE_PAYABLE (tithe owed to church), WHT_PAYABLE (withholding tax owed to TRA), and OPEN_BAL (owner equity) — are liabilities or equity. When money physically leaves the business to settle them, the rule is always:
- Debit the reserve account — reduces what the business owes
- Credit the payment account — cash or bank leaves the business
Scenario A — Tithe payment: Pay TZS 500,000 tithe in cash to the church.
| Account | Debit | Credit |
|---|---|---|
| Tithe Payable (TITHE_PAYABLE) | TZS 500,000 | |
| Cash in Hand (CASH) | TZS 500,000 |
Scenario B — WHT remittance to TRA: Transfer TZS 120,000 withholding tax via NMB bank.
| Account | Debit | Credit |
|---|---|---|
| WHT Payable (WHT_PAYABLE) | TZS 120,000 | |
| NMB POS (NMB_POS) | TZS 120,000 |
Scenario C — Owner withdrawal: Owner withdraws TZS 1,000,000 cash from the business.
| Account | Debit | Credit |
|---|---|---|
| Opening Balance Equity (OPEN_BAL) | TZS 1,000,000 | |
| Cash in Hand (CASH) | TZS 1,000,000 |
CASH for physical cash, NMB_POS or CRDB_POS for bank transfers, MPESA_TILL_WORK for M-Pesa. The Transaction Date must fall on a date that has not yet been reconciled and locked — use today's date if today is still open.
Internal reserves (RESERVES_GRP) are equity accounts the business uses to set aside money for a planned future cost — rent, payroll, renovation, investment, or emergency. Unlike liability payables (which you owe to an outside party), a reserve is money you owe to yourself. It has a two-step lifecycle:
- Funding the reserve — move equity into the reserve so the money is earmarked.
- Using the reserve — when the planned cost actually arrives, draw from the reserve to pay it.
Scenario — Future Salaries Reserve (RES_PAYROLL):
The business puts aside TZS 800,000 from retained earnings to cover next month's salaries. The following month, TZS 750,000 of that is paid out in cash to staff.
Step 1 — Fund the reserve (set money aside):
| Account | Debit | Credit |
|---|---|---|
| Opening Balance Equity / Retained Earnings (OPEN_BAL) | TZS 800,000 | |
| Future Salaries Reserve (RES_PAYROLL) | TZS 800,000 |
The reserve account now has a credit balance of 800,000 — meaning 800,000 of equity is earmarked for payroll.
Step 2 — Use the reserve to pay salaries:
| Account | Debit | Credit |
|---|---|---|
| Future Salaries Reserve (RES_PAYROLL) | TZS 750,000 | |
| Cash in Hand (CASH) | TZS 750,000 |
After this, RES_PAYROLL still holds 50,000 credit (the unused portion). Cash decreases by the actual salary paid.
The same pattern applies to all internal reserves:
| Reserve Code | Purpose | Fund (CR) | Use (DR) |
|---|---|---|---|
RES_RENT | Set aside for future rent | RES_RENT | RES_RENT |
RES_PAYROLL | Set aside for future salaries | RES_PAYROLL | RES_PAYROLL |
RES_RENOVATION | Set aside for office renovation | RES_RENOVATION | RES_RENOVATION |
RES_INVESTMENT | Investment savings pool | RES_INVESTMENT | RES_INVESTMENT |
RES_EMERGENCY | Emergency fund | RES_EMERGENCY | RES_EMERGENCY |
How TITHE_PAYABLE grows automatically: Every month-end closing posts this journal automatically based on the configured allocation rules:
| Account | Debit | Credit |
|---|---|---|
| Retained Earnings (RETAINED_EARN) | Full net profit | |
| Tithe Payable (TITHE_PAYABLE) | Tithe share (e.g. 10%) | |
| Owner / Partner accounts | Their shares |
The closing engine always debits Retained Earnings and credits TITHE_PAYABLE. When you need to do this manually — for a mid-month top-up, a correction, or a one-time tithe — you mirror that same logic.
Rule: always Credit TITHE_PAYABLE. Debit wherever the tithe is coming from.
Case 1 — Mid-month top-up or correction on profit (mirrors the closing module exactly):
| Account | Debit | Credit |
|---|---|---|
| Retained Earnings (RETAINED_EARN) | TZS 300,000 | |
| Tithe Payable (TITHE_PAYABLE) | TZS 300,000 |
Description: Manual tithe allocation — July 2026
Use this when you underfunded tithe in the last closing, or want to set aside tithe on profit before month-end.
Case 2 — Tithe on a specific one-time income (e.g. a grant, bonus commission, or special sale received mid-month):
| Account | Debit | Credit |
|---|---|---|
| Other Income (OTHER_INC) | TZS 150,000 | |
| Tithe Payable (TITHE_PAYABLE) | TZS 150,000 |
This reduces the income account and earmarks the tithe in one step — the income is recorded net of the tithe obligation.
Case 3 — Owner's personal commitment (not from business profit):
| Account | Debit | Credit |
|---|---|---|
| Opening Balance Equity (OPEN_BAL) | TZS 200,000 | |
| Tithe Payable (TITHE_PAYABLE) | TZS 200,000 |
The owner commits extra tithe directly from equity — not tied to any specific profit calculation.
Which account to Debit — quick guide:
| What you are tithing on | Debit this account | Credit |
|---|---|---|
| Monthly profit (mirrors closing) | RETAINED_EARN | TITHE_PAYABLE |
| Correction after a closing run | RETAINED_EARN | TITHE_PAYABLE |
| A specific income stream | That income account | TITHE_PAYABLE |
| Owner's personal commitment | OPEN_BAL | TITHE_PAYABLE |
Quick Reference — Reserve Account Withdrawals
| Reserve Account | What it represents | Debit (Dr) | Credit (Cr) |
|---|---|---|---|
TITHE_PAYABLE | Tithe owed to church | TITHE_PAYABLE | Payment account |
WHT_PAY | Withholding tax owed to TRA | WHT_PAY | Payment account |
PAYE_PAY | PAYE tax owed to TRA | PAYE_PAY | Payment account |
SS_PAY | NSSF/PSSSF contributions | SS_PAY | Payment account |
SDL_PAY | Skills Development Levy | SDL_PAY | Payment account |
OPEN_BAL | Owner equity / opening capital | OPEN_BAL | Payment account |
RES_* | Internal reserve (fund: CR / use: DR) | RES_RENT / RES_PAYROLL … | Payment account |
Reversing a Journal Entry
Go to Finance → Ledger → Journal Entries, find the entry, and click Reverse. The system creates an equal and opposite entry, effectively cancelling the original.
accounting-reverse permission can reverse journal entries. All reversals are permanently logged.Expense Management
Manage business expenses with a multi-step approval workflow and automatic GL posting.
Overview
The Expense module manages all business spending — from daily operational costs (electricity, stationery) to major purchases. Every approved expense is posted automatically to the correct expense account in the general ledger.
Expense Workflow
How to Submit an Expense
- Go to Finance → Expenses → CreateFill in the expense header: description, date, category, and which account the money is paid from (Cash or Bank).
- Add expense line itemsEach line has a category, description, and amount. You can attach scanned receipts or supporting documents.
- Submit for ApprovalThe expense moves to Pending status and notifies the approver.
- Approver reviews and approves or rejectsA staff member with
expense-approvepermission reviews the voucher and attached receipts. - Post to GLOnce approved, a staff member with
expense-postpermission clicks Post. This records the journal entry.
Scenario: Rehema Joseph submits an electricity bill expense of TZS 185,000 paid by cash from Kilimanjaro Hardware's petty cash.
| Account | Debit | Credit |
|---|---|---|
| Electricity Expense | TZS 185,000 | |
| Petty Cash | TZS 185,000 |
Expense Categories
Go to Finance → Expenses → Categories to set up your expense categories (e.g., Rent, Electricity, Salaries, Transport, Office Supplies). Each category is linked to a specific GL account. Keeping categories well-organized makes your expense report and income statement much more useful.
Expense Dashboard
Go to Finance → Expenses → Dashboard for a visual summary showing:
- Expenses by category (pie chart)
- Spending trend over time (line chart)
- Pending approvals needing your attention
- Biggest expense categories this month
Expense Report
Go to Finance → Expenses → Expense Report to generate a filterable register of all expenses by date range, category, or status. Exportable to PDF.
Reversing an Expense
Posted expenses can be reversed if they were incorrect. This requires the expense-reverse permission and creates a new reversal journal entry.
Best Practices
- Always attach a photo of the original receipt before submitting
- Never approve your own expense — the system should be configured to require a different approver
- Review the expense dashboard weekly to spot budget overruns early
- Use categories consistently — "Electricity" and "Power Bill" should not both exist
Reconciliation (Balancing)
Treasury-grade daily cash and float balancing — built to help you spot loss, theft, or overage instantly, across every branch and every till.
Overview
The Reconciliation module (menu name: Balancing) is used at the end of each business day to verify that everything physically held at the branch — cash, coins, mobile money floats, POS terminal balances, the vault — matches what the general ledger says should be there. Every difference is captured, explained where possible, and routed through a manager approval chain before it ever touches your financial statements. Nothing about a shortage or overage is ever silently thrown away — it is always fully traceable back to a specific batch, account, and person.
Denomination Counter
Enter physical notes/coins by denomination — the system totals them for you automatically as you type.
Instant Exception Flagging
Any account that doesn't match is flagged live, with a severity level and a likely-source hint — no waiting until the end.
Clearing Account Health
A live dashboard tile that tells you, at a glance, whether unresolved shortages/overages are piling up in your branch.
Core Concepts — Read This First
These few terms are used throughout the module. Understanding them makes everything else make sense.
| Term | Meaning |
|---|---|
| Batch | One branch's reconciliation for one calendar day. Every day/branch combination gets its own batch, identified by a reference like RCN-20260707-B1-0001. |
| Expected Balance | What the general ledger says an account's balance should be, as of the end of that day — calculated automatically from posted transactions. You never type this in. |
| Actual Balance | What you physically counted (cash/coins) or read off the terminal (mobile money till, POS float). This is the only number you enter. |
| Variance | Actual minus Expected. Negative = shortage (less than the books say). Positive = overage (more than the books say). |
| Exception | A single account's variance that needs an explanation before the batch can be considered clean. Every exception has a category (cash, vault, bank, mobile, POS, float), a severity, and a status. |
| Clearing Account | A suspense account (CLR_CASH for physical cash/vault items, CLR_FLOAT for mobile/POS/bank items) that temporarily absorbs an unexplained variance at approval time, until it is properly resolved. |
The Reconciliation Workflow
Step 1 — Open a Batch
Go to Finance → Balancing → New Recon. Choose the recon date and confirm your active branch. The system snapshots every account in your branch's reconciliation template as it stands at that moment — this snapshot becomes the "Expected" side for every account.
Step 2 — Count & Compare
For each account in your template, enter what you actually counted. For cash and vault items, use the built-in denomination counter — enter how many of each note/coin you have, and the total calculates itself, reducing manual arithmetic errors. Accounts are grouped into payment-method chips (Cash, Vault, Bank, Mobile, POS, Float) so you can immediately see which method has a problem instead of scanning one long list. A live summary bar at the top always shows your running Expected / Actual / Difference — no need to scroll down to know where you stand.
Step 3 — Explain Exceptions
Any account with a variance becomes an exception card, colour-coded by severity, with a "likely source" hint based on its category (e.g. a Cash variance points you to the drawer, a Float variance points you to mobile money). For each one, do one of the following:
- Explain it — type the real reason (e.g. "Customer given TZS 500 too much change") and attach a photo of the count sheet or till roll as evidence if you have one.
- Resolve All as Asset Swap — if you know money simply moved between two of your own accounts today (e.g. cash was deposited into mobile money float), this button explains every exception at once as an internal transfer. It works even when the two sides don't net to an exact zero — a small built-in tolerance absorbs normal rounding.
- Leave it open — if you genuinely don't know the cause yet, you can submit anyway. It will need to be picked up in Investigation Centre before or after approval.
Step 4 — Submit
Submitting locks the batch from further editing and notifies every user in your branch who holds the recon-approve permission. It now waits for a manager.
Scenario: At Maji Mazuri Traders' Arusha branch, teller Kelvin Mrema counts the till at close of business. Cash is short by TZS 300,000, but M-Pesa float is over by exactly TZS 300,000.
What happened: Kelvin remembers depositing TZS 300,000 of physical cash into the M-Pesa till earlier that day to top up float for evening customers — he simply forgot to record it as a transfer.
What he does: On Step 3, he clicks Resolve All as Asset Swap. Both exceptions close instantly as an internal transfer — no loss, no gain, money just moved from one bucket to another inside the same branch.
Manager Review — Approve, Reject, or Request More Info
Go to Finance → Balancing → Approvals (requires recon-approve). For each submitted batch, a manager chooses one of three actions:
| Action | What Happens |
|---|---|
| Approve | The batch locks permanently. Every remaining exception's variance is posted to the general ledger — a shortage debits the relevant Clearing Account and credits the item account; an overage does the reverse. The batch's expected/actual figures are refreshed to reflect these postings, so the batch detail page never shows a stale number. |
| Reject | Sends the batch back to draft for a full recount. Use this when the counts themselves look wrong, not just unexplained. |
| Request More Info | Keeps the batch open for a quick clarification rather than a full recount — useful when only one or two exceptions need a better explanation before you're comfortable approving. |
Approval vs. Investigation — Which Comes First?
This is the single most misunderstood part of the workflow, so it deserves its own explanation.
- Approve first, every time. Don't wait for every exception to be fully explained before approving — that delays your books. Approval's only job is to post accurate numbers to the ledger for that day, via the Clearing Accounts. It is safe to approve a batch with open, unexplained exceptions.
- Investigate second, at your own pace. Once approved, open exceptions remain visible and resolvable in Investigation Centre for as long as you need — approving a batch does not close or hide its exceptions.
Spotting Loss or Overage Instantly — Daily Net Result
A single account being short doesn't necessarily mean you lost money — it might just mean cash moved into float somewhere else in the branch that day. To tell the difference between a real loss and money simply moving between your own accounts, the Reconciliation Dashboard's Daily Net Result chart adds up the variance across every account in your active branch for each day, as one signed number.
| Day | Cash | Bank | Mobile Money | Total | Result |
|---|---|---|---|---|---|
| Day 1 | 1,000,000 | 1,000,000 | 1,000,000 | 3,000,000 | Opening balances — nothing to compare yet |
| Day 2 | 500,000 | 1,510,000 | 1,000,000 | 3,010,000 | Overage: +10,000 |
| Day 3 | 200,000 | 1,800,000 | 970,000 | 2,970,000 | Loss: −30,000 |
Notice Cash dropped a lot between Day 1 and Day 2, and Bank rose by almost the same amount — that's an asset swap (a deposit), not a loss, so it correctly does not show up in the +10,000 overage. Only the true, branch-wide, net change counts. This is exactly why Daily Net Result is calculated as one grand total across all accounts per day, not account-by-account.
On the Reconciliation Dashboard, this shows as a colour-coded bar per day — green near zero, amber for a mild overage, red for a genuine loss — so you can tell at a glance, without opening a single batch, whether a day was clean.
Clearing Account Health
Also on the Reconciliation Dashboard, this widget shows the current live balance of your active branch's two clearing accounts — CLR_CASH (physical cash/vault variances) and CLR_FLOAT (mobile money/bank/POS variances). Each tile is colour-coded:
| Status | Meaning |
|---|---|
| Clear | Balance is near zero — nothing meaningful is sitting unresolved. |
| Watch | A moderate balance has built up — worth reviewing Investigation Centre soon. |
| Alert | A large balance has accumulated — exceptions are piling up faster than they're being resolved. |
This widget is always scoped to your currently active branch only — it never mixes figures across branches, respecting the same branch-isolation rule that applies everywhere else in Goju Cloud.
Auto-Netting — The Smart Treasury Engine
Sometimes, after individual exceptions are explained, a small residual variance still remains for the day. Auto-Netting (available from the Approvals or Investigation screen once a batch has open exceptions) handles this in two steps:
- The SwapIt pools every still-open cash-side exception against every still-open float-side exception. If one side is short and the other is over, it nets the overlapping amount between
CLR_CASHandCLR_FLOATas an internal transfer — the same idea as "Resolve All as Asset Swap," just applied automatically across the whole batch. - The ResidualWhatever is left after the swap — a true, unmatched shortage or overage — is written off: a residual shortage posts as a loss to Miscellaneous Expense; a residual overage posts as income to Other Income.
Investigation Centre
Go to Finance → Balancing → Investigations (requires recon-investigate) to review every open exception across your branch, one at a time, regardless of whether its batch has already been approved. For each exception you can:
- Write a resolution explaining the true cause
- Upload a photo or document as evidence, permanently attached to that exception
- Propose a specific resolution — write it off to an expense/income account, match it against another known discrepancy, or mark it explained with no GL impact
- Request more information from the branch that submitted it, without fully rejecting the batch
| Resolution Type | Meaning |
|---|---|
| adjusted | A manager reviewed the exception individually and posted a specific, deliberate correcting entry. |
| auto_netted | Closed in bulk by the Auto-Netting engine, not reviewed individually — see the caution above. |
| (unresolved) | Still open — visible in both Investigation Centre and Exception Explorer until someone acts on it. |
Exception Explorer
Go to Finance → Balancing → Exception Explorer to search and filter every exception ever raised across your whole tenant — not just one batch. Filter by branch, cashier, date, payment-method category, severity, or status. Use this for periodic audits (e.g. "show me every unresolved cash exception over TZS 500,000 in the last 30 days") rather than paging through batches one by one.
Handling a Recovered Loss
Occasionally, money written off as a loss in a past, already-approved batch is later recovered — for example, a customer repays cash they had taken without it being recorded, or an investigation uncovers where a "loss" actually went. Because approved batches are permanent audit history and are never edited or reversed, handle a recovery as follows:
- Never edit the original approved batchThe original write-off stays exactly as it was posted — it is your audit trail proving what was investigated and when.
- Post a new, separate, clearly-referenced transactionDebit whichever account physically receives the recovered money; credit an income account. In the description, name the original batch (e.g. "Recovery against Batch RCN-20260706-B1-0001") so the two events stay linked for any future audit.
- Do not let a future day's reconciliation quietly absorb itIf the recovered cash is simply deposited into a till and left to show up as an ordinary overage on a later day, it gets pooled anonymously with that day's unrelated variance by Auto-Netting — the exact amount and the link back to the original loss are both lost.
Reconciliation Settings
Go to Finance → Balancing → Settings (requires recon-configure) to control which accounts are part of your branch's daily reconciliation, and which category each belongs to (Cash, Vault, Bank, Mobile, POS, or Float). Different branch types can use different templates — a savings-and-loans branch reconciles different accounts than a pure retail branch.
Reports
| Report | Format | Purpose |
|---|---|---|
| Teller Voucher | A simple two-column printout of expected vs actual per account — for the teller's own paper record. | |
| Management Report | Full detail: every exception, its explanation, the approval chain, and a summary — for management or audit review. | |
| Variance Report | CSV | Every batch's variance, exportable for spreadsheet analysis. |
| Adjustment Report | CSV | Every GL adjustment posted through reconciliation, with account and amount. |
| Approval Report | CSV | Who approved what, and when — for accountability review. |
Permissions
| Permission | Grants |
|---|---|
recon-view | View the dashboard and Exception Explorer |
recon-create | Open new batches and use the Reconciliation Wizard |
recon-submit | Submit a completed batch for manager approval |
recon-edit | Edit dashboard-level settings such as risk widgets |
recon-approve | Approve, reject, or request more info on submitted batches; receives submission notifications |
recon-investigate | Work in Investigation Centre — explain, resolve, or attach evidence to exceptions |
recon-configure | Manage reconciliation templates and account-category mappings |
Best Practices
- Reconcile every branch, every day — don't let batches pile up unopened; the longer you wait, the harder a variance is to explain.
- Approve promptly. Don't hold up an entire batch waiting for one stubborn exception — approve, then investigate at your own pace.
- Use "Resolve All as Asset Swap" whenever you know money just moved between your own accounts — don't let genuine internal transfers get treated as losses.
- Walk Investigation Centre before reaching for Auto-Netting. Auto-Netting should close what's left over, not everything.
- Watch the Clearing Account Health tile daily — an "Alert" status means exceptions are accumulating faster than they're being resolved.
- Always attach evidence (a photo of the count sheet, a screenshot) to any exception involving a significant amount — it's the difference between a defensible explanation and a guess, months later.
Frequently Asked Questions
Financial Reports
Complete financial reporting suite — from daily summaries to statutory financial statements.
Overview
All financial reports are found under Finance → Statements. Every report can be viewed on screen and exported as PDF. Reports are always generated from the live general ledger, so they reflect all posted transactions up to the moment you run them.
Daily Summary (End-of-Day Report)
Go to Finance → Statements → Daily Summary for a summary of all business activity today. This is the most commonly used report — review it every evening before closing.
- Today's total income by type (savings, loans, sales, commissions)
- Today's total expenses
- Cash flow for the day
- Opening and closing cash balance
Cash Position Report
Shows the current balance of all cash and bank accounts. Useful for determining how much physical cash the branch is holding and how much is in the bank.
Trial Balance
A complete list of all GL accounts with their debit and credit balances totalled. Total debits must equal total credits — if they don't, there is a data error. Accountants use this report as the foundation for preparing financial statements.
Income Statement (Profit & Loss)
Shows all revenue and expenses for a selected period, resulting in net profit or loss. Key sections:
- Revenue — All income sources (sales, interest, commissions)
- Cost of Goods Sold — Direct costs of products sold
- Gross Profit — Revenue minus COGS
- Operating Expenses — Rent, salaries, utilities, etc.
- Net Profit — What the business actually earned
If Mwananchi Supermarket shows: Revenue TZS 8,500,000 | COGS TZS 5,900,000 | Gross Profit TZS 2,600,000 | Expenses TZS 1,400,000 | Net Profit TZS 1,200,000
This means for every TZS 100 of sales, TZS 14.1 is profit. The gross margin is 30.6% — review whether this is in line with your industry.
Balance Sheet
A snapshot of your financial position at a specific date. Shows what your business owns (assets), what it owes (liabilities), and the owner's equity.
- Assets = Cash + Receivables + Inventory + Fixed Assets
- Liabilities = Loans Payable + Customer Savings + Accounts Payable
- Equity = Capital + Retained Earnings
- Assets must equal Liabilities + Equity
Cash Flow Statement
Shows where cash came from and where it went during a period, grouped into:
- Operating Activities — Core business (sales, expenses, loan repayments)
- Financing Activities — Capital injections, loan issuances, withdrawals
Break-Even Analysis
Go to Finance → Statements → Break-Even Analysis to see how much revenue you need to cover all costs. Useful for pricing decisions and business planning.
COGS Report
Detailed breakdown of Cost of Goods Sold by product and category. Shows which products have the highest and lowest profit margins.
Tax Report
Summarizes VAT collected (output tax), VAT paid on purchases (input tax), and net VAT payable to TRA. Use this report to prepare your monthly VAT return.
Accounts Receivable Aging
Groups outstanding invoices by how long they have been unpaid. Helps you prioritize collections.
| Age Bucket | Action Recommended |
|---|---|
| 0–30 days | Normal — monitor |
| 31–60 days | Send reminder to customer |
| 61–90 days | Phone call or formal letter |
| 90+ days | Consider legal action or write-off |
Month-End Closing
Lock accounting periods, allocate net profit, and optionally calculate tithe — all with a live preview before anything is posted.
What Month-End Closing Does
At the end of every accounting month, GOJU runs a formal closing process that does three things in a single transaction:
- Locks the period — all new transactions are blocked from being backdated into a closed month, protecting your historical records.
- Calculates net profit — the system reads your live income statement for that month (gross income minus all operating expenses).
- Distributes the profit — according to the allocation rules you configure (e.g., tithe, management fee, capital, reserve fund), the system posts the exact journal entries needed to move the profit into the right accounts.
This is fully IFRS-compliant: every entry is auditable, every period is locked after closing, and nothing is posted until you explicitly click Process Closing after reviewing a live preview.
Three Pages — What Each One Is For
The Closing module has three distinct pages. Understanding which page does what avoids confusion:
| Page | URL | Purpose |
|---|---|---|
| Closing Wizard | /closing |
Where you actually run month-end closing. Shows the financial snapshot, allocation preview, and the Process button. This is the page you use every month. |
| Full Configuration | /closing/configure |
Where you set up all allocation rules — First-Off and Proportional. A power-user page you configure once, then rarely touch. Supports multiple rules of any type. |
| Tithe Settings | /closing/tithe-settings |
A simplified one-screen panel for organisations that tithe. Sets one tithe rule only (enable/disable, basis, percentage, account). Requires the Tithe Module to be turned on in Tenant Profile first. |
The Closing Wizard (/closing)
This is your monthly working page. When you open it, you see:
Period Selector
A dropdown at the top lets you choose which month you are closing. The system shows whether the period is Closed or Open. You can only process an open period.
Financial Snapshot
Three KPI cards give you the numbers that will drive the closing:
Allocation Preview
Below the KPI cards, the system shows a live preview table of every allocation rule and exactly how much each one will receive if you process right now. This is a read-only preview — nothing has been posted yet. Review it carefully before clicking Process Closing.
Closing History Shortcut
A History button in the top right takes you to all past closings. See the History section below for details.
How to Run Month-End Closing — Step by Step
- Post all transactions for the month first Expenses, commission income, loan repayments, customer deposits — everything. Nothing can be backdated after the period is locked. Use the checklist at the bottom of this section.
- Open Finance → Closing Select the month you want to close from the Period Selector dropdown. Confirm it shows "Open" status.
- Check the Financial Snapshot Verify the Gross Income, Operating Expenses, and Net Profit figures look correct. If anything is wrong, go back and post the missing transactions first.
- Review the Allocation Preview table Every active allocation rule is listed with the account it credits and the exact amount it will receive. Verify the total adds up correctly and the accounts are what you expect.
- Click "Process Closing" A confirmation dialog appears. Click Confirm. The system posts all journal entries in a single database transaction — either everything succeeds or nothing is posted. The period is then locked.
- Review the Closing Summary After processing, a summary screen shows every journal entry that was posted. Download or print it for your records. Go to History to find it again later.
What Gets Posted — The Journal Entries
When you process closing, the system automatically determines what needs to be posted based on your allocation rules. Here is the pattern:
Assume Gross Income = TZS 1,500,000. Tithe is set to 10% of Gross Revenue = TZS 150,000. Remaining profit after tithe = TZS 850,000. Owner Capital gets 90% of TZS 850,000 = TZS 765,000.
| Account | Debit (Dr) | Credit (Cr) | Explanation |
|---|---|---|---|
| Retained Earnings (3002) | TZS 915,000 | — | Total profit distributed (150,000 + 765,000) |
| Tithe Payable (2400) | — | TZS 150,000 | First-Off rule — 10% of Gross Revenue |
| Owner Capital (3001) | — | TZS 765,000 | Proportional rule — 90% of remaining profit |
Any penny-rounding difference is automatically absorbed by the last proportional rule so the journal always balances to zero. The system guarantees Dr = Cr before posting.
| Account | Debit (Dr) | Credit (Cr) | Explanation |
|---|---|---|---|
| Retained Earnings (3002) | TZS 800,000 | — | Full net profit being distributed |
| Owner Capital (3001) | — | TZS 560,000 | 70% proportional |
| Investment Reserve (3054) | — | TZS 240,000 | 30% proportional |
Full Configuration (/closing/configure)
Go to Finance → Closing → Configure (or click the Configure button on the wizard page). This is where you build and manage all your allocation rules.
Rule Types
| Type | How It Works | Use When |
|---|---|---|
| First-Off | A percentage is taken off a chosen base (Net Profit or Gross Revenue) before the proportional split happens. Processed in order. | Tithe, management fee, tax reserve, owner's guaranteed draw — anything that comes "off the top" regardless of what is left |
| Proportional | A percentage of whatever remains after all First-Off rules are applied. All proportional rules must total 100%. | Partner profit splits, owner/investor shares, departmental allocations |
Calculation Basis (First-Off rules only)
When adding or editing a First-Off rule, you choose what number the percentage is calculated on:
| Basis | Formula | Common Use |
|---|---|---|
| Net Profit | percentage × net_profit |
Management fees, performance-based reserves, tithe for organisations that tithe on profit |
| Gross Revenue | percentage × gross_income |
Tithe for organisations that tithe on total income before expenses, revenue-share arrangements |
Enabling and Disabling Rules
Every rule has an active/inactive toggle. Inactive rules are preserved in your configuration (with their full history) but not included in the next closing calculation. Toggle a rule off temporarily without deleting it.
Penny Balancing
When percentages produce fractional cents (e.g., 33.33% of TZS 1,000,001), the system automatically absorbs the rounding difference into the last proportional rule. The journal entry always balances exactly — Dr = Cr — guaranteed before anything is posted.
Tithe Settings (/closing/tithe-settings)
Step 0 — Enable the Tithe Module on Your Tenant Profile
Before the Tithe Settings button appears anywhere, the Tithe Module must be turned on at the tenant level. Go to:
Once enabled, a Tithe Settings button appears on the Closing Wizard page (for users with the closing-configure permission).
Configuring Tithe
Go to Finance → Closing → Tithe Settings. You will see:
| Field | What It Does |
|---|---|
| Enable Tithe Allocation | Toggle switch. When off, no tithe is calculated even if other settings are saved. Defaults to off for every tenant. |
| Calculation Basis | Choose Net Profit (revenue minus expenses) or Gross Revenue (total income before any expenses). See the note below about after-tax tithe. |
| Tithe Percentage | Any number from 0.0001% to 99.9999%. The traditional figure is 10%, but GOJU does not enforce this. |
| Destination Account | The liability account credited during closing. Defaults to Tithe Payable (2400). Change to any liability account (e.g., a church offering account if you map it there). |
Relationship to Full Configuration
Tithe Settings is a simplified front-end for exactly one allocation rule tagged internally as purpose=tithe. When you save Tithe Settings, the rule also appears in Full Configuration where you can see it alongside your other rules. You can use either page to manage it — they edit the same rule. The Tithe Settings page just makes the common case simpler without the full rule-builder interface.
Closing History
Go to Finance → Closing → History (or click the History button on the wizard). Every past closing is listed with:
- The period (month and year)
- Gross Income, Operating Expenses, and Net Profit for that period
- The date and time it was processed and who processed it
- A breakdown of every allocation rule that ran (label, basis, amount, destination account)
Click any row to see the full closing detail and the exact journal entries that were posted.
Month-End Closing Checklist
Complete every item on this list before clicking Process Closing. Once the period is locked, no further entries can be backdated into it.
| # | Item | Where to Check |
|---|---|---|
| 1 | All commission income posted (including any prior-month commissions) | Agency → Commissions → Ledger |
| 2 | All operating expenses posted and approved | Finance → Expenses |
| 3 | All customer loan repayments recorded | Banking → Loans |
| 4 | All customer savings transactions recorded | Banking → Savings |
| 5 | Vault (strongroom) balance reconciled to physical count | Agency → Vault → Statement |
| 6 | Daily reconciliation complete for every day in the period | Finance → Reconciliation |
| 7 | Any outstanding bridge transfers cleared | Agency → Bridge Transfers |
| 8 | Income tax provision posted (if tithing/allocating on after-tax profit) | Finance → Journal Entries |
| 9 | Trial Balance reviewed — debits equal credits | Finance → Reports → Trial Balance |
| 10 | Allocation preview reviewed and all amounts look correct | Finance → Closing (wizard page) |
Permissions Required
| Permission | What It Controls |
|---|---|
closing-view | View the Closing Wizard, see the financial snapshot, preview allocations, view History |
closing-configure | Add, edit, and enable/disable allocation rules in Full Configuration; access Tithe Settings |
closing-process | Actually execute a closing — click Process Closing. The highest-privilege closing permission. |
closing-view can see the snapshot and preview but cannot process or configure. Assign closing-process only to senior staff or managers who are authorised to lock accounting periods.Frequently Asked Questions
closing-configure permission. If either is missing, the button will not appear. The Tithe Settings page at /closing/tithe-settings will also return a 404 if the module is disabled — this is intentional so tenants who don't use tithe never encounter it.GOJU AI — Overview
An intelligence layer built into GOJU CLOUD that reads your real data and explains it in plain language, right where you're already working — not a separate app to learn.
What GOJU AI Is
GOJU AI connects your tenant to a large language model (currently Claude or Gemini — the platform can switch or add providers without changing how any feature works) and wires it into six specific places in the system where an explanation, a second opinion, or a plain-language answer is genuinely useful. It is not a general-purpose chatbot bolted onto the side of the app — every feature is scoped to real data you already have permission to see, and every answer is generated fresh from that data, never invented.
The Six Capabilities
Knowledge Assistant
Ask "how do I...?" about GOJU CLOUD itself. Answers come only from this documentation. Learn more →
Report Explainer
"Explain with AI" on virtually every report — plain-language summary plus follow-up questions. Learn more →
Audit Assistant
Reviews a date range of transactions and inventory movement for anomalies worth checking. Learn more →
Closing Assistant
A pre-close sanity check on your month-end preview, before you lock the period. Learn more →
Reconciliation Intelligence
Suggests plausible causes for an unexplained recon exception, based on its pattern. Learn more →
FIAE Smart Fallback
Parses an SMS as a last resort when every deterministic parser fails — always flagged for review. Learn more →
Where to Find It
- Sparkle icon in the top navigation bar — opens the Knowledge Assistant directly. Shown to SaaS admins always, and to tenant users whenever the AI module is active on their plan.
- Management menu — "AI Assistant" (settings), "Knowledge Assistant", and "Audit Assistant" each have their own dedicated menu item.
- "Explain with AI" buttons — embedded directly inside 32+ existing reports across Finance, Inventory, HR, Commerce, Commission, and FIAE Intelligence.
- Inline buttons — "AI Pre-Close Check" inside the Month-End Closing wizard, and "AI Suggest Causes" inside Reconciliation's Investigation Centre.
Enabling & Configuring AI
Turn AI on or off for your organization, choose a provider, and control how many requests you allow per month.
Where to Configure It
Go to Management → AI Assistant. This page only exists for tenants whose subscription plan includes the AI Assistant feature — if your plan doesn't include it, the menu item and every AI button across the system stay hidden automatically. No dead links, no "upgrade required" pop-ups interrupting your work.
Settings Explained
- AI Assistant toggleA simple on/off switch. When off, every AI feature is unavailable tenant-wide, even for users who would otherwise have permission — useful if you want to pause AI usage for a while without touching anyone's individual permissions.
- ProviderChoose "Platform default", or pin your tenant to a specific provider (Claude or Gemini). Most tenants should leave this on Platform default — GOJU CLOUD picks a sensible, cost-effective provider automatically and can improve it over time without you needing to change anything.
- Monthly request limitThe maximum number of AI requests your organization can make in a calendar month, across all six features combined. Leave it blank to use the platform default. Once the limit is reached, AI features politely decline further requests until the 1st of the next month — they never silently keep running and generating unexpected cost.
- Test ConnectionSends a small, non-financial ping to your configured provider to confirm the connection is working — useful right after changing the provider, before relying on it for real work.
Usage This Month
The right-hand panel on the Settings page shows a live progress bar of requests used against your monthly limit (green under 80%, amber from 80%, red at 100%), plus a table of your organization's most recent AI activity — which feature was used, whether it succeeded, and when.
Mwananchi Supermarket is on a plan with a 500 request/month AI limit and has used 500 requests by the 22nd of the month — mostly from staff repeatedly clicking "Explain with AI" on reports. The next AI request anywhere in the system (Knowledge Assistant, Report Explainer, Audit Assistant, etc.) is blocked with a clear message: "Monthly AI request limit (500) reached." Normal system functions are completely unaffected — only AI features pause until the 1st of next month, or until the Tenant Owner raises the limit in Settings.
Permissions Required
| Permission | Grants Access To |
|---|---|
| ai-settings-view | View the AI Assistant settings page and this month's usage |
| ai-settings-manage | Toggle AI on/off, choose a provider, and set the monthly request limit |
| ai-assistant-use | Actually invoke AI features — the Knowledge Assistant, Report Explainer, Audit Assistant, and Closing Assistant all require this (the Tenant Owner always has it automatically) |
AI Knowledge Assistant
Ask how to use GOJU CLOUD in plain English (or Swahili) — answers come only from this documentation, never invented.
How to Use It
- Open itClick the sparkle icon in the top navigation bar, or go to Management → Knowledge Assistant.
- Type your questionAsk naturally, the same way you'd ask a colleague — e.g. "How do I perform a stock adjustment?" or "What's the difference between Reject and Request More Info on a reconciliation batch?"
- Read the answerThe Assistant searches this documentation for the sections that actually relate to your question, then writes a short, direct answer grounded in those sections only.
- Ask a follow-upKeep the conversation going — "what if the count is still off after that?" — the Assistant remembers what you just asked. Up to 10 exchanges per session before you're asked to start a new question.
You: "A customer wants to return an item they bought at POS. What do I do?"
AI Knowledge Assistant: Explains the POS reversal/refund flow, which permission is needed (pos-reverse), and where to find it — sourced directly from the POS Terminal section of this documentation.
You (follow-up): "What if the sale already affected inventory?"
AI Knowledge Assistant: Explains that a reversed sale automatically restores the stock quantity that was deducted, without you needing a separate stock adjustment.
Why It Sometimes Says "Not Documented"
If your question genuinely isn't covered anywhere in this documentation, the Assistant says so honestly and suggests contacting support — it will never invent a plausible-sounding but incorrect answer. This is a deliberate design choice: a wrong "how-to" answer in a financial system is far more dangerous than an honest "I don't know."
Who Can Use It
SaaS admins can always reach the Knowledge Assistant, with no tenant or subscription required — it's platform staff tooling, not a customer feature for them. Tenant users need the AI module active on their plan, turned on in Settings, and the ai-assistant-use permission (Tenant Owners have this automatically).
Explain Reports with AI
Almost every report in GOJU CLOUD has an "Explain with AI" button — one click gets you a plain-language summary of exactly what's on your screen.
How It Works
- Run any report as usualChoose your date range or filters and load the report, exactly as you always do.
- Click "Explain with AI"Found at the top of the report, next to Export/Print. A panel opens and the AI reads the exact figures currently shown — the same date range and filters you selected — and writes a short, plain-language explanation.
- Ask follow-up questionsType a question about the report directly in the panel — "why did COGS increase this month?", "is this margin healthy?", "what would improve this number?" It becomes a short back-and-forth conversation, up to 10 exchanges.
- Start fresh anytimeRe-open the modal (or change the report's filters and click Explain again) to start a brand-new conversation on the updated data.
Scenario: Mwananchi Supermarket's manager runs the Income Statement for June and clicks "Explain with AI".
AI: "June was a solid month: revenue of TZS 8,500,000 produced a net profit of TZS 1,200,000 — a 14.1% net margin. Your gross margin (30.6%) is the main driver of profitability; operating expenses were TZS 1,400,000, about 16.5% of revenue."
Manager (follow-up): "Is 30.6% gross margin good for a supermarket?"
AI: Gives context on typical supermarket gross margins and suggests what to review if the manager wants to improve it (pricing, supplier costs, shrinkage).
Where You'll Find It
The button appears on financial statements (Financial Reports), Inventory Reports, HR Reports, the Sales Report, Invoice Aging, Commission reports, and every FIAE Intelligence report — 32 reports in total, all using the same button and the same chat panel, so once you've used it on one report you already know how to use it everywhere.
ai-assistant-use — it never shows up just to dead-end with a "not available" message.AI Audit Assistant
AI reviews transactions and inventory movement for a date range and recommends what to check — it never changes a single record.
How to Use It
- Go to Management → Audit AssistantRoute:
/ai/audit. - Choose a date rangePick a From and To date — defaults to the start of the current month through today.
- Click ReviewThe Assistant examines the transactions and inventory movements posted in that window and writes up anything it considers worth a closer look — unusual timing, amounts that stand out, patterns that don't match the rest of the period.
- Ask follow-up questions"Why is this flagged?", "What should I check first?" — up to 10 exchanges before starting a new review.
Permissions Required
Requires the AI module active on your plan and turned on in Settings, plus the ai-assistant-use permission.
AI Pre-Close Check
A second pair of eyes on your month-end preview before you commit to locking the period.
How to Use It
Inside the Month-End Closing wizard, once a period shows "Ready to Close", an AI Pre-Close Check button appears above the Process Closing button. Click it and the Assistant reviews the closing preview — net profit, the allocation rules that are about to run, tithe allocation (if the Tithe Module is on), and the WHT receivable position — and flags anything unusual before you commit. You can ask follow-up questions about the preview before deciding.
Arusha Electronics Centre is about to close June. The AI Pre-Close Check notices that this month's net profit is 40% lower than the trailing 3-month average and flags it: "Net profit this month (TZS 720,000) is notably lower than your recent average (TZS 1,200,000) — worth confirming this is expected (e.g. a slow month, a large one-off expense) before closing." The manager checks, confirms it was a known slow month due to a supplier delay, and proceeds with closing as normal.
ai-assistant-use to see and use. Actually running the closing still requires the separate closing-process permission, exactly as before — the AI step changes nothing about who can close the books.AI Reconciliation Intelligence
When an exception needs an explanation and the cause isn't obvious, ask AI to suggest likely causes based on the pattern of the variance.
How to Use It
Inside Investigation Centre, while writing up an open exception, click AI Suggest Causes next to the Investigation Notes field. The Assistant looks at the exception's category (cash, vault, bank, mobile, POS, float), its amount, and its severity, then suggests a short list of plausible explanations commonly seen for that pattern — for example, an unrecorded float top-up, a short-change error, or a timing difference between two systems.
Permissions Required
No separate AI permission is needed here — if you already hold recon-investigate (the permission for working in Investigation Centre at all) and the AI module is active on your plan, the button is available.
AI-Assisted FIAE Import Fallback
When an incoming SMS doesn't match any of FIAE's built-in parsers, AI reads it and safely extracts the transaction — always flagged for your review.
How It's Different from FIAE's Own Intelligence
FIAE's deterministic, rule-based parsers handle the vast majority of SMS automatically — fast, free, and don't involve the AI module at all. GOJU AI only steps in as a last resort, when every deterministic parser fails to recognize a message's format (for example, a new or unusually-worded provider template FIAE hasn't seen before).
What Triggers the Fallback
Any one of these during import causes FIAE to hand a single SMS to the AI instead of failing it outright:
- No deterministic parser recognises the sender at all.
- A parser recognises the sender but cannot extract a usable transaction from the message text.
- A parser matches the message shape but cannot confidently read the numbers in it.
What Happens Automatically
There's no button to click — this runs entirely in the background during Import SMS. When it activates, the AI is instructed to extract the provider, event type, amount, commission, and balance from the raw SMS text into the same structured format a normal parser would produce, and — critically — to never guess an amount it cannot clearly read. If it can't confidently parse the message, it says so, and that event is simply counted as failed, exactly as if the AI feature didn't exist. Every event the AI does successfully extract is automatically:
- Given a fixed confidence score of 0.5 — lower than every real deterministic parser (which score between 0.85 and 0.99), so nothing generated by AI can ever appear more trustworthy than a rule-based read
- Paired with an "open" Audit Flag labeled [AI-PARSED], requiring a human to verify it before it's fully trusted for reconciliation
- Capped at a maximum of 20 AI-fallback attempts per import batch, so a systematically-unrecognized file format (e.g. you imported the wrong file, or a provider changed its SMS wording entirely) can't turn into hundreds of slow, costly AI requests — the remaining unparseable messages in that batch simply count as failed
Reviewing AI-Parsed Events
- Go to Agency → Intelligence → Audit FlagsLook for flags whose description starts with
[AI-PARSED]. - Open the flag and read the original SMS textThe raw message is preserved alongside the AI's extracted amount, provider, and event type.
- Confirm or correctIf the extraction is accurate, resolve the flag as Resolved. If it's wrong, note the correct figures in your resolution notes and treat the event as unreliable for reconciliation purposes.
Data, Privacy & Cost Control
How GOJU AI keeps tenant data isolated, controls cost, and stays inside your subscription plan.
Tenant Isolation
Every AI request is scoped to the tenant and branch you're acting in — the same tenant-isolation rules that protect every other module in GOJU CLOUD apply here too. AI only ever reads the specific report, transaction range, or documentation content relevant to the feature you invoked; it cannot see or reference another tenant's data, ever.
What Gets Sent to the AI Provider
Only the specific data needed to answer the request — e.g. the figures currently shown on the report you clicked "Explain with AI" on, or the date-range transactions for an Audit Assistant review. GOJU AI does not send your entire database to the provider, and the Knowledge Assistant sends only the matched documentation excerpts, not any of your business data at all.
Cost Control
Every tenant has a monthly request limit (default 500/month, configurable in Settings) shared across all six AI features. Once reached, AI features pause with a clear message until the next calendar month — normal (non-AI) system functions are never affected.
Usage Logging
Every AI request is logged — which feature, which provider, success or failure, and when — visible to your organization in AI Assistant Settings → Recent AI Activity. SaaS admins can additionally see platform-wide AI usage and clear old log records from System Monitor.
Plan Gating
AI Assistant is a subscription plan feature. If your plan doesn't include it, every AI menu item, button, and page is automatically hidden — there's nothing to configure to turn it off, and nothing dead-ends with an "upgrade required" message. SaaS admins are the one exception: they can always reach the Knowledge Assistant, since it's platform staff tooling rather than a tenant subscription feature.
Bridge Transfers (Inter-Branch)
Move cash between your own branches with a complete, self-balancing accounting trail.
Overview
The Bridge module lets you move cash between two branches of the same business — for example, when Mwanza Supermarket's Nyamagana branch sends TZS 2,000,000 to top up the till at its Ilemela branch. Every transfer is recorded on both branches' books at once, so each branch's accounts always reflect exactly what physically happened to its own cash.
Concepts
Each branch has its own internal Bridge account — a clearing account that exists purely to record money in transit to or from other branches. A transfer always posts on both branches at once, in two matching pairs:
- The sending branch debits its own Bridge account and credits its own Cash account (cash leaves the till, and the Bridge account records who it's owed to).
- The receiving branch debits its own Cash account and credits its own Bridge account (cash arrives in the till, and the Bridge account records where it came from).
Because both sides post through each branch's own Bridge account, the account nets back to zero over time — it only ever shows outstanding, unreconciled transfers.
Step-by-Step — Creating a Bridge Transfer
- Go to Agency → Bridge Transfers → CreateRequires the
bridge-createpermission. - Choose the sending and receiving branchThese must be two different branches of your own business.
- Enter the amount and transaction dateExample: Mwanza Supermarket transfers TZS 2,000,000 from Nyamagana to Ilemela.
- Add a description (optional)Defaults to "Inter-branch Cash Transfer" if left blank.
- SubmitBoth branches' books update in the same instant. The system blocks the post if either branch has already closed its reconciliation period for that date.
Accounting Example
| Branch | Account | Debit | Credit |
|---|---|---|---|
| Nyamagana (sending) | Bridge Account | TZS 2,000,000 | |
| Nyamagana (sending) | Cash | TZS 2,000,000 | |
| Ilemela (receiving) | Cash | TZS 2,000,000 | |
| Ilemela (receiving) | Bridge Account | TZS 2,000,000 |
Bridge Manager — Reviewing Balances with a Branch
Go to Agency → Bridge Transfers → Manage and select a branch to see every transfer between your branch and it, day by day. Pick a date to view: the page shows a Balance Brought Forward (the running total of all transfers before that date) plus the entries for the day you selected, labelled Current for today or Historical for any earlier date — useful for tracing exactly when an outstanding bridge balance built up.
Reversing a Bridge Transfer
If a transfer was posted in error, open it and click Reverse (requires bridge-reverse). The system creates a mirror-image transaction that swaps every debit and credit back — it cannot reverse a transfer that has already been reversed, and it checks that both branches still have an open reconciliation period for the original date.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Transfer fails to submit | One of the branches has already closed reconciliation for that date | Use today's date, or ask an accountant to reopen the recon period if this was a genuine backdated transfer. |
| Bridge Manager shows a growing outstanding balance with one branch | Transfers are only being made in one direction, or a transfer hasn't been matched by an equivalent physical cash movement | Confirm the physical cash actually moved, and check for any transfers that should have gone the other way. |
Related Topics: Vault Branches Reconciliation
Vault (Strongroom)
Secure cash vault management with mandatory maker-checker approval for every movement.
Overview
The Strongroom is a secure physical cash safe at a branch, used to store large amounts of cash overnight or between agency transactions. Goju Cloud enforces strict maker-checker (dual control) on every vault movement: one person requests a deposit or withdrawal, and a different person must approve it before it affects your books — the same person can never both request and approve the same transaction.
Concepts
| Term | Meaning |
|---|---|
| Maker-Checker | A control where one person initiates ("makes") a transaction and a different, authorised person must approve ("check") it before it takes effect — the system blocks the maker from approving their own request. |
| Seal Number | The tamper-evident seal number on a sealed cash bag, recorded when cash is deposited into the vault. |
| Reference Number | An automatically generated tracking number for each vault transaction, in the format SRD-YYYYMMDD-#### for deposits or SRW-YYYYMMDD-#### for withdrawals. |
Step-by-Step — Vault Deposit or Withdrawal
- Go to Agency → Vault → Deposit or WithdrawRequires the
strongroom-createpermission. - Choose the vault account, amount, and dateThe date cannot be in the future. Withdrawals are checked against the vault's actual balance as of that date — you cannot request more than is available.
- Record the seal informationFor a deposit, enter the new seal number sealed onto the cash bag. For a withdrawal, enter the seal number being broken and, if the remaining cash is re-sealed, the new reseal number.
- Add a description and submitThe request is created with status Pending — nothing hits the ledger yet.
- A different authorised staff member approves or rejects itGo to Agency → Vault, open the pending transaction, and click Approve or Reject (requires
strongroom-approve). Rejecting requires a written reason, minimum a few words, so there is always a record of why. - The ledger posts automatically on approvalOnly at this point does the transaction affect your accounts.
Accounting Example
Business event: Kilimanjaro Pharmacy moves TZS 3,000,000 in cash from the till into the vault for overnight safekeeping.
| Account | Debit | Credit |
|---|---|---|
| Vault (Strongroom) | TZS 3,000,000 | |
| Cash | TZS 3,000,000 |
A withdrawal simply reverses the two sides — Debit Cash, Credit Vault — when cash is taken back out for the day's operations.
Vault Statement
Go to Agency → Vault → Statement to see a running balance of the vault with every approved deposit and withdrawal listed, plus the seal number of the most recent deposit (the "active seal"). Only approved transactions ever appear here — pending and rejected requests never affect the statement.
Tips
- ✔ Always physically verify the seal number on the bag matches what was recorded before approving a deposit.
- ✔ Never share your login with the person who will approve your own request — maker-checker only works if the two roles are genuinely held by two people.
- ✔ Reconcile the vault statement's balance against a physical cash count regularly, not only during an audit.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "Insufficient vault balance" when requesting a withdrawal | The requested amount exceeds what the vault actually holds as of that date | Check the Vault Statement for the true available balance before submitting. |
| Approve button is missing or disabled | You are the same person who created the request, or you lack the strongroom-approve permission | Ask a different authorised staff member to approve it. |
| Vault balance doesn't match the physical cash count | A physical movement happened without a matching system transaction, or a seal was broken without being recorded | Investigate immediately — treat this as a priority reconciliation issue and involve the Tenant Owner. |
Related Topics: Bridge Transfers Teller Portal Reconciliation
Teller Portal
A fast, single-screen way for tellers to post everyday agency cash movements — no General Journal required.
Overview
The Teller Portal replaces the General Journal for the handful of transactions a teller posts dozens of times a day: a customer withdrawing or depositing cash through a mobile money till or bank agent float, moving balance between two of your own internal accounts, or splitting one customer visit across several accounts at once. Every posting still goes through the exact same accounting engine as the General Journal — the Teller Portal is simply a purpose-built, minimal-click front end for it.
Deposit
Customer loads a mobile/bank account with cash. One field: pick the account and the amount.
Withdrawal
Customer takes cash out against a mobile/bank account. Same single-field screen.
Float Transfer / Deposit
Move balance between any two of your own internal accounts — e.g. Cash into M-Pesa float, or depositing cash into a super-agent to top up your own float.
Mixed Transaction
Split one customer visit across several accounts in a single posting.
Core Concepts — Read This First
| Term | Meaning |
|---|---|
| Float Account | Any mobile money till (e.g. M-Pesa, Airtel Money, Halopesa, Mixx by Yas) or bank agent float (e.g. CRDB, NMB, NBC) account that already exists in your Chart of Accounts. The Teller Portal never creates new accounts — it only posts against these existing ones. |
| Cash On Hand | The physical cash drawer at your branch. On every Deposit or Withdrawal, Cash On Hand is adjusted automatically in the background — you never select it yourself. |
| Internal Float Transfer / Deposit | A direct movement of balance between any two of your own internal accounts (cash, mobile, or bank) — you pick both accounts yourself. Covers plain internal transfers (Cash → M-Pesa) as well as depositing physical cash into a super-agent/aggregator account to top up your own float capacity. |
| Mixed Transaction | A free-form posting across three or more accounts in one go — for example, a customer withdrawing from one mobile wallet and depositing part of it into a bank float while taking the rest in cash. |
| Reference Number | An automatically generated, globally unique tracking number stamped on every posting — the same numbering system used everywhere else in GOJU Cloud (General Journal, Bridge, Vault). |
Step-by-Step — Customer Withdrawal
Business event: A customer withdraws cash against their mobile money or bank account. Physical cash leaves your drawer; your float account absorbs the electronic value the network moved from the customer.
- Go to Agency → Teller Portal → Post TransactionRequires the
teller-transaction-withdrawpermission. - Switch to the Withdrawal tabThe Deposit/Withdrawal screen shares one layout — a toggle switches the mode.
- Choose the float accountOnly mobile money tills and bank agent floats are listed — Cash On Hand itself is never a choice here.
- Enter the amount and date, then submitThe system checks that Cash On Hand actually holds enough physical cash to pay out before allowing the post.
| Account | Debit | Credit |
|---|---|---|
| M-Pesa Till (float) | TZS 500,000 | |
| Cash On Hand | TZS 500,000 |
Step-by-Step — Customer Deposit
Business event: A customer hands over physical cash to load their mobile money or bank account. Your drawer gains cash; your float account pays out the electronic value credited to the customer.
- Go to Agency → Teller Portal → Post TransactionRequires the
teller-transaction-depositpermission. - Switch to the Deposit tab
- Choose the float account, enter the amount and date, then submitThe system checks that the float account actually holds enough balance to extend before allowing the post.
| Account | Debit | Credit |
|---|---|---|
| Cash On Hand | TZS 250,000 | |
| CRDB Agent Float | TZS 250,000 |
Step-by-Step — Internal Float Transfer / Deposit
Business event: Moving your own balance between two internal accounts — no customer involved. This covers a plain internal transfer (e.g. Cash → M-Pesa) as well as the case where you physically deposit cash into a super-agent or aggregator account to top up your own float capacity — same two-leg mechanic either way.
- Go to Agency → Teller Portal → Post Transaction → Float Transfer / Deposit tabRequires the
teller-transaction-transferpermission. - Choose the From and To accountsAny two different internal accounts — cash, mobile, or bank.
- Enter the amount and date, then submitThe system checks the From account has enough balance before posting.
| Account | Debit | Credit |
|---|---|---|
| M-Pesa Till (float) | TZS 1,000,000 | |
| Cash On Hand | TZS 1,000,000 |
Step-by-Step — Mixed Transaction
Business event: One customer visit that touches three or more accounts at once — for example, withdrawing from one wallet and splitting the proceeds between a bank float and physical cash.
- Go to Agency → Teller Portal → Post Transaction → Mixed Transaction tabRequires the
teller-transaction-mixedpermission. - Add a row per account involvedPick the account and type a signed amount — positive to increase it, negative to decrease it.
- Watch the Net TotalIt must read exactly zero (shown in green) before you can submit — this is what keeps the posting balanced.
- SubmitThe system checks every account that's decreasing has enough balance before posting.
Scenario: A customer withdraws TZS 500,000 from M-Pesa. TZS 300,000 is deposited straight into their CRDB account and the remaining TZS 200,000 is handed over as cash.
| Account | Row Entry | Debit | Credit |
|---|---|---|---|
| M-Pesa Till | +500,000 | TZS 500,000 | |
| CRDB Agent Float | -300,000 | TZS 300,000 | |
| Cash On Hand | -200,000 | TZS 200,000 |
The three signed row entries (+500,000 - 300,000 - 200,000) net to zero, and the resulting debit/credit totals balance automatically — that's what the Net Total field is checking for you before it lets you submit. Type the row entry exactly as the sign shows: positive increases an account, negative decreases it. The withdrawal leg (M-Pesa) is always positive because a withdrawal increases the float account; the deposit leg (CRDB) and the net cash paid out are always negative because a deposit decreases the float account and cash physically leaves the drawer.
Reversing a Teller Transaction
Go to Agency → Teller Portal → History, find the transaction, and click the reverse icon (requires teller-transaction-reverse). You'll be asked for a short reason — the system creates a mirror-image posting that swaps every debit and credit back. A transaction can only ever be reversed once, and a reversal itself can never be reversed again — if a reversal was also wrong, post a fresh correcting entry instead.
Transaction History
Go to Agency → Teller Portal → History to see every teller posting for your branch, filterable by date range, type, and account. Each row shows every account touched, the amount, who posted it, and its status — Posted or Reversed.
Reports
Go to Agency → Teller Portal → Reports and choose from:
- Daily Teller Transactions — every posting for a date range, across all types.
- Cash Movement Report — every entry that touched Cash On Hand.
- Mobile Float Movement Report — every entry across your mobile money tills, optionally filtered to one till.
- Bank Float Movement Report — every entry across your bank agent floats, optionally filtered to one bank.
- Internal Transfer Report — Float Transfer / Deposit postings only.
- Teller Activity Report — transaction count and total value, grouped by teller.
- Internal Account Balance Summary — a live, point-in-time balance snapshot of every internal operational account.
Every report can be exported to CSV from the same screen.
Permissions
| Permission | Grants |
|---|---|
teller-transaction-view | View the dashboard and transaction history |
teller-transaction-deposit | Post a Deposit |
teller-transaction-withdraw | Post a Withdrawal |
teller-transaction-transfer | Post an Internal Float Transfer / Deposit |
teller-transaction-mixed | Post a Mixed Transaction |
teller-transaction-reverse | Reverse a previously posted teller transaction |
teller-transaction-reports | Run and export Teller Portal reports |
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "Insufficient funds" on a Withdrawal | Cash On Hand doesn't have enough physical cash recorded as of that date | Check the Cash Balance tile on the dashboard, or use Float Transfer / Deposit or Vault to top up Cash On Hand first. |
| "Insufficient funds" on a Deposit | The selected float account doesn't have enough balance to extend to the customer | Check the till's balance on the dashboard — it may need topping up via Float Transfer / Deposit or Bridge before more deposits can be served. |
| Mixed Transaction won't submit — Net Total shown in red | The signed row amounts don't add up to exactly zero | Double-check every row's sign (+ for increases, − for decreases) — the total must read 0.00 before submitting. |
| Can't find the reverse button on a transaction | The transaction is itself already a reversal, or it has already been reversed once, or you lack teller-transaction-reverse | A transaction can only be reversed once, and a reversal can never itself be reversed — post a fresh correcting entry instead. |
Related Topics: Vault Bridge Transfers General Journal Reconciliation
Commission Management
Post, track, and report commission income from mobile money and agency banking operators — including withholding tax recognition and prior-month accruals.
What Commission Management Does
When your branch acts as an agent for a mobile money or agency banking provider (M-Pesa, HaloPesa, Airtel Money, CRDB, NMB, etc.), the provider pays you a commission for the transactions you process. The Commission module records those earnings into your general ledger with the correct IFRS journal entries — including handling the two tax situations you encounter in the field:
- Gross commission — The provider pays you the full commission with no deduction at source. You record the gross amount; no withholding tax adjustment is needed.
- Net commission (WHT deducted at source) — The provider withholds income tax before paying you (e.g., NMB withholds 10% WHT). You receive a smaller cash amount, but your income is the gross figure. The withheld portion is a tax credit you can recover — it is an asset, not a loss.
Setting Up Operators
Go to Agency → Commissions → Operators to register each provider you work with. An operator record maps the provider's name to the accounts used when their commissions are posted.
Basic Operator Fields
| Field | What It Sets |
|---|---|
| Operator Name | Display name (e.g., "NMB Bank", "M-Pesa", "HaloPesa") |
| Commission Account | The revenue account credited when this operator's commissions are posted (leaf account under COMMISSION_INC) |
| Float / Cash Account | The asset account debited (the float wallet or bank account where cash arrives) |
Withholding Tax Configuration
If the operator deducts WHT at source, configure these two additional fields:
| Field | What It Sets |
|---|---|
| Withholding Tax Rate (%) | The percentage deducted by the provider. Example: 10 for NMB's 10% WHT. Leave blank or 0 if this operator pays gross with no deduction. |
| WHT Destination Account | The asset account where the withheld tax is recorded as a recoverable credit. Defaults to Withholding Tax Receivable (1260). Do not change this unless your accountant instructs otherwise — WHT deducted from your income is a receivable asset, not a payable liability. |
Posting a Commission Entry
Go to Agency → Commissions → Post Entry. The form has a few key fields to understand:
Key Fields
| Field | Notes |
|---|---|
| Operator | Select the provider. If the operator has WHT configured, the WHT rate and destination account are shown automatically as read-only information below the selector. |
| Amount | Always enter the gross commission amount — what the provider says you earned, before any WHT deduction. The system calculates the WHT split for you. |
| Payment Type | Choose Float (the commission is added to your float wallet balance) or Bank (paid directly to your bank account). This determines which asset account is debited. |
| Date | The date you received or posted the commission. See Prior Month Posting below if the commission relates to a previous month. |
| Income Date (Prior Month) | Only appears when you check "This relates to a prior period". See the Prior Month Posting section below. |
What Gets Posted — The Journal Entries
The system decides which journal entry structure to use based on whether WHT applies and whether this is a prior-month posting:
| Account | Debit (Dr) | Credit (Cr) |
|---|---|---|
| Float Account (or Bank) | TZS 500,000 | — |
| Commission Income (COMMISSION_INC) | — | TZS 500,000 |
Simple 2-leg entry. Float goes up, income is recognised.
Gross commission = TZS 1,000,000. WHT 10% = TZS 100,000. Net cash received = TZS 900,000.
| Account | Debit (Dr) | Credit (Cr) | Explanation |
|---|---|---|---|
| Float / Bank Account | TZS 900,000 | — | Cash actually received |
| WHT Receivable (1260) | TZS 100,000 | — | Tax credit owed back to you |
| Commission Income | — | TZS 1,000,000 | Gross income recognised (IFRS 15) |
3-leg entry. Gross revenue is recognised, WHT is an asset, net cash is posted. Your P&L shows full 1,000,000 income, and your Balance Sheet shows the 100,000 as a recoverable asset.
Prior Month Posting — The Commission Receivable Bridge
Sometimes the provider pays you in the current month for work done in a previous month (e.g., you receive NMB's June commission in July). IFRS requires you to recognise the revenue in June (when it was earned) but post the cash receipt in July (when it arrived).
GOJU handles this automatically. When you tick "This relates to a prior period" on the posting form and enter the Income Date (e.g., June 30), the system uses a 5-leg bridge structure that keeps your Balance Sheet balanced at every historical date:
Gross commission = TZS 1,000,000. WHT 10% = TZS 100,000. Income Date = 30 June. Posting Date = 10 July.
| Entry Date | Account | Debit (Dr) | Credit (Cr) | Why |
|---|---|---|---|---|
| June 30 (income date) |
Commission Receivable (COMM_REC) | 1,000,000 | — | Recognise the receivable asset at revenue date |
| Commission Income | — | 1,000,000 | Recognise gross revenue in June (IFRS 15) | |
| July 10 (cash date) |
Float / Bank Account | 900,000 | — | Net cash received in July |
| WHT Receivable (1260) | 100,000 | — | Tax credit in July | |
| Commission Receivable (COMM_REC) | — | 1,000,000 | Clear the receivable — cash has arrived |
What this achieves: A Balance Sheet snapshot taken on June 30 shows Commission Receivable +1,000,000 and Commission Income +1,000,000 — balanced. A snapshot taken on July 10 shows Cash +900,000, WHT Receivable +100,000, Commission Receivable 0 — still balanced. The 5-leg structure ensures the Balance Sheet is correct at any historical date without any manual adjusting entries.
Commission Dashboard
Go to Agency → Commissions → Dashboard to see real-time KPIs for commission income. All figures are period-scoped — they change when you switch the date filter (Today, Month-to-Date, Year-to-Date, or custom range):
| KPI Card | What It Shows |
|---|---|
| Total Commission | Gross commission income in the selected period (sum of the Commission Income account credits for transactions in that period) |
| Top Operator | The single operator who contributed the most commission income this period |
| Average Daily | Total commission divided by the number of days in the selected period |
| Entries Count | Number of individual commission entries posted in the period |
A trend chart beneath the KPIs shows daily commission income over the past 30 days. The chart helps you spot slow periods, identify seasonal patterns, or notice if a particular operator has stopped generating income.
Commission Reports
Go to Agency → Commissions → Reports to access three report types. All reports respect the date range filter at the top of the page.
| Report | Purpose | Key Columns |
|---|---|---|
| Summary Report | High-level view of total commission earned per operator per period. Good for comparing operator performance month over month. | Operator, Gross Commission, WHT Deducted, Net Received, Number of Entries |
| Ledger Report | Every individual commission transaction with full detail. Use this to reconcile with provider statements or investigate specific entries. | Date, Operator, Reference, Amount (Gross), WHT, Net, Payment Type, Posted By |
| Float Analytics | Float balance trend, utilization rate, and commission earned per TZS of float deployed. Helps optimise float capital allocation. | Date, Float Balance, Commission Earned, Utilization Rate, Revenue/Float Ratio |
Date Range Filtering
The date range filter applies to the posting date of each commission entry (when cash was received), not the income recognition date (which may be earlier for prior-month postings). This keeps the reports consistent with what actually happened in the bank — if you are reconciling your statement for July, set the filter to July and you will see exactly the entries that hit your float/bank account in July.
Withholding Tax Receivable — Tax Report Integration
The accumulated balance of your WHT Receivable account (1260) appears in two places:
- Balance Sheet — listed as a current asset under the Asset section. This is the total WHT credit available to offset against your annual income tax obligation.
- Tax Report (
Finance → Reports → Tax Report) — shows a dedicated KPI card: Withholding Tax Credits Available (Recoverable). Share this figure with your tax accountant when preparing your annual return — it reduces the tax you owe to TSRA.
Permissions Required
| Permission | What It Controls |
|---|---|
commission-view | View the Commission Dashboard, Ledger, and all reports |
commission-create | Post new commission entries |
commission-edit | Edit unprocessed commission entries |
commission-delete | Delete (reverse) commission entries |
commission-operators | Add and edit operator records — including WHT rate configuration |
Frequently Asked Questions
FIAE — Financial Intelligence & Audit Engine
Import mobile money agent SMS messages, automatically reconcile float, and detect suspicious activity — built for Tanzanian mobile money agency businesses.
Overview
FIAE is for businesses that operate as mobile money agents (M-Pesa, Airtel Money, HaloPesa, Mixx by Yas, and similar). Every agent transaction generates a confirmation SMS on the agent's phone. FIAE reads those SMS messages, turns them into structured, itemized transactions called Financial Events, checks that the running float balance in each SMS matches what actually happened, and automatically raises an alert whenever something looks wrong — a shortfall, a suspiciously large withdrawal, or an unusual burst of activity late at night.
Concepts
| Term | Meaning |
|---|---|
| Financial Event | One parsed transaction from an SMS — a cash-out, cash-in, float top-up, bill payment, commission, airtime sale, transfer, or reversal — with amount, balance before/after, and the original message preserved. |
| Import Batch | One upload of an SMS backup file. Tracks how many messages were found, how many parsed successfully, how many failed, and how many were flagged. |
| Agency Account | A specific provider till/line (e.g. your M-Pesa agent line) that FIAE automatically discovers from the SMS as it parses them. |
| Reconciliation | FIAE recalculates what your float balance should be after each transaction and compares it to the balance the provider's own SMS reports — any gap is a variance. |
| Audit Flag | An automatically raised alert (a specific rule fired) that a staff member must investigate and either resolve or mark as a false positive. |
Navigation
Agency → Intelligence, with sub-menus for Executive/Risk/Operations dashboards, Import SMS, Events, Audit Flags, and Reports.
Step-by-Step — Importing an SMS Backup
- Export your SMS archive from the agent phoneUse an SMS backup app (for example "SMS Backup & Restore" on Android) to export all messages to an XML file, or export a plain TXT list from a basic phone.
- Go to Agency → Intelligence → Import SMS → New ImportUpload the file (up to 100 MB). FIAE automatically detects whether it's the XML or TXT format — you don't need to choose.
- FIAE parses every messageEach SMS is matched to a provider (Mixx, M-Pesa, HaloPesa, or Airtel Money) by its sender, then read into a structured Financial Event.
- Reconciliation and fraud checks run automaticallyImmediately after parsing, FIAE checks every event's balance math and screens for suspicious patterns — no separate step required.
- Review the completed batchSee how many SMS were found, how many parsed successfully, how many failed, how many new accounts were discovered, and how many audit flags were raised.
[AI-PARSED] for your review. See AI-Assisted FIAE Import Fallback.The Three Dashboards
| Dashboard | Best For | What It Shows |
|---|---|---|
| Executive | Business owner | Total float across all accounts, active account count, open flags, today's transaction volume, this month's commission, open balance-mismatch count, and a 30-day volume trend. |
| Risk | Compliance / audit staff | Every open audit flag ordered from Critical to Info severity, flag counts by type, and the 10 accounts with the most open flags. |
| Operations | Branch manager | Each account's recent activity, today's hourly transaction pattern by type, and volume/commission broken down by provider. |
How Reconciliation Works
For every account, FIAE walks through events in time order. For each one it calculates the balance it expects (previous balance, minus cash-outs/float-outs/bill payments/transfers-out/airtime sales, plus float-ins/commission/reversals) and compares it to the balance the SMS itself reports. The result is marked:
| Status | Meaning |
|---|---|
| Matched | Expected and actual balance agree. |
| Minor Variance | A small gap (TZS 100 or more) — often just rounding, but worth a glance. |
| Major Variance | A gap of TZS 1,000 or more — automatically raises a Balance Mismatch audit flag (High severity if the gap exceeds TZS 50,000). |
Automatic Fraud & Anomaly Detection
Every import batch is automatically screened against these rules; each one that fires creates an Audit Flag with a severity level:
| Rule | Fires When | Severity |
|---|---|---|
| Large Withdrawal | A cash-out of TZS 500,000 or more | Medium, or High above TZS 1,000,000 |
| Large Deposit | A float top-up of TZS 1,000,000 or more | Low, or High above TZS 5,000,000 |
| Frequency Spike | 10 or more withdrawal-type transactions within 10 minutes | Medium |
| Repeated Failures | 5 or more failed transactions within 10 minutes — possible credential attack | Medium |
| Reversal After Large Transaction | A reversal at or above the large-withdrawal threshold | Medium |
| Zero-Amount Transaction | A confidently-parsed event recording TZS 0 | Low |
| Unusual Hours | A withdrawal-type transaction between midnight and 5 AM above TZS 50,000 | Low |
| Balance Mismatch | Reconciliation finds a major variance | Medium, or High above TZS 50,000 |
| Missing Transaction | A gap in the SMS sequence suggests a message was never received or was deleted | Medium |
All thresholds are configurable per provider under FIAE settings, so a business with naturally larger daily float can raise its own large-transaction limits.
Step-by-Step — Investigating an Audit Flag
- Go to Agency → Intelligence → Audit FlagsFlags are sorted by severity, from Critical down to Info.
- Open a flagReview the flag type, description, and the underlying evidence (the exact SMS and amounts involved).
- Assign it to a staff member (optional)Useful when a supervisor wants a specific person to look into it.
- InvestigateCompare against the agent's physical cash count or provider statement.
- Resolve the flagMark it Resolved (a real issue was found and corrected) or False Positive (nothing was actually wrong), with a short note explaining the outcome — a minimum of 5 characters is required so flags can't be dismissed with no explanation.
FIAE Reports
| Report | Purpose |
|---|---|
| Register | Every parsed financial event, filterable by type, provider, and date — your complete transaction log. |
| Float Movement | Float top-ups, float-outs, and transfers over time per account, with running totals in and out. |
| Daily Recon | One row per account per day: opening balance, float and cash movement, commission, expected vs. actual closing balance, variance, and status. |
| Commission | Every commission-earning event, grouped by transaction type — useful for verifying provider commission statements. |
| Audit Exceptions | All flags raised in a date range, grouped by severity and type, with an open-count summary. |
| Fraud Indicators | Only the flags associated with suspicious-pattern rules (large withdrawal, frequency spike, repeated failures, reversal-after-large, unusual hours, balance mismatch). |
Permissions
| Permission | What It Controls |
|---|---|
fiae.view | View dashboards, events, and reports |
fiae.import | Upload new SMS import batches |
fiae.reconcile | View the Daily Recon report |
fiae.audit | View the Risk dashboard, Audit Exceptions, and Fraud Indicators reports |
fiae.resolve_flags | Assign and resolve audit flags |
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Import batch shows many failed messages | The messages are from a provider FIAE doesn't recognise yet, or aren't transaction confirmations at all (e.g. promotional SMS) | This is expected for non-transaction SMS. If genuine transaction SMS are failing, check Events for any [AI-PARSED] flags — the AI fallback may still have captured them. |
| A transaction appears twice | The same SMS was included in two overlapping backup exports | FIAE deduplicates by the exact SMS content, so true duplicates are automatically skipped — if you still see two entries, compare the raw message text to confirm they are genuinely different transactions. |
| Balance Mismatch flag on an account you know is correct | A transaction SMS was deleted from the phone before export, breaking the sequence | Resolve the flag as a false positive with a note, and going forward export SMS backups more frequently to avoid gaps. |
Related Topics: AI-Assisted Fallback Commissions Bridge Transfers Vault
Human Resources
Complete HR management — from hiring to payroll, leave, attendance, and performance.
Overview
The Personnel module (HR) covers the entire employee lifecycle: hiring and onboarding, daily attendance, payroll processing, leave management, staff loans, performance reviews, and HR reporting.
HR Dashboard
Go to Personnel → HR Dashboard for a summary of your workforce:
HR Setup & Configuration
Configure your organisation structure, work shifts, and pay rules before adding employees — everything in Payroll, Attendance, and Leave depends on these building blocks.
Overview
Before you can hire your first employee correctly, six foundation tables need to exist: Departments, Positions, Shifts, Salary Structures, Salary Components, and Leave Types. Skipping this step doesn't stop the system from working, but it does mean employees end up without a shift (so attendance can't detect lateness) or without a salary structure (so payroll can't calculate statutory deductions automatically).
Navigation
Personnel → Setup, with a separate tab for each of: Departments, Positions, Shifts, Salary Structures, Salary Components, Leave Types.
Concepts
| Term | Meaning |
|---|---|
| Department | An organisational unit (e.g. "Sales," "Warehouse," "Finance"). Departments can be nested under a parent department, and each can have a head employee. |
| Position | A job title within a department (e.g. "Cashier" under "Sales"), with an optional seniority level. |
| Shift | A daily work-time template — start time, end time, a grace period (minutes an employee may clock in late without being marked late), and the point at which extra hours count as overtime. A shift is not tied to specific weekdays; it is simply reused every working day. |
| Salary Structure | A named pay grade (e.g. "Junior Staff," "Management") that groups together the allowances, deductions, and taxes that apply to everyone on that grade. |
| Salary Component | One line item inside a salary structure — an allowance (adds to pay), a deduction (subtracts from pay), or a tax (a statutory withholding like PAYE). Each component is either a fixed TZS amount or a percentage of basic salary. |
| Leave Type | A category of leave (Annual, Sick, Maternity) with its own yearly quota, whether it is paid, and whether unused days carry forward into the next year. |
Screen Walkthrough
| Screen | Key Fields | Notes |
|---|---|---|
| Departments | Name, Code, Parent Department, Head of Department, Description | A department with employees currently assigned to it cannot be deleted. |
| Positions | Title, Department, Code, Level, Description | A position assigned to active staff cannot be deleted. |
| Shifts | Name, Start Time, End Time, Grace Period (minutes), Overtime After (minutes) | A shift with existing attendance history cannot be deleted. |
| Salary Structures | Name, Description, Active | Cannot be deleted while it still has salary components attached. |
| Salary Components | Structure, Name, Code, Type (Allowance / Deduction / Tax), Calculation (Fixed amount / % of Basic), Value, Taxable, Expense Account, Liability Account, Sort Order | See the accounting mapping below — this is the most important setup screen in HR. |
| Leave Types | Name, Code, Days Allowed per Year, Paid, Requires Approval, Carry Forward, Max Carry-Forward Days | Cannot be deleted once employees have leave requests against it. |
How Salary Components Drive Payroll Accounting
This is the one setup step accountants must get right. Every Allowance component needs an Expense Account (the account debited when the allowance is earned) and every Deduction or Tax component needs a Liability Account (the account credited when the amount is withheld from the employee, representing what the business now owes — to TRA for PAYE, to NSSF for pension contributions, and so on). If you leave a deduction's Liability Account blank, that amount still posts correctly on payday, but it falls into a generic suspense account instead of its own dedicated statutory account — making it harder to reconcile what you owe each authority.
Step-by-Step — Building a Salary Structure
Example: Arusha Agrovet wants a "Retail Staff" pay grade for its shop attendants.
- Create the Salary StructurePersonnel → Setup → Salary Structures → New. Name: "Retail Staff."
- Add a Housing Allowance componentType: Allowance. Calculation: Percentage of Basic. Value: 15%. Expense Account: "Salaries & Wages Expense." Taxable: Yes.
- Add a PAYE componentType: Tax. Calculation: value computed by the payroll engine per Tanzania's PAYE bands. Liability Account: "PAYE Payable."
- Add an NSSF componentType: Deduction. Calculation: Percentage of Basic. Value: 10%. Liability Account: "NSSF Payable."
- Assign the structure to employeesOpen each Retail Staff employee's record and set their Salary Structure to "Retail Staff."
Accounting Example — Payroll Approval
Business event: Arusha Agrovet approves August 2026 payroll for cashier Amina Hassan — basic salary TZS 400,000, housing allowance TZS 60,000 (15%), PAYE TZS 18,000, NSSF TZS 40,000 — paid by cash.
| Account | Debit | Credit |
|---|---|---|
| Salaries & Wages Expense (Basic + Housing Allowance) | TZS 460,000 | |
| PAYE Payable | TZS 18,000 | |
| NSSF Payable | TZS 40,000 | |
| Cash | TZS 402,000 |
The business records the full cost of employing Amina (TZS 460,000) as an expense, while only TZS 402,000 actually leaves the cash account — the remaining TZS 58,000 becomes a short-term liability owed to TRA (PAYE) and NSSF, to be paid when you remit their statutory contributions.
HR Documents & Emergency Contacts
Two smaller setup areas live alongside the main configuration screens:
- HR Documents (Personnel → Employees → open an employee → Documents) — a document vault for contracts, ID copies, CVs, and certificates. Upload any PDF, Word document, or image up to 10 MB and set an optional expiry date; documents expiring within 30 days are highlighted so contracts don't lapse unnoticed.
- Emergency Contacts (Personnel → Employees → open an employee → Emergency Contacts) — one or more contact persons per employee (name, relationship, phone, address). Marking a contact as "Primary" automatically un-marks any other primary contact for that employee, so there is always exactly one clear first call in an emergency.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Payroll approval fails with "Accounting code [X] is not configured for this branch" | A required GL account (e.g. Wages, Cash, or a statutory liability account) doesn't exist yet on this branch's chart of accounts | Create the missing account under Finance → Chart of Accounts, then re-approve. |
| Can't delete a department, position, or shift | It is still in use by an employee or attendance record | Reassign the affected employees first, or mark it inactive instead of deleting it. |
| An employee's attendance is never marked "Late" | Their assigned shift has no grace period configured, or they have no shift at all | Check Personnel → Setup → Shifts and confirm the employee has a shift assigned in their profile. |
| A deduction always posts to the wrong account | The Salary Component has no Liability Account configured, so it falls back to the generic suspense account | Open Personnel → Setup → Salary Components and set the correct Liability Account. |
Related Topics: Employees Payroll Attendance Leave Management Chart of Accounts
Employee Management
Employee Directory
Go to Personnel → Staffing → Directory to see all employees. Each employee record contains:
- Personal details (name, date of birth, national ID, gender)
- Contact information (phone, address)
- Employment details (employee number, hire date, department, position, shift)
- Salary information (basic salary, salary structure)
- Bank account details (for payroll transfer)
- Emergency contacts
- HR documents (contract, certificates)
Adding a New Employee
- Go to Personnel → Staffing → Directory → Add EmployeeFill in all personal and employment details. An employee number is auto-generated.
- Assign Department, Position, and ShiftThese must be set up first under Personnel → Staffing → Departments, Positions, and Shifts.
- Assign a Salary StructureLink the employee to a salary structure that defines their base pay and allowances.
- Add emergency contacts and documentsUpload signed employment contract and other required documents.
- SaveThe employee is now active in the system and will appear in payroll runs.
Organization Setup
Before adding employees, set up your organization structure:
- Departments — e.g., Finance, Operations, Sales, IT (Personnel → Staffing → Departments)
- Positions — e.g., Branch Manager, Accountant, Cashier (Personnel → Staffing → Positions)
- Shifts — Define work hours, e.g., Day Shift: 08:00–17:00, daily hours = 9 (Personnel → Staffing → Shifts)
Employee Documents
Go to Personnel → Staffing → E-Documents to upload, download, and manage employee documents. Documents are stored securely and can be downloaded by authorized HR staff.
Attendance
Overview
The Attendance module tracks when employees arrive and leave each day. It supports two modes: staff self-service (clock in/out from any device) and manual attendance entry by HR staff.
Self-Service Clock In/Out
Employees can clock in and out from the My Attendance link in their personal menu — no HR permission required. The system records the timestamp and calculates hours worked, late minutes, and overtime.
Manual Attendance Entry
HR staff can enter attendance manually for a date in the past. Go to Personnel → Attendance → Manual Entry, select the employee, date, status (Present/Absent/Half Day/Leave), and enter clock-in and clock-out times.
Attendance Statuses
| Status | Meaning | Payroll Effect |
|---|---|---|
| Present | Employee attended on time | Full day's pay |
| Late | Arrived after shift start time | Late minutes tracked; may affect pay based on policy |
| Half Day | Worked half shift | Half day's pay |
| Absent | Did not report to work | No pay (unless leave is approved) |
| On Leave | Approved leave in effect | Paid if annual/sick leave; unpaid if leave balance exhausted |
Viewing Attendance Logs
Go to Personnel → Attendance to filter attendance records by date range, department, or employee. Use the Attendance Report under HR Reports for a summary.
Leave Management
Overview
The Leave module manages employee time-off requests from submission to approval, and tracks leave balances to ensure employees don't exceed their entitlements.
Leave Types
Go to Personnel → Leave Management → Leave Types to define the types of leave your business offers:
- Annual Leave (e.g., 21 days per year, carries over)
- Sick Leave (e.g., 14 days per year, no carryover)
- Maternity/Paternity Leave
- Compassionate Leave
- Unpaid Leave
How to Apply for Leave
- Go to Personnel → Leave Management → Apply for LeaveSelect the leave type, start date, end date, and reason.
- Submit the requestThe request goes to Pending status and notifies your manager.
- Manager approves or rejectsManager goes to Personnel → Leave Management and reviews the request.
- Leave balance updatesOn approval, the number of days is deducted from the employee's leave balance and attendance records are updated.
Scenario: John Mushi at Arusha Electronics Centre has 18 days of annual leave remaining. He applies for 5 days (Monday to Friday) to attend his brother's wedding.
Manager Rehema Joseph reviews the request, checks team coverage, and approves it. The system automatically deducts 5 days from John's leave balance (now 13 days remaining) and marks him as "On Leave" in the attendance records for those 5 days.
Leave Balance
Each employee's leave balance is tracked per leave type. The balance is set when you configure the leave type (e.g., 21 days per year). Days used are deducted upon approval. Go to the employee's profile to see their current leave balance.
Payroll
Automated monthly payroll calculation with tax deductions, bank export, and GL posting.
Overview
The Payroll module calculates monthly salaries for all employees, including basic salary, allowances, deductions (PAYE tax, NHIF, NSSF), and staff loan repayments. It generates payslips, a bank transfer file, and posts the accounting entries automatically.
Salary Structures and Components
Before running payroll, set up:
- Salary Components — Individual allowances and deductions (Personnel → Payroll → Components). Examples: Housing Allowance (TZS 150,000 fixed), Transport Allowance (10% of basic), PAYE Tax (percentage, calculated), NSSF (10% of basic)
- Salary Structures — Templates that bundle components for a grade level (Personnel → Payroll → Structures). Example: "Junior Staff" structure includes Basic + Housing + Transport - PAYE - NSSF
- Assign structures to employees — Each employee is linked to one salary structure
Running Monthly Payroll
- Go to Personnel → Payroll → Payroll Runs → CreateSelect the month and year. The system auto-populates all active employees.
- Process the payrollClick "Process". The system calculates each employee's gross salary, applies all components, deducts loan repayments (if any), and produces net pay.
- Review payslipsCheck each employee's payslip for accuracy before approval. Click any employee name to view their detailed payslip.
- Manager approves the payrollOnce satisfied, the manager with
hr-payroll-approvepermission approves the run. - Post to GLOn approval, the system posts the payroll journal entries to the general ledger.
- Export bank fileDownload the bank transfer file (CSV) to upload to your bank's online platform for salary disbursement.
Employee: Emmanuel Lema, Gross: TZS 1,200,000, PAYE: TZS 120,000, NSSF (employee): TZS 60,000, Net: TZS 1,020,000
| Account | Debit | Credit |
|---|---|---|
| Salaries Expense | TZS 1,200,000 | |
| PAYE Tax Liability (Payable to TRA) | TZS 120,000 | |
| NSSF Liability (Payable to NSSF) | TZS 60,000 | |
| Salary Payable / Bank | TZS 1,020,000 |
Payslips
Every employee can view and download their own payslips under My Payslips in their personal menu — no HR access required. HR staff can also print payslips from the payroll run detail page.
Best Practices
- Finalize attendance records before running payroll — late corrections are difficult
- Always get manager approval before posting payroll to GL
- Keep salary component rates up to date (TRA PAYE brackets change periodically)
- Archive monthly payroll bank files for at least 7 years
Using the Payroll Reserve (RES_PAYROLL)
RES_PAYROLL (Future Salaries Reserve) is an equity earmark account, not a payment source. The payroll module always disburses salaries from CASH — you cannot select RES_PAYROLL as a payment account in the payroll form. Instead, the reserve works as a planning signal: it tells management that a certain amount of equity has been set aside for salaries and must not be spent on anything else.
The workflow has three steps, two of which you post manually via Journal Entries and one that the system posts automatically on payroll approval.
Phase 1 — Fund the reserve before salary month
Management decides to set aside TZS 5,000,000 from equity to cover next month's payroll. Post this journal manually via Finance → Ledger → Journal Entries → Create:
| Account | Debit | Credit |
|---|---|---|
| Opening Balance Equity (OPEN_BAL) | TZS 5,000,000 | |
| Future Salaries Reserve (RES_PAYROLL) | TZS 5,000,000 |
Description: Salary reserve — August 2026
RES_PAYROLL now carries a 5,000,000 credit balance — a visible signal on the balance sheet that this money is earmarked.
Phase 2 — Run payroll normally (system posts automatically)
Go to HR → Payroll → Create, process and approve as usual. On approval the system posts this journal with no manual input from you:
| Account | Debit | Credit |
|---|---|---|
| Salaries & Wages (WAGES) | TZS 4,800,000 | |
| Cash in Hand (CASH) | TZS 3,950,000 | |
| PAYE Payable (PAYE_PAY) | TZS 450,000 | |
| NSSF/PSSSF Payable (SS_PAY) | TZS 400,000 |
Total gross wages = TZS 4,800,000. This is the number you will use in Phase 3.
Phase 3 — Release the reserve after payroll is approved
Release only the amount that payroll actually cost — the gross wages figure (TZS 4,800,000), not the amount you originally set aside (TZS 5,000,000). Post this journal manually:
| Account | Debit | Credit |
|---|---|---|
| Future Salaries Reserve (RES_PAYROLL) | TZS 4,800,000 | |
| Opening Balance Equity (OPEN_BAL) | TZS 4,800,000 |
Description: Release payroll reserve — August 2026 (ref: PAY-XXXXXXXX)
After this, RES_PAYROLL still holds TZS 200,000 (5,000,000 − 4,800,000). This is the unused portion of the earmark.
Handling the unused balance (TZS 200,000):
- Carry it forward — leave 200,000 in RES_PAYROLL as a head-start for next month's reserve.
- Return it to equity — post DR RES_PAYROLL 200,000 / CR OPEN_BAL 200,000 to fully clear the account.
Phase Summary
| When | Who posts it | Journal | Purpose |
|---|---|---|---|
| Before salary month | You (manual) | DR OPEN_BAL / CR RES_PAYROLL | Earmark the budget |
| Payroll approval | System (automatic) | DR WAGES / CR CASH + liabilities | Salaries paid & taxes recorded |
| After approval | You (manual) | DR RES_PAYROLL / CR OPEN_BAL (gross wages only) | Release what was spent |
| If unused balance remains | You (optional) | DR RES_PAYROLL / CR OPEN_BAL (remainder) | Return unused earmark to equity |
Staff Loans
The HR Loan module manages loans given to employees — salary advances or personal loans repaid through monthly payroll deductions.
Loan Workflow
How Staff Loans Work
- HR creates a loan application for the employee
- Manager approves the loan
- Finance disburses the loan (posts: Debit Staff Loans Receivable → Credit Cash/Bank)
- Monthly repayment amounts are auto-deducted in the payroll run
- When the balance reaches zero, the loan is marked as cleared
The Disbursement Queue (Personnel → Staff Loans → Disbursement Queue) shows all approved loans awaiting disbursement.
Performance Reviews
Go to Personnel → Performance to manage employee performance reviews. Each review can include multiple KPIs (Key Performance Indicators) with target and actual scores. Reviews help with promotion decisions, salary adjustments, and identifying training needs.
Creating a Performance Review
- Go to Personnel → Performance → New Review
- Select the employee and review period
- Add KPIs — each KPI has a name, target value, actual value, and weight
- The system calculates the weighted overall score
- Add comments and recommendations
- Save and share with the employee
HR Reports
Go to Personnel → Reports for workforce analytics:
| Report | Purpose | Key Columns |
|---|---|---|
| Staff Statistics | Workforce overview by department, gender, employment type | Dept, Headcount, Avg Salary, Turnover Rate |
| Attendance Logs | Full attendance history for any period and employee group | Employee, Date, Status, Clock In, Clock Out, Hours |
| Payroll Summaries | Monthly payroll totals by department | Dept, Headcount, Gross, Deductions, Net Pay |
| Leave Usage | Leave taken by employee and leave type | Employee, Leave Type, Days Taken, Balance Remaining |
Customer Management
Maintain a complete, accurate customer database for better service and business intelligence.
Overview
The Customer module maintains a central database of all your business's customers. A customer profile is shared across every module that touches that person — savings accounts, loans, POS sales, and invoices all reference the same record, so you always see one complete picture rather than scattered fragments.
Navigation
Management Panel → Manage Customers.
Customer Profile Fields
| Field | Description |
|---|---|
| Customer Number | Auto-generated unique identifier, e.g. CUS-000123 |
| Full Name / Phone / Email | Core contact details — phone is used for SMS balance alerts |
| National ID / TIN Number | Optional identity fields, recommended for KYC compliance (see below) |
| Date of Birth / Gender | Demographic information |
| Occupation, Employer, Business Name | Useful context for credit assessment, though not used in any automated scoring today |
| Physical & Postal Address | Contact and correspondence address |
| Next of Kin Name & Phone | Emergency contact for the customer |
| Lifecycle Status | Active, Inactive, Blocked, Deceased, or Blacklisted |
Step-by-Step — Adding a Customer
- Go to Management Panel → Manage Customers → Add CustomerRequires the
customer-createpermission. - Fill in the customer's detailsExample: John Mushi, phone
+255 7XX XXX XXX, National ID and TIN if available. - SaveA unique customer number is assigned automatically, and a savings account and loan account are created for the customer behind the scenes, ready to use.
- Open the customer's profile to view their Financial SnapshotShows their savings and loan balances together with their POS purchase history — total orders, total spend, and last purchase date — plus their five most recent orders in one place.
Managing a Customer's Status
From the customer list, a customer can be Blocked (temporarily prevents new transactions, for example if a dispute is under investigation) or Reactivated — both actions require the customer-edit permission and are recorded in the activity log.
Exporting Your Customer List
Click Export to download your customer list as CSV, Excel, or PDF, filterable by search term, lifecycle status, and registration date range. Exported columns include customer number, full name, phone, email, National ID, branch, status, and registration date — useful for marketing campaigns, compliance audits, or bulk SMS lists.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Can't find a customer's transactions | Searching by a misspelled name instead of phone or customer number | Search by phone number or customer number — both are unique and more reliable than name spelling. |
| Customer can't complete a purchase or deposit | Their lifecycle status is Blocked, Deceased, or Blacklisted | Check their status on the profile page; a Tenant Owner or manager can reactivate a wrongly blocked customer. |
Related Topics: Customer Savings Customer Loans Invoices Legacy Data Import
Knowledge Hub
A secure, searchable library for all your business documents, policies, and training materials — plus a registry of your LUKU prepaid electricity meters.
Overview
The Knowledge Hub is your organization's internal document library. Store operational procedures, policy documents, training materials, licenses, and reference files that staff need to access regularly. A separate area within it, LUKU Numbers Registry, keeps track of your business premises' prepaid electricity meter numbers.
Using the Knowledge Hub
- Browse — Go to Management Panel → Knowledge Hub to see all assets
- Search — Use the search bar to find documents by name or category
- Download — Click Download to save a file locally
- Upload — Click Create to upload a new document. Add title, category, and description
LUKU Numbers Registry
LUKU (short for "Lipa Umeme Kabla ya Kutumia" — pay for electricity before use) is TANESCO's prepaid electricity token system used across Tanzania. If your business has multiple premises or branches, each with its own prepaid electricity meter, the LUKU Numbers Registry keeps every meter number in one place instead of scattered across sticky notes and old receipts.
Navigation: Knowledge Hub → LUKU Numbers.
| Field | Description |
|---|---|
| Meter Number | The unique LUKU meter number printed on the meter itself — must be unique across your business |
| Name / Label | A description of which premises or branch the meter belongs to, e.g. "Kilimanjaro Pharmacy — Main Store" |
| Additional Info | Optional notes — for example, the meter's physical location within the building |
Every record can be searched by name or meter number, and every add, edit, or delete is written to the activity log under the "LC Records" category.
Permissions
| Permission | What It Controls |
|---|---|
knowledge-hub-view | Browse and search the document library and LUKU registry |
knowledge-hub-download | Download files |
knowledge-hub-create | Upload new documents or add new LUKU meter records |
knowledge-hub-edit | Edit document metadata or LUKU meter records |
knowledge-hub-delete | Delete LUKU meter records |
Related Topics: Legacy Data Import
Users & Staff Management
Create and manage staff accounts, control access, and maintain user security.
Overview
Tenant owners and authorized managers can create, edit, and deactivate staff user accounts from Management Panel → Manage Users.
Creating a Staff Account
- Go to Management Panel → Manage Users → Add StaffYou must have an active branch selected before creating staff accounts.
- Fill in user detailsEnter the staff member's full name, email address, phone number, and branch assignment.
- Assign rolesSelect one or more roles for the user. Roles determine which modules and actions the user can access.
- SaveThe system sends the user a welcome email with login instructions and a temporary password.
Managing User Status
- Toggle Status — Activate or deactivate a user account without deleting it. Deactivated users cannot log in.
- Unlock Login — If a user is locked out due to too many failed login attempts, click Unlock Login to restore their access.
- Edit Roles — Change the permissions assigned to a user at any time.
Security Features
- OTP (Two-Factor Authentication) — Each user can enable OTP from their own profile settings. OTP is sent via SMS or email at login.
- Device Trust — A Tenant Owner setting: when turned on, any staff login from a device the system hasn't seen before is held on a "waiting for approval" screen until the Tenant Owner approves or denies it.
- Inactivity Screen Lock — The system automatically locks the screen after a period of inactivity. Users enter their password to unlock.
See Profile & Security Settings for the full walkthrough of how each of these works from a user's point of view.
Roles & Permissions
Define what each group of staff can see and do within the system.
Overview
The Roles & Permissions system controls access to every feature in Goju Cloud. A Role is a named group of permissions. For example, the "Cashier" role might have: pos-checkout, savings-create, loans-create. A user assigned the Cashier role gets all those permissions automatically.
Creating a Role
- Go to Management Panel → User Roles → Create RoleEnter a role name (e.g., "Accountant", "Cashier", "HR Officer").
- Select permissionsCheck the specific permissions this role should have. Permissions are grouped by module for easy selection.
- Save the roleThe role is now available to assign to staff members.
Assign a Role to a User
Go to Management Panel → Manage Users, find the staff member, and click Edit Roles. Select the appropriate role(s) and save.
Suggested Role Templates
| Role Name | Typical Permissions |
|---|---|
| Cashier | pos-checkout, pos-view, savings-create, loans-create |
| Accountant | accounting-view, accounting-create, expense-view, expense-post, reports.* |
| HR Officer | hr-employee-*, hr-payroll-view, hr-payroll-create, hr-leave-* |
| Branch Manager | All of the above + savings-view-all, loans-view-all, invoice-approve, expense-approve, recon-approve |
| Inventory Officer | inventory-view, inventory-create, inventory-adjust, purchasing-* |
| Agency Operator | bridge-view, bridge-create, strongroom-view, commission-view |
Branch Management
Create and manage multiple business locations, each with isolated data.
Overview
Goju Cloud supports an unlimited number of branches (subject to your subscription plan). Each branch has its own data — accounts, transactions, staff, and inventory are isolated per branch. The business owner can switch between branches to view any branch's data.
Creating a Branch
- Go to Organization → Branches → Create Branch (Tenant Owner menu)
- Enter the branch name, code, manager name, and location
- Set the VAT rate applicable to this branch (if different branches have different VAT obligations)
- Save — the branch is now active and can have staff and accounts assigned to it
Switching Branches
As a Tenant Owner with access to multiple branches, use the Switch Branch button in the navigation to change your active branch context. All data views and transactions will then apply to the selected branch.
Branch Status
Branches can be set to three statuses: Online (normal operation), Maintenance (limited access), or Blocked (no access). Use the branch-system-status permission to change branch status.
Audit Logs
A tamper-proof record of every action performed in the system.
Overview
Goju Cloud records every significant user action: logins, transaction postings, approvals, reversals, configuration changes, and more. These audit logs cannot be edited or deleted by any user and serve as the definitive record for investigations and compliance.
Viewing Audit Logs
Go to Management Panel → Audit Logs to see all activity for your branch. Each entry shows:
- Date and time of the action
- User who performed the action
- What was done (e.g., "Posted Expense #EXP-2024-001")
- IP address and device
- Before and after values for data changes
Filtering Logs
You can filter by user, action type, date range, or module to quickly find specific events.
Who Sees What
| Viewer | Scope of Visible Logs |
|---|---|
| Tenant Staff | Only their own branch's activity |
| Tenant Owner | All activity across the whole business, optionally filtered to the currently active branch |
| SaaS Admin | Only platform-level activity (tenant creation, plan changes, subscription renewals, platform settings) — never a tenant's business data |
The most recent 100 entries are shown at a time. A Tenant Owner can clear old log entries (30/60/90/180 days or all) from Management Panel → Audit Logs — this action is itself logged.
Legacy Data Import
A one-time migration tool for bringing customer, product, and record data over from a previous system.
Overview
If your business is switching to Goju Cloud from an older system, you don't have to re-type years of customer and product records by hand. Legacy Data Import reads a raw database export from your old system and loads it directly into Goju Cloud. This is a Tenant Owner-only tool, meant to be used once during setup — not a routine feature.
Navigation
This tool does not appear in the main menu. The Tenant Owner reaches it directly at /data-import (ask Goju Cloud support for the exact link during your onboarding/migration project).
What Can Be Imported
| Data Type | Goes Into | Duplicate Check |
|---|---|---|
| Customers | Customer records (with savings/loan accounts auto-created) | Matched by existing name/phone |
| Products | Product catalogue | Matched by barcode |
| Knowledge Hub Documents | Knowledge Hub asset library | Matched by title |
| LUKU Records | LUKU Numbers Registry (see Knowledge Hub) | Matched by meter number |
Step-by-Step — Importing Legacy Customers
- Export your old system's data as a SQL fileAsk your previous system provider for a raw database export (a standard
INSERT INTOSQL dump), up to 20 MB. - Open the Data Import tool and choose "Customers"Select the import type before uploading.
- Map old branches to new branchesSince your old system's branch IDs don't match Goju Cloud's, tell the tool which old branch corresponds to which of your new Goju Cloud branches.
- Upload the SQL file and start the importThe tool processes records in batches (100 customers at a time) so large files don't time out — you'll see a progress indicator until it finishes.
- Review the resultsThe summary shows how many records were imported, how many were skipped as duplicates, and any errors encountered.
Importing Products with Opening Stock
When importing products, you can optionally post their opening stock quantities straight to the General Ledger by supplying a transaction date (which must not be in the future) and enabling "Post to GL." Imported products are placed in an automatically-created "Legacy Data" category so you can easily find and re-organise them afterward.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Import fails immediately | The uploaded file isn't a valid SQL INSERT dump, or exceeds 20 MB | Ask your previous provider for a plain SQL export of just the relevant table(s); split very large exports if needed. |
| Some customers didn't import | They matched an existing customer by name/phone, or were a recognised placeholder record | This is expected — check the skipped count in the results summary. |
| I can't find this menu item | Legacy Data Import is intentionally hidden from the main menu — it's a one-time setup tool | Only the Tenant Owner can access it, by direct link, with an active branch selected. |
Related Topics: Customers Products Knowledge Hub
Platform Administration
The control centre for the Goju Cloud team — managing every business (tenant) on the platform, subscription plans, billing, and system-wide settings.
Overview
Goju Cloud is one platform serving many independent businesses (tenants) — Moshi Hardware, Arusha Agrovet, Kilimanjaro Pharmacy, and hundreds of others each have their own isolated data. Platform Administration is where the Goju Cloud team creates new tenant accounts, defines subscription plans and which features each plan includes, processes renewals, manages their own internal admin staff and permissions, configures platform-wide settings, sends SMS on behalf of the platform, and monitors the health of the whole system.
Navigation
A SaaS Admin's top navigation is entirely different from a tenant's — there is no branch switcher and no operational menus (POS, Inventory, Savings). Instead the menu covers: Dashboard, Tenants, Subscriptions, Plans, Roles & Admins, SMS Center, System Monitor, and Settings.
What's in This Section
Tenant Management
Create and manage every business account on the Goju Cloud platform.
Navigation
Tenants in the SaaS Admin menu.
Step-by-Step — Creating a Tenant Manually
This is how most new businesses join Goju Cloud today (see Creating Your Account for context on self-service sign-up).
- Go to Tenants → Add TenantRequires the
saas-tenant-createpermission. - Enter the business detailsBusiness name, phone, email, city, and subscription plan. Example: "Kilimanjaro Pharmacy," Moshi.
- Enter the first branchBranch name, location, phone, and email — every tenant needs at least one branch to operate.
- Enter the owner's login detailsFirst name, last name, email, and a starting password. This person becomes the Tenant Owner.
- SaveThe system builds the tenant's entire starting environment in one step — chart of accounts, default departments/positions/shifts, the owner's employee record, default roles, and an active, paid subscription — the business can log in and start working immediately, with no payment step.
Editing, Blocking, and Unblocking a Tenant
- Edit — Update the business name, domain, city, phone, or email from the tenant's detail page.
- Block — Immediately prevents the business from being accessed at all. Use this for serious cases (e.g. non-payment escalation, fraud investigation) rather than routine maintenance.
- Unblock — Restores access.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| "Email already in use" when creating a tenant | The business email, branch email, or owner email already exists somewhere on the platform | Use a different email, or check whether this business already has an account. |
| A newly created tenant's owner can't see any menus | Rare — usually means role/permission sync didn't complete | Check that the tenant's "System Admin" role has permissions assigned, and that the owner user has that role. |
Related Topics: Plans Subscriptions Branches
Plans & Feature Definitions
Define subscription packages and control which modules each package unlocks.
Concepts
| Term | Meaning |
|---|---|
| Plan | A subscription package with a price, billing interval, and limits (number of users, branches, storage). |
| Feature Definition | An entry in the master list of module "keys" that can be switched on or off — e.g. HR Module, Inventory Module, POS Module, Agency Module, AI Assistant, SMS Notifications. |
| Plan Feature | The on/off switch connecting one Plan to one Feature Definition. Every plan has its own independent set of switches. |
When a tenant's plan has a feature switched off, that entire module vanishes from their menu automatically — there are no broken links or "upgrade to unlock" dead ends. This is the single mechanism controlling which businesses see Inventory, Agency (Bridge/Vault/Commission/FIAE), HR, POS, SMS notifications, and the AI Assistant.
Step-by-Step — Creating a Plan
- Go to Plans → CreateRequires
saas-plan-create. - Enter the plan's commercial termsExample: "Growth Plan," TZS 150,000, billed Monthly, 10 users, 3 branches.
- Save the planIt's created inactive by default until you're ready to offer it.
- Go to Plans → FeaturesTick every module this plan should include — for example, POS and Inventory, but not the Agency module or AI Assistant for an entry-level plan.
- Activate the planOnce active, it becomes available to assign to new and existing tenants.
Managing Feature Definitions
Feature Definitions are the master registry of possible module keys — normally set up once and rarely changed. Each has a machine-readable key (lowercase letters, numbers, and underscores only), a display label, an icon, and a badge colour used in plan-comparison screens. A feature key already referenced by a plan cannot be deleted, only deactivated.
Related Topics: Tenant Management Subscriptions
Subscriptions & Renewals
Track every tenant's billing history and process renewals on their behalf.
Navigation
Subscriptions in the SaaS Admin menu lists every subscription on the platform, with its tenant and plan.
Step-by-Step — Renewing a Tenant's Subscription
- Go to Subscriptions, find the tenant, and click RenewRequires
saas-subscription-renew. - Choose the plan to renew ontoUsually the same plan, but this is also how you upgrade or downgrade a tenant at renewal time.
- ConfirmThe system calculates the new period automatically — starting from the tenant's current expiry date (so early renewals don't lose paid time), running for one month or one year depending on the plan's billing interval.
- DoneThe tenant's subscription is immediately marked active and paid — there is no online payment step in this admin-driven flow.
Blocking / Unblocking a Subscription
Distinct from blocking the tenant account itself (see Tenant Management), a subscription can be individually blocked — useful for a billing hold while keeping the tenant's account and data otherwise intact.
Viewing a Tenant's Full Billing History
Open a tenant's subscription history to see every plan they've ever been on and every renewal that has occurred — useful when a tenant disputes a charge or asks when their last renewal happened.
Related Topics: Billing & Payments (Tenant View) Plans
SaaS Roles & Admin Users
Manage the Goju Cloud team's own logins and what each of them can do on the platform.
Concepts
SaaS Roles are completely separate from tenant roles (see Roles & Permissions) — they use their own permission namespace (every SaaS permission starts with saas-, e.g. saas-tenant-create, saas-plan-edit) so a platform role can never accidentally be assigned a tenant-only permission, or vice versa.
Step-by-Step — Creating a SaaS Role
- Go to Roles & Admins → Roles → CreateName the role, e.g. "Support Agent" or "Billing Officer."
- Select permissionsGrouped by module — Tenants, Plans, Subscriptions, Settings, and so on. Example: a Billing Officer role might get
saas-subscription-view,saas-subscription-renew, andsaas-tenant-view, but notsaas-tenant-createorsaas-settings-edit. - SaveThe role is ready to assign to platform admin users.
Managing Admin Users
Go to Roles & Admins → Admin Users to add a new Goju Cloud team member, set their name, email, phone, and password, and assign them a role. Their status can be toggled Active/Inactive at any time — inactive admins cannot log in.
saas-tenant-block and saas-settings-edit for senior staff.Related Topics: Tenant Roles & Permissions SaaS Activity Logs
Core System Settings
Platform-wide identity, contact details, and the global maintenance switch.
Screen Walkthrough
| Field | Purpose |
|---|---|
| System Name | The platform's display name, shown across the login page and system emails |
| Support Phone / Email | Contact details shown to tenants who need help |
| Currency | The platform's default currency (TZS) |
| System Version / Version Date | Displayed for support and troubleshooting reference |
| Status | The global maintenance switch — Online or Offline |
The Maintenance Switch — What It Actually Does
Turning platform Status to Offline immediately signs out and blocks every user on the entire platform except SaaS Admins, showing them "The system is currently undergoing maintenance." Use this only for genuine platform-wide maintenance windows (e.g. a database migration), since it affects every tenant business at once.
Troubleshooting
| Problem | Likely Cause | Solution |
|---|---|---|
| Every tenant reports being logged out at once | Platform Status was switched to Offline | Switch it back to Online once maintenance is complete. |
| Setting changes don't seem to appear immediately | Settings are cached briefly for performance | Wait a few seconds and refresh — the cache clears automatically on save. |
SMS Command Center
Send SMS to any user on the platform and manage reusable message templates.
Dashboard
Go to SMS Center to see your SMS gateway account balance and estimated units remaining, total messages sent (today and all-time), delivery success rate, and a breakdown of how many users across the platform have a phone number on file.
Step-by-Step — Sending an Ad-Hoc SMS
- Go to SMS Center → Send SMSRequires
saas-settings-edit. - Choose your recipientsEither search and select existing platform users, or paste in phone numbers manually (one per line or comma-separated).
- Write your messageUp to 960 characters.
- SendDelivery is logged with who sent it and to how many recipients.
Message Templates
Create reusable SMS or email templates (name, channel, subject, content) for common platform-wide messages — these are separate from any tenant's own message content and exist purely for platform communications.
Managing SMS Logs
Old SMS logs can be purged by age (30/60/90/180 days, or all) to keep the log table manageable.
Related Topics: System Monitor
System Monitor
Platform-wide error tracking and a live snapshot of system health.
Overview
Whenever an unexpected error occurs anywhere on the platform, it is automatically captured and shown here — this is the Goju Cloud team's early-warning system for problems affecting tenants, without waiting for someone to report it.
Screen Walkthrough
- Error counters — total, today, this week, and this month, each counted once even if multiple admins were notified of the same error.
- 30-day error trend chart — spot whether errors are increasing after a recent deployment.
- Top error types — the 8 most frequent error categories, so you know what to fix first.
- System health snapshot — PHP and Laravel versions, environment, cache/queue/database driver, memory limit, and disk space used — useful when diagnosing performance issues.
- AI usage statistics — total AI requests platform-wide and over the last 30 days, across every tenant.
Actions
- Mark All Read — clears the unread badge without deleting anything.
- Clear All — permanently deletes the error log (use only once issues are confirmed resolved and no longer need investigation).
- Clear AI Logs — purges old AI usage log entries by age.
- Optimize & Clear Cache — clears application, route, configuration, view, and event caches — the standard first step when a deployed change doesn't seem to be taking effect.
Related Topics: SMS Command Center AI Data, Privacy & Limits
SaaS Activity Logs
A tamper-proof record of every platform-level action — completely separate from any tenant's business data.
Overview
Every action a SaaS Admin takes — creating a tenant, changing a plan's features, renewing a subscription, editing a platform role, updating core settings — is recorded here. This uses the exact same underlying activity log as the tenant-side Audit Logs (see Audit Logs), but the SaaS Admin view is strictly filtered to platform-level actions only — it never shows any tenant's business transactions, and a SaaS Admin cannot browse into a tenant's own activity log from here.
Navigation
SaaS Activity Logs in the SaaS Admin menu. The most recent 100 entries are shown; old entries can be purged by age (30/60/90/180 days, or all) — this action is itself logged, maintaining an unbroken chain of accountability.
Related Topics: Tenant Audit Logs SaaS Roles & Admin Users
Complete Permissions Guide
Every permission explained — what it grants, who should have it, and what risks improper assignment creates.
Savings & Loans Permissions
| Permission | Grants Access To | Typical Role | Risk if Over-Assigned |
|---|---|---|---|
| savings-view | View own/assigned savings accounts | All tellers | Low |
| savings-view-all | View ALL branch savings accounts | Branch Manager, Accountant | Medium — staff can see all customer balances |
| savings-create | Make deposits and withdrawals | Tellers, Cashiers | High — can move money |
| savings-reverse | Reverse savings transactions | Branch Manager only | Very High — can undo posted transactions |
| loans-view | View own/assigned loan accounts | All tellers | Low |
| loans-view-all | View ALL branch loan accounts | Branch Manager, Accountant | Medium |
| loans-create | Issue loans and record repayments | Loan officers, senior tellers | Very High — can create financial obligations |
| loans-reverse | Reverse loan transactions | Branch Manager only | Very High |
Commerce & Invoicing Permissions
| Permission | Grants Access To | Typical Role |
|---|---|---|
| pos-view | View POS terminal and sales history | All sales staff |
| pos-checkout | Process sales at POS | Cashiers, sales staff |
| pos-reverse | Reverse/refund a completed sale | Supervisors, Branch Manager |
| invoice-view | View the invoice list and details | All accounting staff |
| invoice-create | Create and edit draft invoices | Sales officers, accountants |
| invoice-approve | Approve invoices for posting | Supervisors, managers |
| invoice-post | Post approved invoices to GL | Accountants |
| invoice-payment | Record payments against invoices | Cashiers, accountants |
| invoice-cancel | Cancel an invoice | Managers only |
| invoice-print | Print/export invoice PDF | Sales staff, accountants |
Finance & Accounting Permissions
| Permission | Grants Access To |
|---|---|
| accounting-view | View chart of accounts, account statements, journal entries |
| accounting-create | Create manual journal entries |
| accounting-reverse | Reverse posted journal entries |
| accounting-block/unblock | Block or unblock GL accounts from posting |
| expense-view | View expense vouchers and dashboard |
| expense-create | Create and submit expense vouchers |
| expense-approve | Approve expense vouchers |
| expense-post | Post approved expenses to GL |
| expense-reverse | Reverse posted expense entries |
| recon-view | View reconciliation dashboard and history |
| recon-create | Create new reconciliation batches |
| recon-submit | Submit batches for manager review |
| recon-approve | Approve or reject submitted batches |
| closing-view | View month-end closing history and wizard |
| closing-process | Execute month-end closing |
| closing-configure | Configure allocation rules and closing settings |
HR Permissions
| Permission | Grants Access To |
|---|---|
| hr-dashboard-view | HR Dashboard with workforce KPIs |
| hr-employee-view/create/edit/delete | Employee directory management |
| hr-payroll-view/create/approve/export | Payroll lifecycle — view, create, approve, export bank file |
| hr-leave-view/create/approve | Leave request management and approval |
| hr-attendance-view/create/edit | Attendance record management |
| hr-loan-view/create/approve/disburse | Staff loan lifecycle |
| hr-report-view | All HR reports (attendance, payroll, leave, staff stats) |
| hr-document-view/create/download/delete | HR document library |
| hr-performance-view/create/edit | Performance review management |
Inventory & Agency Permissions
| Permission | Grants Access To |
|---|---|
| inventory-view/create/update | View and manage inventory |
| inventory-adjust | Stock count adjustments |
| inventory-transfer | Inter-branch stock transfers |
| inventory-batch-manage | Batch creation and management |
| inventory-serial-manage | Serial number management |
| purchasing-view/create/submit/receive | Purchase order lifecycle |
| bridge-view/create/reverse | Inter-branch bridge transfers |
| strongroom-view/create/approve | Vault deposit/withdrawal (create requires approval) |
| commission-view/create/post/reverse | Commission management |
| fiae.view/import/reconcile/audit/resolve_flags | FIAE Intelligence module capabilities |
AI Assistant Permissions
| Permission | Grants Access To | Typical Role |
|---|---|---|
| ai-settings-view | View AI Assistant settings and this month's usage | Tenant Owner, Accountant |
| ai-settings-manage | Toggle AI on/off, choose a provider, set the monthly request limit | Tenant Owner only |
| ai-assistant-use | Use the Knowledge Assistant, Report Explainer, Audit Assistant, and Closing Assistant | Managers, accountants, any staff who need AI help |
recon-investigate permission, and FIAE Smart Fallback parsing runs automatically during import with no button or extra permission at all. See GOJU AI — Overview for the full picture.Frequently Asked Questions
ai-settings-manage can also raise the limit at any time in Management → AI Assistant. See Enabling & Settings.
Troubleshooting
Solutions to common problems encountered while using Goju Cloud.
| Problem | Likely Cause | Solution |
|---|---|---|
| Login page shows "System Under Maintenance" | SaaS admin has put the system in maintenance mode | Wait for maintenance to complete. Contact Goju Cloud support for ETA. |
| OTP code not received | Wrong phone number on profile, SMS gateway delay, or OTP expired | Click "Resend OTP". Wait 60 seconds. Check profile phone number is correct. Try email OTP if available. |
| POS barcode scan does nothing | Barcode not registered on the product, scanner not configured, or product not in inventory | Check the product's barcode field. Configure the scanner's end-of-line character (usually Enter/CR). Verify product exists and has stock. |
| "Insufficient stock" error at checkout | Stock quantity is zero or below the quantity being sold | Check current stock in Inventory → Products. Receive stock via a Purchase Order or stock adjustment before selling. |
| Expense stuck in "Pending Approval" | Approver has not taken action, or no approver is configured for that category | Contact the approver directly. If no approver is configured, the branch manager should set up expense approval roles. |
| Journal Entry won't save — "Debits must equal credits" | The total of all debit lines does not match the total of all credit lines | Review each line's amount. Debits and credits must balance to zero net difference. |
| Payroll shows wrong net pay for an employee | Salary structure not assigned, wrong component values, or outstanding loan deduction issue | Check the employee's salary structure assignment. Review component values. Check if the staff loan deduction amount is correct. Re-process the payroll after corrections. |
| FIAE import fails or shows "Processing Error" | File format not supported, corrupted file, or SMS content from unsupported provider | Ensure the file is in XML or TXT format. Verify the provider configuration in FIAE settings. Contact support if the provider is not listed. |
| Chat messages not delivering in real-time | WebSocket connection issue (network or server) | Refresh the page. Check your internet connection. If problem persists, messages are still delivered on next page load. |
| "Account is blocked" error when posting | The target GL account has been blocked from receiving transactions | Go to Finance → Ledger → User Accounts, find the account, and click Unblock. Requires accounting-unblock permission. |
| Reconciliation wizard shows wrong expected balance | Transactions were entered after the snapshot was taken | Click "Refresh Balances" in the wizard to re-fetch the latest GL balances and update the expected figures. |
| Can't switch to another branch | You must be a Tenant Owner to switch branches | Only the business owner account can switch branches. Staff are assigned to a single branch. |
Glossary
Definitions of key terms used in Goju Cloud and in business finance.
| Term | Definition |
|---|---|
| Accounts Payable | Money your business owes to suppliers for goods or services received but not yet paid for. |
| Accounts Receivable | Money owed to your business by customers who received goods or services on credit (invoices). Managed in the Invoice module. |
| AI Assistant | Goju Cloud's built-in AI module — explains reports, answers how-to questions, reviews transactions for anomalies, and more. Always read-only advisory; never posts, edits, or deletes anything itself. See the AI Assistant section. |
| Audit Flag | In the FIAE module, an automatically raised alert indicating a potentially suspicious or anomalous transaction that requires human review. |
| Balance Sheet | A financial statement showing a company's assets, liabilities, and equity at a specific point in time. Assets = Liabilities + Equity. |
| Batch Tracking | A method of tracking inventory by grouping units that share the same production batch, lot number, and expiry date. |
| Bridge Transfer | A financial transfer of funds or assets between two branches of the same business, recorded in the general ledger of both branches. |
| Cash Flow Statement | A financial report showing the inflows and outflows of cash during a period, grouped into operating and financing activities. |
| Chart of Accounts (COA) | The complete structured list of all general ledger accounts used by the business, organized by type (Asset, Liability, Equity, Revenue, Expense). |
| COGS | Cost of Goods Sold — the direct cost of producing or purchasing the products that were sold. COGS is deducted from revenue to calculate Gross Profit. |
| Credit | In double-entry bookkeeping, a credit increases Liability, Equity, and Revenue accounts. It decreases Asset and Expense accounts. |
| Debit | In double-entry bookkeeping, a debit increases Asset and Expense accounts. It decreases Liability, Equity, and Revenue accounts. |
| Double-Entry Bookkeeping | The accounting system where every transaction affects at least two accounts: one debit and one credit, always of equal value. |
| FEFO | First Expiry, First Out — the inventory rotation principle that products with the earliest expiry date should be sold before those with later expiry dates. Enforced by the batch tracking module. |
| FIAE | Financial Intelligence & Agency Engine — Goju Cloud's module for analysing mobile money SMS data, detecting fraud, and reconciling agency banking float balances. |
| Float | The liquid funds maintained in a mobile money agent's account with the provider (e.g., M-Pesa float), used to process customer transactions. |
| General Ledger (GL) | The master set of accounts containing all financial transactions of the business. Every module in Goju Cloud posts to the General Ledger. |
| Income Statement | Also called Profit & Loss (P&L). A report showing revenues, costs, and expenses over a period, resulting in net profit or net loss. |
| Journal Entry | A manual accounting entry posted directly to the general ledger with at least one debit and one credit of equal value. |
| KYC | Know Your Customer — the legal requirement to verify a customer's identity before opening financial accounts. In Tanzania, this typically means collecting a NIDA number. |
| Ledger Entry | A single line in the general ledger recording one side of a transaction (either a debit or a credit) against one account. |
| LLM Provider | The underlying AI service that powers Goju Cloud's AI Assistant — currently Claude or Gemini, selectable in AI Assistant Settings. Goju Cloud can add or switch providers without changing how any AI feature works. |
| Month-End Closing | The process of formally closing an accounting period, preventing backdated entries, and allocating the net profit to equity/reserve accounts. |
| NSSF | National Social Security Fund — Tanzania's mandatory pension contribution scheme. Employers and employees both contribute a percentage of salary. |
| OTP | One-Time Password — a temporary security code sent via SMS or email to verify a user's identity at login (two-factor authentication). |
| PAYE | Pay As You Earn — Tanzania's income tax withheld by employers from employee salaries and remitted to the Tanzania Revenue Authority (TRA). |
| POS | Point of Sale — the system used to process customer purchases at the time and place of sale. |
| Reconciliation | The process of verifying that two sets of records (e.g., physical cash and GL balance) agree with each other. Done daily in Goju Cloud's Balancing module. |
| Reversal | A corrective accounting entry that cancels a previous transaction by creating an equal and opposite entry. The original transaction is preserved in the audit trail. |
| Serial Tracking | An inventory method where each individual unit of a product is assigned and tracked by a unique serial number from purchase to sale. |
| Strongroom | Also called Vault. A secure, dual-control cash storage system where deposits and withdrawals require both initiation and manager approval. |
| Tenant | In Goju Cloud's SaaS architecture, a Tenant is one business client with their own isolated data, users, and subscription plan. |
| Trial Balance | A list of all GL accounts with their total debit and credit balances. If the accounting records are correct, the total debits will equal the total credits. |
| VAT | Value Added Tax — Tanzania's consumption tax charged at 18% on taxable goods and services. Collected by businesses and remitted to TRA. |
| Voucher | A document authorizing a payment or expense. In Goju Cloud, expense vouchers are the records that go through the approval workflow before posting. |