ZyncDocs · ZyncGold ERP · Module Requirements
Must Should Could
Functional Requirements · By Module

ZyncGold ERP — Module Requirements

This is the functional requirements reference for the ZyncGold platform — a multi-tenant gold-trading and retail ERP. Every backend module is documented as a set of capabilities and requirements: what the system does for the business and its users. Use the sidebar or search to jump to any module.

30
Modules
6
Domains
300+
Requirements

Identity & Access

Authentication, users, OTP, KYC, and role-based access control.

Organisation Setup

Companies, branches, departments, master data, and tenant context.

People

Customers, suppliers, employees, HR, and feedback/CRM.

Product & Pricing

Inventory, gold rates, exchange, savings schemes, and membership.

Transactions

Finance & double-entry accounting, cart, job orders, workflow, subscriptions.

System & Infrastructure

Notifications, devices, file uploads, and audit logging.

Each module page lists: an overview, capabilities & scope, numbered functional requirements with MoSCoW priority, business rules, key statuses, and any known gaps. Requirements are derived from the live ZyncGold codebase.

Identity & Access

Authentication auth

Controls how customers, staff, and administrators prove who they are and obtain a secure session to use the platform.

Actors: Customer, Staff, Admin, SuperAdmin Requirements: 12

Overview

The Authentication module governs every way a person can enter the ZyncGold platform and how their session is maintained. It supports password sign-in by email, username or phone, passwordless sign-in and sign-up via one-time codes, password recovery over email and WhatsApp, and email/phone verification. It also lets a user move between the companies and branches they belong to without signing in again, keeping their active business context current at all times.

Capabilities & Scope

  • Sign in with email, username, or phone number plus a password.
  • Sign in or register using a phone number and a one-time code (OTP).
  • Register a new account using an email address.
  • Maintain a session and refresh it without re-entering credentials; sign out to end the session.
  • Recover a forgotten password by email link or by WhatsApp code.
  • Change one's own password while signed in.
  • Confirm an email address on a newly created account.
  • Verify email and phone after login through one-time codes.
  • Switch the active company and active branch for users who belong to more than one.

Functional Requirements

IDRequirementPriority
FR-AUTH-001The system shall authenticate a user by email, username, or phone number combined with a verified password and issue a session on success.Must
FR-AUTH-002The system shall allow a registered user to sign in with their phone number and a six-digit one-time code delivered via WhatsApp.Must
FR-AUTH-003The system shall allow a new user to register using a phone number, requiring the one-time code to be verified before the account is created and the user signed in.Must
FR-AUTH-004The system shall allow new user registration using an email address.Must
FR-AUTH-005The system shall renew a user's session without requiring re-authentication and shall reject invalid or expired session credentials.Must
FR-AUTH-006The system shall allow a signed-in user to sign out, ending their session so that further requests with the old session are rejected.Must
FR-AUTH-007The system shall support email-based password recovery without revealing whether an email address is registered.Must
FR-AUTH-008The system shall send a password-reset code via WhatsApp for phone-registered users, usable in the same reset flow.Must
FR-AUTH-009The system shall allow a signed-in user to change their own password only after their current password is confirmed.Must
FR-AUTH-010The system shall require new email-based accounts to confirm their email address and set a password before first use.Must
FR-AUTH-011The system shall let signed-in users verify their email address and phone number via one-time codes sent to their stored contact details.Should
FR-AUTH-012The system shall allow users who belong to multiple companies or branches to switch their active company and branch without re-authenticating, and shall prevent switching into an archived company.Must

Business Rules

  • Suspended or inactive accounts are denied sign-in and receive no session.
  • A new sign-in replaces any existing active session for that user (single active session per user).
  • One-time codes used for sign-in expire after three minutes, and only one active code per destination is allowed at a time.
  • Forgotten-password requests must not disclose whether the supplied email exists.
  • An archived company cannot be entered by switching context (except by platform operators).
  • Switching branch re-scopes all subsequent activity in that session to the chosen branch.

Known Issues

Critical — A hardcoded bypass one-time code is accepted during phone sign-in and phone sign-up. This must be removed before production deployment.

Identity & Access

Users user

Manages the lifecycle of every person who holds an account on the platform, from creation through profile maintenance to account closure.

Actors: Admin, Staff, Customer, Supplier Requirements: 7

Overview

The Users module is responsible for all user account records, regardless of type — administrators, staff, customers, and suppliers. It enforces that identifying details remain unique, lets users maintain their own profiles, gives administrators searchable and paginated access to the user base, and provides a bulk import path for onboarding many users at once. Account closure is handled as a privacy-preserving operation that frees identifiers while retaining historical records.

Capabilities & Scope

  • Create user accounts of any type with guaranteed unique email, username, phone number, and ID number.
  • Allow a signed-in user to view and update their own profile.
  • Look up a user by ID and retrieve the current user's profile.
  • Search and paginate the user list by keyword, type, role, status, account, and date range.
  • Close (delete) one's own account.
  • Bulk-import users from a spreadsheet in a preview-then-confirm flow.

Functional Requirements

IDRequirementPriority
FR-USER-001The system shall create a new user account, rejecting any duplicate email, username, phone number, or ID number with a specific error.Must
FR-USER-002The system shall assign each new account a unique public reference code and a referral identifier on creation.Must
FR-USER-003The system shall allow a signed-in user to update their own profile, re-checking uniqueness while excluding their own record.Must
FR-USER-004The system shall allow administrators to search and paginate users by keyword, type, role, status, account, and date range, returning a total record count.Must
FR-USER-005The system shall allow a user to close their account such that they can no longer sign in while the underlying record is retained.Must
FR-USER-006The system shall release the unique identifiers of a closed account so they may be reused, without deleting the historical record.Must
FR-USER-007The system shall allow administrators to bulk-create users from a spreadsheet, first returning a validated preview and then committing all rows together with per-row error reporting.Should

Business Rules

  • Email, username, phone number, and ID number must each be unique across the platform.
  • Passwords are never stored in readable form.
  • Self-service profile updates always act on the signed-in user, never on an arbitrary user supplied in the request.
  • Account closure anonymises the identifying fields rather than hard-deleting the record.
  • Bulk import is transactional: either the previewed set is created or errors are surfaced per row.

Known Issues

Medium — During bulk user import, the accounting/balance setup step is currently disabled, so opening balances are not applied to imported users.

Identity & Access

OTP & Verification otp

Generates and validates short-lived one-time codes used to prove ownership of a phone number or email address.

Actors: Customer, Staff, Admin Requirements: 5

Overview

The OTP & Verification module underpins passwordless sign-in, registration, password recovery, and contact verification. It issues a six-digit code to a phone number (via WhatsApp) or email, tracks its status and expiry, and confirms codes presented back by the user. It guarantees that only one live code exists per destination and that codes are never exposed outside the delivery channel.

Capabilities & Scope

  • Generate and deliver a six-digit one-time code to a phone number or email address.
  • Tie each code to a specific purpose (sign-in, sign-up, verify email, verify phone).
  • Verify a submitted code against the stored record.
  • Cancel any prior pending code for the same destination automatically.

Functional Requirements

IDRequirementPriority
FR-OTP-001The system shall generate a six-digit one-time code and deliver it to the requested phone number via WhatsApp or email address via the email channel.Must
FR-OTP-002The system shall cancel any previously pending code for the same destination before issuing a new one.Must
FR-OTP-003The system shall expire each one-time code three minutes after it is created.Must
FR-OTP-004The system shall verify a submitted code only while it remains in a pending state, and shall mark it completed on success.Must
FR-OTP-005The system shall never expose the code value in any application response.Must

Business Rules

  • At most one pending code may exist per phone number or email at any time.
  • A code is only valid for the destination and purpose it was issued for.
  • Expired codes cannot be verified.

Statuses & Key Values

PENDINGCOMPLETEDCANCELLEDType: PHONEType: EMAILPurpose: SIGN_INPurpose: SIGN_UPPurpose: VERIFY_EMAILPurpose: VERIFY_PHONE

Known Issues

Low — Code expiry is enforced by the calling flow rather than centrally at the point of verification, so a clear, consistent expiry check should be added to the verification step itself.

Identity & Access

KYC kyc

Lets customers prove their real-world identity by submitting documents, and lets staff review, approve, or reject those submissions.

Actors: Customer, Admin Requirements: 6

Overview

The KYC (Know Your Customer) module collects identity documents from customers — the front and back of an ID and a selfie — and routes them to staff for verification. Administrators can review a filtered, summarised queue of submissions and decide each one. Approval marks the customer as identity-verified and notifies them; rejection notifies them with the outcome. The support team is alerted whenever a new submission arrives.

Capabilities & Scope

  • Submit identity documents (ID front, ID back, selfie) for verification.
  • Prevent duplicate submissions while one is pending or already approved.
  • Notify the support team on new submissions via WhatsApp.
  • Review submissions in a paginated, filterable list with summary counts.
  • Approve a submission, marking the customer identity-verified and notifying them.
  • Reject a submission and notify the customer.

Functional Requirements

IDRequirementPriority
FR-KYC-001The system shall allow a customer to submit their ID front, ID back, and selfie images for identity verification.Must
FR-KYC-002The system shall block a new submission when the customer already has one pending or approved.Must
FR-KYC-003The system shall notify the support team via WhatsApp whenever a new submission is received, using the configured contact numbers.Should
FR-KYC-004The system shall allow administrators to view and filter submissions by customer name, status, and date range, with summary counts of total, pending, approved, and rejected.Must
FR-KYC-005The system shall allow an administrator to approve a submission, mark the linked customer as identity-verified, and notify the customer by email and WhatsApp.Must
FR-KYC-006The system shall allow an administrator to reject a submission and notify the customer by email and WhatsApp.Must

Business Rules

  • A customer may have only one active (pending or approved) submission at a time.
  • A customer can submit on their own behalf without specifying their own identifier.
  • Approval is the only path that sets the customer's identity-verified status.
  • Both approval and rejection notify the customer through two channels.

Statuses & Key Values

PENDINGAPPROVEDREJECTED

Known Issues

Medium — A rejection (or approval) note can be supplied but is not saved against the submission, so the reason for a decision is not retained or shown back to the customer.

Identity & Access

Access Control / RBAC access

Defines what each role of user is permitted to do, down to individual actions within each feature area, and which feature areas are available to each company.

Actors: Admin, SuperAdmin, Staff Requirements: 8

Overview

The Access Control module provides Role-Based Access Control across the platform. Administrators organise users into named role groups and grant or revoke fine-grained permissions — a specific action within a specific feature area — for each group. A complete permission map is resolved for the signed-in user so the rest of the platform can enforce it. On company creation, a baseline set of groups, modules, actions, and full administrator access is seeded automatically. Platform operators can additionally switch whole feature areas on or off per company.

Capabilities & Scope

  • Create, update, and delete named role groups, each unique within a company.
  • Attach business-specific attributes (such as labour and diamond discounts) to a group.
  • Grant or revoke an individual permission (a feature area plus an action) for a group.
  • Grant or revoke all permissions for a group in a single bulk operation.
  • Resolve the full per-action permission map for the signed-in user.
  • Seed the complete permission set and full administrator access when a company is created.
  • Block operations that require a company feature the company does not have.
  • Enable or disable entire feature areas per client/company.

Functional Requirements

IDRequirementPriority
FR-ACCESS-001The system shall allow administrators to create, update, and delete role groups, preventing duplicate group names within the same company.Must
FR-ACCESS-002The system shall seed a default set of role groups when a company is created and allow groups to carry business attributes such as labour and diamond discounts.Must
FR-ACCESS-003The system shall allow administrators to grant or revoke a single permission for a group as an immediate toggle.Must
FR-ACCESS-004The system shall allow administrators to grant or revoke all permissions for a group in bulk, optionally limited to a single feature area, without creating duplicates.Must
FR-ACCESS-005The system shall return the complete access map for the signed-in user, listing every feature area with a permission flag per action.Must
FR-ACCESS-006The system shall grant platform operators full access without a permission lookup, and shall resolve a staff user's group via their employee record.Must
FR-ACCESS-007The system shall seed all feature areas, actions, and full administrator access on company creation, in a repeatable manner that does not create duplicates.Must
FR-ACCESS-008The system shall allow platform operators to enable or disable whole feature areas per company, and shall block access to operations whose required feature is not enabled for that company.Must

Business Rules

  • Role group names must be unique within a company.
  • Permission changes take effect immediately, without a restart.
  • Granting all permissions only adds the missing ones; revoking all removes the group's permissions.
  • Platform operators (SuperAdmin) bypass all permission and feature checks.
  • Default role groups (such as Admin, Salesman, Marketing, Customer, Supplier) are created automatically per company.
  • When a company's feature list is empty, all features are treated as available by default.

Organisation Setup

Company company

Manages the top-level tenant of the ERP — its profile, lifecycle, enabled modules, and the one-time provisioning of everything a new company needs to operate.

Actors: SuperAdmin, Admin Requirements: 9

Overview

The Company module defines each tenant — the top-level isolation boundary for all ERP data. Creating a company provisions its full operating foundation in one atomic step: a head-office branch, default configuration, an administrator role and account, a chart of accounts, and fiscal periods. Administrators maintain the company profile; platform operators control which ERP modules are enabled and can archive, restore, or permanently delete a company. The module also answers which company the current user is in and which companies they belong to.

Capabilities & Scope

  • Create a company and auto-provision its head-office branch, configuration, admin role and account, chart of accounts, and fiscal periods.
  • Update company profile details — contacts, address, tax and registration numbers, logos, and letterheads.
  • Enable or disable ERP modules for a company.
  • Switch the active company for users who belong to more than one.
  • Archive a company to suspend all access, and unarchive to restore it.
  • Permanently delete a company and all of its data, with explicit confirmation.
  • Return the current user's company and list all companies they belong to.

Functional Requirements

IDRequirementPriority
FR-COMPANY-001The system shall create a company and atomically provision its head-office branch, default configuration, administrator role and account, chart of accounts, and fiscal periods.Must
FR-COMPANY-002The system shall enforce that company name and registration number are globally unique and that the fiscal year end date differs from the start date.Must
FR-COMPANY-003The system shall allow administrators to update company profile details, including logos and letterheads, and shall re-seed fiscal periods when the fiscal year dates change.Must
FR-COMPANY-004The system shall allow platform operators to enable or disable ERP modules for a company.Must
FR-COMPANY-005The system shall allow a user who belongs to multiple companies to switch their active company, blocking any switch into an archived company.Must
FR-COMPANY-006The system shall allow a platform operator to archive a company, suspending all access and forcing re-authentication, and to unarchive it to restore access.Must
FR-COMPANY-007The system shall allow a platform operator to permanently delete a company and all its data only after the exact company name is supplied as confirmation.Must
FR-COMPANY-008The system shall return the company belonging to the currently signed-in user.Must
FR-COMPANY-009The system shall return all companies the current user belongs to, with platform operators seeing all companies.Must

Business Rules

  • Company name and registration number must be globally unique.
  • Company creation is all-or-nothing; partial provisioning failures retry rather than leaving incomplete data.
  • By default a new company has all standard modules and all feature keys enabled.
  • Permanent deletion requires the exact company name as a confirmation string and may only be performed by a platform operator.
  • Archiving invalidates active sessions and prevents non-operator users from entering the company.

Statuses & Key Values

ACTIVEARCHIVED

Organisation Setup

Branch branch

Manages the store locations within a company and lets users switch the branch their work is scoped to.

Actors: Admin, StoreAdmin, Staff Requirements: 6

Overview

The Branch module represents the physical store locations that make up a company, forming the second level of the tenant hierarchy below the company. Administrators create, update, soft-delete, and search branches, optionally assigning a manager to each. Users with access to multiple branches can switch their active branch so that subsequent work is scoped to it, and administrators can download the branch list as a spreadsheet.

Capabilities & Scope

  • Create a branch within the current company, optionally naming a manager.
  • Update a branch's name and manager.
  • Soft-delete a branch.
  • Search and paginate branches with their resolved managers.
  • Switch the active branch and re-scope the session to it.
  • Download the branch list as a spreadsheet.

Functional Requirements

IDRequirementPriority
FR-BRANCH-001The system shall allow an administrator to create a branch scoped to the current company, requiring a name and optionally a manager.Must
FR-BRANCH-002The system shall allow an administrator to update a branch's name and manager.Must
FR-BRANCH-003The system shall allow an administrator to soft-delete a branch.Must
FR-BRANCH-004The system shall allow administrators to search and paginate branches by name, returning each branch's resolved manager.Must
FR-BRANCH-005The system shall allow a user to switch their active branch and shall scope subsequent operations to that branch.Must
FR-BRANCH-006The system shall allow administrators to download the branch list as a spreadsheet.Should

Business Rules

  • Every branch belongs to exactly one company, derived from the current context.
  • Branch creation, update, and deletion are recorded in the audit trail.
  • Deletion is a soft-delete; records are retained.
  • Switching branch re-scopes all subsequent scoped operations in the session.

Organisation Setup

Department department

Manages the departments within a branch, each optionally led by a designated head of department.

Actors: Admin, StoreAdmin Requirements: 5

Overview

The Department module lets administrators organise a branch into departments and optionally assign a head of department to each. Departments are automatically associated with the creating user's branch. Administrators can update, soft-delete, search, and paginate departments, and download the department list — with head-of-department names — as a spreadsheet.

Capabilities & Scope

  • Create a department, optionally assigning a head of department.
  • Automatically scope a department to the creating user's branch.
  • Update a department's name and head of department.
  • Soft-delete a department.
  • Search and paginate departments with their resolved heads.
  • Download the department list with head-of-department names as a spreadsheet.

Functional Requirements

IDRequirementPriority
FR-DEPT-001The system shall allow an administrator to create a department with a required name and an optional head of department, scoped to the creating user's branch.Must
FR-DEPT-002The system shall allow an administrator to update a department's name and head of department, resolving the head in query responses.Must
FR-DEPT-003The system shall allow an administrator to soft-delete a department.Must
FR-DEPT-004The system shall allow administrators to search and paginate departments, returning each department's resolved head.Must
FR-DEPT-005The system shall allow administrators to download the department list, including head-of-department names, as a spreadsheet.Should

Business Rules

  • A department's branch is set automatically from the creating user's active branch.
  • Department creation, update, and deletion are recorded in the audit trail.
  • Deletion is a soft-delete; records are retained.

Organisation Setup

Master Data master

Maintains the platform's global reference data — currencies, units, metal types, purities, and other shared lookups used across every company.

Actors: SuperAdmin, Customer (read), Staff (read) Requirements: 6

Overview

The Master Data module holds the shared reference and enumeration values the whole platform relies on, such as currencies, units of measure, metal types, and purities. Unlike most data, master records are global rather than company-specific. Platform operators seed and maintain these records in a hierarchy of parent keys and child entries, while the data itself is openly readable — including by unauthenticated callers — so that onboarding flows and mobile apps can use it freely.

Capabilities & Scope

  • Seed a predefined set of global reference records on initial platform setup.
  • Create new reference entries under a parent key.
  • Update reference record names.
  • Delete child reference records.
  • Look up a single reference record.
  • Browse and paginate reference data publicly, without authentication.

Functional Requirements

IDRequirementPriority
FR-MASTER-001The system shall seed a predefined set of global reference records — including industries, currencies, units of measure, metal types, purities, making-charge types, item categories, and account groups — on initial setup, without creating duplicates on repeat runs.Must
FR-MASTER-002The system shall allow platform operators to add a new reference entry whose key is unique at its parent level, storing the name in upper case and the key in lower case.Must
FR-MASTER-003The system shall allow platform operators to update a reference record's name.Must
FR-MASTER-004The system shall allow platform operators to delete child reference records while protecting parent key records from deletion in the interface.Should
FR-MASTER-005The system shall expose reference data publicly for browsing and pagination without requiring authentication.Must
FR-MASTER-006The system shall treat master data as global, applying to all companies rather than being scoped to any single one.Must

Business Rules

  • Each reference key must be unique within its parent level.
  • Names are stored upper-cased and keys lower-cased automatically.
  • Master data is global and not subject to per-company isolation.
  • Parent key records are protected from deletion through the administrative interface.

Statuses & Key Values

currency: NGN, MYR, USD, EUR, GOLDuom: PCS, KGmetal_type: gold, silver, platinum, diamondpurity_type: 18k, 22k, 24k

Organisation Setup

Configuration config

Stores each company's operating settings — default accounts, base currency, mobile app controls, and customer notification details.

Actors: Admin Requirements: 5

Overview

The Configuration module holds the per-company settings that tailor how the ERP behaves. This includes the default accounts used by sales and finance operations, the base currency, mobile app version controls and forced-update flags, and the messages and support contacts used for customer notifications. A default configuration is created when a company is set up, and each update produces a new current configuration so that the latest settings always apply.

Capabilities & Scope

  • Return the active configuration for the current company, with linked accounts and categories resolved.
  • Update company configuration settings.
  • Configure default sales accounts (cash, transfer, value, return value).
  • Configure finance accounts (petty cash, debtors, creditors, bank charges, tax paid, stock payable/receivable).
  • Set the base currency.
  • Set mobile app version settings and forced-update flags for Android and iOS.
  • Set KYC notification messages and support contact numbers.

Functional Requirements

IDRequirementPriority
FR-CONFIG-001The system shall return the current company's active configuration with all linked account and category fields resolved, and shall return nothing gracefully when no company context is present.Must
FR-CONFIG-002The system shall allow an administrator to update the company's configuration, with each update establishing the new current configuration.Must
FR-CONFIG-003The system shall allow configuration of default sales and finance accounts, base currency, mobile app version controls, and KYC notification messages and support contacts.Must
FR-CONFIG-004The system shall create a default configuration automatically when a company is created.Must
FR-CONFIG-005The system shall allow defining minimum supported mobile app versions and forced-update flags for Android and iOS.Should

Business Rules

  • Each company has exactly one effective configuration at any time — the most recent one.
  • Configuration is append-only: updates create a new current record rather than overwriting in place.
  • A default, empty configuration is provisioned as part of company creation.

Organisation Setup

Tenant Context context

Ensures every operation automatically sees only the data of the signed-in user's company and, where required, their active branch.

Actors: System (all users) Requirements: 5

Overview

The Tenant Context engine is the foundation of the platform's multi-tenancy. On every request it establishes the signed-in user's company and active branch and applies that scope to all data access automatically, so individual features never need to filter by tenant themselves. It provides a controlled way to temporarily lift company scoping for genuinely cross-tenant operations (such as global reference data or company listings), and it guarantees that scope never leaks from one request to the next.

Capabilities & Scope

  • Establish the company and branch scope for each request from the user's session.
  • Automatically restrict all data access to the current company.
  • Additionally restrict data access to the active branch when required.
  • Temporarily bypass company scoping for cross-tenant operations, always restoring it afterwards.
  • Guarantee isolation between requests with no cross-request data leakage.

Functional Requirements

IDRequirementPriority
FR-CTX-001The system shall isolate all data access to the signed-in user's company on every request, derived from their session.Must
FR-CTX-002The system shall apply company scoping automatically to all data access unless a deliberate bypass is in effect.Must
FR-CTX-003The system shall allow cross-tenant operations to temporarily disable company scoping and shall always restore scoping so it cannot leak to other requests.Must
FR-CTX-004The system shall additionally scope data access to the user's active branch when branch scoping is requested for an operation.Must
FR-CTX-005The system shall reset all context between requests so that no tenant data leaks across requests.Must

Business Rules

  • Every record carries a company identifier, and data access is filtered by it by default.
  • Tenant isolation is enforced centrally; individual features do not add their own company filters.
  • Any temporary bypass of scoping is always reset and cannot persist beyond the operation that requested it.
  • Branch scoping is applied only when explicitly requested for an operation.

People

Customers customer

Maintains the master record of every customer the business sells to, linked to a receivable account for tracking what they owe.

Actors: Staff, Admin, CustomerRequirements: 9

Overview

Customers are the people and organisations that buy from the company. Each customer is tied to a finance account so that balances, payments, and statements can be tracked. The module supports day-to-day customer maintenance, bulk onboarding from spreadsheets, multi-currency sub-accounts, and self-service for customers viewing their own profile in the app.

Capabilities & Scope

  • Create, update, and remove customers, each linked to a receivable account.
  • Optionally hold one currency-specific sub-account per currency under a parent customer.
  • Search, filter, and page through customers, with summary counts (total, registered this month, registered today).
  • Bulk-import customers from a spreadsheet using a preview-then-confirm flow.
  • Download the customer list as a spreadsheet report.
  • Let an authenticated customer retrieve their own account from the app.

Functional Requirements

IDRequirementPriority
FR-CUST-001The system shall allow staff to create a customer with a linked receivable account, generating search keywords from the name.Must
FR-CUST-002The system shall validate that each customer's email and phone number are unique across all users on creation and update.Must
FR-CUST-003The system shall optionally create one currency-specific sub-account per currency together with the parent customer, named "{customer} - {currency}".Should
FR-CUST-004The system shall migrate the customer's existing transaction history to the new account whenever their linked account is changed.Must
FR-CUST-005The system shall prevent deletion of a customer whose account balance is non-zero, and support deleting one or many customers.Must
FR-CUST-006The system shall provide a searchable, filterable, paginated customer list with resolved account, currency, and balance, plus summary counts for total, this month, and today.Must
FR-CUST-007The system shall let an authenticated customer retrieve their own account record.Must
FR-CUST-008The system shall allow bulk import of customers from a spreadsheet via a two-step preview-then-confirm flow with per-row uniqueness validation.Should
FR-CUST-009The system shall allow staff to download the customer list as a spreadsheet including name, account type, phone, email, balance, and date.Should

Business Rules

  • A customer must be linked to a receivable-category account before it can be saved.
  • Sub-accounts are only available when the customer sub-accounts feature is enabled for the company.
  • A customer with an outstanding balance cannot be deleted.
  • Sub-account creation is all-or-nothing with the parent — a partial failure rolls everything back.

People

Suppliers supplier

Maintains the master record of every supplier the business buys from, linked to a payable account for tracking what is owed to them.

Actors: Staff, AdminRequirements: 6

Overview

Suppliers are the people and organisations the company purchases stock and services from. Each supplier is tied to a payable account so amounts owed can be tracked and settled. The module mirrors the customer module: full maintenance, multi-currency sub-accounts, search and paging, and spreadsheet export.

Capabilities & Scope

  • Create, update, and remove suppliers, each linked to a payable account.
  • Optionally hold one currency-specific sub-account per currency under a parent supplier.
  • Search, filter, and page through suppliers.
  • Download the supplier list as a spreadsheet report.

Functional Requirements

IDRequirementPriority
FR-SUPP-001The system shall allow staff to create a supplier with a linked payable account and auto-generated search keywords.Must
FR-SUPP-002The system shall validate supplier email and phone uniqueness across all users on creation and update.Must
FR-SUPP-003The system shall migrate the supplier's existing transaction history to the new account whenever their linked account is changed.Must
FR-SUPP-004The system shall prevent deletion of a supplier whose account balance is non-zero, and support deleting one or many suppliers.Must
FR-SUPP-005The system shall provide a searchable, filterable, paginated supplier list and support optional currency-specific sub-accounts.Must
FR-SUPP-006The system shall allow staff to download the supplier list as a spreadsheet report.Should

Business Rules

  • A supplier must be linked to a payable account before it can be saved.
  • A supplier with an outstanding balance cannot be deleted.
  • Sub-accounts follow the same naming and atomic-creation rules as customers.

People

Employees employee

Manages staff records, their login access, HR attributes, and per-employee discount entitlements.

Actors: AdminRequirements: 7

Overview

An employee record links a staff member to their login account, their permission group, and the HR policies that apply to them (leave, attendance, claims, calendar). Administrators can create staff outright, invite an existing user into the company, and set discount overrides that take precedence over group defaults when pricing sales.

Capabilities & Scope

  • Create an employee, provisioning a staff login account at the same time.
  • Invite an existing user to join the company as an employee.
  • Update employee profile and HR attributes (permission group, leave group, attendance group, claim group, calendar, basic salary, employment type).
  • Remove employees and search the staff directory by name, email, or phone.
  • Set and resolve per-employee labour and diamond discount overrides.

Functional Requirements

IDRequirementPriority
FR-EMP-001The system shall allow an administrator to create an employee together with a staff login account, validating email and phone uniqueness.Must
FR-EMP-002The system shall allow an administrator to invite an existing user as an employee, ensuring no duplicate employee record exists for that user in the company.Must
FR-EMP-003The system shall allow an administrator to update employee profile and HR attributes, keeping the linked login account in step.Must
FR-EMP-004The system shall allow an administrator to remove an employee.Must
FR-EMP-005The system shall provide a searchable, filterable, paginated employee directory by name, email, phone, branch, and status.Must
FR-EMP-006The system shall allow an administrator to set per-employee labour and diamond discount overrides.Must
FR-EMP-007The system shall resolve an employee's effective discount as the employee override when set, otherwise the group default.Must

Business Rules

  • Employee and login account are created together; if either fails the whole creation is rolled back.
  • New staff are created with a staff role and access kind.
  • An employee discount left unset falls back to the value defined on their group.

People

Human Resources hr

A full HR suite covering attendance, leave, claims, advances, loans, the work calendar, training, recruitment, timesheets, payroll, the org chart, and a multi-level approval engine.

Actors: Employee, Manager, HOD, HR, AdminRequirements: 16

Overview

Human Resources is the people-operations backbone for each company. Employees submit leave, claims, advances, loans, and timesheets; these route through a configurable multi-level approval chain (Manager, Head of Department, HR) derived from the org chart and an approval policy. Approved monetary items post to an HR ledger. Attendance, the holiday calendar, training programs, recruitment pipelines, payroll runs, and a live HR dashboard complete the suite.

Capabilities & Scope

  • Attendance: employee clock-in/out (auto-toggling), admin manual entry, device and QR/location capture, spreadsheet import, and daily summaries.
  • Leave: entitlement groups, request submission with working-day calculation, balance enforcement, cancellation, and approval routing.
  • Claims, Advances, Loans: submission, approval, ledger posting, and (for advances/loans) repayment tracking with installment schedules.
  • Calendar: public holidays and working days driving leave and attendance calculations.
  • Training: programs with content blocks, completion requirements (view, timed, quiz), and certificates.
  • Recruitment: job postings, applicant pipeline, interviews, offers, and offer-to-employee conversion.
  • Timesheet: regular and overtime hours with submit/approve/reject.
  • Payroll: payroll runs with proration, allowances, deductions, statutory contributions, income tax, and a balanced journal posting.
  • Org chart & Approvals: reporting hierarchy, department grouping, configurable approval policies, and an approver inbox.

Functional Requirements

Attendance & Calendar

IDRequirementPriority
FR-HR-001The system shall let an employee record attendance via a smart toggle that alternates between clock-in and clock-out, capturing the submission method (manual, QR, location, or device).Must
FR-HR-002The system shall let an administrator record attendance for any employee with an explicit event type, import attendance from a spreadsheet, and reject duplicate device swipes.Must
FR-HR-003The system shall provide raw attendance events and a per-employee daily summary showing first in, last out, and total hours.Should
FR-HR-004The system shall maintain a holiday and working-day calendar and calculate working days between two dates, excluding weekends and holidays and counting half-days as 0.5.Must

Leave

IDRequirementPriority
FR-HR-005The system shall let an administrator define leave entitlement groups assigning a number of days per leave type.Must
FR-HR-006The system shall let an employee submit a leave request, automatically calculating the duration in working days and routing it for approval, provided the leave type belongs to the employee's leave group and the remaining balance is sufficient.Must
FR-HR-007The system shall let an employee cancel a leave request only while it is pending, removing it from approvers' inboxes, and update leave status automatically on approval or rejection.Must

Claims, Advances & Loans

IDRequirementPriority
FR-HR-008The system shall let employees submit expense claims for approval and post approved claims to the HR ledger as a payable.Must
FR-HR-009The system shall let employees request cash advances and loans, post approved amounts to the HR ledger, and track repayments against the outstanding balance, marking a loan settled when fully repaid.Must
FR-HR-010The system shall automatically compute a loan's monthly installment from the amount and number of installments.Should

Approvals, Org Chart, Timesheet, Training, Recruitment, Payroll & Dashboard

IDRequirementPriority
FR-HR-011The system shall provide each approver an inbox of pending approvals filterable by kind (leave, claim, advance, loan) and let them approve or reject with an optional remark, advancing the request through its multi-level chain.Must
FR-HR-012The system shall let administrators define per-kind approval policies with ordered levels (Manager, Head of Department, HR) and an approve-by rule of ANY or ALL, resolving actual approvers from the employee's org-chart position.Must
FR-HR-013The system shall present the employee reporting hierarchy, support subtree and keyword search, and group employees by department with the head of department identified.Should
FR-HR-014The system shall let employees record regular and overtime hours on timesheets and submit them for approval or rejection.Should
FR-HR-015The system shall support training programs with content blocks and completion rules, and a recruitment pipeline from job posting through applicant screening, interviews, and offers, including converting an accepted offer into an employee.Should
FR-HR-016The system shall produce payroll runs that prorate salary and allowances, apply overtime, deductions, statutory contributions, and income tax, and post a balanced payroll journal once approved; and present an HR dashboard of headcount, pending approvals, leave today, recruitment pipeline, and financial exposure.Must

Business Rules

  • An approver can never be the same person as the requester.
  • Leave, claim, advance, and loan requests can only be cancelled while pending.
  • Working-day duration excludes Saturdays, Sundays, and configured holidays.
  • Leave balance enforcement counts pending plus approved leave of the same type against the entitlement.
  • Repayments are only accepted against approved advances and loans and must be greater than zero.
  • A payroll run must be calculated before it can be approved, and approved before its journal can be posted; the journal must balance.
  • If the org structure is incomplete, a single fallback approver may be used so submissions are not blocked.

Statuses & Key Values

Leave/Claim/Advance: PENDINGAPPROVEDREJECTEDCANCELLED Loan: SETTLED Attendance: CLOCK_IN / CLOCK_OUTREGULAR / LATE / EARLY_LEAVE / OVERTIME Timesheet: DRAFT / SUBMITTED / APPROVED / REJECTED Payroll: DRAFT / APPROVED / PAID / CANCELLED Approval roles: MANAGER / HOD / HRapproveBy: ANY / ALL

People

Feedback & CRM feedback

Lets the business build customer survey forms, share personalised feedback links, collect public responses, and review and annotate them.

Actors: Staff, Admin, CustomerRequirements: 7

Overview

The feedback module provides a configurable survey builder and a public response channel. Staff design forms from a small set of field types, publish them to make them live, and generate per-customer links so responses are attributed to a known customer. Customers submit responses without logging in, and staff review responses and attach internal notes.

Capabilities & Scope

  • Build survey forms from four field types: short text, paragraph, star rating, and multiple choice.
  • Reorder, add, and remove fields, and mark fields required.
  • Publish or unpublish a form; only published forms accept responses.
  • Generate a personalised, time-limited feedback link tied to a specific customer.
  • Accept public responses through a shareable form link.
  • Review responses per form and attach staff notes with author and timestamp.

Functional Requirements

IDRequirementPriority
FR-FEED-001The system shall let staff build survey forms from short-text, paragraph, star-rating, and multiple-choice fields, each markable as required.Should
FR-FEED-002The system shall let staff reorder, add, and remove form fields.Should
FR-FEED-003The system shall let staff publish or unpublish a form and expose a public link based on its slug.Should
FR-FEED-004The system shall let staff generate a personalised, time-limited feedback link tied to a specific customer so the response is attributed.Should
FR-FEED-005The system shall allow a customer to submit a feedback response without authentication, only for a published form.Should
FR-FEED-006The system shall store the customer identity on a response whenever a valid customer link token is supplied.Should
FR-FEED-007The system shall let staff view all responses for a form and append internal notes recording who added them and when.Should

Business Rules

  • Only published forms accept responses.
  • A personalised customer feedback link expires after a fixed period.
  • The public form lookup matches on the form's public slug and published state.

Known Issues

Medium — Feedback submission does not enforce required fields server-side; a customer can submit a response leaving required questions unanswered.

Product & Pricing

Inventory inventory

The full product and trading engine: item catalogue, per-piece stock, sales and purchase invoicing, transfers, adjustments, returns, and inventory reporting and dashboards.

Actors: Staff (Sales), Staff (Purchasing), Admin, CustomerRequirements: 16

Overview

Inventory governs everything about gold and jewellery products: the item master catalogue with gold pricing rules, individually tracked physical stock pieces, and the invoice engine that handles sales, purchases, quotations, and requisitions. It applies the standard jewellery pricing formula, moves stock through its lifecycle as documents are posted, supports inter-branch transfers, stock adjustments, and returns, and surfaces daily reports and executive dashboards.

Capabilities & Scope

  • Item master: create, update, import, and search items with categories, types (and margin rules), and gold pricing attributes.
  • Stock: track each piece individually with a unique SKU through a status lifecycle.
  • Invoicing: create, post, copy, and return sales invoices, purchase invoices, sales quotations, and purchase requisitions, with trade-ins.
  • Transfers & Adjustments: move stock between branches and correct stock counts.
  • Returns: reverse stock and value against an original sales or purchase document.
  • Reporting & Dashboards: daily and store reports, plus stock, sales, purchase, movement, and performance dashboards.

Functional Requirements

Item Master & Pricing

IDRequirementPriority
FR-INV-001The system shall let staff create, update, and remove catalogue items with classification, gold pricing attributes, optional image, and auto-generated search keywords.Must
FR-INV-002The system shall provide a searchable, filterable, paginated item catalogue, including cross-branch listing, and let items be toggled online or offline.Must
FR-INV-003The system shall allow bulk import of items from a spreadsheet via a preview-then-confirm flow, auto-creating any missing types or categories.Should
FR-INV-004The system shall compute gold item prices as gold value plus making charge plus stone price plus diamond price, where gold value is net weight times purity factor times the current gold rate.Must
FR-INV-005The system shall let administrators manage item types with margin rules and reordering, and a hierarchical item-category tree.Must

Stock

IDRequirementPriority
FR-INV-006The system shall track each physical jewellery piece as an individual stock record with a unique SKU, weights, rate, and certificate number.Must
FR-INV-007The system shall prevent modification or deletion of a stock record once it has left the saved status.Must
FR-INV-008The system shall transition stock from saved to available when its purchase invoice is posted, and mark stock sold when sold, capturing the sales-side pricing snapshot.Must
FR-INV-009The system shall let staff query available stock for an item and trace the full movement history of a stock unit.Should

Invoicing

IDRequirementPriority
FR-INV-010The system shall let staff create four document kinds — sales invoice, purchase invoice, sales quotation, purchase requisition — with auto-prefixed references, editable line items, trade-in items, and totals recomputed from line items on every change.Must
FR-INV-011The system shall let staff post invoices (individually or in bulk), triggering the corresponding stock and financial side effects.Must
FR-INV-012The system shall let staff copy an invoice into a new draft and create a return document against a posted invoice, reversing stock and value.Should
FR-INV-013The system shall provide aggregated invoice summaries and deliver real-time invoice events to connected clients.Should

Transfers, Adjustments & Reporting

IDRequirementPriority
FR-INV-014The system shall let staff transfer stock between branches, placing it in transit until the destination confirms receipt, with a transit log.Must
FR-INV-015The system shall let administrators create stock adjustments linked to a ledger account to correct inventory counts, and process sales and purchase returns that reverse the original stock movements.Must
FR-INV-016The system shall provide daily and store inventory reports and dashboards covering stock value, sales, purchases, movements, and top performers.Should

Business Rules

  • Stock records that are no longer in saved status are immutable.
  • Invoice totals are always recomputed from line items, except where a fixed/job-order invoice intentionally locks the total.
  • Each stock piece carries a unique auto-generated SKU.
  • Posting a purchase invoice is the gate that makes its stock available for sale.
  • Trade-in items become locked once attached to a sales invoice.
  • Returns reverse the stock direction of the original document and may be partial.

Statuses & Key Values

Stock: Saved / Available / InTransit / Sold / Adjusted Invoice: Saved / Posted / Cancelled Kinds: SalesInvoice / PurchaseInvoice / SalesQuotation / PurchaseRequisition Item: Online / Offline Sold by: Item / Quantity / Weight Payment: Cash / Credit, Pending / Paid

Known Issues

Medium — A direct-amount patch exists for job-order invoices to bypass the normal recompute-from-line-items behaviour, which would otherwise zero out invoices that have no line items.
Low — Several invoice workflow field resolutions are flagged for refactoring, and legacy stock-migration code is pending removal.

Product & Pricing

Gold Rate rate

Publishes the daily gold buy and sell rates per purity and broadcasts them in real time to all connected apps.

Actors: Admin, Staff, Customer (public)Requirements: 4

Overview

Gold rates drive all gold pricing across the system. Authorised staff publish the current buy and sell rate for each gold purity; rates are recorded append-only so history is preserved, and the latest rates are pushed live to every connected admin and customer client. Current rates are also publicly readable without logging in for use on storefronts and apps.

Capabilities & Scope

  • Set the daily buy and sell rates for one or more purities in a single action.
  • Broadcast updated rates in real time to all connected clients.
  • Expose current rates publicly without authentication.
  • View historical rate records filtered by purity and date.

Functional Requirements

IDRequirementPriority
FR-RATE-001The system shall let authorised staff set daily gold buy and sell rates for one or more purities, recording them append-only so prior rates are never overwritten.Must
FR-RATE-002The system shall broadcast updated gold rates in real time to all connected admin and customer clients immediately after they are set.Must
FR-RATE-003The system shall expose current gold rates publicly without authentication, defaulting missing rates to zero.Must
FR-RATE-004The system shall let staff view historical rate records filtered by purity and date range.Should

Business Rules

  • Rates are append-only — a new rate creates a new record rather than editing an existing one.
  • Current public rates expose buy and sell per purity, defaulting to zero where unset.
  • A rate change must reach all subscribers in real time.

Product & Pricing

Exchange exchange

Maintains conversion rates between currencies and commodities for use in multi-currency pricing.

Actors: AdminRequirements: 3

Overview

The exchange module stores conversion factors between any two reference entities (such as currencies or commodities). Administrators maintain these rates, and the system can resolve a conversion either by record or by matching the entities by name, supporting multi-currency invoices and pricing.

Capabilities & Scope

  • Create, update, remove, and list conversion rates between two reference entities.
  • Resolve each rate with its from and to entities for display.
  • Look up the conversion rate between two entities by name.

Functional Requirements

IDRequirementPriority
FR-EXCH-001The system shall let administrators create and maintain conversion rates linking a from-entity to a to-entity with a rate multiplier, with full listing.Must
FR-EXCH-002The system shall resolve and display the from and to entities for each exchange rate.Must
FR-EXCH-003The system shall resolve the conversion rate between two entities by matching their names.Must

Business Rules

  • Lookup by name relies on entity names being unique and consistent.
  • Each rate is a directional multiplier from one entity to another.

Product & Pricing

Savings Schemes scheme

Defines gold savings plans, enrols customers, and records their installment payments as double-entry ledger transactions.

Actors: Admin, Staff, CustomerRequirements: 6

Overview

Savings schemes let customers accumulate value toward gold over time. Administrators define scheme products with a type, duration, bonus tiers, and linked accounts. Staff enrol customers, and each installment payment is recorded as a balanced double-entry transaction between the customer's account and the scheme account.

Capabilities & Scope

  • Define scheme products (fixed amount, flexible amount, or weight-based) with duration, bonus tiers, and linked scheme and cash accounts.
  • Enrol customers into a scheme with optional minimum and maximum installment constraints.
  • Record installment payments as double-entry ledger transactions.
  • Track enrolment and transaction status through their lifecycle.

Functional Requirements

IDRequirementPriority
FR-SCHEME-001The system shall let administrators define savings scheme products with a type, purity, duration, linked accounts, benefits, and tiered bonuses.Must
FR-SCHEME-002The system shall support bonus tiers defined by a from/to range and a bonus expressed as an amount, gram, or percentage.Should
FR-SCHEME-003The system shall let staff enrol a customer in a scheme with optional minimum and maximum installment constraints, starting in pending status.Must
FR-SCHEME-004The system shall let an administrator move a scheme enrolment through active, completed, and cancelled states.Must
FR-SCHEME-005The system shall record each scheme installment payment as two linked ledger entries — a debit to the customer account and a credit to the scheme account — sharing a common reference.Must
FR-SCHEME-006The system shall validate that the enrolment and parent scheme exist before recording a payment, and track each transaction through pending, confirmed, or rejected states.Must

Business Rules

  • Every scheme payment is a balanced double-entry transaction.
  • A new enrolment starts pending and must be activated by an administrator.
  • Payments cannot be recorded against a non-existent enrolment or scheme.

Statuses & Key Values

Scheme type: FIXED_AMOUNT / FLEXIBLE_AMOUNT / WEIGHT_BASED Enrolment: PENDING / ACTIVE / COMPLETED / CANCELLED Transaction: PENDING / CONFIRMED / REJECTED Bonus: AMOUNT / GRAM / PERCENT

Product & Pricing

Membership membership

Defines loyalty membership tiers, enrols customers, records reward transactions, and auto-upgrades members as they earn points.

Actors: Admin, Staff, CustomerRequirements: 6

Overview

Membership is the customer loyalty program. Administrators define tier products with spend thresholds, reward multipliers, benefits, and branding. Staff enrol customers and record loyalty reward transactions as double-entry ledger entries, optionally linked to the sales invoice that earned them. As confirmed reward points accumulate, the system promotes the customer to the highest tier they qualify for.

Capabilities & Scope

  • Define membership tier products with level, spend thresholds, reward multiplier, benefits, branding colours, and linked accounts.
  • Enrol customers in a membership tier and manage their membership status.
  • Record loyalty reward transactions as double-entry ledger entries, optionally tied to a sales invoice.
  • Automatically upgrade a customer's tier once their confirmed points qualify them for a higher level.

Functional Requirements

IDRequirementPriority
FR-MEMB-001The system shall let administrators define membership tier products with level, spend thresholds, reward multiplier, benefits, branding colours, and linked accounts.Must
FR-MEMB-002The system shall let staff enrol a customer in a membership tier and manage its status as active, inactive, expired, or suspended.Must
FR-MEMB-003The system shall record each loyalty reward as two linked ledger entries — a debit to the customer account and a credit to the membership account — optionally linked to the originating sales invoice.Must
FR-MEMB-004The system shall automatically promote a member to the highest tier their accumulated confirmed points qualify for after a reward transaction is recorded.Must
FR-MEMB-005The system shall sum only confirmed reward points when evaluating tier eligibility.Should
FR-MEMB-006The system shall leave a member's tier unchanged when their points do not qualify them for a different tier.Should

Business Rules

  • Every reward is a balanced double-entry transaction.
  • Tier eligibility is evaluated only against confirmed reward transactions.
  • A member is moved to the highest qualifying tier, not just the next one up.

Statuses & Key Values

Membership: ACTIVE / INACTIVE / EXPIRED / SUSPENDED Transaction: PENDING / CONFIRMED / REJECTED

Transactions

Finance & Accounting finance

A complete double-entry accounting engine that records every money movement in the business and produces the statutory and management financial statements.

Actors: Accountant, Finance Admin, Finance StaffRequirements: 18

Overview

The Finance module is the financial system of record for a company. It maintains the chart of accounts, captures every transaction as balanced debit and credit pairs, supports manual journals, payments, taxation, fixed assets and trade entries, and governs accounting periods so books can be locked and closed. From this single ledger it produces Profit & Loss, Balance Sheet, Cash Flow, Trial Balance, Aged Receivable/Payable, Tax and General Ledger reports. All figures are scoped to the company and its branches.

Capabilities & Scope

  • Hierarchical chart of accounts with account categories that map each account to a financial-statement section.
  • Double-entry general ledger where every event posts equal and opposite debit and credit records.
  • Manual multi-line journal entries with multi-currency balancing and posting controls.
  • Fiscal period management — generate, lock, unlock and close monthly accounting periods.
  • Payment entries that settle one or more invoices, including over-payment handling.
  • Tax configuration supporting sales, purchase and withholding taxes, inclusive or exclusive of amount.
  • Fixed asset register with depreciation and disposal accounting.
  • Cashbook, contra and trade entries, finance notes and reusable transaction shortcuts.
  • A full suite of financial reports driven by account-category mapping.
  • Bulk import of accounts, transactions and journals from spreadsheets.

Functional Requirements

Chart of Accounts & Categories

IDRequirementPriority
FR-FIN-001The system shall allow administrators to create, update, delete and list ledger accounts, each carrying an account name, number, category, currency, parent account and bank details; an account that already holds transactions cannot be deleted.Must
FR-FIN-002The system shall automatically create a paired accumulated-depreciation or amortisation contra account whenever a new property, plant & equipment or intangible-asset account is created.Should
FR-FIN-003The system shall allow administrators to manage account categories that define each account's balance-sheet or profit-and-loss section and cash-flow treatment, and shall allow accounts to be bulk-imported from a spreadsheet using a preview-then-confirm flow.Should

General Ledger Transactions

IDRequirementPriority
FR-FIN-004The system shall record every financial event as double-entry transaction records, where each record carries a type (debit, credit or opening) and a kind identifying the originating source such as a sales invoice, journal, payment, scheme or membership.Must
FR-FIN-005The system shall keep the ledger balanced by validating that total debits equal total credits after each create, update or delete, and shall reject any operation that would leave the ledger unbalanced.Must
FR-FIN-006The system shall enforce deletion constraints so that removing one side of a paired entry removes all records sharing the same relation identifier, and shall prevent non-administrators from deleting transactions tied to an order item.Must
FR-FIN-007The system shall automatically compute a pure-metal value for metal-bearing transactions from the amount and purity.Should

Journal Entries

IDRequirementPriority
FR-FIN-008The system shall allow finance staff to create multi-line journal entries of various types (bank, cash, general, purchase, sales, order-fixing, asset disposal, asset depreciation, invoice return), requiring total debit to equal total credit before posting.Must
FR-FIN-009The system shall automatically insert an exchange-balancing entry for multi-currency journals whose debit and credit totals differ once converted to base currency.Should
FR-FIN-010The system shall allow journal entries to be posted (finalised) individually or in bulk, and shall support bulk import of journals from a spreadsheet.Must

Fiscal Periods

IDRequirementPriority
FR-FIN-011The system shall generate one fiscal period per calendar month for a fiscal year, seed these periods during company creation, and allow administrators to generate the next fiscal year's periods on demand.Must
FR-FIN-012The system shall allow finance administrators to lock, unlock and close fiscal periods, recording who locked a period and when, and shall reject any financial transaction dated into a locked or closed period.Must

Payments & Taxation

IDRequirementPriority
FR-FIN-013The system shall allow finance staff to record a payment against one or more invoices, distributing the amount across linked invoices in order and posting any excess as a credit to the payer or payee account; payments may be posted individually or in bulk.Must
FR-FIN-014The system shall allow administrators to define tax rates linked to ledger accounts, supporting sales, purchase and withholding taxes, with withholding tax deducted from the principal rather than added on top, and supporting both inclusive and exclusive calculation modes.Must

Fixed Assets, Cashbook & Trade

IDRequirementPriority
FR-FIN-015The system shall allow finance staff to maintain a fixed-asset register (purchase cost, expected life, scrap value, depreciation method), record depreciation that updates the asset's accumulated depreciation, and dispose of assets by sale, scrap or write-off — each generating the corresponding journal entry.Must
FR-FIN-016The system shall provide cashbook, contra and trade entry tools, finance notes, and reusable transaction shortcuts to speed up the recording of recurring entries.Should

Financial Reports

IDRequirementPriority
FR-FIN-017The system shall generate Profit & Loss, Balance Sheet (including net profit to date as retained earnings), Cash Flow, Trial Balance and General Ledger reports, with report layout driven by each account category's statement-section mapping and filterable by date range, cost centre, class and analysis code.Must
FR-FIN-018The system shall generate Aged Receivable and Aged Payable reports bucketed into 0–30, 31–60, 61–90 and 90+ days past invoice date, and a tax report for a selected period.Must

Business Rules

  • Double-entry is mandatory. Every financial event posts at least one debit and one balancing credit; the paired records share a single relation identifier so they are always created, found and deleted together, and a kind value identifies which business process produced them.
  • Total debits must equal total credits across the ledger at all times; an unbalanced result rejects the operation.
  • Multi-currency journals are balanced at base-currency value through an automatic exchange-balancing entry.
  • Transactions cannot be dated into a locked or closed fiscal period.
  • An account that already carries transactions cannot be deleted.
  • Withholding tax reverses the normal direction so the tax is taken out of the amount due, not added to it.
  • Tax entries reference the originating transaction they were calculated from.

Statuses & Key Values

DEBITCREDITOPENINGTxn: SAVEDTxn: POSTEDPeriod: OPENPeriod: LOCKEDPeriod: CLOSEDDepreciation: STRAIGHT_LINEDepreciation: REDUCING_BALANCEDisposal: SALEDisposal: SCRAP

Known Issues

High — The double-entry balance check is gated behind an account_balance_validation_enabled configuration flag. When the flag is off the ledger is not validated for balance, so this must always be enabled in production.

Transactions

Cart & Checkout cart

A per-user shopping cart that lets customers and point-of-sale operators assemble items and convert them into a sales invoice at checkout.

Actors: Customer, POS OperatorRequirements: 5

Overview

The Cart module holds the items a buyer intends to purchase before they commit. Each user has a single cart that is created automatically on first use. Items can be added, re-quantified or removed, with availability checked against stock so a buyer cannot order more than is on hand. On checkout the cart is converted into a sales invoice and emptied.

Capabilities & Scope

  • One automatically maintained cart per user.
  • Add items with a quantity check against available stock.
  • Update item quantity, with a zero quantity removing the line.
  • Remove an individual item or clear the whole cart.
  • Running subtotal, tax and total maintained as the cart changes.
  • Checkout that produces a sales invoice and returns its reference and total.

Functional Requirements

IDRequirementPriority
FR-CART-001The system shall maintain a single cart per user, creating it automatically the first time the cart is accessed.Must
FR-CART-002The system shall allow a buyer to add an item to the cart, validating the requested quantity against available stock and preventing over-ordering.Must
FR-CART-003The system shall allow a buyer to change an item's quantity, remove a specific item, or clear the entire cart, treating a quantity of zero as a removal.Must
FR-CART-004The system shall maintain the cart's subtotal, tax and total amount as items are added, updated or removed.Must
FR-CART-005The system shall allow a buyer to check out a non-empty cart, convert it into a sales invoice, clear the cart, and return the resulting invoice reference, total and status.Must

Business Rules

  • A cart cannot be checked out while empty.
  • Requested quantities are validated against available stock before being accepted.
  • The cart is emptied automatically after a successful checkout.

Known Issues

Medium — Cart tax is calculated as a hardcoded 10% of the subtotal and is not wired to the company's tax configuration, so the cart total may not reflect the correct tax rate.

Transactions

Job Orders job-order

End-to-end management of bespoke jewellery manufacturing orders, from intake through production stages to delivery and invoicing.

Actors: Sales Staff, Workshop StaffRequirements: 6

Overview

The Job Orders module handles custom-made jewellery. Staff capture the customer's specification — metal, karat, estimated weight, stone details and design notes — together with any advance payment and the gold rate at the time of order. The order then progresses through defined production stages. Workers are assigned with their making charges, and metal issued to and returned from them is tracked. When the piece is delivered, a sales invoice is generated with totals computed from weight, making charges and stone charges.

Capabilities & Scope

  • Create custom orders with an auto-generated unique job-order number.
  • Capture customer, metal type, karat, estimated weight, stones, design notes and expected delivery.
  • Snapshot the gold rate and record any advance paid at order time.
  • Advance an order through its production stages with sequence enforcement.
  • Assign workers with a pay-rate type and making charges; update or remove assignments.
  • Record metal issued to and returned from workers and compute net consumption.
  • Auto-generate the sales invoice on delivery with computed totals.

Functional Requirements

IDRequirementPriority
FR-JOB-001The system shall allow staff to create a custom jewellery order with an auto-generated unique order number, capturing the customer, metal type, karat, estimated weight, stone details and charges, design notes, expected delivery, advance paid and the gold rate at order time, starting in the New status.Must
FR-JOB-002The system shall allow staff to advance an order through its production stages in the defined sequence (New, In Progress, Quality Check, Completed, Delivered), accepting only the next allowed status.Must
FR-JOB-003The system shall allow staff to assign workers to an order with a pay-rate type (per gram, per piece or fixed daily) and making charges, and to update or remove those assignments.Must
FR-JOB-004The system shall allow staff to record metal issued to and returned from workers and shall compute net metal consumption as total issued less total returned.Must
FR-JOB-005The system shall generate a sales invoice for a delivered order, computing the total as estimated weight times gold rate at order plus making charges plus stone charges, and recording any advance paid as a payment.Must
FR-JOB-006The system shall ensure invoice generation is idempotent, returning the existing invoice if one has already been created for the order.Should

Business Rules

  • Order status may only move to the next allowed stage in the sequence.
  • Delivering an order automatically creates its sales invoice.
  • Invoice generation is idempotent — an order can have only one sales invoice.
  • The invoice records a customer receivable, and any advance paid is recorded as a payment against it.

Statuses & Key Values

NEWIN_PROGRESSQUALITY_CHECKCOMPLETEDDELIVEREDPay: PER_GRAMPay: PER_PIECEPay: FIXED_DAILYMaterial: ISSUEDMaterial: RETURNED

Known Issues

Low — The job-order invoice total is set through a direct amount patch that bypasses the normal line-item recomputation. This is a deliberate workaround rather than a permanent design.

Transactions

Workflow & Approvals workflow

A configurable multi-stage approval engine that routes business documents through ordered stages of designated approvers before they take effect.

Actors: Admin, Submitter, ApproverRequirements: 8

Overview

The Workflow module lets a business define named approval processes — for example for invoices, quotations or requisitions — made up of ordered stages, each with one or more approvers. When a document is submitted it is routed to the first stage's approvers, who approve or reject it. Approvals advance the document stage by stage; on final approval the originating document is marked complete, and on rejection it is returned to the submitter. Approvers and submitters each have views of the work relevant to them, and everyone involved is notified as the document moves.

Capabilities & Scope

  • Define named workflows with ordered, reorderable stages and per-stage approvers.
  • Submit business documents into a workflow for approval.
  • Approve or reject a stage, with automatic progression to the next stage.
  • Notify approvers when their action is required and the submitter on completion or rejection.
  • An approver inbox of pending tasks and a submitter view of submission progress.
  • Complete the underlying document automatically once all stages approve.

Functional Requirements

Workflow Definition

IDRequirementPriority
FR-WF-001The system shall allow administrators to define named approval workflows with a description and an ordered list of stages, each stage carrying a name, position, an approval mode (any or all approvers) and one or more designated approvers.Must
FR-WF-002The system shall allow stages to be reordered, and shall restrict updating or deleting a workflow definition to its creator.Should

Submission & Routing

IDRequirementPriority
FR-WF-003The system shall allow staff to submit a business document (such as an invoice, quotation or requisition) into a workflow, creating an approval task and the per-stage approval records.Must
FR-WF-004The system shall, on submission, set the first stage to awaiting approval and notify all of that stage's approvers in-app.Must

Approval & Completion

IDRequirementPriority
FR-WF-005The system shall allow an approver to approve a task assigned to them, and when a stage is fully approved shall advance the document to the next stage and notify its approvers.Must
FR-WF-006The system shall, when the final stage is approved, mark the originating document complete and notify the submitter.Must
FR-WF-007The system shall allow an approver to reject a task with a remark, mark the task rejected, and notify the submitter of the rejection and its reason.Must

Inbox & Tracking

IDRequirementPriority
FR-WF-008The system shall provide each approver a list of tasks awaiting their action and each submitter a view of their submissions with current stage progress.Must

Business Rules

  • A document moves to the next stage only when the current stage's approval requirement is satisfied.
  • A rejection at any stage stops progression and returns the document to the submitter with the rejection remark.
  • Only the creator of a workflow definition may modify or delete it.
  • Final approval triggers completion of the underlying business document.
  • Approvers and submitters are notified in-app at each transition relevant to them.

Statuses & Key Values

PENDINGAWAITING_APPROVALAPPROVEDREJECTEDMode: ANYMode: ALL

Known Issues

Medium — A stage configured with the "any approver" mode is honoured in the definition but the engine currently waits for all approvers to act before advancing, so "any" effectively behaves like "all" — a gap between the configured rule and the running behaviour.

Transactions

Subscription & Features subscription

The SaaS subscription and feature-entitlement system that determines which ERP capabilities each company can use, based on its plan, add-ons and overrides.

Actors: Platform Operator, Super AdminRequirements: 7

Overview

The Subscription module governs commercial access to the platform. Operators define subscription plan tiers and a catalogue of feature keys, then assign a plan to each company — optionally with a trial period. A company's effective feature set is resolved from three sources in priority order: company-specific overrides, subscription add-ons, and the base plan. That resolved set gates which operations and screens are available, so entitlement is enforced consistently across the system.

Capabilities & Scope

  • Define subscription plan tiers with pricing, user and store limits, trial days and bundled features.
  • Maintain a catalogue of feature keys grouped by module and category.
  • Assign a plan to a company, with at most one active subscription per company.
  • Start trials automatically when a plan offers trial days.
  • Upgrade or downgrade a company between plans.
  • Add or remove individual feature add-ons on a subscription.
  • Force-enable or force-disable specific features per company, optionally with limits and expiry.
  • Resolve a company's effective feature set using override-over-add-on-over-plan precedence.

Functional Requirements

IDRequirementPriority
FR-SUB-001The system shall allow platform operators to define subscription plan tiers carrying a key, name, tier level, pricing, maximum users and stores, trial days and a set of included features.Must
FR-SUB-002The system shall allow platform operators to maintain a catalogue of feature keys, each with a unique key, name, owning module, category (core, advanced or premium) and an add-on flag.Must
FR-SUB-003The system shall allow a plan to be assigned to a company, permitting at most one active subscription per company and starting the subscription in a trialing state when the plan offers trial days.Must
FR-SUB-004The system shall allow platform operators to upgrade or downgrade a company's plan and shall refresh the company's feature entitlements when the plan changes.Must
FR-SUB-005The system shall allow platform operators to add and remove individual feature add-ons on a subscription, preventing duplicate add-ons.Must
FR-SUB-006The system shall allow platform operators to force-enable or force-disable specific features for a company, optionally with a limit override, expiry and reason, supporting both single and batch overrides, and ignoring expired overrides.Must
FR-SUB-007The system shall determine a company's active feature set using a three-tier resolution of company override over add-on over plan, and shall use this resolution to gate access to guarded operations and screens.Must

Business Rules

  • A company may have only one active subscription at a time.
  • Feature resolution precedence is company override, then add-on, then plan.
  • An override past its expiry date is ignored during resolution.
  • A feature already present as an add-on cannot be added again.
  • Changing a plan or any override refreshes the company's resolved entitlements.

Statuses & Key Values

ACTIVETRIALINGPAST_DUECANCELLEDEXPIREDCategory: CORECategory: ADVANCEDCategory: PREMIUM

Known Issues

Medium — The resolved feature set is cached within a single running process for five minutes. In a multi-instance deployment each instance holds its own cache, so an entitlement change may not be seen consistently across instances until the cache expires.

System & Infrastructure

Notifications notification

A real-time in-app notification service that delivers event alerts to the right users across the admin and customer applications.

Actors: Staff, Customer, AdminRequirements: 6

Overview

The Notifications module lets any part of the system inform users about events that concern them — orders, schemes, and workflow approvals. Notifications are created for specific recipients, delivered live to connected clients, and listed in each user's history. Users can mark notifications read individually or all at once, and the system can broadcast a message to all users. Each user sees only their own notifications.

Capabilities & Scope

  • Send notifications to one or many users from any business event.
  • Deliver notifications to connected clients in real time.
  • List a user's notification history, filterable by read state.
  • Mark a single notification or all unread notifications as read.
  • Broadcast a notification visible to all users.

Functional Requirements

IDRequirementPriority
FR-NOTIF-001The system shall allow any business event to send in-app notifications to one or more users, deduplicating recipients before delivery.Must
FR-NOTIF-002The system shall deliver notifications to connected admin and app clients in real time, ensuring each user receives only their own notifications.Must
FR-NOTIF-003The system shall allow a user to view their recent notification history, filterable by read or unread state and sorted newest first.Must
FR-NOTIF-004The system shall allow a user to mark a single notification or all of their unread notifications as read, preventing a user from acting on another user's notifications.Must
FR-NOTIF-005The system shall present unread counts and grouped notification lists in the admin interface, with workflow notifications linking directly to the relevant approval task.Must
FR-NOTIF-006The system shall support broadcasting a notification visible to all users.Should

Business Rules

  • A user can only see and act on their own notifications.
  • Recipients are deduplicated before a notification is sent.
  • A broadcast notification has no specific recipient and is visible to all.

Statuses & Key Values

UNREADREADType: ORDERType: SCHEMEType: WORKFLOW

Known Issues

High — Firebase push notification delivery is wired but not active — the push provider's initialisation is currently disabled, so mobile push notifications are not sent and must be activated for production.

System & Infrastructure

Devices device

Registration and lifecycle management of point-of-sale and kiosk devices so the platform knows which hardware is operating in each location.

Actors: Admin, POS Device, StaffRequirements: 4

Overview

The Devices module tracks the physical POS and kiosk units used across branches. A device can self-register on first use, and administrators can then manage it — naming it, assigning it to a location, enabling or disabling its ability to make sales, and deactivating it. When an employee signs in on a device, the device record reflects who is currently using it. Administrators can list and export the device fleet.

Capabilities & Scope

  • Self-registration of a device without prior authentication.
  • Administrator management of device details, location and sales-enablement.
  • Soft-deactivation of a device.
  • Recording of the employee currently signed in on a device.
  • Filterable device listing and exportable device report.

Functional Requirements

IDRequirementPriority
FR-DEVICE-001The system shall allow a POS or kiosk device to register itself without authentication, returning the existing record if a device with the same identifier already exists.Must
FR-DEVICE-002The system shall allow administrators to create, update and deactivate devices, controlling each device's name, location and whether it may process POS sales, and shall record these changes in the audit trail.Must
FR-DEVICE-003The system shall record the employee currently signed in on a device, succeeding silently if the device is not found.Must
FR-DEVICE-004The system shall allow administrators to view a filterable list of devices (by keyword, status and date range) and to export a device report.Must

Business Rules

  • Device registration is idempotent — re-registering a known device returns the existing record.
  • A device's sales capability is controlled independently of its active status.
  • Deactivation is a soft delete; device history is retained.

Statuses & Key Values

ACTIVEINACTIVESales Enabled

System & Infrastructure

File Upload upload

A shared file-handling capability that stores documents and images against business records and serves them back as accessible URLs.

Actors: Staff, Any ModuleRequirements: 5

Overview

The File Upload module lets any part of the system attach files — such as images, documents and receipts — to a business record. It keeps a metadata record for each file (its name, type, owning module and uploader) while the binary content is held in storage. Stored paths are transformed into publicly accessible links when files are read, and files can be retrieved for one record or many, and deleted from both storage and the database.

Capabilities & Scope

  • Upload a file and associate it with a business record.
  • Generate resized image variants on upload.
  • Retrieve files for a single record or a list of records.
  • Serve stored files as publicly accessible URLs at read time.
  • Delete a file, or all files attached to a record, from both storage and metadata.

Functional Requirements

IDRequirementPriority
FR-UPLOAD-001The system shall accept a file upload against a business record, persist its metadata (name, type, owning module, cover flag and uploader) and store the binary content.Must
FR-UPLOAD-002The system shall support generating resized image variants on upload, storing each variant as a separate file record.Should
FR-UPLOAD-003The system shall allow a file to be deleted from both storage and the metadata record, and shall support removing all files attached to a given record.Must
FR-UPLOAD-004The system shall transform stored file paths into publicly accessible URLs when files are read.Must
FR-UPLOAD-005The system shall support querying files for both a single record and a list of records.Must

Business Rules

  • Each file's metadata is retained alongside its stored binary content.
  • Deleting a file removes it from both storage and the metadata record.
  • File links are generated at read time rather than stored directly.

Known Issues

Medium — File uploads are not validated for file type or size, so unexpected or oversized files can be accepted. Server-side type and size limits should be enforced at the upload boundary.

System & Infrastructure

Audit Log log

An append-only audit trail that records who changed what and when across the system, with field-level detail, for accountability and compliance.

Actors: Admin, Super AdminRequirements: 5

Overview

The Audit Log module captures an immutable record of every significant change in the system. Each entry records the actor, their role, the action, the affected module and document, and the time, along with a field-level map of what changed and optional before-and-after snapshots. Audit writing is resilient to transient failures, and administrators can search the log and review the full history of any document, scoped to what their role is permitted to see.

Capabilities & Scope

  • Immutable, append-only capture of create, update, delete, status-change and bulk operations.
  • Field-level change maps and optional full before/after snapshots.
  • Resilient, retrying audit delivery that records a failure entry if it cannot complete.
  • Search by module, action, user, document code, date range and status.
  • Full change history for a specific document.
  • Role-based scoping of which audit records a user may view.

Functional Requirements

IDRequirementPriority
FR-LOG-001The system shall record an immutable audit entry for every significant change, capturing the actor, their email and role, network details, the action, module, affected document and code, timestamp and outcome; audit records are never updated or deleted.Must
FR-LOG-002The system shall allow audit capture to be configured per operation, including whether before-and-after document snapshots are recorded for given actions.Must
FR-LOG-003The system shall capture a field-level change map for update operations and full document snapshots when configured.Must
FR-LOG-004The system shall make audit creation resilient to transient failures by retrying delivery, and shall still record a failed-status entry if all attempts are exhausted.Must
FR-LOG-005The system shall allow administrators to search the audit log by module, action, user, document code, date range and status, retrieve the full change history of a specific document, and shall scope results by role so super admins see all records, company admins see their company, and staff see their branch.Must

Business Rules

  • The audit log is append-only — records are never modified or removed.
  • Audit visibility is scoped by role: super admin (all), company admin (company), staff (branch).
  • A failed audit write is itself recorded so no event is silently lost.

Statuses & Key Values

CREATEUPDATEDELETESTATUS_CHANGEBULK_UPDATEOutcome: SUCCESSOutcome: FAILED