remoteEaze
Testing

Initial Review Guide

A step-by-step walkthrough for reviewing the remoteEaze dashboard features. No technical background required.

First Release Disclaimer — This is the first test release of the remoteEaze system. Features are being added rapidly and this guide will be updated with each iteration.


Before You Start

Make sure you have:

  • Your login credentials (email and temporary password)
  • A stable internet connection

URLs:

EnvironmentHomeDashboard
Developmentremote-eaze-dev.arclabs.topremote-eaze-dev.arclabs.top/admin
StagingN/AN/A
ProductionN/AN/A

Device Testing

All features in this guide should be tested on three screen sizes. Tablet is the most important since that is the expected primary device for end users.

DeviceHow to simulate
Laptop / DesktopYour normal browser window
Tablet *Use your browser's built-in DevTools → Toggle Device Toolbar, or use the extension below
MobileSame as above, select a mobile preset

Recommended tool for Chrome-based browsers: Install the Responsive Viewer extension. It lets you preview multiple screen sizes simultaneously without switching back and forth.

For each item in this guide, note whether it looks and works correctly on all three sizes.


1. Theme Switching

The theme switcher lets you switch between Light, Dark, and System (follows your device setting) themes.

On the Home page (/): The theme toggle button is in the top header area of the home page.

On the Dashboard (/admin): The theme switcher is inside the user menu at the bottom-left of the sidebar. Click your name/avatar button at the bottom of the sidebar to open the menu — the theme toggle is inside that dropdown.

What to do: Switch between the three theme options in both locations.

Pass:

  • The page colors change immediately when you switch.
  • Refresh the browser — the theme you selected is still active (it is remembered).

Fail:

  • The page does not change when you click the toggle.
  • The theme resets back to default after refreshing.

2. Offline Mode on the Home Page

What to do: Open the home page while connected to the internet. Then, in your browser, go to Developer Tools → Network tab and set it to Offline. Watch the indicator on the home page.

Pass:

  • A network status indicator on the home page changes to show you are offline (different color or "offline" label).
  • When you go back online, the indicator returns to its normal state.

Fail:

  • The indicator does not react when you disconnect.
  • The page crashes or shows a hard error instead of gracefully showing offline status.

3. Login

What to do: Go to the login page and enter your email and password.

Pass:

  • You are taken to the correct page after logging in (admin users go to the admin dashboard at /admin/dashboard, other users go to the home page).
  • A "Welcome back!" message appears briefly.

Fail cases to check:

What you doWhat should happen
Leave email empty and click Sign InError: "Email is required"
Type something that is not an email (e.g., hello)Error: "Please enter a valid email address"
Leave password emptyError: "Password is required"
Type a password shorter than 8 charactersError: "Password must be at least 8 characters"
Enter wrong credentialsAn error message on the form saying authentication failed
Try to visit /login while already logged inYou are redirected away from the login page automatically

4. Forgot Password

If you forget your password, you can reset it using your email address.

What to do: On the login page, click the "Forgot password?" link next to the Password field.

Pass on the "Reset your password" page:

  • The page shows an email input field and a "Send reset link" button.
  • You can enter an email address and click "Send reset link".
  • Regardless of whether the email exists or not, you see a "Check your email" message saying "If an account exists... we've sent a password reset link."
  • The message notes that "The link will expire in 60 minutes."
  • You can click "Try a different email" to go back and try another email.

Fail:

  • An error message appears that reveals whether the email exists (e.g., "Email not found").
  • The button does nothing when clicked.

Email and Token Validation

What to do: If you used a real email address that has an account, check your inbox and spam folder for an email titled "Reset Your Password".

Pass if email received:

  • The email is branded with the RemoteEaze company name.
  • It contains a prominent "Reset Your Password" button/link.
  • The email notes that the link will expire in 60 minutes.
  • Clicking the button/link takes you to a "Set a new password" screen.

Fail:

  • No email arrives after several seconds.
  • The email button/link does not work or takes you to an error page.

Setting a New Password

What to do: After clicking the reset link in the email, you land on the "Set a new password" page. Enter a new password in both fields and click "Reset password".

Pass:

  • Both "New Password" and "Confirm New Password" fields are visible with show/hide toggles.
  • A "Reset password" button submits the form.
  • After successful reset, you see a success message and are taken back to the login page.

Fail cases to check:

What you doWhat should happen
Enter a password shorter than 8 charactersError: "Password must be at least 8 characters" (shown before submission)
Enter different values in the two fieldsError: "Passwords do not match" (shown before submission)
Do not fill in the fields and click submitValidation errors appear on both fields
Wait 60+ minutes and then click the reset linkPage shows "Invalid or expired link" with a "Request a new reset link" button
Try to reset a password for a non-existent userThe form may fail silently or show a generic error — this is intentional for security

Pass after reset:

  • You can log in with the new password.
  • The new password meets the organization's security requirements (you will see a "Password reset successfully" message after reset).

5. Logout

What to do: While logged in on the home page, click the Logout button in the top header. On the dashboard, logout is inside the user menu at the bottom of the sidebar (click your name/avatar, then Log out).

Pass:

  • You are taken back to the login page.
  • If you try to go back using the browser's back button, you are redirected to login again — you cannot access the dashboard after logging out.

Fail:

  • An error message appears ("Failed to log out").
  • You can still access protected pages after logging out.

6. Forced Password Change on First Login

When a new user is invited to the system, they receive a temporary password by email. The system requires them to change it on their very first login.

What to do: Log in using the temporary password from the invite email.

Pass:

  • After logging in, you are immediately taken to a Change Password screen.
  • You cannot skip this step — navigating away sends you back to the change password page.
  • The form asks for: Current Password, New Password, Confirm New Password.
  • After successfully changing the password, you are taken to the dashboard.
  • Any other active sessions (e.g., on another device) are logged out automatically.

Fail cases to check:

What you doWhat should happen
New password does not match the confirmation fieldError: "Passwords do not match"
New password is shorter than 8 charactersError: "Password must be at least 8 characters"
Enter the wrong current passwordA server error is shown on the form

7. Account Management

Every logged-in user can view and update their own profile from the sidebar. Click your name/avatar button at the bottom-left of the sidebar to open the user menu, then click Account.

This opens the Account dialog — a panel with the following sections:

SectionWhat it shows
HeaderYour avatar, display name, work email, and role badge
Work InformationRead-only: work email, staff number, department, cost centre
Personal InformationEditable: display name, personal email, personal phone, official phone, non-working days
Next of KinEditable: name, relationship, ID type, ID number, address
SecurityChange password button

Viewing Your Profile

What to do: Open the Account dialog and check the Work Information section.

Pass:

  • Your work email, staff number, department, and cost centre are displayed correctly.
  • There is no Edit button on this section — it is read-only.

Fail:

  • Any of the read-only fields are blank when they should have data.
  • An Edit button appears on the Work Information section.

Editing Personal Information

What to do: In the Personal Information section, click the Edit button (pencil icon). Make changes to one or more fields, then click Save.

Pass:

  • The section switches from read-only items to an editable form.
  • A Cancel button replaces the Edit button while in edit mode.
  • After saving, a success toast appears ("Personal information updated") and the section returns to read-only view showing the updated values.

Fields to test:

FieldWhat to verify
Display NameChange your name and save — the header at the top of the dialog also reflects the change
Personal EmailEnter a valid personal email address
Personal PhoneEnter a phone number
Official PhoneEnter a phone number
Non-Working DaysCheck one or more days (checkboxes for Mon–Sun) — the view mode shows badge labels for selected days

Cancel behaviour:

  • Click Edit, make changes, then click Cancel — the form closes and the original values are restored. Nothing is saved.

Fail:

  • Saving shows an error toast.
  • Changes are not reflected after saving.
  • Clicking Cancel still saves the changes.

Editing Next of Kin

What to do: In the Next of Kin section, click Edit. Fill in the fields and click Save.

Pass:

  • The section switches to an editable form.
  • After saving, a success toast appears ("Next of kin updated") and the section shows the saved values.

Fields to test:

FieldWhat to verify
NameFull name of your next of kin
Relationshipe.g., Spouse, Parent, Sibling
ID Typee.g., National ID, Passport
ID NumberThe document number
AddressPhysical or postal address (textarea)

Clearing next of kin: If both Name and Relationship are left blank and you save, the next of kin record is cleared entirely.

Fail:

  • Saving returns an error.
  • The view mode still shows old values after saving.

Changing Your Password from the Account Dialog

What to do: In the Security section, click the Change button. A nested dialog opens. Enter your current password, a new password, and confirm the new password. Click Change Password.

Pass:

  • A success toast appears ("Password changed successfully").
  • The dialog closes automatically.
  • Other active sessions (e.g., on another device) are logged out.

Fail cases to check:

What you doWhat should happen
Leave any field empty and click Change PasswordValidation errors appear on the empty fields
Enter a new password shorter than 8 charactersError: "Password must be at least 8 characters"
Enter different values in New Password and Confirm fieldsError: "Passwords do not match"
Enter the wrong current passwordA server error is shown on the form

8. Creating a License (Organization Setup)

From the admin dashboard, go to Licenses in the sidebar and create a new license by filling in the organization details (company name, country, base currency, expiry date, etc.).

Pass: After a license is successfully created, the following should ALL be automatically set up. Navigate to the pages listed to confirm:

What is createdWhere to check in the dashboard
Head Office branch for the organizationBranch Management in the sidebar
Tenant Administrator roleRoles & Permissions in the sidebar
Base currency for the organizationFinancial Config → Tenant Currency in the sidebar

Fail cases to check:

What you doWhat should happen
Set the expiry date to a date in the pastError: "License expiry must be in the future"

Note: Country and currency are selected from dropdowns, so invalid values are not possible through normal use.


9. Initialize Sequences

After creating a license, you must initialize the standard sequences (Customer Number, Account Number) before you can create customers or accounts for that organization.

What to do:

  1. Go to Licenses in the sidebar.
  2. Click View on a license you just created.
  3. Look for the Sequences section in the license detail page.
  4. Click the Initialize button.

Pass:

  • The Sequences card shows "Initialized" badges for CUSTOMER and ACCOUNT.
  • The "Initialize" button disappears or becomes disabled.
  • A success toast appears: "Sequences initialized successfully".

Fail:

  • The button does nothing when clicked.
  • Sequences remain in "Pending" or "Missing" state.

10. Create a Department

Go to Org Structure in the sidebar, then navigate to Departments. Create a new department by providing a code and a name/description.

Pass:

  • The department appears in the list immediately after saving.
  • You can optionally assign a parent department for hierarchical structures.

Fail cases:

What you doWhat should happen
Leave the code emptyA validation error is shown
Use the exact same code as an existing departmentAn error saying the code already exists

11. Create a Cost Centre

Go to Org Structure in the sidebar, then navigate to Cost Centres. Create a new cost centre by providing a code and a name.

Pass:

  • The cost centre appears in the list after saving.

Fail cases:

What you doWhat should happen
Use the same code as an existing cost centreAn error saying the code already exists

12. Invite a User

Go to Users in the sidebar, then click Invite User. Fill in the details: name, email address, role, and any other required fields.

Testing tip — choosing roles:

  • To test the admin dashboard (this release's focus): invite users with the Tenant Administrator role (the role created automatically when a license is set up).
  • To test permission boundaries in future releases (e.g., what happens when a non-admin tries to access admin areas): invite users with a non-admin role and see if they are properly blocked.

This release focuses on the Tenant Administrator dashboard, so most of your test users should be invited with the Tenant Administrator role.

Pass:

  • The user is created and appears in the user list.
  • The invited user receives a welcome email with their login credentials and temporary password.
  • When that user logs in with their temporary password, they are immediately forced to change it (see section 6).

Fail cases to check carefully:

What you doWhat should happen
Use an email at a domain that cannot receive emails — e.g., remoteEaze@arclabs.topError: "Email domain cannot receive emails" — the invite is blocked
Use an email address that already belongs to an existing userError: "User with this email already exists"
Leave required fields emptyValidation errors on those fields

Why is remoteEaze@arclabs.top a good test case? The system actively checks whether the email domain you enter is actually capable of receiving emails — not just whether the format looks correct. arclabs.top does not have mail servers configured, so even though the email format looks valid, it will be rejected. This protects against invites being sent to addresses that will never receive them.


13. Branch Creation

Go to Branch Management in the sidebar and create a new branch. You will select a country and a currency.

Pass:

  • The branch is created and appears in the branch list.
  • The branch code is automatically generated — you do not type it manually. For example, a second branch for Kenya might get a code like ABC-KEN-001-0000.

Fail cases:

What you doWhat should happen
Select a currency that has not been added to your organization yetError: "Currency is not enabled for this organization. Please add it in Currency Settings first."
Try to create a second Head Office (Lead) branch for the same countryError saying a Lead branch already exists for that country

Note: Every organization automatically gets a Head Office branch when the license is created (see section 8). This means when creating additional branches, a Lead already exists and sub-branches can be created freely under it.


14. Calendar Operations — Create a Work Day Year

Go to Calendar & Operations in the sidebar and create a new work day year by selecting the year.

Pass:

  • The year record is created in Draft state.
  • You can configure individual months within that year — marking which days of the week are weekends and which specific dates are public holidays.
  • The record must go through the approval process before it is considered active (see the Maker-Checker section).

Fail cases:

What you doWhat should happen
Try to create the same year twiceAn error saying that year already exists

15. Add Tenant Currency

Go to Financial Config in the sidebar, then Tenant Currency. Add a new currency for your organization by selecting the currency and entering the exchange rates.

Pass:

  • The currency appears in the list.
  • When adding a currency, note:
    • Buy Rate, Sell Rate, Mid Rate — these are the exchange rates relative to your base currency.
    • If you set a currency as the Base Currency, its rates are automatically set to 1:1 (since it is the reference currency). Only one currency can be the base at a time — setting a new one as base will replace the previous.

Fail cases:

What you doWhat should happen
Try to add a currency code that is not in the global systemThe dropdown only shows valid currencies, so this is not possible through normal use

16. Add Source of Funds

Go to Financial Config in the sidebar, then Source of Funds. Create a new entry by providing a code and a description.

Note: Source of funds here refers to the organization's own funding sources (e.g., NGO, GOVERNMENT, MEMBER_SAVINGS).

Pass:

  • The entry appears in the list after saving.

Fail cases:

What you doWhat should happen
Use the same code as an existing sourceAn error saying the code already exists

17. Add Transaction Codes

Go to Financial Config in the sidebar, then Transaction Codes. Create a new transaction code by providing a code, description, and specifying whether it is a Debit, Credit, or Both.

Pass:

  • The transaction code is created in Draft state.
  • It must be submitted and go through the approval process before it can be used (see the Maker-Checker section).

Fail cases:

What you doWhat should happen
Use a code that already existsAn error saying the code already exists
Try to edit a transaction code that is currently waiting for approvalAn error — records in the approval process cannot be edited

18. Commission Types and Bands Management

Go to Financial Config in the sidebar, then Commission Types. This is where you define how the system calculates charges and commissions for products.

What to do:

  1. Create a Commission Type by providing a code, name, currency, and link it to an Income Account (must be an INCOME type product) and a Transaction Code.
  2. Once the Commission Type is created, open its details and go to the Bands section.
  3. Add one or more commission bands. Each band defines a range of transaction amounts and the corresponding charge.

Pass:

  • The Commission Type is created in Draft state.
  • You can add, edit, and remove bands.
  • Validation: If the calculation basis is PERCENTAGE, you can optionally set Min Charge and Max Charge limits.
  • Validation: Bands must be continuous with no gaps or overlaps (e.g., if Band 1 ends at 500.00, Band 2 must start at 500.00).
  • Validation: A band must have either a Charge Amount (flat fee) or a Charge Percentage, but not both.

Fail cases:

What you doWhat should happen
Set a Max Amount that is less than or equal to the Min Amount in a bandError: "maxAmount must be greater than minAmount"
Provide both a flat Charge Amount and a Charge Percentage in the same bandError: "Cannot specify both chargeAmount and chargePercentage"
Link to an Income Account that is not of type INCOMEError: "Income account must be of type INCOME"
Add a band with a different currency than the parent Commission TypeError: "Band currency must match commission type currency"

19. Add Titles, Genders, and Marital Statuses

Go to System Data in the sidebar and add entries for each category:

  • Titles (e.g., MR, MRS, DR, PROF)
  • Genders (e.g., M, F, OTHER)
  • Marital Statuses (e.g., SINGLE, MARRIED, DIVORCED)

For each, provide a short code and a description/label.

Pass:

  • Entries appear in their respective lists.
  • These entries become available as dropdown options during customer creation.

Fail cases:

What you doWhat should happen
Use the same code as an existing entry in the same categoryAn error saying the code already exists

20. Add Customer Type and Customer Rating

Go to Customer Configuration in the sidebar and create entries for:

  • Customer Types (e.g., INDIVIDUAL, CORPORATE, SME)
  • Customer Ratings (e.g., LOW_RISK, MEDIUM_RISK, HIGH_RISK)

Pass:

  • Entries appear in their respective lists and become available when creating customers.

Fail cases:

What you doWhat should happen
Use the same code as an existing entryAn error saying the code already exists

21. Add Account Statuses

Go to Account Configuration in the sidebar, then Statuses. Create account statuses. For each, configure:

  • Code and Description (e.g., ACTIVE, DORMANT, FROZEN)
  • Allow Debit — can money be taken out when an account has this status?
  • Allow Credit — can money be put in when an account has this status?
  • Allow Close of Business Transactions — can end-of-day processing run on this account?

Pass:

  • Statuses appear in the list.
  • A DORMANT status with all three flags turned off means no transactions of any kind are allowed on accounts with that status.

Fail cases:

What you doWhat should happen
Use the same code as an existing statusAn error saying the code already exists

22. Add Activity Rules

Go to Account Configuration in the sidebar, then Activity Rules. Create rules that automatically change an account's status based on activity. Configure:

  • Rule type (e.g., "No transactions for X days", "Balance is zero", "Balance below a threshold")
  • Threshold — number of days or an amount, depending on the rule type
  • Target status — which account status the account should be moved to when the rule triggers (e.g., move to DORMANT)
  • Priority — in case multiple rules apply at once

Pass:

  • The rule is created in Draft state.
  • It must go through the approval process before it is active (see the Maker-Checker section).

23. Add Document Types and Identity Types

Go to Identity / Compliance in the sidebar.

Document Types — Add document categories used for customer record-keeping (e.g., PHOTO, PASSPORT_COPY, PROOF_OF_ADDRESS).

Identity Types — Add types of identity documents (e.g., NATIONAL_ID, PASSPORT). You can optionally configure:

  • Which country the ID type belongs to
  • Which fields are required (e.g., issue date, expiry date, reference number)
  • A format pattern for the ID number (used to validate that the number matches the expected format)

Pass:

  • Entries appear in their lists and become available when capturing customer identity information.

Fail cases:

What you doWhat should happen
Use the same code as an existing entryAn error saying the code already exists

24. Add Loan Purposes, Collateral Types, and Facility Classes

Go to Loan Configuration in the sidebar. This section has three tabs: Loan Purposes, Collateral Types, and Facility Classes.

Loan Purposes — Add reasons a customer might take a loan (e.g., AGRICULTURE, SCHOOL_FEES, BUSINESS).

Collateral Types — Add types of security a customer can offer against a loan (e.g., LOGBOOK, TITLE_DEED, FIXED_DEPOSIT).

For both, provide a short code and a description. These entries become available as dropdown options when creating facilities.

Fail cases (Loan Purposes and Collateral Types):

What you doWhat should happen
Use the same code as an existing entryAn error saying the code already exists

Facility Classes

A Facility Class is a product template that defines the default behaviour for credit facilities created under it. You must have at least one approved Facility Class before creating a facility.

What to do:

  1. Go to Loan Configuration → Facility Classes.
  2. Click Create Facility Class.
  3. Fill in the fields and click Save & Submit.

Form fields:

FieldNotes
Code2–30 characters; auto-uppercased; immutable after creation
Name3–100 characters
DescriptionOptional, up to 500 characters
Revolving FacilityToggle — on by default (revolving). Turn off for term facilities
Availability (%)0–100; defaults to 100. Controls how much of the facility limit is available for utilization

Pass:

  • Using Save as Draft creates the class in Draft state. Save & Submit submits it — as a System Administrator it immediately moves to Authorized.
  • An authorized Facility Class shows an Eligible Products section on its detail page where you can link authorized contract products.

Fail cases:

What you doWhat should happen
Use the same code as an existing Facility ClassAn error saying the code already exists
Try to edit an Authorized Facility ClassNo Edit button is shown

25. Customer Management (CRM)

Go to CRM in the sidebar, then Customers. This is where you onboard and manage individual and corporate clients.

What to do:

  1. Click Create Customer.
  2. Select a Customer Type (Individual or Corporate).
  3. Fill in the required demographics and contact information.
  4. Add at least one Identity document.
  5. Submit the record for approval.

Pass — Individual customer:

  • Form shows individual fields: First Name, Surname, Title, Gender, Marital Status, Date of Birth.
  • At least one identity document is required.
  • After creation, the customer is in Draft state with an auto-generated Customer Number.
  • A unique QR Code is automatically generated.

Pass — Corporate customer:

  • Form shows corporate fields: Corporate Name, Date of Incorporation.
  • At least one Director, one Shareholder, and one Contact Person are required.
  • At least one identity document for the entity is required.
  • After creation, the customer is in Draft state.

Fail cases:

What you doWhat should happen
Submit an Individual customer without a First NameValidation error on First Name
Submit a Corporate customer without any DirectorsValidation error: at least one director required
Submit a Corporate customer without any ShareholdersValidation error: at least one shareholder required
Submit a Corporate customer without any ContactsValidation error: at least one contact required
Provide total shareholder percentage exceeding 100%Error: "Total shareholder percentage cannot exceed 100%"
Provide an identity reference that doesn't match the configured format patternError: reference does not match the format defined in the Identity Type
Submit without any identity documentError: at least one identity document is required

26. Agent Management (CRM)

Go to CRM in the sidebar, then Agents. Agents are individuals authorized to perform transactions and onboard customers.

Creating an Agent

What to do:

  1. Click Create Agent.
  2. Select an existing User to be the agent and assign them to a Branch.
  3. Optionally configure working hours and Geo-fencing.
  4. Submit for approval.

Pass:

  • The agent is created in Draft state.
  • The Agent Number is automatically generated from the branch code (e.g., KCB-KEN-001-0001).
  • The User and Branch cannot be changed after creation.

Fail cases:

What you doWhat should happen
Select a user who is already linked to another agent recordError: "User is already an agent"
Set an End Time earlier than or equal to the Start TimeError: "End time must be after start time"
Enable geo-lock without providing a geo zoneError: "allowedGeoZone is required when geoLockEnabled is true"

Updating Agent Working Configuration

Once an agent is Approved, their working hours and geo-fencing can be updated directly — no maker-checker cycle required.

What to do:

  1. Open an Approved agent's detail page.
  2. Click Edit Config (or equivalent working config section).
  3. Change the start/end times or geo zone and save.

Pass:

  • The changes are saved immediately without needing a separate approval step.
  • The same time and geo-zone validations apply.

Linking an Agent Account

Once an agent is Approved, they must be linked to a dedicated Agent Account (operating account for commissions and float). Both the agent and the account must be AUTHORIZED before linking.

What to do:

  1. Create a new account (see Section 29) and mark it as an Agent Account flag — do not assign a customer.
  2. Approve the account until it reaches Approved status.
  3. Open the Agent's detail page.
  4. Click Link Account and select the approved account.

Pass:

  • The account is successfully linked to the agent.
  • A PRIMARY_HOLDER mandate is automatically created for the linked account, using the agent's user profile (name, email, and official phone number) as the signatory.
  • The mandate has no signatoryCustomerId — agents are not customers.

Fail cases:

What you doWhat should happen
Try to link an account that is not yet ApprovedError: "Can only link AUTHORIZED accounts"
Try to link an account before the agent is ApprovedError: "Can only link account to AUTHORIZED agent"

27. Facility Management

Go to Ledger Operations in the sidebar and click the Facilities tab. This is where you create and manage credit facilities for customers.

Prerequisites: You need at least one Authorized customer (section 25) and at least one Authorized Facility Class (section 24) before you can create a facility.

Creating a Facility

What to do:

  1. Click Create Facility.
  2. Select a Customer — only Authorized customers are shown.
  3. Select a Facility Class — only Authorized, active classes are shown.
  4. Fill in the remaining fields (see table below).
  5. Click Save & Submit.

Form fields:

FieldNotes
CustomerRequired; immutable after creation
Facility ClassRequired; immutable after creation
DescriptionRequired; 3–500 characters
CurrencyRequired; immutable after creation
Approved AmountRequired; the total credit limit approved
Advised AmountRequired; the amount communicated to the customer — must not exceed Approved Amount
Expiry DateRequired; must be a future date
Review Frequency (days)1–365; defaults to 30 — days before expiry to trigger a review
Expiry ModeManual (default) or Automatic
Revolving LimitThree options: Inherit from class (default), Yes, or No
Availability MarkerYES (facility available) or NO (facility blocked)

Pass:

  • Save as Draft creates the facility in Draft state. Save & Submit immediately moves it to Authorized for a System Administrator.
  • The Facility Ref is automatically generated by the system in the format {customerNumber}.{facilityClassCode} — you do not type it.
  • The Date Approved is automatically stamped when the facility reaches Authorized.

Fail cases:

What you doWhat should happen
Set Advised Amount higher than Approved AmountError: advised amount must not exceed approved amount
Set an Expiry Date in the pastError: expiry date must be in the future
Select a customer that is not AuthorizedThe customer does not appear in the dropdown
Create a second facility with the same Customer + Facility Class combinationError: that Facility Ref already exists
Try to create a facility where the Approved Amount would push the customer over their total credit limitError: exceeds customer credit limit

Facility List

What to do: On the Facilities list page, verify that the filters and table work correctly.

Pass:

  • The list shows: Facility Ref, Customer, Facility Class code, Approved Amount, Facility Status, Approval Status, Expiry Date, and Created date.
  • Filters work: by search (searches Facility Ref), Approval Status, Facility Status, and Active/Inactive.
  • The default view shows only Authorized facilities.

Viewing a Facility (Detail)

What to do: Click View on any facility in the list.

Pass:

  • The detail page shows all facility fields plus a Record Info sidebar with status, version, dates, and a Change button for Facility Status (Authorized facilities only).
  • Below the main details, two inline card sections are present: Collateral and Facility Accounts.

Updating a Facility

What to do: Open a Draft or Rejected facility and click the Edit button. Update one or more fields and save.

Pass:

  • Changes are saved and reflected on the detail page.
  • The version number increments.

Fail cases:

What you doWhat should happen
Try to edit an Authorized facilityNo Edit button is shown
Try to edit a facility awaiting approvalNo Edit button is shown

Changing Facility Status

Once a facility is Authorized, its operational status can be changed without going through maker-checker.

What to do:

  1. Open an Authorized facility.
  2. In the Record Info sidebar, click Change next to Facility Status.
  3. Select one of the four options and confirm.

Available statuses:

StatusMeaning
ActiveFacility is available for utilization
SuspendedTemporarily blocked — requires a memo (min 5 characters)
ExpiredPast its expiry date
CancelledPermanently cancelled — requires a memo (min 5 characters)

Pass:

  • The status updates immediately and the badge on the detail page changes.

Fail cases:

What you doWhat should happen
Try to set Suspended or Cancelled without entering a memoError: status memo is required (min 5 characters)
Try to change the status of a non-Authorized facilityThe Change button is not visible

Deleting a Facility

What to do: Open a Draft or Rejected facility and use the Danger Zone card to delete it.

Pass:

  • Confirmation dialog appears. After confirming, you are taken back to the list.
  • The facility no longer appears in the active list. Switch to Inactive status filter to confirm it still exists as a soft-deleted record.

Fail cases:

What you doWhat should happen
Try to delete an Authorized facilityNo delete option is shown — you must Cancel the facility first via status change
Try to delete a Denied facilityNo delete option is shown — Denied is terminal

28. Facility Collateral

Collateral is managed directly on the Facility Detail page — there is no separate route. Scroll down on an Authorized facility's detail page to find the Collateral card. The Add, Edit, and Delete controls are only available when the facility is Authorized and active.

Adding Collateral

What to do:

  1. Open an Authorized facility.
  2. In the Collateral card, click Add Collateral.
  3. A side panel opens on the right. Fill in the fields and click Add Collateral.

Form fields:

FieldNotes
Collateral TypeRequired; select from your configured collateral types
Collateral RefRequired; the external reference number (e.g., title deed number, logbook number); max 100 characters
CurrencyRequired
DescriptionRequired; max 500 characters
Market ValueRequired; current market value
Forced Sale ValueRequired; estimated forced sale value — must not exceed Market Value
Last Valuation DateRequired; date the opening valuation was performed
Expiry DateOptional; for time-limited collateral such as Fixed Deposits
RemarksOptional; valuation report summary; max 2000 characters

Pass:

  • The collateral item appears in the Collateral card table.
  • An initial valuation record is automatically created in the valuation history using the Market Value, Forced Sale Value, and Last Valuation Date you entered. The valuer name is recorded as "Initial valuation".
  • Totals at the bottom of the card (total Market Value and total Forced Sale Value) update.

Fail cases:

What you doWhat should happen
Set Forced Sale Value higher than Market ValueError: forced sale value must not exceed market value
Try to add collateral to a non-Authorized facilityThe Add Collateral button is not shown

Updating Collateral

What to do: Click the Edit button on a collateral row. The same side panel opens in edit mode.

Note: The valuation figures (Market Value, Forced Sale Value, Last Valuation Date) are not editable here. To update the collateral's value, you must add a new valuation (see section 29 — Collateral Valuation). Edit mode only allows updating the classification fields: Collateral Type, Collateral Ref, Currency, Description, Expiry Date, and Remarks.

Pass:

  • Changes are saved and the row updates.
  • Valuation figures are unchanged unless a new valuation is added separately.

Removing Collateral

What to do: Click the Delete button on a collateral row and confirm the dialog.

Pass:

  • A confirmation dialog warns that all associated valuation records will also be removed.
  • After confirming, the collateral row disappears from the card.
  • The totals strip at the bottom recalculates.

Fail:

  • No confirmation dialog appears before deletion.

29. Collateral Valuation

Valuation history is accessed by expanding a collateral row on the Facility Detail page. Click the chevron/expand toggle on the left of any collateral row to reveal the inline valuation history panel.

Valuations are append-only — you cannot edit a past valuation. If a valuation was recorded in error, you delete it (which recalculates the current values from the next most recent entry).

Adding a Valuation (Re-valuation)

What to do:

  1. Expand a collateral row.
  2. In the Valuation History panel, click Add Valuation.
  3. A side panel opens. Fill in the fields and click Add Valuation.

Form fields:

FieldNotes
Valuation DateRequired
CurrencyRequired; pre-filled from the collateral's currency
Market ValueRequired
Forced Sale ValueRequired; must not exceed Market Value
Valuation MethodOptional: Market Comparison, Income Approach, Cost Approach, or Other
Valuer NameRequired; name of the valuer or firm; min 2 characters
Valuer ReferenceOptional; report or certificate reference number
RemarksOptional; notes or conditions

Pass:

  • A new valuation entry appears at the top of the valuation history (sorted newest first).
  • The parent collateral row immediately updates its Market Value, Forced Sale Value, and Last Valuation Date to reflect the new valuation.
  • The Collateral card totals strip also recalculates.

Fail cases:

What you doWhat should happen
Set Forced Sale Value higher than Market ValueError: forced sale value must not exceed market value
Leave Valuer Name emptyValidation error

Deleting a Valuation

What to do: In the valuation history panel, click Delete on a valuation row and confirm.

Pass:

  • A confirmation dialog warns that this will recalculate the collateral's current values.
  • After confirming, the valuation entry is removed from the history.
  • The parent collateral row updates to show the values from the next most recent valuation.

Fail:

  • No confirmation dialog appears.
  • The parent collateral's values do not update after deletion.

30. Facility Accounts

Account linking is managed directly on the Facility Detail page — scroll down past the Collateral card to find the Facility Accounts card. Controls are only available when the facility is Authorized.

The Facility Accounts card shows a capacity strip: Advised (total limit), Allocated (sum of all account allocations), Remaining (Advised − Allocated), and Utilized / Outstanding (system-managed, updated by transaction processing). If Remaining goes negative, it is shown in red with an "Over limit" warning.

Linking an Account to a Facility

What to do:

  1. Open an Authorized facility.
  2. In the Facility Accounts card, click Link Account.
  3. A side panel opens. Fill in the fields and click Link Account.

Form fields:

FieldNotes
AccountRequired; only Authorized, active accounts for the same customer are shown in the dropdown
Allocation AmountRequired; the portion of the facility's advised limit reserved for this account — must be greater than 0

Pass:

  • The account appears in the Facility Accounts table with its number, name, allocation amount, link date, and status.
  • The capacity strip updates: Allocated increases by the allocation amount, Remaining decreases.

Fail cases:

What you doWhat should happen
Try to link an account belonging to a different customerThe account does not appear in the dropdown
Try to link an account that is not AuthorizedThe account does not appear in the dropdown
Set an Allocation Amount that would push total allocations over the facility's Advised AmountError: total allocation would exceed the facility advised amount
Try to link the same account to the same facility twiceError: account is already linked to this facility
Try to link an account to a non-Authorized facilityThe Link Account button is not shown

What to do: Click the Edit button on an account row in the Facility Accounts card. Only the Allocation Amount can be changed — the account itself is immutable once linked.

Pass:

  • The allocation amount updates and the capacity strip recalculates.

Fail cases:

What you doWhat should happen
Update the allocation to an amount that would push total allocations over the Advised AmountError: total allocation would exceed the facility advised amount

Releasing an Account from a Facility

What to do: Click Unlink on an account row and confirm the dialog.

Pass:

  • A confirmation dialog shows the account number and allocation amount being released.
  • After confirming, the account row is removed from the Facility Accounts card.
  • The capacity strip recalculates — Allocated decreases, Remaining increases.
  • The account itself is not deleted; it is simply no longer linked to this facility.

Fail:

  • No confirmation dialog appears.
  • The account still appears in the card after unlinking.

31. Add a Product (Chart of Accounts)

Go to Chart of Accounts in the sidebar and create a new product. Products are the financial building blocks — think of them as the categories that all money movements are tracked against. You will choose a product type:

  • Asset — things the organization owns (e.g., loans given out)
  • Liability — things the organization owes (e.g., customer deposits)
  • Income — money coming into the organization (e.g., interest earned)
  • Expense — money going out of the organization (e.g., interest paid out)

The product code is automatically generated — you do not type it. The format is a two-letter prefix followed by a number:

TypePrefixNumber range
AssetAS10000 – 29999
LiabilityLI30000 – 49999
IncomeIN50000 – 69999
ExpenseEX70000 – 79999

Pass (basic creation):

  • Product is created in Draft state with an auto-generated code (e.g., AS-10000, LI-30000).

Pass (after the product is approved — balance tracking):

  • Once a product is approved, balance tracking records are automatically created for branches.
  • If the product has no branch restriction: balance records are created for every branch.
  • If the product has a branch restriction (specific branches selected): balance records are only created for those branches.
  • Navigate to the product and look for its balances to confirm the correct branch records exist.

Fail cases:

What you doWhat should happen
Try to edit a product that is waiting for approvalAn error saying you cannot edit it in that state
Try to edit a product that has already been approvedAn error — approved products cannot have their details changed

32. Account Condition (Interest Engine)

Go to Account Configuration in the sidebar, then Account Conditions. This is where you define interest calculation rules that can be linked to products and applied to accounts.

What to do:

  1. Click Create Account Condition.
  2. Enter a Code (uppercase alphanumeric with dashes, e.g. SAV-STD-01), a Name, and an Effective From date.
  3. Select a Currency.
  4. Configure the interest settings: Interest Basis, Balance Type, Calculation Methods, and frequencies.
  5. Optionally add Debit Tiers and/or Credit Tiers (tiered interest rates).
  6. Link GL accounts for interest posting (Expense, Liability, Income, Tax accounts).
  7. Submit for approval.

Pass:

  • The condition is created in Draft state.
  • The Code and Currency cannot be changed after creation.
  • After approval, the condition can be linked to Products so that accounts using those products inherit these interest rules.

Frequency validation — what to check:

RuleWhat should happen
Set Accrual Frequency to MONTHLY and Posting Frequency to MONTHLYAllowed — they can be equal
Set Accrual Frequency to MONTHLY and Posting Frequency to QUARTERLYError: accrual cannot be less frequent than posting
Set Capitalization Frequency to MONTHLY and Posting Frequency to QUARTERLYError: capitalization cannot be more frequent than posting

Tier validation:

What you doWhat should happen
Add two tiers with the same Min AmountError: duplicate minAmount values
Set a tier's Max Amount to null on a non-last tierError: only the last tier can have unlimited max amount
Set Debit Min Interest greater than Debit Max InterestError: minimum cannot exceed maximum

Tax validation:

What you doWhat should happen
Enter a tax rate without selecting a tax typeError: tax type is required when tax rate is set
Enter a tax rate above 100%Error: tax rate cannot exceed 100%

Fail cases:

What you doWhat should happen
Use the same Code + Effective From as an existing conditionError: this combination already exists
Try to edit a condition that is already ApprovedEdit button not visible — use Supersede instead

Superseding an Account Condition

When interest rates change, you do not delete and recreate. Instead, you supersede the existing condition to create a new time-bounded version.

What to do:

  1. Open an Approved, open-ended condition (one with no Effective To date).
  2. Click Supersede.
  3. Enter a New Effective From date — must be tomorrow or later.
  4. Optionally add comments.
  5. Confirm.

Pass:

  • A new Draft version of the condition is created with the new effective date.
  • The original condition's Effective To date is automatically set to the day before the new version starts.
  • All product links from the original are automatically copied to the new version.

Fail cases:

What you doWhat should happen
Enter an Effective From date of today or in the pastError: date must be at least tomorrow
Try to supersede a condition that already has an Effective To dateSupersede button not available

Interest Preview

Once approved, you can test a condition's calculation before applying it to real accounts.

What to do:

  1. Open an Approved condition.
  2. Click Interest Preview.
  3. Enter a Balance (positive = savings/credit, negative = loan/debit) and a Days value.
  4. Optionally enable Include Tax.
  5. Click Calculate.

Pass:

  • The result shows gross interest, applied rate, day-count basis, and (if tax is included) tax amount and net interest.
  • Tier breakdown is shown if tiered rates are configured.
  • A "Waived" badge appears if the calculated interest is below the de minimis threshold.

33. Account Creation

Go to Ledger in the sidebar, then Accounts. This is where you create and manage financial accounts for customers, agents, or internal use.

What to do:

  1. Click Create Account.
  2. Select a Product — must be AUTHORIZED.
  3. Choose the account type:
    • Customer account: select a Customer (must be AUTHORIZED).
    • Agent account: tick the Agent Account flag — do not select a customer.
    • Internal GL account: leave both customer and agent flag empty (only valid for non-contract products).
  4. Select an Account Type and Branch.
  5. Set the Currency (must match the product's currency).
  6. Optionally configure dates, interest condition, signing rule, sector/industry, and services.
  7. Submit for approval.

Pass:

  • The Account Number is automatically generated (e.g., ACC-00000001).
  • The Account Name is automatically computed: {Customer Name} {Account Type} {Currency}. For agent accounts, the product name is used in place of a customer name.
  • A unique QR Code is automatically generated (QR-ACC-{accountNumber}).
  • For internal GL accounts, the customer and agent fields are absent.

Fail cases:

What you doWhat should happen
Select a contract product but provide neither a customer nor the agent account flagError: "Customer ID is required for contract products"
Select a contract product and set both a customer AND the agent account flagError: cannot set both
Select a product that is not yet ApprovedError: "Product is not authorized"
Select a customer that is not yet ApprovedError: "Customer is not authorized"
Set scheduleDefined = true without selecting a schedule frequencyError: schedule frequency is required
Set an End Date earlier than or equal to the Start DateError: end date must be after start date

Auto-mandate on Account Authorization (Individual customers)

When an account linked to an Individual customer is approved and reaches Approved status, a PRIMARY_HOLDER mandate is created automatically.

What to do:

  1. Create an account for an Individual customer.
  2. Approve the account through to Approved status.
  3. Open the account details and go to the Mandates tab.

Pass:

  • A PRIMARY_HOLDER mandate already exists.
  • The mandate shows the customer's name as the signatory.
  • The mandate includes the customer's contact info (email, phone) and their first identity document details.
  • effectiveFrom is set to today's date.

Note: Corporate customer accounts do not get an auto-mandate. You must add mandates manually.


34. Mandate Management (Signatories)

Mandates define who is authorized to sign for transactions on an account. Go to an Approved account's detail page and open the Mandates tab.

Manual Mandate Creation

What to do:

  1. Open an Approved account and go to the Mandates tab.
  2. Click Add Mandate.
  3. Fill in: Signatory Name, Signatory Type, Effective From date, and optionally Transaction Limit, contact info, and identity details.
  4. Optionally link to an existing Customer record via Signatory Customer.
  5. Save.

Pass:

  • The mandate appears in the list and is marked as Active.
  • effectiveTo null means the mandate is indefinitely valid.

Fail cases:

What you doWhat should happen
Try to add a mandate to a non-Approved accountError: "Can only add mandates to AUTHORIZED accounts"
Set an Effective To date on or before the Effective From dateError: "effectiveTo must be after effectiveFrom"
Provide a Signatory Customer ID that does not existError: "Signatory customer not found"

Signing Rule

The Signing Rule (how mandates must be collectively fulfilled) is set on the Account, not on individual mandates. Go to the account's detail and look for the Signing Rule field.

RuleMeaning
ANY_ONEAny single active mandate holder can authorize
ALL_MUST_SIGNAll active mandate holders must authorize
TWO_OF_THREETwo out of three must authorize
MAJORITYMore than half of active mandate holders must authorize

35. Account Statement Configuration

Configure how and when a customer receives their account statements. Go to an Approved account's detail page and open the Statements tab.

What to do:

  1. Click Configure Statement (or Add Statement Config).
  2. Select the Frequency (DAILY, WEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY).
  3. Select the Delivery Method (EMAIL, PHYSICAL, or BOTH).
  4. Save.

Pass:

  • The configuration is saved and displayed on the Statements tab.
  • lastStatementDate and lastStatementBal are empty until the first statement is generated by the system.

Fail cases:

What you doWhat should happen
Try to configure a statement on a non-Approved accountError: "Can only add statement config to AUTHORIZED accounts"

36. Record Versions Increment on Update

Every record in the system has a version number that increases every time the record is updated. This helps track how many times something has been changed.

What to do: After creating any record (e.g., a department, a branch), open its details and note the version number. Make any edit and save. Check the version number again.

Pass:

  • The version number goes up by 1 with each save (starts at 1, becomes 2 after the first edit, 3 after the second, etc.).

Fail:

  • The version number stays the same after an update.

37. Maker-Checker Workflow (Basic)

For the full maker-checker approval workflow with multi-level approvals, reject, deny, and re-edit testing, see Section 42.

This section covers the basic workflow states and what you can test with a single admin user.

The Maker-Checker system is a two-person approval process for sensitive actions. One person creates or changes a record (the Maker), and another authorized person reviews and approves it (the Checker).

This applies to: Commission Types, Customers, Agents, Transaction Codes, Products (Chart of Accounts), Calendar Years, Activity Rules, Transactions, Standing Orders, and other financial configuration items.

Workflow States

StatusWhat it means
CAPTURED (Draft)Created but not yet submitted for approval
PENDING_AUTH_L3/L2/L1Submitted and waiting for the relevant approval level
AUTHORIZED (Approved)Fully authorized and active
REJECTEDReturned to the maker with a reason — can be edited and resubmitted
DENIEDPermanently refused — cannot be reopened or edited

What to Test with a Single Admin User

1. Super Admin submits directly to Authorized ✅ Test now

When the Tenant Administrator submits a record, it should skip the approval queue and go directly to Authorized — because an admin does not need a separate person to check their own work.

Create a record (e.g., a Transaction Code), click Submit.

Pass: The record immediately shows as Authorized (not "Pending Approval"). Fail: It shows as "Pending Approval" even for the admin.


2. Editing restrictions ✅ Test now

Create a record (e.g., a Transaction Code or Product), then open it after saving. Confirm the Edit button is visible. Submit it, then open it again and confirm the Edit button is gone.

Record stateCan you edit it?
CAPTURED (Draft)Yes — Edit button is visible
AUTHORIZED (Approved)No — no Edit button shown
REJECTEDYes — Edit button is visible, can resubmit
DENIEDNo — no Edit button, no actions available

3. Viewing the difference between versionsComing in a future iteration

The ability to see what changed between the draft and the submitted version is not yet available on the dashboard. This will be added in a future iteration.


38. License Validity and Enforcement

From the admin dashboard, go to Licenses and view a license record.

What to verify visually:

  • The license list correctly shows an Expired badge next to licenses whose expiry date has passed.
  • The license details page shows the correct organization name, expiry date, modules, and active status.

License enforcement — what to expect when a license has a problem:

If a tenant's license is expired, inactive, or has an integrity problem, the system blocks access after login. The user can always log in — but as soon as the dashboard tries to load data, they are redirected to an error page with a clear message.

ScenarioWhat the user sees
License expired (expiry date has passed)"Your organization's license has expired. Contact your system administrator."
License inactive (manually disabled by system admin)"Your license is inactive. Contact your system administrator."
License tampered (integrity check failed)"Unable to verify your organization's license. Your license may have been tampered with. Contact support."

The page shows only the message and a Sign Out button — the user cannot proceed into the dashboard until the issue is resolved by the system administrator.

What to test:

What you doWhat should happen
Log in as a user whose license has expiredLogin succeeds, then you are immediately redirected to the license error page with the expired message
Log in as a user whose license is inactiveLogin succeeds, then you are immediately redirected to the license error page with the inactive message
Click Sign Out on the license error pageYou are signed out and taken to the login page
Try to navigate directly to /admin/dashboard after being redirectedYou are sent back to the license error page

Note for testers: To test the expired and inactive scenarios you will need a license that has been set to the appropriate state. Ask the developer to set up a test tenant/license before running these checks.

To test the tampered scenario, ask a developer to manually corrupt a license record in the database. This cannot be done through the dashboard — it requires direct database access to simulate what would happen if license data was altered outside the system.


39. Activity Logs

Go to Activity Logs in the sidebar. This page shows a record of every significant action performed in the system — who did what, when, and what changed.

The List View

What to do: Open the Activity Logs page. You should see a table of events recorded by the system.

Pass:

  • The list shows events with columns: Actor (who did it, with a badge like "Human" or "System"), Action (what was done), Entity (which record was affected), Status (Success or Failure badge), and Time.
  • As a system admin, you also see a Company column showing which organization the event belongs to.
  • Events are sorted by most recent first.

Filters to test:

FilterWhat to doWhat should happen
Date rangeChange the "From" and "To" datesOnly events within that date range are shown. The range cannot exceed 90 days.
SearchType an actor name, action, or entity ID into the search boxThe list filters as you type (with a short delay)
StatusSelect "Failure" from the status dropdownOnly failed events are shown
CompanySelect a specific organization from the company dropdownOnly events for that organization are shown
Clear filtersAfter applying filters, look for a way to clear themThe list returns to showing all events

Fail:

  • The list is empty even though you have been performing actions in the system.
  • Filters do not update the results.
  • The date range allows more than 90 days without an error.

The Detail View

What to do: Click View on any event in the list to open its detail page.

Pass:

  • The detail page shows the full event information organized into cards:
    • Event Summary — action, entity type and ID, status, module, tags, and whether the event is marked as sensitive.
    • Actor — who performed the action, their role, and their branch.
    • Request Context — the HTTP method and path (e.g., POST /api/v1/...), IP address, and browser information.
    • Record Status — if the action involved a workflow change (e.g., Draft to Approved), the before and after states are shown with colored badges.
    • Trace & System — request ID, session ID, service name, and environment.
    • Timestamps — when the event happened and when it was logged.

Fail:

  • The detail page is blank or shows an error.
  • Information is missing (e.g., no actor name, no timestamps).

The Diff Viewer (View Changes)

What to do: Find an event where a record was created or edited (e.g., you edited a department name or updated a branch). Open the detail page. Look for a "View Changes" button near the top — it shows a badge with the number of fields that changed.

Click View Changes to open the diff dialog.

Pass:

  • A dialog opens showing what changed in the record.
  • Modified fields (something changed from one value to another) are shown with the old value in red with a strikethrough and the new value in green.
  • Added fields (a value was set for the first time) are shown in green with a + marker.
  • Removed fields (a value was cleared) are shown in red with a - marker.
  • Field names are displayed in readable format (e.g., address > street instead of user.address.street).
  • If a field contains encrypted data, it shows a lock icon and the word "Encrypted" instead of the raw value.
  • If a field contains redacted data, it shows a lock icon and "Redacted".

Fail:

  • The "View Changes" button does not appear on an event that clearly involved a change.
  • The dialog is empty or shows raw technical data instead of a readable comparison.

Decrypting Sensitive Data

Some events involve personal information (emails, phone numbers, etc.) that is encrypted for security. Authorized users can temporarily decrypt this data for review.

What to do: Find a sensitive event in the list (look for events marked as sensitive on the detail page). Open it, click View Changes, and look for a "Decrypt PII" toggle switch inside the dialog.

Pass:

  • The toggle is only visible on sensitive events.
  • Toggling it on briefly shows "Decrypting..." then reveals the actual values (e.g., a real email address instead of "Encrypted").
  • Decrypted values are visually distinct (different text color) so you can tell they are decrypted.
  • Toggling it off returns the values to their encrypted state.

Fail:

  • The decrypt toggle appears on events that are not sensitive.
  • Toggling decrypt does nothing or shows an error.
  • Decrypted values look identical to encrypted values (no visual distinction).

Important: Every time you decrypt sensitive data, that action is itself recorded in the activity logs. This is by design — it creates an audit trail of who accessed personal information and when.


40. Soft Delete and Viewing Deleted Records

Most configuration records in the system can be deleted. Deletion is soft — the record is not permanently removed from the database, it is marked as inactive. This means deleted records can still be viewed for audit purposes.

Deleting a Record

What to do: Open the detail page of any entity that supports deletion (see the table below). At the bottom of the page (or in the right sidebar), look for a "Danger Zone" card with a red Delete button. Click it.

Pass:

  • A confirmation dialog appears asking you to confirm the deletion. You do not need to type anything — just click Delete to confirm.
  • After confirming, a success message appears briefly (e.g., "Department deleted successfully").
  • You are automatically taken back to the list page.
  • The record no longer appears in the default "Active" list.

Fail:

  • No confirmation dialog appears — the record is deleted immediately without asking.
  • An error appears after confirming.
  • You are not taken back to the list page.

Viewing Deleted Records

What to do: On the list page, change the status filter to Inactive. Deleted records will appear in this list. Click View on a deleted record.

Pass:

  • The detail page loads successfully — no "Not Found" error.
  • The status badge shows Inactive in red.
  • There is no Edit button — the page is completely read-only.
  • There is no Danger Zone card — you cannot delete an already-deleted record.
  • All the record's data is still visible for reference.

Fail:

  • Clicking View on a deleted record shows a "Not Found" error page.
  • The Edit button is still visible on a deleted record.
  • The Danger Zone / Delete card is still visible on a deleted record.

Which Entities Support Delete

EntityLocation in sidebarSpecial conditions
TitleSystem Data → Titles
GenderSystem Data → Genders
Marital StatusSystem Data → Marital Statuses
Customer TypeCustomer Config → Customer Types
Customer RatingCustomer Config → Customer Ratings
Account TypeAccount Config → Account Types
Account StatusAccount Config → Statuses
Document TypeIdentity / Compliance → Document Types
Identity TypeIdentity / Compliance → Identity Types
Source of FundsFinancial Config → Source of Funds
Loan PurposeLoan Config → Loan Purposes
Collateral TypeLoan Config → Collateral Types
Commission TypeFinancial Config → Commission TypesCan only delete in Draft or Rejected state
BranchBranch ManagementCannot delete a branch that has child branches
DepartmentOrg Structure → DepartmentsCannot delete a department that has child departments
Cost CentreOrg Structure → Cost Centres
RoleRoles & PermissionsThe System Administrator role cannot be deleted
Tenant CurrencyFinancial Config → Tenant CurrencyThe base currency cannot be deleted
Transaction CodeFinancial Config → Transaction CodesCan only delete in Draft or Rejected state
Activity RuleAccount Config → Activity RulesCan only delete in Draft or Rejected state
Work Day YearCalendar & OperationsCan only delete in Draft or Rejected state

Maker-Checker entities (Commission Types, Customers, Agents, Transaction Codes, Activity Rules, Work Day Years, Facilities) can only be deleted when they are in Draft or Rejected state. Once a record has been submitted for approval or is already approved, the Delete button is not available. Note that Denied facilities additionally cannot be deleted at all — Denied is a terminal permanent block.


Entities That Do NOT Support Delete

The following entities use different lifecycle management and do not have a Delete option:

EntityWhy no delete
LicenseUse activate/deactivate instead
UsersUse deactivate instead (coming soon)
Products (Chart of Accounts)Managed through the maker-checker approval lifecycle
Product BalancesSystem-managed — created automatically when products are approved
Account, Facility, Customer, AgentManaged through status lifecycle workflows

Activity Logs After Delete

After deleting a record, you can verify the action was recorded:

  1. Go to Activity Logs in the sidebar.
  2. Search for the entity you deleted.
  3. You should see a *.delete event (e.g., department.delete) with Success status.

Pass: Only one log entry for the delete action — no additional failed "view" entries immediately after. Fail: You see a failed *.view entry immediately following the delete (this would indicate a bug).


41. Transaction Creation

Transactions are the core financial operation of the system. Every money movement is recorded as a double-entry transaction with debit and credit lines that must balance in the organization's base currency.

Go to Ledger Operations in the sidebar, then Transactions. Click Create Transaction to open the form.

Creating a Transaction

What to do:

  1. Click Create Transaction.
  2. Fill in the header fields (see table below).
  3. Add posting lines in the Posting Lines section (see next subsection).
  4. Click Save as Draft or Save & Submit.

Header fields:

FieldNotes
CompanyOnly shown for System Admin. Select the organization this transaction belongs to.
Posting DateRequired. The business date the transaction is posted. Defaults to today.
Value DateRequired. The date funds take effect (used for interest calculations). Defaults to today.
BranchRequired. Select the branch where this transaction is initiated. The dropdown populates after a company is selected.
NarrativeOptional. Overall description for the transaction (max 500 characters).

Pass:

  • The transaction is created with a system-generated Transaction Reference (e.g., TXN-00000001).
  • Two status badges appear on the detail page:
    • Approval Status (record lifecycle): CAPTURED, PENDING_AUTH_L1/L2/L3, AUTHORIZED, REJECTED, or DENIED
    • Processing Status (financial lifecycle): Pending, Processed, Failed, or Reversed
  • Save as Draft saves the transaction in CAPTURED status. Save & Submit submits it for approval — for a System/Tenant Administrator, it goes directly to AUTHORIZED.

Fail cases:

What you doWhat should happen
Leave Posting Date emptyError: "Posting date is required."
Leave Value Date emptyError: "Value date is required."
Leave Branch emptyError: "Branch is required."
Submit without any posting linesError: "At least one debit line is required." / "At least one credit line is required."

Posting Lines (Double-Entry)

The posting lines section is where you define the debit and credit entries. Lines are organized into batches, each batch sharing a single transaction code.

How it works:

  1. Each batch has a Transaction Code (e.g., a code for cash deposit, transfer, etc.).
  2. Within a batch, add Debit lines and Credit lines.
  3. Each line requires: Account, Currency, Amount, and Narrative.
  4. When you select an account, its currency is auto-filled.

Balance indicator:

  • Each batch shows its own balance indicator (total debits vs. total credits in base currency).
  • A global summary at the bottom shows combined totals across all batches.
  • Green "Balanced" indicator appears when debits equal credits in base currency.
  • Red "Not balanced" indicator appears when they don't match.

Cross-currency transactions:

  • Change a line's currency to any tenant-enabled currency.
  • If the transaction currency differs from the account's currency, an FX override panel appears.
  • You can set the exchange rate source to SYSTEM (uses tenant mid-rate), MANUAL (enter a rate), CBK (central bank rate), or THIRD_PARTY.
  • For manual rates, enter the exchange rate and (optionally) a rate date.

Fail cases:

What you doWhat should happen
Submit with debits not equal to credits in base currencyError: "Transaction is not balanced in [BASE_CURRENCY]. Debit total: X — Credit total: Y."
Enter a zero or negative amount on a lineError: "All line amounts must be greater than zero."
Leave a line's account emptyError: "All lines must have an account selected."
Leave a line's transaction code emptyError: "All lines must have a transaction code selected."
Leave a line's narrative emptyError: "All lines must have a narrative."
Use a currency that has no tenant rate configuredError: "Rate unavailable for [FROM] → [TO]. Please configure tenant currencies first."

Editing a Transaction

What to do: Open a transaction in CAPTURED or REJECTED status and click Edit.

Pass:

  • The form pre-fills with the existing transaction header and posting lines.
  • You can modify the narrative, value date, and all posting lines.
  • Posting date and branch are immutable after creation.
  • The version number increments after saving.

Fail cases:

What you doWhat should happen
Try to edit an AUTHORIZED transactionNo Edit button is shown
Try to edit a PENDING_AUTH transactionNo Edit button is shown

Viewing a Transaction

What to do: Click View on any transaction in the list.

Pass:

  • The detail page shows all header fields, two status badges, and a split Debit / Credit view of posting lines.
  • Total Debit (LCY) and Total Credit (LCY) are displayed.
  • The Record Info sidebar shows: Approval Status, Processing Status, ID, Version, Created/Updated timestamps.
  • An Audit Information card shows who created, last modified, and authorized the record (L1, L2, L3 approvers) when the record is not in CAPTURED status.

Transaction List and Filters

What to do: Open the Transactions list page.

Pass:

  • The list shows transactions with columns: Reference, Date, Branch, Status, Total LCY, etc.
  • Filters available: Search (by reference), Approval Status, Processing Status, Company (System Admin only).
  • Click Create Transaction in the toolbar to go to the creation form.

Reversing a Transaction

Once a transaction has been Processed (its Processing Status shows "Processed"), it can be reversed. This creates a counter-transaction that undoes the original posting.

What to do:

  1. Open a Processed transaction.
  2. Click the Reverse button in the top-right corner.
  3. Enter a Reversal Reason (minimum 10 characters).
  4. Click Confirm Reversal.

Pass:

  • A confirmation dialog warns that this action cannot be undone.
  • A new reversal transaction is created in CAPTURED status.
  • You are automatically navigated to the new reversal transaction.
  • The original transaction's Processing Status changes to Reversed.
  • Both the original and reversal transactions show a Reversal Chain card linking them together with a "View" button to navigate between them.
  • The reversal transaction carries the reversal reason you entered.

Fail cases:

What you doWhat should happen
Try to reverse a transaction that is not ProcessedThe Reverse button is not shown
Try to reverse a transaction that is already ReversedThe Reverse button is not shown
Enter fewer than 10 characters for the reversal reasonError: "Reversal reason must be at least 10 characters."

Deleting a Transaction

What to do: Open a transaction in CAPTURED status and use the Danger Zone card to delete it.

Pass:

  • Confirmation dialog appears. After confirming, you are taken back to the list.
  • The transaction no longer appears in the active list.

Fail cases:

What you doWhat should happen
Try to delete a transaction that is PENDING_AUTH or AUTHORIZEDNo delete option is shown
Try to delete a transaction that is DENIEDNo delete option is shown — Denied is terminal

42. Maker-Checker Approval Workflow

The Maker-Checker system is a multi-level approval process where one person (the Maker) creates or changes a record, and one or more authorized persons (the Checkers) review and approve it. This section covers the actual approval workflow — how records move through approval levels and how checkers accept, reject, or deny them.

Prerequisites: To test the full multi-user approval workflow, you need at least two user accounts with different role configurations. The first user (Maker) creates and submits records, and the second user (Checker) reviews and acts on them.

Approval Levels

The system supports up to three approval levels. The number of required levels is determined by Approval Rules configured in Access Control → Approval Rules.

LevelStatusMeaning
L3PENDING_AUTH_L3Waiting for Level 3 (highest) approval
L2PENDING_AUTH_L2Waiting for Level 2 approval
L1PENDING_AUTH_L1Waiting for Level 1 (final) approval

The approval chain flows from L3 → L2 → L1. Each level must approve before the next level can act. Once L1 approves, the record reaches AUTHORIZED status.

Workflow States

StatusMeaningCan Edit?Can Delete?
CAPTUREDDraft — not yet submittedYesYes (soft delete)
PENDING_AUTH_L3Awaiting Level 3 approvalNoNo
PENDING_AUTH_L2Awaiting Level 2 approvalNoNo
PENDING_AUTH_L1Awaiting Level 1 approvalNoNo
AUTHORIZEDFully approved and activeNoNo
REJECTEDReturned to maker for correctionYes (then resubmit)Yes (soft delete)
DENIEDPermanently refused — cannot be reopenedNoNo

Submitting a Record for Approval

What to do: Create any maker-checker record (e.g., a Transaction Code, Agent, or Transaction) and click Save & Submit instead of Save as Draft.

Pass:

  • For a System/Tenant Administrator, the record immediately moves to AUTHORIZED — because the admin can self-approve.
  • For a non-admin user, the record moves to the first pending approval level (e.g., PENDING_AUTH_L3).

Testing note: When testing with admin users, records go directly to AUTHORIZED. To test the multi-level approval flow, create a non-admin role with limited approval permissions and test with that user.


Approving a Record

What to do: Log in as a user who has the appropriate approval permission for the current level. Open a record that is in a pending approval state.

Pass:

  • The detail page shows the Workflow panel in the sidebar with:
    • A Record Status badge (e.g., "PENDING_AUTH_L2")
    • A Stage description (e.g., "Waiting for Level 2 approval")
    • Approve, Reject, and Deny buttons (if the user has the relevant permissions)
  • Clicking Approve immediately moves the record to the next level (or AUTHORIZED if it was the final level).
  • A success toast appears: "Transaction approved" (or the relevant entity name).

Fail cases:

What you doWhat should happen
Try to approve your own record (self-approval)All action buttons are disabled and a message reads: "You cannot act on your own work"
Try to approve at a level you don't have permission forThe Approve button is visible but disabled with a tooltip explaining you need a higher permission level
Try to approve a record that is CAPTURED (not yet submitted)No approval buttons are shown; message reads: "Record must be submitted for approval first"
Try to approve an already AUTHORIZED recordNo approval buttons are shown; message reads: "This record is already finalized"

Rejecting a Record

What to do: While viewing a pending approval record, click Reject.

Pass:

  • A dialog opens with the title "Reject Record".
  • The dialog explains: "This record will be returned to the maker for correction. A reason is required."
  • Enter a reason (minimum 5 characters, maximum 500 characters).
  • Click Confirm.
  • The record moves to REJECTED status.
  • The Rejection Reason appears on the detail page in the Record Info sidebar.
  • The maker can now edit the record and resubmit it.

Fail cases:

What you doWhat should happen
Try to reject without entering a reasonThe Confirm button is disabled
Enter fewer than 5 charactersCharacter counter shows the minimum is not met; Confirm button stays disabled
Try to reject your own recordThe Reject button is disabled with a self-approval block message

Denying a Record

What to do: While viewing a pending or rejected record, click Deny.

Pass:

  • A dialog opens with the title "Deny Record Permanently".
  • The dialog explains: "This record will be permanently denied and cannot be resubmitted. A reason is required."
  • Enter a reason (minimum 5 characters, maximum 500 characters).
  • Click Confirm.
  • The record moves to DENIED status — permanently blocked.
  • No further actions are available: no Edit button, no approval buttons, no Delete option.

Fail cases:

What you doWhat should happen
Try to deny an AUTHORIZED recordNo Deny button is shown
Try to deny your own recordThe Deny button is disabled with a self-approval block message
Enter fewer than 5 characters for the reasonConfirm button is disabled

Re-editing and Resubmitting a Rejected Record

What to do:

  1. Find a record in REJECTED status.
  2. Click Edit.
  3. Make corrections.
  4. Click Save & Submit.

Pass:

  • The edit form opens with the existing data pre-filled.
  • After saving and submitting, the record moves back to the first pending approval level.
  • The version number increments.
  • The previous rejection reason remains visible in the Record Info sidebar.

Fail:

  • No Edit button appears on the rejected record.
  • The record cannot be resubmitted.

Which Entities Use Maker-Checker?

The following entities follow the maker-checker approval workflow:

EntityLocation in Sidebar
TransactionsLedger Operations → Transactions
AgentsCRM → Agents
CustomersCRM → Customers
Products (Chart of Accounts)Chart of Accounts
Transaction CodesFinancial Config → Transaction Codes
Commission TypesFinancial Config → Commission Types
Account ConditionsAccount Config → Account Conditions
Activity RulesAccount Config → Activity Rules
Work Day YearsCalendar & Operations
FacilitiesLedger Operations → Facilities
Facility ClassesLoan Config → Facility Classes
Standing OrdersTransactions → Standing Orders
Forward-Dated TransactionsTransactions → Forward-Dated
Third-Party SystemsThird Party Delivery → Systems
Delivery Hook ConfigsThird Party Delivery → Hook Configs
Loan Workflow TypesLoan Config → Workflow Types
Loan Workflow StagesLoan Config → Workflow Stages
Base RatesLoan Config → Base Rates
COB ConfigurationsClose of Business → Configuration

The approval workflow behaves the same way for all these entities. The steps above (Submit, Approve, Reject, Deny, Re-edit) apply universally.


Approval Rules Configuration

What to do: Go to Access Control in the sidebar, then Approval Rules.

Pass:

  • You can create approval rules that specify which entity types require approval and at what levels.
  • Rules can define thresholds (e.g., transactions above a certain amount require L2 approval).

43. Forward-Dated Transactions (FDT)

Forward-Dated Transactions let you schedule a payment or posting for a future date. The system locks in exchange rates at creation time and reserves (holds) funds from the debit accounts so the money is guaranteed to be available when the transaction executes.

Go to Ledger Operations in the sidebar, then Forward-Dated. Click Create Forward-Dated Transaction to open the form.

Prerequisites: You need at least one active Transaction Code, one Branch, and accounts in the relevant currencies. Working-day calendars (WorkDayYear) must be configured for the tenant to test execution-date resolution.

FDT Lifecycle — Two Status Axes

A Forward-Dated Transaction has two independent status axes:

AxisPurposeValues
Approval Status (recordStatus)Maker-Checker workflowCAPTURED → PENDING_AUTH_L3/L2/L1 → AUTHORIZED; also REJECTED, DENIED
Execution Status (forwardStatus)Financial lifecycleDRAFT → SCHEDULED → EXECUTING → EXECUTED; also FAILED, CANCELLED

When both axes are combined:

Approval StatusExecution StatusMeaning
CAPTUREDDRAFTBeing composed, not yet submitted
PENDING_AUTH_L*DRAFTPending approval at some level
REJECTEDDRAFTReturned to maker; can be edited and resubmitted
AUTHORIZEDSCHEDULEDFully approved; awaiting execution date
AUTHORIZEDEXECUTINGCurrently being materialized into a real transaction
AUTHORIZEDEXECUTEDSuccessfully executed; real transaction created
AUTHORIZEDFAILEDExecution failed; reservation released
CAPTURED or SCHEDULEDCANCELLEDCancelled by operator before execution

Creating a Forward-Dated Transaction

What to do:

  1. Click Create Forward-Dated Transaction.
  2. Fill in the header fields (see table below).
  3. Add posting lines in the Posting Lines section (same batch-based double-entry editor as Section 41).
  4. Click Save as Draft or Save & Submit.

Header fields:

FieldNotes
CompanyOnly shown for System Admin. Select the organization.
Transaction TypeRequired. Choose Post-Dated Check or Scheduled Payment. (Standing Order Instance is system-generated only.)
BranchRequired. Select the originating branch. Populated after a company is chosen.
Scheduled DateRequired. The calendar date you want the transaction to execute. Must be tomorrow or later (cannot be in the past or today).
Working Day PolicyDefaults to Roll Forward. If the scheduled date falls on a weekend or public holiday, the system rolls forward to the next working day.
NarrativeOptional. Overall description (max 500 characters).

Pass:

  • The FDT is created with a system-generated Forward Reference (format: FWD-YYYY-NNNNN).
  • Two status badges appear: Approval Status (CAPTURED) and Execution Status (DRAFT).
  • If the scheduled date falls on a non-working day, the detail page shows both the original date and the Execution Date (Rolled) label indicating the resolved working day.

Fail cases:

What you doWhat should happen
Set Scheduled Date to today or a past dateError: "Scheduled date must be a future working day."
Leave Branch emptyError: "Branch is required."
Leave Transaction Type unselectedError: "Transaction type is required."
Submit with no posting linesError: "At least one debit line is required." / "At least one credit line is required."
Submit with debits ≠ credits in base currencyError: "Transaction is not balanced in [BASE_CURRENCY]."

Posting Lines (Double-Entry with Exchange Rate Locking)

The posting lines editor works the same as Section 41 (Transaction Creation), with one additional field:

FieldNotes
Exchange Rate DateFDT-only. Locks the exchange rate to a specific date for future execution. Shown only when the rate source is not SYSTEM.

Key difference from regular transactions: In a regular transaction, exchange rates are resolved at posting time. In an FDT, rates are locked at creation time. When you select a non-SYSTEM rate source (MANUAL, CBK, or THIRD_PARTY), both the exchange rate and rate date are captured and preserved. They will be used unchanged when the FDT executes on its scheduled date.

Fail cases:

What you doWhat should happen
Use a manual rate source but leave the exchange rate field emptyError: "Exchange rate is required when rate source is not SYSTEM."
Enter a zero or negative exchange rateError: "Exchange rate must be a positive number."

Editing a Forward-Dated Transaction

What to do: Open an FDT in CAPTURED or REJECTED status (Approval Status) and click Edit.

Pass:

  • The form pre-fills with the existing header and posting lines.
  • You can modify Narrative, Scheduled Date, Branch, Transaction Type (only in CAPTURED), and all posting lines.
  • If you change the Scheduled Date, the resolved execution date is recalculated using the working-day calendar.
  • The version number increments after saving.

Fail cases:

What you doWhat should happen
Try to edit an AUTHORIZED + SCHEDULED FDTNo Edit button is shown
Try to edit an EXECUTED or FAILED FDTNo Edit button is shown; the detail page is read-only

Balance Reservation

When an FDT reaches AUTHORIZED status (after final approval), the system automatically reserves funds on every debit account:

  • The reserved amount is shown in the detail page as "locked from available balance".
  • transForwardAmount increases and availableOnlineBalance decreases on each debit account by the FCY reservation amount.
  • The reservation amount in LCY is also displayed so you can verify the hold amount in base currency.

Testing note: After approving an FDT, go to the debit account(s) and verify that the Available Balance has decreased by the reservation amount. After cancellation or execution, verify the balance is restored.


Cancelling a Forward-Dated Transaction

What to do: Open an FDT whose Execution Status is DRAFT or SCHEDULED, then click Cancel.

Pass:

  • A confirmation dialog warns that the cancellation is permanent.
  • The Execution Status changes to CANCELLED.
  • If the FDT was SCHEDULED (i.e., already had a reservation), the reservation is released: transForwardAmount decreases and availableOnlineBalance increases on each debit account.
  • The detail page shows the FDT as CANCELLED with no further actions available.

Fail cases:

What you doWhat should happen
Try to cancel an EXECUTED FDTNo Cancel button is shown
Try to cancel an EXECUTING FDTNo Cancel button is shown — this is a system lock state

Approving a Forward-Dated Transaction

Approval follows the standard Maker-Checker workflow (Section 42). On final approval the following happens automatically:

  1. The Approval Status moves to AUTHORIZED.
  2. The Execution Status moves from DRAFT to SCHEDULED.
  3. Balance reservations are applied to all debit accounts.

Pass:

  • After the last level approves, both badges update immediately.
  • The detail page shows "locked from available balance" next to the reservation amount on each debit line.
  • A self-approval block applies: you cannot approve an FDT you created yourself.

Execution of a Forward-Dated Transaction

FDTs are executed automatically by the system when the resolved execution date arrives. You do not manually trigger execution in normal operation.

How it works: When the current working day reaches the resolved execution date, the system:

  1. Changes forwardStatus to EXECUTING (locks the record).
  2. Creates a real Transaction from the FDT's posting lines with recordStatus = AUTHORIZED and lineSource = FORWARD_DATED_EXECUTION.
  3. Releases the balance reservation on all debit accounts.
  4. Links the FDT to the created transaction via Executed Transaction.
  5. Changes forwardStatus to EXECUTED.

If execution fails, the status moves to FAILED and the reservation is released. No automatic retry occurs.

What to verify on an EXECUTED FDT:

  1. Open the FDT detail page.
  2. The Execution Status badge shows EXECUTED.
  3. A link to the Executed Transaction appears in the detail page — click it to view the real transaction.
  4. The debit account(s) show the reservation released (available balance restored minus the real transaction posting).

FDT List and Filters

What to do: Open the Forward-Dated Transactions list page.

Pass:

  • The list shows FDTs with columns: Forward Reference, Scheduled Date, Branch, Type, Approval Status, Execution Status, Total LCY, etc.
  • Filters available: Search (by reference), Approval Status, Execution Status, Transaction Type, Company (System Admin only).
  • Click Create Forward-Dated Transaction in the toolbar to go to the creation form.

FDT and Close of Business (COB)

The COB process checks for due FDTs as part of its pre-flight:

  • COB Config has a "Block on Due FDT Failure" flag. When enabled, if any SCHEDULED FDT whose resolved execution date is the current working day has a FAILED status, the COB run is blocked.
  • COB Run Steps include TRIGGER_DUE_FDT and WAIT_DUE_FDT — these ensure all due FDTs are executed before the COB run completes.

See also Section 45 (COB Configuration & Trigger) for more details.


FDTs Generated by Standing Orders

When a Standing Order generates a child FDT:

  • The child FDT's Transaction Type is set to Standing Order Instance (not selectable in the UI).
  • The sourceType on the child FDT is "STANDING_ORDER" with sourceId linking to the parent.
  • The detail page of such an FDT shows a Source card with a link to the parent Standing Order.
  • Child FDTs are created directly in AUTHORIZED + SCHEDULED status — they bypass maker-checker because the parent was already approved.

44. Standing Orders

Standing Orders create recurring payments that automatically generate Forward-Dated Transactions on a monthly schedule. Each occurrence is a child FDT that goes through the execution flow described in Section 43.

Go to Ledger Operations in the sidebar, then Standing Orders. Click Create Standing Order to open the form.

Prerequisites: Same as FDTs — you need Transaction Codes, Branches, and accounts. Additionally, you need Working Day calendars configured for date resolution and rollover.

Standing Order Lifecycle — Two Status Axes

Like FDTs, Standing Orders have two independent status axes:

AxisPurposeValues
Approval Status (recordStatus)Maker-Checker workflowCAPTURED → PENDING_AUTH_L3/L2/L1 → AUTHORIZED; also REJECTED, DENIED
Standing Order Status (standingOrderStatus)Business lifecycleDRAFT, ACTIVE, PAUSED, CANCELLED, COMPLETED
Approval StatusStanding Order StatusMeaning
CAPTUREDDRAFTBeing composed, not yet submitted
PENDING_AUTH_L*DRAFTPending approval at various levels
REJECTEDDRAFTReturned to maker; can edit and resubmit
AUTHORIZEDACTIVEFully approved and generating child FDTs
AUTHORIZEDPAUSEDTemporarily suspended; no new children generated
AUTHORIZEDCANCELLEDPermanently stopped
AUTHORIZEDCOMPLETEDNaturally ended (endDate reached)

Creating a Standing Order

What to do:

  1. Click Create Standing Order.
  2. Fill in the header and recurrence fields (see table below).
  3. Add posting lines in the Posting Lines section (same batch-based double-entry editor).
  4. Click Save as Draft or Save & Submit.

Header fields:

FieldNotes
CompanyOnly shown for System Admin. Select the organization.
BranchRequired. Select the originating branch. Populated after a company is chosen.
Day of MonthRequired. Integer from 1 to 31. The day each monthly occurrence is scheduled. If the day exceeds the number of days in a given month (e.g., 31 in April), it is clamped to the last day of that month (April 30).
Start DateRequired. The date from which occurrences should begin. Must be today or in the future.
End DateOptional. Leave blank for an open-ended (indefinite) standing order. If set, must be on or after the Start Date. After the last occurrence before this date, the standing order automatically moves to COMPLETED.
NarrativeOptional. Overall description (max 500 characters).

Recurrence rules:

RuleBehavior
FrequencyCurrently Monthly only. The form does not show a frequency selector — it is always monthly.
First occurrenceComputed as the nearest matching day-of-month on or after the Start Date. If Start Date is the 15th and Day of Month is 20, the first occurrence is the 20th of the same month. If Start Date is the 25th and Day of Month is 20, the first occurrence is the 20th of the next month.
Subsequent occurrencesEach month, the system generates an occurrence on the configured Day of Month (clamped for short months). Weekend/holiday dates roll forward to the next working day.
Open-endedIf End Date is blank, the standing order runs indefinitely until manually cancelled.

Pass:

  • The standing order is created in CAPTURED / DRAFT status.
  • The form shows a "How It Works" sidebar explaining the recurrence rules.
  • A computed Next Scheduled Date and Resolved Execution Date appear after approval and activation.

Fail cases:

What you doWhat should happen
Set Day of Month to 0 or 32Error: "Day of month must be between 1 and 31."
Set Start Date to a past dateError: "Start date must not be in the past."
Set End Date before Start DateError: "End date must be on or after the start date."
Submit with no posting linesError: "At least one debit line is required." / "At least one credit line is required."
Submit with debits ≠ credits in base currencyError: "Transaction is not balanced in [BASE_CURRENCY]."

Posting Lines (Recurring Template)

The posting lines act as a recurring template. Every monthly occurrence uses the same line structure:

  • Same accounts, transaction codes, amounts, and exchange rates are copied into each child FDT.
  • Exchange rates are locked at submission time and carried into every child FDT unchanged.
  • If you need different amounts each month, you should use individual FDTs (Section 43) instead.

Testing note: The line editor is identical to the Transaction and FDT editors. The same double-entry and FX rules apply. The only FDT-specific field (Exchange Rate Date) also appears here because Standing Order children are Forward-Dated Transactions.


Approving and Activating a Standing Order

Approval follows the standard Maker-Checker workflow (Section 42). On final approval the following happens automatically:

  1. The Approval Status moves to AUTHORIZED.
  2. The Standing Order Status moves from DRAFT to ACTIVE.
  3. The first child FDT is immediately generated:
    • Computed date: nearest matching Day of Month on or after the Start Date.
    • Resolved to a working day using the Roll Forward policy.
    • Created with forwardTransType = STANDING_ORDER_INSTANCE, sourceType = "STANDING_ORDER", directly in AUTHORIZED + SCHEDULED status.
    • Balance reservation is applied to all debit accounts of the child FDT.

Pass:

  • After the last level approves, both status badges update: Approval → AUTHORIZED, Standing Order → ACTIVE.
  • A Recurrence Cursor card appears on the detail page showing: Next Scheduled Date, Resolved Execution Date, Last Generated Date, and Generated Count (initially 1).
  • Navigate to the child FDT from the Last Generated FDT link.
  • The child FDT shows a Source card linking back to this Standing Order.

Viewing a Standing Order

What to do: Click on any standing order in the list.

Pass:

  • The detail page shows all header fields, recurrence information, posting lines, and two status badges.
  • A Recurrence Cursor card (visible after activation) displays:
    • Next Scheduled Date — the calendar date for the next occurrence
    • Next Resolved Execution Date — the actual execution date after working-day roll
    • Last Generated Date — the calendar date of the last generated occurrence
    • Generated Count — total number of child FDTs created so far
  • The Workflow panel in the sidebar shows the approval chain (same as Section 42).
  • Self-approval block applies: you cannot approve a standing order you created yourself.

Editing a Standing Order

What to do: Open a standing order in CAPTURED or REJECTED status and click Edit.

Pass:

  • The form pre-fills with the existing data.
  • You can modify all fields except Frequency (which is immutable).
  • The version number increments after saving.

Fail cases:

What you doWhat should happen
Try to edit an ACTIVE standing orderNo Edit button is shown
Try to edit a CANCELLED standing orderNo Edit button is shown
Try to change the FrequencyFrequency is not editable — it is always Monthly

Pausing a Standing Order

What to do: Open an ACTIVE standing order and click Pause.

Pass:

  • A confirmation dialog explains that pausing will temporarily stop new occurrences.
  • The Standing Order Status changes to PAUSED.
  • No new child FDTs are generated while paused.
  • Existing scheduled child FDTs are NOT affected — they will still execute on their scheduled dates.

Resuming a Standing Order

What to do: Open a PAUSED standing order and click Resume.

Pass:

  • The Standing Order Status changes back to ACTIVE.
  • The system generates the next occurrence immediately (the next monthly date after the last generated date, not from today — so no occurrences are skipped).
  • A new child FDT is created in AUTHORIZED + SCHEDULED status.
  • The Recurrence Cursor card updates with the new Next Scheduled Date and increments the Generated Count.

Testing note: If you pause a standing order and resume it months later, the system does NOT backfill missed occurrences. It generates exactly one new child for the next month after the last generated date, then continues monthly from there.


Cancelling a Standing Order

What to do: Open an ACTIVE or PAUSED standing order and click Cancel.

Pass:

  • A confirmation dialog warns: "This will permanently stop the standing order. No further payments will be generated. Existing scheduled child payments will be cancelled and reservations released."
  • The Standing Order Status changes to CANCELLED.
  • No further child FDTs are generated.

Fail cases:

What you doWhat should happen
Try to cancel a CAPTURED (draft) standing orderNo Cancel button is shown — use Delete instead
Try to cancel a COMPLETED standing orderNo Cancel button is shown

Important: Cancelling a standing order updates only the parent record's status. Any child FDTs that have already been generated and are in SCHEDULED status remain active. Cancel them individually (see Section 43 — Cancelling an FDT) if you want to release their reservations immediately.


Natural Completion (End Date)

What to do: Create a standing order with an End Date set to a few months in the future. Approve it and allow occurrences to generate over time.

Pass:

  • After each child FDT executes, the system computes the next occurrence date.
  • When the next computed occurrence date would be after the End Date, the standing order's status automatically changes to COMPLETED.
  • A standing order with a blank End Date never completes naturally — it runs indefinitely until manually cancelled.

Deleting a Standing Order

What to do: Open a standing order in CAPTURED status and use the Danger Zone card to delete it.

Pass:

  • Confirmation dialog appears. After confirming, you are taken back to the list.
  • The standing order no longer appears in the active list.

Fail cases:

What you doWhat should happen
Try to delete an ACTIVE or PAUSED standing orderNo delete option is shown
Try to delete a CANCELLED or COMPLETED standing orderNo delete option is shown

Standing Order List and Filters

What to do: Open the Standing Orders list page.

Pass:

  • The list shows standing orders with columns: Reference, Day of Month, Start Date, End Date, Frequency, Approval Status, Standing Order Status, Total LCY, etc.
  • Filters available: Search (by reference), Approval Status, Standing Order Status, Company (System Admin only).
  • Click Create Standing Order in the toolbar.

Relationship Between Standing Orders and FDTs

AspectStanding Order (Parent)Forward-Dated Transaction (Child)
PurposeDefines the recurring schedule and templateSingle scheduled occurrence
ApprovalGoes through full Maker-Checker workflowIf generated by a standing order: bypasses Maker-Checker (created in AUTHORIZED + SCHEDULED directly). If created manually: goes through Maker-Checker.
Status linkUses standingOrderStatus (DRAFT/ACTIVE/PAUSED/CANCELLED/COMPLETED)Uses forwardStatus (DRAFT/SCHEDULED/EXECUTING/EXECUTED/FAILED/CANCELLED)
Child trackinglastGeneratedForwardTransId, generatedCount, nextScheduledDatesourceType = "STANDING_ORDER", sourceId = <standingOrderId>
Exchange ratesLocked at submission time, carried into each child unchangedLocked at creation time for manual FDTs; inherited from parent for standing order children

General Notes for All Testing

  • Speed and responsiveness — Note if any page or action takes noticeably long (more than a few seconds for simple operations like saving a form or loading a list).
  • Error messages — If a form shows an error, note the exact wording. Errors should be clear and tell you what went wrong.
  • If something behaves unexpectedly — Note the exact steps you took, what you expected to happen, and what actually happened. Screenshots are very helpful.
  • Activity Logs — Use the Activity Logs page in the sidebar to verify that your actions are being recorded. See section 39 for detailed testing instructions.

On this page

Before You StartDevice Testing1. Theme Switching2. Offline Mode on the Home Page3. Login4. Forgot PasswordEmail and Token ValidationSetting a New Password5. Logout6. Forced Password Change on First Login7. Account ManagementViewing Your ProfileEditing Personal InformationEditing Next of KinChanging Your Password from the Account Dialog8. Creating a License (Organization Setup)9. Initialize Sequences10. Create a Department11. Create a Cost Centre12. Invite a User13. Branch Creation14. Calendar Operations — Create a Work Day Year15. Add Tenant Currency16. Add Source of Funds17. Add Transaction Codes18. Commission Types and Bands Management19. Add Titles, Genders, and Marital Statuses20. Add Customer Type and Customer Rating21. Add Account Statuses22. Add Activity Rules23. Add Document Types and Identity Types24. Add Loan Purposes, Collateral Types, and Facility ClassesFacility Classes25. Customer Management (CRM)26. Agent Management (CRM)Creating an AgentUpdating Agent Working ConfigurationLinking an Agent Account27. Facility ManagementCreating a FacilityFacility ListViewing a Facility (Detail)Updating a FacilityChanging Facility StatusDeleting a Facility28. Facility CollateralAdding CollateralUpdating CollateralRemoving Collateral29. Collateral ValuationAdding a Valuation (Re-valuation)Deleting a Valuation30. Facility AccountsLinking an Account to a FacilityUpdating an Account Link (Edit Allocation)Releasing an Account from a Facility31. Add a Product (Chart of Accounts)32. Account Condition (Interest Engine)Superseding an Account ConditionInterest Preview33. Account CreationAuto-mandate on Account Authorization (Individual customers)34. Mandate Management (Signatories)Manual Mandate CreationSigning Rule35. Account Statement Configuration36. Record Versions Increment on Update37. Maker-Checker Workflow (Basic)Workflow StatesWhat to Test with a Single Admin User38. License Validity and Enforcement39. Activity LogsThe List ViewThe Detail ViewThe Diff Viewer (View Changes)Decrypting Sensitive Data40. Soft Delete and Viewing Deleted RecordsDeleting a RecordViewing Deleted RecordsWhich Entities Support DeleteEntities That Do NOT Support DeleteActivity Logs After Delete41. Transaction CreationCreating a TransactionPosting Lines (Double-Entry)Editing a TransactionViewing a TransactionTransaction List and FiltersReversing a TransactionDeleting a Transaction42. Maker-Checker Approval WorkflowApproval LevelsWorkflow StatesSubmitting a Record for ApprovalApproving a RecordRejecting a RecordDenying a RecordRe-editing and Resubmitting a Rejected RecordWhich Entities Use Maker-Checker?Approval Rules Configuration43. Forward-Dated Transactions (FDT)FDT Lifecycle — Two Status AxesCreating a Forward-Dated TransactionPosting Lines (Double-Entry with Exchange Rate Locking)Editing a Forward-Dated TransactionBalance ReservationCancelling a Forward-Dated TransactionApproving a Forward-Dated TransactionExecution of a Forward-Dated TransactionFDT List and FiltersFDT and Close of Business (COB)FDTs Generated by Standing Orders44. Standing OrdersStanding Order Lifecycle — Two Status AxesCreating a Standing OrderPosting Lines (Recurring Template)Approving and Activating a Standing OrderViewing a Standing OrderEditing a Standing OrderPausing a Standing OrderResuming a Standing OrderCancelling a Standing OrderNatural Completion (End Date)Deleting a Standing OrderStanding Order List and FiltersRelationship Between Standing Orders and FDTsGeneral Notes for All Testing