Goju Cloud

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.

Savings & Loans POS & Commerce Inventory Human Resources Finance & Reporting Multi-Branch

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 Savings Loans POS Invoices Inventory Expenses Reports HR Payroll FIAE Glossary

Getting Started

Everything you need to start using Goju Cloud from day one.

Step 1 — Logging In

  1. 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
  2. Enter your email address and passwordUse the credentials provided by your branch manager or IT administrator when your account was created.
  3. 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.
  4. 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.
  5. You are now logged inYou will be taken to your branch dashboard, which shows your today's financial summary.
First login? If this is your very first time, contact your branch manager to ensure your user account is active and that you have been assigned to the correct branch.

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:

RoleWhat They SeeTypical Users
Branch StaffFull operational menus — Savings, Loans, POS, Inventory, Finance, HR, etc.Cashiers, accountants, HR officers, branch managers
Tenant OwnerCompany-level management — branches, staff, subscription, company dashboardBusiness owner, managing director
SaaS AdminPlatform-level tools — all tenants, subscriptions, plans, system settingsGoju 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.

Tip: If you cannot see a menu item you expect to see, your role may not have permission for that module. Contact your branch manager to request access.

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

💰
Today's Income
TZS 850,000
💸
Today's Expenses
TZS 120,000
🏦
Total Savings
TZS 12.4M
📊
Outstanding Loans
TZS 8.1M
🧾
Today's Sales
TZS 450,000
📦
Low Stock Items
4 Products

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 / MetricWhat it meansAction if concerning
Today's IncomeTotal money received today across all transactionsIf unusually low, check if POS terminal was used or loan repayments were posted
Low Stock ItemsProducts with stock below the minimum thresholdClick the number to see which products — create a Purchase Order immediately
Outstanding LoansTotal amount owed to your branch by customers with loansIf growing, review your loan portfolio report for overdue accounts
Today's ExpensesTotal expense vouchers posted todayCompare with your daily budget — investigate unusually high spending
Best Practice: Review the dashboard every morning before starting work. It takes only one minute and helps you spot problems before they grow.

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

TermMeaning
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 ChannelWhether your one-time PIN arrives by SMS or Email. SMS requires a phone number on your profile; you cannot select SMS without one.
Trusted DeviceA 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 LockAn 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 ChangeWhen 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 / ButtonWhat it does
Profile PictureUpload 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 NameYour display name, shown on every transaction, approval, and activity log entry you create.
Email AddressUsed for login (if your account uses email login) and for email OTP. Changing it marks your email as unverified again.
Phone NumberRequired 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 sectionLeave blank to keep your current password. To change it, enter your Current Password plus a New Password and confirmation.
Save ChangesApplies all edits at once. Every change is written to the activity log under your name.
Delete My AccountPermanently removes your login. Requires you to re-enter your current password to confirm — this cannot be undone from the user side.
Common mistake: Typing your new password into the "Current Password" box by accident. If the save fails with "The current password is incorrect," re-check which box holds which password.

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.
If your channel is set to SMS but you have no phone number on file, the system blocks the change with: "Your OTP channel is set to SMS but no phone number is registered. Add a phone number first, or switch your OTP channel to Email." Add your phone number and save your profile first, then set the channel.

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..."

Best Practice: Turn Device Trust on if staff regularly work from personal phones or shared computers outside the branch — it stops a stolen or borrowed password from being usable on an unknown device.

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

  1. Open My ProfileClick your name in the top-right corner.
  2. Scroll to Change PasswordEnter your current password, then your new password twice.
  3. Click Save ChangesIf the current password is wrong, correct it and save again.
  4. You stay logged inYour existing session continues; use the new password the next time you log in.

Troubleshooting

ProblemLikely CauseSolution
"The current password is incorrect"Typo, or Caps Lock is onRetype 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 SMSNo phone number on fileAdd and save a phone number on your profile first.
Stuck on "waiting for approval" after loginDevice Trust is enabled and this is a new deviceAsk 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 anythingYour account was just created or reset by an administratorThis is expected — set a new password different from the temporary one you were given.

No — you choose one delivery channel at a time. Switch between them from the OTP Delivery Channel card whenever you need to.

It removes the second login step, so your account relies on your password alone. Goju Cloud recommends keeping 2FA on, especially for Tenant Owners and anyone who can approve transactions.

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

  1. Open My LoanClick your name → My Loan.
  2. Click Apply for LoanOnly available if you have no active loan application in progress.
  3. Enter the amount you want to borrowExample: Neema Joseph requests TZS 600,000.
  4. 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.
  5. Choose a start date and (optionally) state a purposeExample purpose: "School fees for children."
  6. SubmitYour request enters the same approval queue HR uses for loans they create directly, with status Pending.
Staff loans in Goju Cloud are interest-free — you repay only the principal amount through fixed monthly payroll deductions. There is no interest calculation on staff loans, unlike customer loans.

Step-by-Step — Clocking In and Out (My Attendance)

  1. Open My AttendanceClick your name → My Attendance. You'll see a live clock and today's status.
  2. Click Clock InRecorded instantly using the server's time — there is no location or photo check, so use it honestly.
  3. Work your shiftIf you clock in after your shift's start time plus its grace period, you are marked late for that day.
  4. Click Clock Out at the end of your shiftThe system calculates hours worked and any overtime automatically.
Common mistake: Clocking in twice in one day. The system blocks a second clock-in with "Staff member already has a clock-in record for today" — if you forgot to clock out yesterday, ask HR to correct it from Personnel → Attendance → Manual Entry.

Troubleshooting

ProblemLikely CauseSolution
"No Employee Profile Linked"Your login was never connected to an HR employee recordAsk HR (Personnel → Employees) to link your user account to your employee record.
My Payslips is empty even though I was paidThe payroll run for that month is still Draft or ProcessingWait for HR to Approve the payroll — payslips appear the moment it is approved.
Can't apply for a new staff loanYou already have an active or pending loanWait 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 PayslipsThese pages always re-confirm your password for privacy, regardless of recent activityThis 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.

Current sign-up process: The self-service sign-up wizard described below is being finalized. To get a new Goju Cloud account today, contact the Goju Cloud team directly (phone, email, or your sales representative). They will set up your business instantly with an active subscription — you can start working the same day, with no online payment step required at setup.

Screen Walkthrough — The Sign-Up Wizard

Visiting the public sign-up page walks you through four steps:

  1. Choose a PlanPick a subscription plan card — each shows its price, billing interval, and the number of users, branches, and storage it includes.
  2. Business DetailsEnter your company name, phone number, email address, and city, plus your first branch's name, location, phone, and email.
  3. Your AccountEnter your own name, login email, and a password (with a live strength meter). This becomes your Tenant Owner login.
  4. 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

Speak to the Goju Cloud team about trial or demo access — this is arranged case by case rather than through the sign-up form.

Yes — contact Goju Cloud to upgrade or downgrade your plan. Your Tenant Owner can also view the current plan under Organization → Subscription (see Billing & Payments).

Billing & Payments

Understanding your subscription, viewing your organization profile, and how online payments work.

Concepts

TermMeaning
PlanA package of features and limits (number of users, branches, storage) at a fixed price and billing interval (daily, weekly, monthly, or yearly).
SubscriptionYour 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 TransactionA 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-edit permission).
  • 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.

  1. 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).
  2. Enter your phone number (Mobile Money only)Example: +255 7XX XXX XXX. You will receive a USSD prompt on this number.
  3. 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.
  4. Payment confirmedOnce Snippe confirms the payment, your subscription is automatically activated — you do not need to do anything else.
Why does my payment stay "pending" for a moment? Your subscription is only activated after Goju Cloud receives a secure confirmation from Snippe — this usually takes a few seconds but can occasionally take longer for mobile money. Do not submit a second payment while the page says pending; wait, or refresh the status.

Troubleshooting

ProblemLikely CauseSolution
"No pending subscription in session"You navigated to the payment page without a payment currently in progress, or your session expiredRestart from Organization → Subscription, or contact Goju Cloud to trigger a renewal.
Mobile money USSD prompt never arrivesNetwork delay, or an incorrect phone number was enteredDouble-check the number and try again; if it persists, choose Card Payment instead.
Payment shows as failed or cancelledYou cancelled at the Snippe page, or your bank/mobile wallet declined the transactionRetry 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

  1. Go to Savings & Loans → Customer SavingsThe savings index shows all accounts for your branch with current balances.
  2. Click "Deposit" in the top toolbar or find the customer's accountYou can search by customer name, account number, or phone number.
  3. Fill in the Deposit FormSelect the customer's savings account, enter the amount, choose the source (cash or bank), and add any notes.
  4. Submit the formThe system posts a transaction: Debit Cash/Bank → Credit Savings Liability. The customer's account balance updates immediately.
  5. Send an SMS receipt (optional)Click "Send Balance SMS" on the account to notify the customer of their updated balance.
Real Business Example — Deposit

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:

  1. Opens Savings & Loans → Customer Savings
  2. Clicks Deposit
  3. Searches for "Neema Mollel" and selects her account
  4. Enters TZS 500,000, selects "Cash" as the source
  5. Clicks Confirm Deposit

Accounting Journal Entry created automatically:

AccountDebitCredit
Cash (Till)TZS 500,000
Customer Savings LiabilityTZS 500,000

This increases the cash balance and records the obligation to the customer.

How to Process a Withdrawal

  1. Go to Savings & Loans → Customer SavingsFind the customer's account using the search function.
  2. Click "Withdraw"Select the account and enter the withdrawal amount. The system checks that the account balance is sufficient.
  3. 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:

  1. Go to Customer Savings
  2. Click on the account or click Statement
  3. Select the date range and click Generate
  4. 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.

Important: Reversals require the 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

Yes. Multiple accounts can be created for the same customer. Each account has a unique account number and independent balance.

If you only see your own assigned accounts, ask your manager to grant you the savings-view-all permission, or assign that specific account to you.

Find the transaction in the account statement and click Reverse. Then make a new correct deposit. Do not attempt to edit the original transaction.

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

Issue Loan
Active
Repayments
Cleared

How to Issue a Loan

  1. Go to Savings & Loans → Customer LoansThe loans index lists all active loan accounts with outstanding balances.
  2. 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.
  3. Submit the formThe system creates the loan account and posts: Debit Loan Asset → Credit Cash/Bank (disbursement goes out).
Real Business Example — Loan Issuance

Scenario: Emmanuel Lema applies for a business loan of TZS 2,000,000 from Kilimanjaro Hardware's financial desk.

AccountDebitCredit
Loans Receivable (Asset)TZS 2,000,000
Cash / BankTZS 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

  1. Go to Savings & Loans → Customer Loans → RepayFind the customer's loan account.
  2. Enter the repayment amountThis can be a partial or full repayment. Select the payment source (Cash or Bank).
  3. 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

  1. Go to Commerce → POS TerminalThe terminal opens with an empty cart on the right and a product search area on the left.
  2. 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.
  3. 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.
  4. Apply discounts (if applicable)You can apply an item-level or cart-level discount.
  5. Select payment method and checkoutChoose: Cash, Bank Transfer, or Mobile Money. Enter the amount paid. The system calculates change automatically.
  6. Complete the saleThe system deducts stock, posts the GL entries, and prints/displays the receipt.
Real Business Example — POS Checkout

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:

AccountDebitCredit
Cash (Till)TZS 98,500
Sales RevenueTZS 85,000
VAT PayableTZS 13,500
COGS (Cost of Goods Sold)TZS 60,000
Inventory AssetTZS 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:

  1. Go to Commerce → Sales History
  2. Find the sale by date, amount, or reference number
  3. Click Reverse
  4. The system restores the stock and reverses all journal entries
Reversals require the 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.

The Sales Report has an "Explain with AI" button for a plain-language summary and follow-up questions — see Explain Reports with AI.

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

Draft
Pending Approval
Approved
Posted
Partially Paid
Paid
Any pre-paid status
Cancelled

How to Create an Invoice

  1. Go to Commerce → Invoices → Create InvoiceThe invoice form opens with a header section and a line items table.
  2. Fill in the headerSelect the customer, choose an invoice date, set the due date, and add any reference notes.
  3. Add line itemsAdd each product or service, enter the quantity, unit price, and whether VAT applies. Totals are calculated automatically.
  4. Save as Draft or Submit for ApprovalA draft can be edited. Submitting sends it to the approver queue.
  5. Approver reviews and approvesStaff with the invoice-approve permission can approve or reject the invoice.
  6. Post to GLOnce approved, a staff member with invoice-post permission clicks Post. This creates the GL entry: Debit Accounts Receivable → Credit Revenue.
  7. 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.
Real Business Example — Invoice

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.

AccountDebitCredit
Accounts ReceivableTZS 17,700,000
Sales RevenueTZS 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

Draft Pending Approval Approved Posted Paid Cancelled

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

ModeBest ForHow it WorksExamples
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:

📦
Total Products
148
💰
Stock Value
TZS 24.5M
⚠️
Low Stock
7 items
Expiring Soon
3 batches
  • 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
Quick Navigation: Products  ·  Batch Tracking  ·  Serial Numbers  ·  Adjustments  ·  Purchasing  ·  Reports  ·  Stock Count

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

FieldDescriptionNotes
Product NameDisplay name shown on receipts, reports, and POS terminalKeep names consistent — avoid duplicates
SKUYour internal stock keeping unit codeMust be unique per branch
BarcodeEAN-13 or other barcode for scanner useLeave blank if no barcode label exists
CategoryGroups products for reports and filteringSet up categories before adding products
Buying PriceCost price paid to your supplierUsed for COGS and inventory valuation
Selling PricePrice charged to customers at POSCan be overridden per sale if permitted
Stock QuantityCurrent units on hand (system-maintained)Never edit directly — use adjustments
Minimum StockQuantity below which a low-stock alert firesSet based on your reorder lead time
UnitUnit of measure (Kg, Pcs, Ltrs, Carton, Box…)Used on receipts and purchase orders
Tracking TypeNone / Batch / SerialCannot be changed after stock exists
ActiveInactive products cannot be sold on POSDeactivate instead of deleting

Adding a New Product

  1. Go to Inventory → Products → Add ProductThe product creation form opens.
  2. 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.
  3. Choose the Tracking TypeSelect None (standard), Batch, or Serial. This choice is permanent once stock exists for the product.
  4. 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.
  5. 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.

Never adjust stock quantities by editing the product directly. Always use Stock Adjustments or Purchasing to change quantities — those paths create the corresponding accounting entries.

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.

FEFO is not optional in regulated industries. For medicines, health products, or food, always follow the system's batch recommendation. Skipping it to sell a "newer" batch is a compliance risk.

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

  1. Go to Inventory → Batches → Add BatchOr receive stock via a Purchase Order — batches are created automatically during goods receipt.
  2. Select the productThe product must have Tracking Type = Batch.
  3. Enter the batch numberUse the manufacturer's lot number (e.g., LOT-2025-001). Must be unique per product.
  4. Enter the expiry date and quantity receivedThe stock quantity for this product increases by the quantity you enter here.
  5. Enter the cost price per unitThis is used for inventory valuation and COGS calculation when the batch is sold.
  6. SaveThe batch is now active and available for sale on the POS terminal.

Batch Status

Active Expiring Soon Expired Exhausted
  • 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

Available Sold Reserved Damaged Returned

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.

Tip: Print serial number labels and attach them to each unit as soon as stock is received. This makes scanning at POS checkout instant and eliminates manual entry errors.

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)
Note: For routine stocktaking discrepancies, use the Stock Count module instead of manual adjustments. Stock Count provides a formal workflow with approval and full audit trail.

How to Create an Adjustment

  1. Go to Inventory → Adjustments → CreateSelect the product and, for batch/serial products, the specific batch or serial number being adjusted.
  2. Enter the new quantityThe adjustment is calculated as: New Quantity − Current Quantity = Adjustment. Enter what you actually counted, not the difference.
  3. Choose a reasonSelect from the reason list: Damaged, Expired, Theft, Recount, Found Stock, Opening Balance, Other. You can add a free-text note.
  4. SubmitThe system updates the stock quantity and posts the journal entry automatically.
Real Example — Stock Write-Off

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".

AccountDebitCredit
Inventory Shrinkage / Loss ExpenseTZS 15,000
Inventory AssetTZS 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:

  1. Go to Inventory → Products, open the product
  2. Click Transfer Stock
  3. Select the destination branch and enter the quantity to transfer
  4. The system creates a Transfer Out on your branch and a Transfer In on the destination branch simultaneously
Transfers require the 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

Draft
Submitted
Partially Received
Received

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

  1. Go to Inventory → Purchase Orders → CreateRequires the purchasing-create permission. Select the supplier, order date, and expected delivery date (must be on or after the order date).
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
Update product cost is an optional checkbox at receiving time. When ticked, the product's cost price is recalculated as a moving average of the old stock cost and the new delivery's cost — so your inventory valuation reflects real, blended purchase prices over time rather than only the very first cost you ever entered.
Real Example — Receiving Goods on Credit

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.

AccountDebitCredit
Inventory Asset (Medicines)TZS 400,000
Accounts PayableTZS 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
A supplier cannot be deleted once it has any purchase orders on record — mark it Inactive instead so its history remains intact.

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

ProblemLikely CauseSolution
Can't edit a purchase order's line itemsThe PO has already been submitted — only Draft POs allow item editsCancel and recreate it if it hasn't been received yet, or receive it and adjust stock separately afterward.
Can't cancel a purchase orderSome or all goods have already been received against itA PO with any receiving history cannot be cancelled — this protects your inventory and accounts payable records.
"Duplicate serial number" error at receivingA serial number was already used on an earlier delivery, or entered twice in the same batchCheck 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.

ColumnMeaning
Date & TimeWhen the movement was recorded
Movement TypePurchase In, Sale Out, Adjustment, Transfer In/Out, Stock Count
ReferenceThe PO number, sale receipt, or adjustment ID that caused the movement
Qty In / Qty OutUnits added to or removed from stock
Running BalanceStock on hand after this movement
Unit CostCost 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.

Review this report at least weekly. Stock that expires on the shelf is a direct write-off that hits your profit and loss.

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.

The Stock Variance Report and Shrinkage Report are also found under Inventory → Reports. They are covered in their own sections: Variance Report and Shrinkage Report.
Every report above has an "Explain with AI" button for a plain-language summary and follow-up questions — see Explain Reports with AI.

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

TypeWhen to UseScope
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

1. Create Session
2. Freeze Snapshot
3. Count Items
4. Submit
5. Manager Review
6. Approve
7. Post to GL
Any pre-posted status
Cancelled

Session Statuses

StatusMeaningWho 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

  1. Go to Inventory → Stock Count → New SessionThe session creation form appears.
  2. Enter a titleUse a descriptive title: "June 2026 Full Stocktake" or "Medicines Cycle Count — Week 23". This appears in all reports and exports.
  3. Choose the Count TypePeriodic, Cycle Count, or Spot Check. This is for your own classification — it does not restrict which products are counted.
  4. Add optional notesUseful for recording any special instructions, the team assigned, or the time counting is expected to start.
  5. 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.
Best practice: Freeze the snapshot before your team begins physically moving items — ideally at the start of the business day, or after closing. A snapshot taken mid-day while stock is actively being sold will produce variances that are hard to explain.

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:

Left Panel — Scanner & Current Item

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.

Right Panel — Item List

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

  1. Connect your USB or Bluetooth barcode scanner to the computerThe scanner acts as a keyboard — it types the barcode and presses Enter automatically.
  2. Click on the barcode input box at the top of the left panelThe cursor must be in that field for scanning to work.
  3. 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.
  4. 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.
  5. Optionally add a variance reason and notesIf there is a variance, explain it: "Damaged packaging", "Found extra in backroom", "Stolen".
  6. 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:

  1. Use the search field to find the product by name or SKU
  2. Click the edit icon on the item row to load it into the left panel
  3. Enter the physical count, add notes if needed, and click Save Count
  4. The system advances to the next pending item automatically

Variance Actions

ButtonWhat It DoesWhen 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.

  1. 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.
  2. Fill in the CSVOpen the file in Excel or Google Sheets. Add the physical quantity in the physical_qty column for each row. Add notes or a reason in the optional columns.
  3. 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.
  4. 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.
Tip: Always download the template after freezing the snapshot — the template is generated from the session's item list, which only exists after freezing.

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:

  1. Calculates the net variance for every item that has a non-zero variance
  2. Creates a single consolidated journal entry covering all variances
  3. Updates the actual inventory quantities in the system to match the physical count
  4. Moves the session to Posted status — permanently locked
Real Example — Posting Variances

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:

AccountDebitCreditNotes
Inventory AssetTZS 40,000Surplus PVC Pipe gain
Stock Variance GainTZS 40,000
Stock Shrinkage ExpenseTZS 190,000Missing Power Drills
Inventory AssetTZS 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:

ExportContentsWhen Useful
Excel (CSV)Every item: SKU, batch/serial, book qty, physical qty, variance, variance %, cost, variance value, reason, statusDetailed analysis in Excel; sharing with management
Variance PDFFormatted report with company letterhead, summary totals, and item-by-item variance tableFormal audit documentation, filing with accountant
Count Template (CSV)Item list with empty physical_qty column — ready for counters to fillBefore counting, to dispatch teams with paper or offline counting
PrintBrowser print of the current item table viewQuick 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.

PermissionView SessionsCreate SessionEnter CountsBulk ImportApprovePost to GLView Reports
inventory-stockcount-view
inventory-stockcount-create
inventory-stockcount-count
inventory-stockcount-manage
inventory-stockcount-approve
inventory-stockcount-post
inventory-stockcount-report
The 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.

No. The session's item list is generated from the snapshot taken when you freeze. Only products that existed in your branch's inventory at the time of freezing are in the list. If a product is missing, it means it had zero stock at freeze time and was not included. Use a manual Stock Adjustment for those.

Yes. Multiple users with the 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.

Sales after the freeze point are recorded normally and do not affect the snapshot quantities. The variance report reflects the difference between the frozen book quantity and the physical count — it correctly isolates the count period. This means some variance is expected and explainable by post-freeze sales.

No. Posted and Cancelled are both terminal states — they cannot be reversed. If you posted incorrect data, you must create a new Stock Count session or use a manual Stock Adjustment with the accounting team's guidance to correct the GL entries.

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?"

📋
Sessions
6
📈
Total Gain
TZS 142K
📉
Total Loss
TZS 890K
⚖️
Net Variance
-TZS 748K

Table Columns

ColumnMeaning
Session #The unique session identifier (e.g., SC-2026-001)
TitleThe descriptive title you gave the session when creating it
TypePeriodic, Cycle Count, or Spot Check
StatusApproved or Posted
Total ItemsNumber of product lines counted in this session
Variance ItemsNumber 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
How to interpret this report: A consistent net loss across multiple sessions indicates a systemic problem — likely ongoing shrinkage through theft, damage, or mis-counting. A single session with a large one-off variance is more likely a counting or data entry error. Use this report to distinguish between patterns and outliers.

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 SeeWhat it Might MeanAction
Consistent monthly shrinkage of similar amountsExpected operational loss — breakage, minor expiry, measurement roundingSet a shrinkage budget; flag months that exceed it
One very large spike in a single monthPossible counting error or one significant loss eventReview that month's session variance report; investigate high-value items
Steadily rising month-over-monthSystemic problem — increasing theft, poor stock handling, supplier short-deliveryEscalate to management; increase count frequency; review access controls
Zero shrinkage in a monthNo stock count was posted in that month (no data), or zero shortagesCheck 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
Important: The Shrinkage Report only includes data from Posted stock count sessions. Approved sessions that have not yet been posted will not appear. Make sure sessions are posted promptly after approval to keep this report current.

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

TypeNormal BalanceExamples
AssetDebitCash, Bank, Accounts Receivable, Inventory, Loans Given
LiabilityCreditCustomer Savings, Accounts Payable, VAT Payable, Loan Received
EquityCreditShare Capital, Retained Earnings, Profit Reserve
RevenueCreditSales Revenue, Interest Income, Commission Income
ExpenseDebitSalaries, 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

  1. Go to Finance → Ledger → Journal Entries → CreateThe journal entry form has a header section (date, reference, narration) and a lines section.
  2. 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.
  3. Post the entryOnce saved, the entry posts immediately to the affected accounts. You cannot edit a posted journal — only reverse it.
Example — Monthly Rent Accrual

Scenario: Serengeti Wholesale Shop accrues rent of TZS 350,000 for the month but hasn't paid yet.

AccountDebitCredit
Rent ExpenseTZS 350,000
Accrued LiabilitiesTZS 350,000
Example — Migration Mode: Posting Customer Opening Balances

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.

Tenant Owner only. The ?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.

http://yourdomain.com/accounting/journals/create?migration=1

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.

AccountDebitCredit
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.

AccountDebitCredit
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.

Only post opening balances in this mode. Do not use Migration Mode for normal day-to-day journals. The moment you navigate to the ordinary create page (/accounting/journals/create) customer accounts disappear from the selector again.
Example — Withdrawing from Reserve Accounts (Tithe, WHT, Equity)

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.

AccountDebitCredit
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.

AccountDebitCredit
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.

AccountDebitCredit
Opening Balance Equity (OPEN_BAL)TZS 1,000,000
Cash in Hand (CASH)TZS 1,000,000
Which payment account to credit? Use 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.
Example — Internal Reserve Accounts (RES_RENT, RES_PAYROLL, RES_RENOVATION …)

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:

  1. Funding the reserve — move equity into the reserve so the money is earmarked.
  2. 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):

AccountDebitCredit
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:

AccountDebitCredit
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 CodePurposeFund (CR)Use (DR)
RES_RENTSet aside for future rentRES_RENTRES_RENT
RES_PAYROLLSet aside for future salariesRES_PAYROLLRES_PAYROLL
RES_RENOVATIONSet aside for office renovationRES_RENOVATIONRES_RENOVATION
RES_INVESTMENTInvestment savings poolRES_INVESTMENTRES_INVESTMENT
RES_EMERGENCYEmergency fundRES_EMERGENCYRES_EMERGENCY
Key difference from liability payables: Liability payables (TITHE_PAYABLE, WHT_PAY, PAYE_PAY) are money you owe to a third party — they appear on the balance sheet as Current Liabilities. Internal reserves (RESERVES_GRP) are money you have set aside for yourself — they appear under Equity. Both are reduced by a Debit when you finally spend the money, but only liability payables represent a legal obligation to an outside party.
Example — Depositing / Adding to TITHE_PAYABLE Manually

How TITHE_PAYABLE grows automatically: Every month-end closing posts this journal automatically based on the configured allocation rules:

AccountDebitCredit
Retained Earnings (RETAINED_EARN)Full net profit
Tithe Payable (TITHE_PAYABLE)Tithe share (e.g. 10%)
Owner / Partner accountsTheir 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):

AccountDebitCredit
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):

AccountDebitCredit
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):

AccountDebitCredit
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 onDebit this accountCredit
Monthly profit (mirrors closing)RETAINED_EARNTITHE_PAYABLE
Correction after a closing runRETAINED_EARNTITHE_PAYABLE
A specific income streamThat income accountTITHE_PAYABLE
Owner's personal commitmentOPEN_BALTITHE_PAYABLE
Deposit vs Withdrawal — the complete cycle: Depositing adds to TITHE_PAYABLE (CR the account, DR the source). Withdrawing reduces it (DR the account, CR the payment method). When the closing module runs next month, it adds its calculated share on top of any manual deposits already in the account.

Quick Reference — Reserve Account Withdrawals

Reserve AccountWhat it representsDebit (Dr)Credit (Cr)
TITHE_PAYABLETithe owed to churchTITHE_PAYABLEPayment account
WHT_PAYWithholding tax owed to TRAWHT_PAYPayment account
PAYE_PAYPAYE tax owed to TRAPAYE_PAYPayment account
SS_PAYNSSF/PSSSF contributionsSS_PAYPayment account
SDL_PAYSkills Development LevySDL_PAYPayment account
OPEN_BALOwner equity / opening capitalOPEN_BALPayment 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.

Only staff with the 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

Draft
Pending Approval
Approved
Posted
Pending Approval
Rejected

How to Submit an Expense

  1. Go to Finance → Expenses → CreateFill in the expense header: description, date, category, and which account the money is paid from (Cash or Bank).
  2. Add expense line itemsEach line has a category, description, and amount. You can attach scanned receipts or supporting documents.
  3. Submit for ApprovalThe expense moves to Pending status and notifies the approver.
  4. Approver reviews and approves or rejectsA staff member with expense-approve permission reviews the voucher and attached receipts.
  5. Post to GLOnce approved, a staff member with expense-post permission clicks Post. This records the journal entry.
Real Business Example — Expense

Scenario: Rehema Joseph submits an electricity bill expense of TZS 185,000 paid by cash from Kilimanjaro Hardware's petty cash.

AccountDebitCredit
Electricity ExpenseTZS 185,000
Petty CashTZS 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.

TermMeaning
BatchOne 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 BalanceWhat 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 BalanceWhat you physically counted (cash/coins) or read off the terminal (mobile money till, POS float). This is the only number you enter.
VarianceActual minus Expected. Negative = shortage (less than the books say). Positive = overage (more than the books say).
ExceptionA 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 AccountA 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

1. Open Batch
2. Count & Compare
3. Explain Exceptions
4. Submit
Manager Approves

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.

Real Business Example — A Shortage Explained as a Swap

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:

ActionWhat Happens
ApproveThe 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.
RejectSends the batch back to draft for a full recount. Use this when the counts themselves look wrong, not just unexplained.
Request More InfoKeeps 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.
What "Approve" actually does to your books: Approving does not mean the shortage disappears — it means the exact amount is now correctly reflected in the ledger via the Clearing Account, instead of sitting as an unexplained gap. Resolving why it happened is a separate, later step (Investigation Centre or Auto-Netting) — approval's job is only to make sure today's numbers are accurate and posted on time.

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.
Common mistake: Running Auto-Netting (see below) immediately after approval, out of habit, before anyone has actually looked at the individual exceptions in Investigation Centre. Auto-Netting is a cleanup tool for genuine leftover variance — not a substitute for reviewing what happened. Treat it as the last step, not the next one.

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.

Why the Grand Total Is What Matters
DayCashBankMobile MoneyTotalResult
Day 11,000,0001,000,0001,000,0003,000,000Opening balances — nothing to compare yet
Day 2500,0001,510,0001,000,0003,010,000Overage: +10,000
Day 3200,0001,800,000970,0002,970,000Loss: −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:

StatusMeaning
ClearBalance is near zero — nothing meaningful is sitting unresolved.
WatchA moderate balance has built up — worth reviewing Investigation Centre soon.
AlertA 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:

  1. 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_CASH and CLR_FLOAT as an internal transfer — the same idea as "Resolve All as Asset Swap," just applied automatically across the whole batch.
  2. 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.
Use Auto-Netting as a last resort, not a shortcut. It closes every still-open exception in the batch at once, without asking what caused each one. If you run it before reviewing exceptions individually in Investigation Centre, a real, fixable problem — like a data-entry mistake or a forgotten transaction — gets written off as a permanent "loss" instead of being corrected at the source. Worse, if that same mistake causes an offsetting variance to appear on a later day, Auto-Netting on that later batch will quietly net it away too, mixed in with that day's genuine, unrelated business activity — so the connection between the original mistake and its correction is lost entirely, and the amounts won't even match exactly. Always walk a batch's exceptions in Investigation Centre first; let Auto-Netting clean up only what truly can't be explained.

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
Not sure what caused an exception? Click AI Suggest Causes next to the Investigation Notes field for a shortlist of plausible explanations based on the exception's pattern — see AI Reconciliation Intelligence.
Resolution TypeMeaning
adjustedA manager reviewed the exception individually and posted a specific, deliberate correcting entry.
auto_nettedClosed 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:

  1. 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.
  2. 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.
  3. 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.
Genuine loss vs. a data-entry mistake — treat them differently. A real cash loss that gets physically repaid is a true economic event and deserves the recovery entry above. But if a "loss" turns out to have been caused by a missed or wrong data entry (e.g. a withdrawal that staff forgot to record in the system), no money was ever really lost — the correct fix is to enter the missing transaction and directly reverse the mistaken write-off, not to record a new "income" recovery. When in doubt, ask: did cash physically come back today, or did the books just need correcting? The answer decides which approach is right.

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

ReportFormatPurpose
Teller VoucherPDFA simple two-column printout of expected vs actual per account — for the teller's own paper record.
Management ReportPDFFull detail: every exception, its explanation, the approval chain, and a summary — for management or audit review.
Variance ReportCSVEvery batch's variance, exportable for spreadsheet analysis.
Adjustment ReportCSVEvery GL adjustment posted through reconciliation, with account and amount.
Approval ReportCSVWho approved what, and when — for accountability review.

Permissions

PermissionGrants
recon-viewView the dashboard and Exception Explorer
recon-createOpen new batches and use the Reconciliation Wizard
recon-submitSubmit a completed batch for manager approval
recon-editEdit dashboard-level settings such as risk widgets
recon-approveApprove, reject, or request more info on submitted batches; receives submission notifications
recon-investigateWork in Investigation Centre — explain, resolve, or attach evidence to exceptions
recon-configureManage 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

Yes. Approving posts accurate numbers to the ledger for that day and does not close or hide the exceptions — they remain fully visible and workable in Investigation Centre afterward, for as long as you need.

Auto-Netting resolves every still-open exception in that batch at once, in bulk. That's expected behaviour — but it means you should only run it after you've already handled everything you can explain individually. Anything left unreviewed when you click it gets closed automatically, without investigation.

No — that's almost always an asset swap (money moved between your own accounts, like a cash deposit into mobile money float), not a real loss. Use "Resolve All as Asset Swap" on the exceptions, and check the Daily Net Result chart, which nets the whole branch together and correctly shows no loss in this situation.

Never edit the original approved batch. If money genuinely came back, post a brand-new, clearly-referenced recovery transaction naming the original batch. If it turns out to have been a data-entry mistake rather than a real loss, enter the missing transaction and directly reverse the mistaken write-off instead — see "Handling a Recovered Loss" above for the full explanation.

Investigation Centre is where you actively resolve open exceptions. Exception Explorer is a read-and-search tool across your whole tenant's history — every exception, ever raised, filterable by branch, cashier, date, category, severity, and status — for audits and pattern-spotting rather than day-to-day resolution.

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.

New — Explain with AI: Every report below has an "Explain with AI" button that turns its figures into a plain-language summary, plus a chat panel for follow-up questions ("why did this change?", "is this healthy?"). See Explain Reports with AI for how it works.

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
Interpreting the Income Statement

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 BucketAction Recommended
0–30 daysNormal — monitor
31–60 daysSend reminder to customer
61–90 daysPhone call or formal letter
90+ daysConsider 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:

  1. Locks the period — all new transactions are blocked from being backdated into a closed month, protecting your historical records.
  2. Calculates net profit — the system reads your live income statement for that month (gross income minus all operating expenses).
  3. 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:

PageURLPurpose
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.
Quick answer: If you just want to run your month-end, go to the Closing Wizard. If you want to change how profit is split, go to Full Configuration. If you want to add a tithe allocation, go to Tithe Settings.

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:

Gross Income
All revenue this month
Operating Expenses
All expenses this month
$
Net Profit
Gross Income − Expenses
Tip: If Net Profit is zero or negative, the closing will still run but there may be nothing to allocate. Make sure all income and expenses for the month have been posted before proceeding.

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

  1. 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.
  2. Open Finance → Closing Select the month you want to close from the Period Selector dropdown. Confirm it shows "Open" status.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
This cannot be undone. Month-end closing is permanent. The locked period cannot be reopened through the UI. Verify all your transactions are correct before clicking Process Closing.

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:

Example — Net Profit TZS 1,000,000 | Two rules: 10% Tithe (First-Off on Gross), 90% Owner Capital (Proportional)

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.

AccountDebit (Dr)Credit (Cr)Explanation
Retained Earnings (3002)TZS 915,000Total profit distributed (150,000 + 765,000)
Tithe Payable (2400)TZS 150,000First-Off rule — 10% of Gross Revenue
Owner Capital (3001)TZS 765,000Proportional 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.

Example — Simple closing, no tithe | Net Profit TZS 800,000 split 70/30
AccountDebit (Dr)Credit (Cr)Explanation
Retained Earnings (3002)TZS 800,000Full net profit being distributed
Owner Capital (3001)TZS 560,00070% proportional
Investment Reserve (3054)TZS 240,00030% 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

TypeHow It WorksUse 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:

BasisFormulaCommon 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
Important: The First-Off amount is always deducted from Retained Earnings regardless of which basis you choose. If a First-Off amount exceeds the net profit (possible when using Gross Revenue basis with thin margins), the system will warn you before posting.

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)

Theological neutrality: GOJU does not enforce any position on tithing. This panel is completely optional and is off by default for every tenant. Organisations that do not tithe will never see any tithe-related options. Organisations that tithe can configure their own basis, percentage, and destination account — GOJU does not prescribe how you calculate it.

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:

Admin → Profile
Feature Toggles
Enable: Tithe Module
Save

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:

FieldWhat It Does
Enable Tithe AllocationToggle switch. When off, no tithe is calculated even if other settings are saved. Defaults to off for every tenant.
Calculation BasisChoose Net Profit (revenue minus expenses) or Gross Revenue (total income before any expenses). See the note below about after-tax tithe.
Tithe PercentageAny number from 0.0001% to 99.9999%. The traditional figure is 10%, but GOJU does not enforce this.
Destination AccountThe 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).
Tithing after income tax: If your organisation tithes on profit after paying income tax, the correct approach is: (1) post your income tax provision as a normal expense entry before running closing, (2) set Calculation Basis to Net Profit. The system will then calculate tithe on a net profit figure that has already had the tax provision deducted as an expense.

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.

#ItemWhere to Check
1All commission income posted (including any prior-month commissions)Agency → Commissions → Ledger
2All operating expenses posted and approvedFinance → Expenses
3All customer loan repayments recordedBanking → Loans
4All customer savings transactions recordedBanking → Savings
5Vault (strongroom) balance reconciled to physical countAgency → Vault → Statement
6Daily reconciliation complete for every day in the periodFinance → Reconciliation
7Any outstanding bridge transfers clearedAgency → Bridge Transfers
8Income tax provision posted (if tithing/allocating on after-tax profit)Finance → Journal Entries
9Trial Balance reviewed — debits equal creditsFinance → Reports → Trial Balance
10Allocation preview reviewed and all amounts look correctFinance → Closing (wizard page)

Permissions Required

PermissionWhat It Controls
closing-viewView the Closing Wizard, see the financial snapshot, preview allocations, view History
closing-configureAdd, edit, and enable/disable allocation rules in Full Configuration; access Tithe Settings
closing-processActually execute a closing — click Process Closing. The highest-privilege closing permission.
A user with only 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

No. Month-end closing is permanent and irreversible through the UI. The period lock and journal entries cannot be removed. This is intentional — it protects the integrity of your historical records. If a genuine correction is needed after closing, post a correcting journal entry in the next open period, noting the period it relates to.

Two conditions must both be true: (1) The Tithe Module must be turned ON in your Tenant Profile → Feature Toggles. (2) You must have the 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.

They manage the same underlying allocation rule engine. Tithe Settings is a simplified one-screen interface for the single tithe rule only — easier for users who just want to turn tithe on and set a percentage. Full Configuration shows all rules of all types and lets you add multiple First-Off and Proportional rules. The tithe rule created through Tithe Settings is visible (and editable) in Full Configuration too — they are the same rule, just two different ways to access it.

The system will still let you run closing but will alert you that there is no profit to distribute. No allocation entries will be posted (there is nothing to move). The period will still be locked. If you have First-Off rules set to Gross Revenue basis, those may still produce amounts even in a loss month — review the allocation preview carefully before confirming.

The system validates your allocation rules before allowing a closing to process. If active proportional rules total more than 100%, the closing will be blocked and you will see an error. If they total less than 100%, any unallocated remainder stays in Retained Earnings automatically (it is not lost, just not moved). The system will warn you about this in the allocation preview.

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.
The golden rule: GOJU AI never posts, edits, approves, deletes, or closes anything by itself, in any of its six features — anywhere in the system. It only reads what you already have access to, and explains, summarizes, or suggests. Every real action still requires a human with the correct permission to click Confirm, Post, Approve, or Close.

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.

Real Example — Reaching the Limit

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

PermissionGrants Access To
ai-settings-viewView the AI Assistant settings page and this month's usage
ai-settings-manageToggle AI on/off, choose a provider, and set the monthly request limit
ai-assistant-useActually 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

  1. Open itClick the sparkle icon in the top navigation bar, or go to Management → Knowledge Assistant.
  2. 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?"
  3. 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.
  4. 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.
Example Conversation

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

  1. Run any report as usualChoose your date range or filters and load the report, exactly as you always do.
  2. 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.
  3. 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.
  4. 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.
Real Example — Income Statement

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.

The button only appears if your plan includes the AI module, it's turned on in Settings, and you have 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

  1. Go to Management → Audit AssistantRoute: /ai/audit.
  2. Choose a date rangePick a From and To date — defaults to the start of the current month through today.
  3. 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.
  4. Ask follow-up questions"Why is this flagged?", "What should I check first?" — up to 10 exchanges before starting a new review.
Advisory only. The Audit Assistant is a starting point for a human review, not a compliance certification and not an accusation. It never posts, reverses, or edits anything — it only points you toward things worth investigating yourself.

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.

Real Example

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.

The AI Pre-Close Check is purely advisory and requires only 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.

Suggestions are a starting point to help you write an accurate resolution faster — they are never entered automatically. You still choose the real explanation, write the resolution notes yourself, and attach any evidence.

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

  1. Go to Agency → Intelligence → Audit FlagsLook for flags whose description starts with [AI-PARSED].
  2. Open the flag and read the original SMS textThe raw message is preserved alongside the AI's extracted amount, provider, and event type.
  3. 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.
Why do I have several [AI-PARSED] flags after one import? This usually means a provider changed the wording of its SMS confirmations, or you're seeing a message type FIAE hasn't been taught yet. A handful is normal; if every single message in a batch triggers the fallback, double-check you uploaded the correct SMS export file.

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.

In every one of the six features above, GOJU AI reads and explains — it never writes. No AI feature can post a journal entry, approve a batch, close a period, reverse a transaction, or delete anything. That authority always stays with a human holding the correct permission.

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.

The Agency module (Bridge, Vault, Commissions, FIAE) is only visible if your subscription plan includes it. Contact your system administrator to confirm your plan features.

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

  1. Go to Agency → Bridge Transfers → CreateRequires the bridge-create permission.
  2. Choose the sending and receiving branchThese must be two different branches of your own business.
  3. Enter the amount and transaction dateExample: Mwanza Supermarket transfers TZS 2,000,000 from Nyamagana to Ilemela.
  4. Add a description (optional)Defaults to "Inter-branch Cash Transfer" if left blank.
  5. 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

Journal Entries — TZS 2,000,000 Bridge Transfer
BranchAccountDebitCredit
Nyamagana (sending)Bridge AccountTZS 2,000,000
Nyamagana (sending)CashTZS 2,000,000
Ilemela (receiving)CashTZS 2,000,000
Ilemela (receiving)Bridge AccountTZS 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

ProblemLikely CauseSolution
Transfer fails to submitOne of the branches has already closed reconciliation for that dateUse 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 branchTransfers are only being made in one direction, or a transfer hasn't been matched by an equivalent physical cash movementConfirm 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

TermMeaning
Maker-CheckerA 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 NumberThe tamper-evident seal number on a sealed cash bag, recorded when cash is deposited into the vault.
Reference NumberAn 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

  1. Go to Agency → Vault → Deposit or WithdrawRequires the strongroom-create permission.
  2. 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.
  3. 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.
  4. Add a description and submitThe request is created with status Pending — nothing hits the ledger yet.
  5. 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.
  6. The ledger posts automatically on approvalOnly at this point does the transaction affect your accounts.
You cannot approve your own request. If the person who created a vault transaction tries to approve it, the system blocks the action — a second, different staff member must review and approve it. This is a deliberate anti-fraud control, not a bug.

Accounting Example

Business event: Kilimanjaro Pharmacy moves TZS 3,000,000 in cash from the till into the vault for overnight safekeeping.

Journal Entry — Vault Deposit (on approval)
AccountDebitCredit
Vault (Strongroom)TZS 3,000,000
CashTZS 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

ProblemLikely CauseSolution
"Insufficient vault balance" when requesting a withdrawalThe requested amount exceeds what the vault actually holds as of that dateCheck the Vault Statement for the true available balance before submitting.
Approve button is missing or disabledYou are the same person who created the request, or you lack the strongroom-approve permissionAsk a different authorised staff member to approve it.
Vault balance doesn't match the physical cash countA physical movement happened without a matching system transaction, or a seal was broken without being recordedInvestigate 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.

The Teller Portal is part of the Agency module and is only visible if your subscription plan includes it. Contact your system administrator to confirm your plan features.
Customer savings and loan accounts are never touched here. The Teller Portal only moves balance between your own internal operational accounts — Cash, mobile money tills, and bank agent floats. If you need to post to an individual customer's savings or loan account, use the Savings or Loans module instead.
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

TermMeaning
Float AccountAny 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 HandThe 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 / DepositA 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 TransactionA 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 NumberAn automatically generated, globally unique tracking number stamped on every posting — the same numbering system used everywhere else in GOJU Cloud (General Journal, Bridge, Vault).
Why does Cash On Hand move even though I only picked one account? Every posting must balance in double-entry bookkeeping — a Deposit or Withdrawal always has two sides. The Teller Portal handles the Cash On Hand side for you automatically, so the screen only ever asks you for the one thing that actually varies: which float account, and how much.
Account fields on the posting screens (Deposit, Withdrawal, Transfer, Mixed) are searchable dropdowns. Click one and type a few letters of the till or bank name (e.g. "crdb", "mpesa") to filter the list instantly — useful once your branch has a dozen or more mobile/bank accounts. Account filters on the History and Reports screens are plain dropdowns. Every date field opens a calendar picker — click it rather than typing the date by hand, which keeps every date in the correct format automatically.

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.

  1. Go to Agency → Teller Portal → Post TransactionRequires the teller-transaction-withdraw permission.
  2. Switch to the Withdrawal tabThe Deposit/Withdrawal screen shares one layout — a toggle switches the mode.
  3. Choose the float accountOnly mobile money tills and bank agent floats are listed — Cash On Hand itself is never a choice here.
  4. 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.
Journal Entry — Customer Withdraws TZS 500,000 from M-Pesa Till
AccountDebitCredit
M-Pesa Till (float)TZS 500,000
Cash On HandTZS 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.

  1. Go to Agency → Teller Portal → Post TransactionRequires the teller-transaction-deposit permission.
  2. Switch to the Deposit tab
  3. 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.
Journal Entry — Customer Deposits TZS 250,000 into CRDB Agent Float
AccountDebitCredit
Cash On HandTZS 250,000
CRDB Agent FloatTZS 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.

  1. Go to Agency → Teller Portal → Post Transaction → Float Transfer / Deposit tabRequires the teller-transaction-transfer permission.
  2. Choose the From and To accountsAny two different internal accounts — cash, mobile, or bank.
  3. Enter the amount and date, then submitThe system checks the From account has enough balance before posting.
Journal Entry — Transfer TZS 1,000,000 from Cash to M-Pesa Till
AccountDebitCredit
M-Pesa Till (float)TZS 1,000,000
Cash On HandTZS 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.

  1. Go to Agency → Teller Portal → Post Transaction → Mixed Transaction tabRequires the teller-transaction-mixed permission.
  2. Add a row per account involvedPick the account and type a signed amount — positive to increase it, negative to decrease it.
  3. Watch the Net TotalIt must read exactly zero (shown in green) before you can submit — this is what keeps the posting balanced.
  4. SubmitThe system checks every account that's decreasing has enough balance before posting.
Real Example — Split Withdrawal Across Two Accounts

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.

AccountRow EntryDebitCredit
M-Pesa Till+500,000TZS 500,000
CRDB Agent Float-300,000TZS 300,000
Cash On Hand-200,000TZS 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.

Real branch example: at BS 3Ways, teller Doreen serves customer John Moshi, who withdraws TZS 1,000,000 from his NMB account, asks for TZS 700,000 of it to be deposited straight into his friend Imani Mariki's CRDB account, and takes the remaining TZS 300,000 in cash. Row entries: NMB +1,000,000, CRDB −700,000, Cash On Hand −300,000 — net zero, one reference number covering the whole visit.

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

PermissionGrants
teller-transaction-viewView the dashboard and transaction history
teller-transaction-depositPost a Deposit
teller-transaction-withdrawPost a Withdrawal
teller-transaction-transferPost an Internal Float Transfer / Deposit
teller-transaction-mixedPost a Mixed Transaction
teller-transaction-reverseReverse a previously posted teller transaction
teller-transaction-reportsRun and export Teller Portal reports

Troubleshooting

ProblemLikely CauseSolution
"Insufficient funds" on a WithdrawalCash On Hand doesn't have enough physical cash recorded as of that dateCheck 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 DepositThe selected float account doesn't have enough balance to extend to the customerCheck 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 redThe signed row amounts don't add up to exactly zeroDouble-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 transactionThe transaction is itself already a reversal, or it has already been reversed once, or you lack teller-transaction-reverseA 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

FieldWhat It Sets
Operator NameDisplay name (e.g., "NMB Bank", "M-Pesa", "HaloPesa")
Commission AccountThe revenue account credited when this operator's commissions are posted (leaf account under COMMISSION_INC)
Float / Cash AccountThe 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:

FieldWhat 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 AccountThe 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.
WHT Receivable vs WHT Payable — important distinction: WHT Payable (2250) is used when your business deducts tax from payments you make to others (a liability you owe TSRA). WHT Receivable (1260) is used when a provider deducts tax from payments they make to you — that deducted amount is a tax credit you are owed back against your annual income tax, making it an asset. The Commission module always uses WHT Receivable for operator WHT.

Posting a Commission Entry

Go to Agency → Commissions → Post Entry. The form has a few key fields to understand:

Key Fields

FieldNotes
OperatorSelect the provider. If the operator has WHT configured, the WHT rate and destination account are shown automatically as read-only information below the selector.
AmountAlways enter the gross commission amount — what the provider says you earned, before any WHT deduction. The system calculates the WHT split for you.
Payment TypeChoose 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.
DateThe 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:

Case 1 — Same-day posting, no WHT (e.g., M-Pesa, HaloPesa)
AccountDebit (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.

Case 2 — Same-day posting, WHT deducted at source (e.g., NMB at 10%)

Gross commission = TZS 1,000,000. WHT 10% = TZS 100,000. Net cash received = TZS 900,000.

AccountDebit (Dr)Credit (Cr)Explanation
Float / Bank AccountTZS 900,000Cash actually received
WHT Receivable (1260)TZS 100,000Tax credit owed back to you
Commission IncomeTZS 1,000,000Gross 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:

Case 3 — Prior month posting with WHT (revenue = June 30, cash = July 10)

Gross commission = TZS 1,000,000. WHT 10% = TZS 100,000. Income Date = 30 June. Posting Date = 10 July.

Entry DateAccountDebit (Dr)Credit (Cr)Why
June 30
(income date)
Commission Receivable (COMM_REC)1,000,000Recognise the receivable asset at revenue date
Commission Income1,000,000Recognise gross revenue in June (IFRS 15)
July 10
(cash date)
Float / Bank Account900,000Net cash received in July
WHT Receivable (1260)100,000Tax credit in July
Commission Receivable (COMM_REC)1,000,000Clear 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.

Month-End Closing and prior-month commissions: Always post prior-month commissions before running month-end closing for that prior month. Once a period is locked, no further backdated entries are allowed. If you receive a commission after the related period is already closed, post it to the current open period (no prior-month flag) and include a note in the transaction memo.

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 CardWhat It Shows
Total CommissionGross commission income in the selected period (sum of the Commission Income account credits for transactions in that period)
Top OperatorThe single operator who contributed the most commission income this period
Average DailyTotal commission divided by the number of days in the selected period
Entries CountNumber 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.

Dashboard vs. Main Dashboard: The main branch dashboard at /dashboard also includes commission income in its Net Profit KPI and monthly revenue trend chart. Commission income is sourced from the GL (not a separate sales table), so it appears correctly in both dashboards as long as it has been posted.

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.

ReportPurposeKey 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
Each commission report has an "Explain with AI" button for a plain-language summary and follow-up questions — see Explain Reports with AI.

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.
When does WHT Receivable get cleared? When your accountant files your annual tax return and TSRA acknowledges the credit, post a journal entry: Dr Income Tax Expense / Cr WHT Receivable. This removes the receivable and records the utilisation of the credit. Do not clear it prematurely — the credit has value until it is formally claimed.

Permissions Required

PermissionWhat It Controls
commission-viewView the Commission Dashboard, Ledger, and all reports
commission-createPost new commission entries
commission-editEdit unprocessed commission entries
commission-deleteDelete (reverse) commission entries
commission-operatorsAdd and edit operator records — including WHT rate configuration

Frequently Asked Questions

The WHT rate must be configured on the operator record. Go to Agency → Commissions → Operators, edit the NMB operator, and enter 10 in the Withholding Tax Rate field and select WHT Receivable (1260) as the destination account. After saving, the next time you post a commission for NMB, the form will show the WHT breakdown automatically.

Always enter the gross amount — the full commission the provider says you earned before any WHT deduction. The form shows a preview of the WHT split (Gross / WHT / Net) when an operator with WHT is selected. The system posts the gross as income and the WHT separately as a receivable. Never enter the net-only amount, because that would understate your income and miss the WHT credit entirely.

Tick the "This relates to a prior period" checkbox and set the Income Date to the last day of the month the commission was earned (e.g., June 30). Set the posting date to today. The system will use the 5-leg Commission Receivable bridge to ensure revenue is recognised in June and cash is posted in July. The only exception is if the prior period has already been closed — in that case, post without the prior-period flag and note the period it relates to in the memo field.

Check your date range filter. The dashboard filters by the posting date (transaction date in the GL), not the income recognition date. If you posted a prior-month commission (e.g., for June) in July, it shows in the July dashboard, not June. Switch the filter to the month the cash was received and it should appear.

Yes. Commission income posts to the COMMISSION_INC account group, which is recognised as revenue in both the Income Statement (P&L) and the Break-Even analysis. The Break-Even report's revenue figure is sourced from the same income statement calculation as the P&L, so commission is automatically included. The main dashboard Net Profit KPI also includes commission income.

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.

FIAE is part of the Agency feature set and only appears if your subscription plan includes it. It requires no manual bookkeeping of agent float — it reads it directly from the same SMS your phone already receives.

Concepts

TermMeaning
Financial EventOne 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 BatchOne 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 AccountA specific provider till/line (e.g. your M-Pesa agent line) that FIAE automatically discovers from the SMS as it parses them.
ReconciliationFIAE 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 FlagAn 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

  1. 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.
  2. 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.
  3. 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.
  4. Reconciliation and fraud checks run automaticallyImmediately after parsing, FIAE checks every event's balance math and screens for suspicious patterns — no separate step required.
  5. 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.
FIAE's parsing vs. GOJU AI: Most SMS is parsed instantly by FIAE's own deterministic, rule-based engine — no AI involved, and it recognises the exact wording each provider uses. Only when every deterministic parser fails to recognise a message does GOJU AI step in as a fallback, so that event is flagged [AI-PARSED] for your review. See AI-Assisted FIAE Import Fallback.

The Three Dashboards

DashboardBest ForWhat It Shows
ExecutiveBusiness ownerTotal 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.
RiskCompliance / audit staffEvery open audit flag ordered from Critical to Info severity, flag counts by type, and the 10 accounts with the most open flags.
OperationsBranch managerEach 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:

StatusMeaning
MatchedExpected and actual balance agree.
Minor VarianceA small gap (TZS 100 or more) — often just rounding, but worth a glance.
Major VarianceA gap of TZS 1,000 or more — automatically raises a Balance Mismatch audit flag (High severity if the gap exceeds TZS 50,000).
Commission earned on a transaction ("mrejaa") is tracked separately and does not affect the float balance math — it is a business income event, not part of the cash float itself.

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:

RuleFires WhenSeverity
Large WithdrawalA cash-out of TZS 500,000 or moreMedium, or High above TZS 1,000,000
Large DepositA float top-up of TZS 1,000,000 or moreLow, or High above TZS 5,000,000
Frequency Spike10 or more withdrawal-type transactions within 10 minutesMedium
Repeated Failures5 or more failed transactions within 10 minutes — possible credential attackMedium
Reversal After Large TransactionA reversal at or above the large-withdrawal thresholdMedium
Zero-Amount TransactionA confidently-parsed event recording TZS 0Low
Unusual HoursA withdrawal-type transaction between midnight and 5 AM above TZS 50,000Low
Balance MismatchReconciliation finds a major varianceMedium, or High above TZS 50,000
Missing TransactionA gap in the SMS sequence suggests a message was never received or was deletedMedium

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

  1. Go to Agency → Intelligence → Audit FlagsFlags are sorted by severity, from Critical down to Info.
  2. Open a flagReview the flag type, description, and the underlying evidence (the exact SMS and amounts involved).
  3. Assign it to a staff member (optional)Useful when a supervisor wants a specific person to look into it.
  4. InvestigateCompare against the agent's physical cash count or provider statement.
  5. 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

ReportPurpose
RegisterEvery parsed financial event, filterable by type, provider, and date — your complete transaction log.
Float MovementFloat top-ups, float-outs, and transfers over time per account, with running totals in and out.
Daily ReconOne row per account per day: opening balance, float and cash movement, commission, expected vs. actual closing balance, variance, and status.
CommissionEvery commission-earning event, grouped by transaction type — useful for verifying provider commission statements.
Audit ExceptionsAll flags raised in a date range, grouped by severity and type, with an open-count summary.
Fraud IndicatorsOnly the flags associated with suspicious-pattern rules (large withdrawal, frequency spike, repeated failures, reversal-after-large, unusual hours, balance mismatch).
Each FIAE report has an "Explain with AI" button for a plain-language summary and follow-up questions — see Explain Reports with AI.

Permissions

PermissionWhat It Controls
fiae.viewView dashboards, events, and reports
fiae.importUpload new SMS import batches
fiae.reconcileView the Daily Recon report
fiae.auditView the Risk dashboard, Audit Exceptions, and Fraud Indicators reports
fiae.resolve_flagsAssign and resolve audit flags

Troubleshooting

ProblemLikely CauseSolution
Import batch shows many failed messagesThe 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 twiceThe same SMS was included in two overlapping backup exportsFIAE 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 correctA transaction SMS was deleted from the phone before export, breaking the sequenceResolve 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:

👥
Total Employees
24
Present Today
21
🏖️
On Leave
2
📋
Pending Leave Requests
3
💰
This Month's Payroll
TZS 18.5M

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

TermMeaning
DepartmentAn organisational unit (e.g. "Sales," "Warehouse," "Finance"). Departments can be nested under a parent department, and each can have a head employee.
PositionA job title within a department (e.g. "Cashier" under "Sales"), with an optional seniority level.
ShiftA 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 StructureA named pay grade (e.g. "Junior Staff," "Management") that groups together the allowances, deductions, and taxes that apply to everyone on that grade.
Salary ComponentOne 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 TypeA 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

ScreenKey FieldsNotes
DepartmentsName, Code, Parent Department, Head of Department, DescriptionA department with employees currently assigned to it cannot be deleted.
PositionsTitle, Department, Code, Level, DescriptionA position assigned to active staff cannot be deleted.
ShiftsName, Start Time, End Time, Grace Period (minutes), Overtime After (minutes)A shift with existing attendance history cannot be deleted.
Salary StructuresName, Description, ActiveCannot be deleted while it still has salary components attached.
Salary ComponentsStructure, Name, Code, Type (Allowance / Deduction / Tax), Calculation (Fixed amount / % of Basic), Value, Taxable, Expense Account, Liability Account, Sort OrderSee the accounting mapping below — this is the most important setup screen in HR.
Leave TypesName, Code, Days Allowed per Year, Paid, Requires Approval, Carry Forward, Max Carry-Forward DaysCannot 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.

Best Practice: Before running your first payroll, set up one Salary Component each for PAYE, NSSF, WCF, and SDL, and map each to its own liability account on your chart of accounts (e.g. "PAYE Payable," "NSSF Payable"). This keeps your statutory obligations visible and separated on the Balance Sheet, ready for monthly remittance.

Step-by-Step — Building a Salary Structure

Example: Arusha Agrovet wants a "Retail Staff" pay grade for its shop attendants.

  1. Create the Salary StructurePersonnel → Setup → Salary Structures → New. Name: "Retail Staff."
  2. Add a Housing Allowance componentType: Allowance. Calculation: Percentage of Basic. Value: 15%. Expense Account: "Salaries & Wages Expense." Taxable: Yes.
  3. Add a PAYE componentType: Tax. Calculation: value computed by the payroll engine per Tanzania's PAYE bands. Liability Account: "PAYE Payable."
  4. Add an NSSF componentType: Deduction. Calculation: Percentage of Basic. Value: 10%. Liability Account: "NSSF Payable."
  5. 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.

Journal Entry — Payroll Posting
AccountDebitCredit
Salaries & Wages Expense (Basic + Housing Allowance)TZS 460,000
PAYE PayableTZS 18,000
NSSF PayableTZS 40,000
CashTZS 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

ProblemLikely CauseSolution
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 accountsCreate the missing account under Finance → Chart of Accounts, then re-approve.
Can't delete a department, position, or shiftIt is still in use by an employee or attendance recordReassign 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 allCheck Personnel → Setup → Shifts and confirm the employee has a shift assigned in their profile.
A deduction always posts to the wrong accountThe Salary Component has no Liability Account configured, so it falls back to the generic suspense accountOpen 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

  1. Go to Personnel → Staffing → Directory → Add EmployeeFill in all personal and employment details. An employee number is auto-generated.
  2. Assign Department, Position, and ShiftThese must be set up first under Personnel → Staffing → Departments, Positions, and Shifts.
  3. Assign a Salary StructureLink the employee to a salary structure that defines their base pay and allowances.
  4. Add emergency contacts and documentsUpload signed employment contract and other required documents.
  5. 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

StatusMeaningPayroll Effect
PresentEmployee attended on timeFull day's pay
LateArrived after shift start timeLate minutes tracked; may affect pay based on policy
Half DayWorked half shiftHalf day's pay
AbsentDid not report to workNo pay (unless leave is approved)
On LeaveApproved leave in effectPaid 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

  1. Go to Personnel → Leave Management → Apply for LeaveSelect the leave type, start date, end date, and reason.
  2. Submit the requestThe request goes to Pending status and notifies your manager.
  3. Manager approves or rejectsManager goes to Personnel → Leave Management and reviews the request.
  4. Leave balance updatesOn approval, the number of days is deducted from the employee's leave balance and attendance records are updated.
Real Business Example — Leave Request

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

  1. Go to Personnel → Payroll → Payroll Runs → CreateSelect the month and year. The system auto-populates all active employees.
  2. Process the payrollClick "Process". The system calculates each employee's gross salary, applies all components, deducts loan repayments (if any), and produces net pay.
  3. Review payslipsCheck each employee's payslip for accuracy before approval. Click any employee name to view their detailed payslip.
  4. Manager approves the payrollOnce satisfied, the manager with hr-payroll-approve permission approves the run.
  5. Post to GLOn approval, the system posts the payroll journal entries to the general ledger.
  6. Export bank fileDownload the bank transfer file (CSV) to upload to your bank's online platform for salary disbursement.
Payroll Journal Entry Example

Employee: Emmanuel Lema, Gross: TZS 1,200,000, PAYE: TZS 120,000, NSSF (employee): TZS 60,000, Net: TZS 1,020,000

AccountDebitCredit
Salaries ExpenseTZS 1,200,000
PAYE Tax Liability (Payable to TRA)TZS 120,000
NSSF Liability (Payable to NSSF)TZS 60,000
Salary Payable / BankTZS 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.

RES_PAYROLL — Full Workflow Example

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:

AccountDebitCredit
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:

AccountDebitCredit
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:

AccountDebitCredit
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.
Never release more than gross wages. Releasing the full funded amount (5,000,000) when only 4,800,000 was spent would return 200,000 of unspent earmark back to equity as if it had been used — overstating OPEN_BAL by that difference. Always match the release to the WAGES debit on the approved payroll journal.

Phase Summary

WhenWho posts itJournalPurpose
Before salary monthYou (manual)DR OPEN_BAL / CR RES_PAYROLLEarmark the budget
Payroll approvalSystem (automatic)DR WAGES / CR CASH + liabilitiesSalaries paid & taxes recorded
After approvalYou (manual)DR RES_PAYROLL / CR OPEN_BAL (gross wages only)Release what was spent
If unused balance remainsYou (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

Applied
Approved
Disbursed
Repaying
Cleared

How Staff Loans Work

  1. HR creates a loan application for the employee
  2. Manager approves the loan
  3. Finance disburses the loan (posts: Debit Staff Loans Receivable → Credit Cash/Bank)
  4. Monthly repayment amounts are auto-deducted in the payroll run
  5. 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

  1. Go to Personnel → Performance → New Review
  2. Select the employee and review period
  3. Add KPIs — each KPI has a name, target value, actual value, and weight
  4. The system calculates the weighted overall score
  5. Add comments and recommendations
  6. Save and share with the employee

HR Reports

Go to Personnel → Reports for workforce analytics:

ReportPurposeKey Columns
Staff StatisticsWorkforce overview by department, gender, employment typeDept, Headcount, Avg Salary, Turnover Rate
Attendance LogsFull attendance history for any period and employee groupEmployee, Date, Status, Clock In, Clock Out, Hours
Payroll SummariesMonthly payroll totals by departmentDept, Headcount, Gross, Deductions, Net Pay
Leave UsageLeave taken by employee and leave typeEmployee, Leave Type, Days Taken, Balance Remaining
Each of these reports has an "Explain with AI" button for a plain-language summary and follow-up questions — see Explain Reports with AI.

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

FieldDescription
Customer NumberAuto-generated unique identifier, e.g. CUS-000123
Full Name / Phone / EmailCore contact details — phone is used for SMS balance alerts
National ID / TIN NumberOptional identity fields, recommended for KYC compliance (see below)
Date of Birth / GenderDemographic information
Occupation, Employer, Business NameUseful context for credit assessment, though not used in any automated scoring today
Physical & Postal AddressContact and correspondence address
Next of Kin Name & PhoneEmergency contact for the customer
Lifecycle StatusActive, Inactive, Blocked, Deceased, or Blacklisted
There is no separate "Prospect" status and no credit-limit field on a customer record today — every customer you create is simply Active until you change their status. Treat National ID and TIN collection as a business-process requirement your staff follow, since the system itself does not force these fields to be filled in.

Step-by-Step — Adding a Customer

  1. Go to Management Panel → Manage Customers → Add CustomerRequires the customer-create permission.
  2. Fill in the customer's detailsExample: John Mushi, phone +255 7XX XXX XXX, National ID and TIN if available.
  3. 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.
  4. 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.

KYC Best Practice: Always collect and verify the customer's National ID (NIDA) before opening savings or loan accounts, even though the system does not force this field. It is expected practice for financial recordkeeping in Tanzania and protects your business if a dispute ever arises.

Troubleshooting

ProblemLikely CauseSolution
Can't find a customer's transactionsSearching by a misspelled name instead of phone or customer numberSearch by phone number or customer number — both are unique and more reliable than name spelling.
Customer can't complete a purchase or depositTheir lifecycle status is Blocked, Deceased, or BlacklistedCheck 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.

FieldDescription
Meter NumberThe unique LUKU meter number printed on the meter itself — must be unique across your business
Name / LabelA description of which premises or branch the meter belongs to, e.g. "Kilimanjaro Pharmacy — Main Store"
Additional InfoOptional notes — for example, the meter's physical location within the building
Tip: Record the meter number here as soon as a new branch is set up, so any staff member buying LUKU tokens always has the right number on hand — no more searching through old SMS confirmations.

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

PermissionWhat It Controls
knowledge-hub-viewBrowse and search the document library and LUKU registry
knowledge-hub-downloadDownload files
knowledge-hub-createUpload new documents or add new LUKU meter records
knowledge-hub-editEdit document metadata or LUKU meter records
knowledge-hub-deleteDelete 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

  1. Go to Management Panel → Manage Users → Add StaffYou must have an active branch selected before creating staff accounts.
  2. Fill in user detailsEnter the staff member's full name, email address, phone number, and branch assignment.
  3. Assign rolesSelect one or more roles for the user. Roles determine which modules and actions the user can access.
  4. 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

  1. Go to Management Panel → User Roles → Create RoleEnter a role name (e.g., "Accountant", "Cashier", "HR Officer").
  2. Select permissionsCheck the specific permissions this role should have. Permissions are grouped by module for easy selection.
  3. 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.

Principle of Least Privilege: Only grant users the permissions they need for their job. Never give a cashier the ability to reverse their own transactions or approve their own expenses.

Suggested Role Templates

Role NameTypical Permissions
Cashierpos-checkout, pos-view, savings-create, loans-create
Accountantaccounting-view, accounting-create, expense-view, expense-post, reports.*
HR Officerhr-employee-*, hr-payroll-view, hr-payroll-create, hr-leave-*
Branch ManagerAll of the above + savings-view-all, loans-view-all, invoice-approve, expense-approve, recon-approve
Inventory Officerinventory-view, inventory-create, inventory-adjust, purchasing-*
Agency Operatorbridge-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

  1. Go to Organization → Branches → Create Branch (Tenant Owner menu)
  2. Enter the branch name, code, manager name, and location
  3. Set the VAT rate applicable to this branch (if different branches have different VAT obligations)
  4. 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.

Audit logs are the first place to look when investigating a discrepancy or suspected error. Every transaction reversal, approval, and configuration change is logged here.

Who Sees What

ViewerScope of Visible Logs
Tenant StaffOnly their own branch's activity
Tenant OwnerAll activity across the whole business, optionally filtered to the currently active branch
SaaS AdminOnly 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 TypeGoes IntoDuplicate Check
CustomersCustomer records (with savings/loan accounts auto-created)Matched by existing name/phone
ProductsProduct catalogueMatched by barcode
Knowledge Hub DocumentsKnowledge Hub asset libraryMatched by title
LUKU RecordsLUKU Numbers Registry (see Knowledge Hub)Matched by meter number

Step-by-Step — Importing Legacy Customers

  1. Export your old system's data as a SQL fileAsk your previous system provider for a raw database export (a standard INSERT INTO SQL dump), up to 20 MB.
  2. Open the Data Import tool and choose "Customers"Select the import type before uploading.
  3. 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.
  4. 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.
  5. Review the resultsThe summary shows how many records were imported, how many were skipped as duplicates, and any errors encountered.
Placeholder customer names left over from old systems — such as "Walk-in Customer," "Default Customer," or "System Blocked" — are automatically skipped during import, so your customer list starts clean.

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.

Do this once, carefully. Run imports in a quiet period, verify a sample of imported records before continuing to daily operations, and keep a backup of your original export file until you've confirmed everything migrated correctly.

Troubleshooting

ProblemLikely CauseSolution
Import fails immediatelyThe uploaded file isn't a valid SQL INSERT dump, or exceeds 20 MBAsk your previous provider for a plain SQL export of just the relevant table(s); split very large exports if needed.
Some customers didn't importThey matched an existing customer by name/phone, or were a recognised placeholder recordThis is expected — check the skipped count in the results summary.
I can't find this menu itemLegacy Data Import is intentionally hidden from the main menu — it's a one-time setup toolOnly 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.

This section is for Goju Cloud platform staff, not for tenant businesses. Everything from here on is only reachable by users with a SaaS Admin login (an account with no tenant attached). If you are a business owner or staff member using Goju Cloud, the modules in this section do not appear in your menu and are not part of your day-to-day system.

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, edit, block, and unblock business accounts on the platform.

Plans & Feature Definitions

Define subscription packages and which modules each one unlocks.

Subscriptions & Renewals

Track every tenant's billing history and process renewals.

SaaS Roles & Admin Users

Manage your own internal team's logins and permissions.

Core System Settings

Platform name, contact details, and the global maintenance switch.

SMS Command Center

Send platform-wide SMS and manage reusable message templates.

System Monitor

Platform-wide error tracking and system health.

SaaS Activity Logs

An audit trail of every platform-level action, scoped away from tenant data.

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).

  1. Go to Tenants → Add TenantRequires the saas-tenant-create permission.
  2. Enter the business detailsBusiness name, phone, email, city, and subscription plan. Example: "Kilimanjaro Pharmacy," Moshi.
  3. Enter the first branchBranch name, location, phone, and email — every tenant needs at least one branch to operate.
  4. Enter the owner's login detailsFirst name, last name, email, and a starting password. This person becomes the Tenant Owner.
  5. 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.
The tenant's unique web address (domain) is generated automatically from the business name. Every field that must be unique across the whole platform (business email, branch email, owner email) is checked automatically — you'll be warned immediately if one is already in use.

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.
Block vs. Maintenance Mode: Blocking a tenant is different from the System Status toggle a Tenant Owner controls for their own business (see Billing & Payments), and different again from the platform-wide maintenance mode (see Core System Settings). Blocking is specifically a platform-side lifecycle action tied to the tenant's account standing.

Troubleshooting

ProblemLikely CauseSolution
"Email already in use" when creating a tenantThe business email, branch email, or owner email already exists somewhere on the platformUse a different email, or check whether this business already has an account.
A newly created tenant's owner can't see any menusRare — usually means role/permission sync didn't completeCheck 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

TermMeaning
PlanA subscription package with a price, billing interval, and limits (number of users, branches, storage).
Feature DefinitionAn 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 FeatureThe 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

  1. Go to Plans → CreateRequires saas-plan-create.
  2. Enter the plan's commercial termsExample: "Growth Plan," TZS 150,000, billed Monthly, 10 users, 3 branches.
  3. Save the planIt's created inactive by default until you're ready to offer it.
  4. 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.
  5. 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.

Best Practice: Design a small number of clear plan tiers (e.g. Starter, Growth, Enterprise) rather than many overlapping ones — it makes upgrade conversations with tenants much simpler.

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

  1. Go to Subscriptions, find the tenant, and click RenewRequires saas-subscription-renew.
  2. Choose the plan to renew ontoUsually the same plan, but this is also how you upgrade or downgrade a tenant at renewal time.
  3. 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.
  4. 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

  1. Go to Roles & Admins → Roles → CreateName the role, e.g. "Support Agent" or "Billing Officer."
  2. Select permissionsGrouped by module — Tenants, Plans, Subscriptions, Settings, and so on. Example: a Billing Officer role might get saas-subscription-view, saas-subscription-renew, and saas-tenant-view, but not saas-tenant-create or saas-settings-edit.
  3. 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.

Principle of Least Privilege applies here too. Not every support team member needs the ability to create or block tenants. Reserve powerful permissions like 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

FieldPurpose
System NameThe platform's display name, shown across the login page and system emails
Support Phone / EmailContact details shown to tenants who need help
CurrencyThe platform's default currency (TZS)
System Version / Version DateDisplayed for support and troubleshooting reference
StatusThe 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.

This is one of three independent maintenance layers in Goju Cloud: platform-wide (this switch, affects everyone), per-tenant (a Tenant Owner's own System Status toggle, affects only their business — see Billing & Payments), and per-branch (affects only one branch within a tenant). Each is checked independently, so use the narrowest one that fits the situation — there's rarely a need to take the whole platform offline for a single tenant's issue.

Troubleshooting

ProblemLikely CauseSolution
Every tenant reports being logged out at oncePlatform Status was switched to OfflineSwitch it back to Online once maintenance is complete.
Setting changes don't seem to appear immediatelySettings are cached briefly for performanceWait 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

  1. Go to SMS Center → Send SMSRequires saas-settings-edit.
  2. Choose your recipientsEither search and select existing platform users, or paste in phone numbers manually (one per line or comma-separated).
  3. Write your messageUp to 960 characters.
  4. 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.
Tip: Check System Monitor after every deployment. A sudden spike in one error type right after a release is the fastest way to catch a regression before tenants start reporting it themselves.

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

PermissionGrants Access ToTypical RoleRisk if Over-Assigned
savings-viewView own/assigned savings accountsAll tellersLow
savings-view-allView ALL branch savings accountsBranch Manager, AccountantMedium — staff can see all customer balances
savings-createMake deposits and withdrawalsTellers, CashiersHigh — can move money
savings-reverseReverse savings transactionsBranch Manager onlyVery High — can undo posted transactions
loans-viewView own/assigned loan accountsAll tellersLow
loans-view-allView ALL branch loan accountsBranch Manager, AccountantMedium
loans-createIssue loans and record repaymentsLoan officers, senior tellersVery High — can create financial obligations
loans-reverseReverse loan transactionsBranch Manager onlyVery High

Commerce & Invoicing Permissions

PermissionGrants Access ToTypical Role
pos-viewView POS terminal and sales historyAll sales staff
pos-checkoutProcess sales at POSCashiers, sales staff
pos-reverseReverse/refund a completed saleSupervisors, Branch Manager
invoice-viewView the invoice list and detailsAll accounting staff
invoice-createCreate and edit draft invoicesSales officers, accountants
invoice-approveApprove invoices for postingSupervisors, managers
invoice-postPost approved invoices to GLAccountants
invoice-paymentRecord payments against invoicesCashiers, accountants
invoice-cancelCancel an invoiceManagers only
invoice-printPrint/export invoice PDFSales staff, accountants

Finance & Accounting Permissions

PermissionGrants Access To
accounting-viewView chart of accounts, account statements, journal entries
accounting-createCreate manual journal entries
accounting-reverseReverse posted journal entries
accounting-block/unblockBlock or unblock GL accounts from posting
expense-viewView expense vouchers and dashboard
expense-createCreate and submit expense vouchers
expense-approveApprove expense vouchers
expense-postPost approved expenses to GL
expense-reverseReverse posted expense entries
recon-viewView reconciliation dashboard and history
recon-createCreate new reconciliation batches
recon-submitSubmit batches for manager review
recon-approveApprove or reject submitted batches
closing-viewView month-end closing history and wizard
closing-processExecute month-end closing
closing-configureConfigure allocation rules and closing settings

HR Permissions

PermissionGrants Access To
hr-dashboard-viewHR Dashboard with workforce KPIs
hr-employee-view/create/edit/deleteEmployee directory management
hr-payroll-view/create/approve/exportPayroll lifecycle — view, create, approve, export bank file
hr-leave-view/create/approveLeave request management and approval
hr-attendance-view/create/editAttendance record management
hr-loan-view/create/approve/disburseStaff loan lifecycle
hr-report-viewAll HR reports (attendance, payroll, leave, staff stats)
hr-document-view/create/download/deleteHR document library
hr-performance-view/create/editPerformance review management

Inventory & Agency Permissions

PermissionGrants Access To
inventory-view/create/updateView and manage inventory
inventory-adjustStock count adjustments
inventory-transferInter-branch stock transfers
inventory-batch-manageBatch creation and management
inventory-serial-manageSerial number management
purchasing-view/create/submit/receivePurchase order lifecycle
bridge-view/create/reverseInter-branch bridge transfers
strongroom-view/create/approveVault deposit/withdrawal (create requires approval)
commission-view/create/post/reverseCommission management
fiae.view/import/reconcile/audit/resolve_flagsFIAE Intelligence module capabilities

AI Assistant Permissions

PermissionGrants Access ToTypical Role
ai-settings-viewView AI Assistant settings and this month's usageTenant Owner, Accountant
ai-settings-manageToggle AI on/off, choose a provider, set the monthly request limitTenant Owner only
ai-assistant-useUse the Knowledge Assistant, Report Explainer, Audit Assistant, and Closing AssistantManagers, accountants, any staff who need AI help
The two remaining AI features don't need a separate AI permission — AI Suggest Causes (Reconciliation) only needs the existing 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

First, check that you are using the correct email address and password. If you have forgotten your password, click "Forgot Password" on the login page. If your account has been locked due to too many failed attempts, contact your branch manager to unlock it. If the OTP is not arriving, check your SMS inbox and ensure your phone number in your profile is correct.

Your role includes permission to see the menu but not to access the specific action. Contact your branch manager to update your role with the correct permission for that action.

Never delete transactions. Instead, use the Reverse feature. Find the transaction in the relevant module (savings, loans, expenses, etc.) and click Reverse. The system creates an equal and opposite entry. Then create the correct transaction. All steps are logged in the audit trail.

Every transaction in Goju Cloud uses double-entry bookkeeping, so the Trial Balance should always balance. If it doesn't, it is likely a data issue. Check for any transactions that were saved in an incomplete state. Contact Goju Cloud support with your trial balance date and we can help investigate.

Most reports can be exported to PDF directly from the report page. For Excel export, use the PDF version and then use a PDF-to-Excel converter tool, or contact your system administrator to request CSV exports for specific data.

Each branch's data (accounts, transactions, staff, inventory) is completely isolated. Staff can only see data for their assigned branch. Only the Tenant Owner can switch between branches and see all branch data from the top-level company dashboard.

No. Every staff member must have their own unique account. Sharing logins makes the audit trail meaningless and creates a security risk. There is no limit on the number of user accounts within your plan's user limit.

Staff will be unable to log in after the subscription expires. Your data is not deleted immediately — it is retained for a grace period. Contact Goju Cloud to renew before expiry to avoid any interruption. The Tenant Owner can manage subscription renewals under Organization → Subscription.

FEFO stands for First Expiry, First Out. When you scan or add a batch-tracked product to the POS, the system automatically highlights the batch with the earliest expiry date for you to sell first. This minimizes waste and ensures customers receive fresh products.

Month-end closing cannot be undone through the system. Contact Goju Cloud support — a system-level correction can be made by the platform team in exceptional circumstances, but this requires management authorization and a written request explaining the error.

Only if your plan includes the AI Assistant feature. If it isn't included, every AI menu item and "Explain with AI" button is automatically hidden — nothing dead-ends with an upgrade prompt. Ask your Tenant Owner to check Organization → Subscription, or contact Goju Cloud to upgrade. See GOJU AI — Overview.

Yes. Every AI request is scoped to your tenant only — the same tenant-isolation rules that protect every other module apply here too. Only the specific data needed to answer your request is sent to the AI provider (e.g. the figures on the report you clicked "Explain with AI" on), never your whole database. See Data, Privacy & Cost Control.

AI features (Knowledge Assistant, Report Explainer, Audit Assistant, etc.) pause with a clear "monthly limit reached" message until the 1st of the next month. Nothing else in the system is affected — you can keep working normally. A user with ai-settings-manage can also raise the limit at any time in Management → AI Assistant. See Enabling & Settings.

No, never — in any of its six features. GOJU AI only reads data you already have permission to see, and explains, summarizes, or suggests. Posting a journal entry, approving a batch, closing a period, or reversing a transaction always still requires a human with the correct permission to take that action.

Troubleshooting

Solutions to common problems encountered while using Goju Cloud.

ProblemLikely CauseSolution
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.

TermDefinition
Accounts PayableMoney your business owes to suppliers for goods or services received but not yet paid for.
Accounts ReceivableMoney owed to your business by customers who received goods or services on credit (invoices). Managed in the Invoice module.
AI AssistantGoju 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 FlagIn the FIAE module, an automatically raised alert indicating a potentially suspicious or anomalous transaction that requires human review.
Balance SheetA financial statement showing a company's assets, liabilities, and equity at a specific point in time. Assets = Liabilities + Equity.
Batch TrackingA method of tracking inventory by grouping units that share the same production batch, lot number, and expiry date.
Bridge TransferA financial transfer of funds or assets between two branches of the same business, recorded in the general ledger of both branches.
Cash Flow StatementA 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).
COGSCost of Goods Sold — the direct cost of producing or purchasing the products that were sold. COGS is deducted from revenue to calculate Gross Profit.
CreditIn double-entry bookkeeping, a credit increases Liability, Equity, and Revenue accounts. It decreases Asset and Expense accounts.
DebitIn double-entry bookkeeping, a debit increases Asset and Expense accounts. It decreases Liability, Equity, and Revenue accounts.
Double-Entry BookkeepingThe accounting system where every transaction affects at least two accounts: one debit and one credit, always of equal value.
FEFOFirst 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.
FIAEFinancial Intelligence & Agency Engine — Goju Cloud's module for analysing mobile money SMS data, detecting fraud, and reconciling agency banking float balances.
FloatThe 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 StatementAlso called Profit & Loss (P&L). A report showing revenues, costs, and expenses over a period, resulting in net profit or net loss.
Journal EntryA manual accounting entry posted directly to the general ledger with at least one debit and one credit of equal value.
KYCKnow 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 EntryA single line in the general ledger recording one side of a transaction (either a debit or a credit) against one account.
LLM ProviderThe 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 ClosingThe process of formally closing an accounting period, preventing backdated entries, and allocating the net profit to equity/reserve accounts.
NSSFNational Social Security Fund — Tanzania's mandatory pension contribution scheme. Employers and employees both contribute a percentage of salary.
OTPOne-Time Password — a temporary security code sent via SMS or email to verify a user's identity at login (two-factor authentication).
PAYEPay As You Earn — Tanzania's income tax withheld by employers from employee salaries and remitted to the Tanzania Revenue Authority (TRA).
POSPoint of Sale — the system used to process customer purchases at the time and place of sale.
ReconciliationThe 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.
ReversalA 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 TrackingAn inventory method where each individual unit of a product is assigned and tracked by a unique serial number from purchase to sale.
StrongroomAlso called Vault. A secure, dual-control cash storage system where deposits and withdrawals require both initiation and manager approval.
TenantIn Goju Cloud's SaaS architecture, a Tenant is one business client with their own isolated data, users, and subscription plan.
Trial BalanceA 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.
VATValue Added Tax — Tanzania's consumption tax charged at 18% on taxable goods and services. Collected by businesses and remitted to TRA.
VoucherA document authorizing a payment or expense. In Goju Cloud, expense vouchers are the records that go through the approval workflow before posting.