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.
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-AUTH-001 | The 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-002 | The 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-003 | The 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-004 | The system shall allow new user registration using an email address. | Must |
FR-AUTH-005 | The system shall renew a user's session without requiring re-authentication and shall reject invalid or expired session credentials. | Must |
FR-AUTH-006 | The 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-007 | The system shall support email-based password recovery without revealing whether an email address is registered. | Must |
FR-AUTH-008 | The system shall send a password-reset code via WhatsApp for phone-registered users, usable in the same reset flow. | Must |
FR-AUTH-009 | The system shall allow a signed-in user to change their own password only after their current password is confirmed. | Must |
FR-AUTH-010 | The system shall require new email-based accounts to confirm their email address and set a password before first use. | Must |
FR-AUTH-011 | The 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-012 | The 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
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-USER-001 | The system shall create a new user account, rejecting any duplicate email, username, phone number, or ID number with a specific error. | Must |
FR-USER-002 | The system shall assign each new account a unique public reference code and a referral identifier on creation. | Must |
FR-USER-003 | The system shall allow a signed-in user to update their own profile, re-checking uniqueness while excluding their own record. | Must |
FR-USER-004 | The 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-005 | The 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-006 | The system shall release the unique identifiers of a closed account so they may be reused, without deleting the historical record. | Must |
FR-USER-007 | The 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
Identity & Access
OTP & Verification otp
Generates and validates short-lived one-time codes used to prove ownership of a phone number or email address.
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
| ID | Requirement | Priority |
|---|---|---|
FR-OTP-001 | The 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-002 | The system shall cancel any previously pending code for the same destination before issuing a new one. | Must |
FR-OTP-003 | The system shall expire each one-time code three minutes after it is created. | Must |
FR-OTP-004 | The system shall verify a submitted code only while it remains in a pending state, and shall mark it completed on success. | Must |
FR-OTP-005 | The 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
Known Issues
Identity & Access
KYC kyc
Lets customers prove their real-world identity by submitting documents, and lets staff review, approve, or reject those submissions.
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
| ID | Requirement | Priority |
|---|---|---|
FR-KYC-001 | The system shall allow a customer to submit their ID front, ID back, and selfie images for identity verification. | Must |
FR-KYC-002 | The system shall block a new submission when the customer already has one pending or approved. | Must |
FR-KYC-003 | The system shall notify the support team via WhatsApp whenever a new submission is received, using the configured contact numbers. | Should |
FR-KYC-004 | The 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-005 | The 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-006 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-ACCESS-001 | The system shall allow administrators to create, update, and delete role groups, preventing duplicate group names within the same company. | Must |
FR-ACCESS-002 | The 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-003 | The system shall allow administrators to grant or revoke a single permission for a group as an immediate toggle. | Must |
FR-ACCESS-004 | The 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-005 | The 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-006 | The 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-007 | The 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-008 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-COMPANY-001 | The 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-002 | The 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-003 | The 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-004 | The system shall allow platform operators to enable or disable ERP modules for a company. | Must |
FR-COMPANY-005 | The 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-006 | The 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-007 | The 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-008 | The system shall return the company belonging to the currently signed-in user. | Must |
FR-COMPANY-009 | The 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
Organisation Setup
Branch branch
Manages the store locations within a company and lets users switch the branch their work is scoped to.
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
| ID | Requirement | Priority |
|---|---|---|
FR-BRANCH-001 | The system shall allow an administrator to create a branch scoped to the current company, requiring a name and optionally a manager. | Must |
FR-BRANCH-002 | The system shall allow an administrator to update a branch's name and manager. | Must |
FR-BRANCH-003 | The system shall allow an administrator to soft-delete a branch. | Must |
FR-BRANCH-004 | The system shall allow administrators to search and paginate branches by name, returning each branch's resolved manager. | Must |
FR-BRANCH-005 | The system shall allow a user to switch their active branch and shall scope subsequent operations to that branch. | Must |
FR-BRANCH-006 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-DEPT-001 | The 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-002 | The system shall allow an administrator to update a department's name and head of department, resolving the head in query responses. | Must |
FR-DEPT-003 | The system shall allow an administrator to soft-delete a department. | Must |
FR-DEPT-004 | The system shall allow administrators to search and paginate departments, returning each department's resolved head. | Must |
FR-DEPT-005 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-MASTER-001 | The 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-002 | The 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-003 | The system shall allow platform operators to update a reference record's name. | Must |
FR-MASTER-004 | The system shall allow platform operators to delete child reference records while protecting parent key records from deletion in the interface. | Should |
FR-MASTER-005 | The system shall expose reference data publicly for browsing and pagination without requiring authentication. | Must |
FR-MASTER-006 | The 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
Organisation Setup
Configuration config
Stores each company's operating settings — default accounts, base currency, mobile app controls, and customer notification details.
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
| ID | Requirement | Priority |
|---|---|---|
FR-CONFIG-001 | The 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-002 | The system shall allow an administrator to update the company's configuration, with each update establishing the new current configuration. | Must |
FR-CONFIG-003 | The 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-004 | The system shall create a default configuration automatically when a company is created. | Must |
FR-CONFIG-005 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-CTX-001 | The system shall isolate all data access to the signed-in user's company on every request, derived from their session. | Must |
FR-CTX-002 | The system shall apply company scoping automatically to all data access unless a deliberate bypass is in effect. | Must |
FR-CTX-003 | The 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-004 | The system shall additionally scope data access to the user's active branch when branch scoping is requested for an operation. | Must |
FR-CTX-005 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-CUST-001 | The system shall allow staff to create a customer with a linked receivable account, generating search keywords from the name. | Must |
FR-CUST-002 | The system shall validate that each customer's email and phone number are unique across all users on creation and update. | Must |
FR-CUST-003 | The system shall optionally create one currency-specific sub-account per currency together with the parent customer, named "{customer} - {currency}". | Should |
FR-CUST-004 | The system shall migrate the customer's existing transaction history to the new account whenever their linked account is changed. | Must |
FR-CUST-005 | The system shall prevent deletion of a customer whose account balance is non-zero, and support deleting one or many customers. | Must |
FR-CUST-006 | The 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-007 | The system shall let an authenticated customer retrieve their own account record. | Must |
FR-CUST-008 | The 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-009 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-SUPP-001 | The system shall allow staff to create a supplier with a linked payable account and auto-generated search keywords. | Must |
FR-SUPP-002 | The system shall validate supplier email and phone uniqueness across all users on creation and update. | Must |
FR-SUPP-003 | The system shall migrate the supplier's existing transaction history to the new account whenever their linked account is changed. | Must |
FR-SUPP-004 | The system shall prevent deletion of a supplier whose account balance is non-zero, and support deleting one or many suppliers. | Must |
FR-SUPP-005 | The system shall provide a searchable, filterable, paginated supplier list and support optional currency-specific sub-accounts. | Must |
FR-SUPP-006 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-EMP-001 | The system shall allow an administrator to create an employee together with a staff login account, validating email and phone uniqueness. | Must |
FR-EMP-002 | The 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-003 | The system shall allow an administrator to update employee profile and HR attributes, keeping the linked login account in step. | Must |
FR-EMP-004 | The system shall allow an administrator to remove an employee. | Must |
FR-EMP-005 | The system shall provide a searchable, filterable, paginated employee directory by name, email, phone, branch, and status. | Must |
FR-EMP-006 | The system shall allow an administrator to set per-employee labour and diamond discount overrides. | Must |
FR-EMP-007 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-HR-001 | The 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-002 | The 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-003 | The system shall provide raw attendance events and a per-employee daily summary showing first in, last out, and total hours. | Should |
FR-HR-004 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-HR-005 | The system shall let an administrator define leave entitlement groups assigning a number of days per leave type. | Must |
FR-HR-006 | The 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-007 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-HR-008 | The system shall let employees submit expense claims for approval and post approved claims to the HR ledger as a payable. | Must |
FR-HR-009 | The 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-010 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-HR-011 | The 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-012 | The 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-013 | The 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-014 | The system shall let employees record regular and overtime hours on timesheets and submit them for approval or rejection. | Should |
FR-HR-015 | The 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-016 | The 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
People
Feedback & CRM feedback
Lets the business build customer survey forms, share personalised feedback links, collect public responses, and review and annotate them.
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
| ID | Requirement | Priority |
|---|---|---|
FR-FEED-001 | The system shall let staff build survey forms from short-text, paragraph, star-rating, and multiple-choice fields, each markable as required. | Should |
FR-FEED-002 | The system shall let staff reorder, add, and remove form fields. | Should |
FR-FEED-003 | The system shall let staff publish or unpublish a form and expose a public link based on its slug. | Should |
FR-FEED-004 | The system shall let staff generate a personalised, time-limited feedback link tied to a specific customer so the response is attributed. | Should |
FR-FEED-005 | The system shall allow a customer to submit a feedback response without authentication, only for a published form. | Should |
FR-FEED-006 | The system shall store the customer identity on a response whenever a valid customer link token is supplied. | Should |
FR-FEED-007 | The 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
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-INV-001 | The 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-002 | The system shall provide a searchable, filterable, paginated item catalogue, including cross-branch listing, and let items be toggled online or offline. | Must |
FR-INV-003 | The 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-004 | The 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-005 | The system shall let administrators manage item types with margin rules and reordering, and a hierarchical item-category tree. | Must |
Stock
| ID | Requirement | Priority |
|---|---|---|
FR-INV-006 | The system shall track each physical jewellery piece as an individual stock record with a unique SKU, weights, rate, and certificate number. | Must |
FR-INV-007 | The system shall prevent modification or deletion of a stock record once it has left the saved status. | Must |
FR-INV-008 | The 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-009 | The system shall let staff query available stock for an item and trace the full movement history of a stock unit. | Should |
Invoicing
| ID | Requirement | Priority |
|---|---|---|
FR-INV-010 | The 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-011 | The system shall let staff post invoices (individually or in bulk), triggering the corresponding stock and financial side effects. | Must |
FR-INV-012 | The 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-013 | The system shall provide aggregated invoice summaries and deliver real-time invoice events to connected clients. | Should |
Transfers, Adjustments & Reporting
| ID | Requirement | Priority |
|---|---|---|
FR-INV-014 | The system shall let staff transfer stock between branches, placing it in transit until the destination confirms receipt, with a transit log. | Must |
FR-INV-015 | The 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-016 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-RATE-001 | The 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-002 | The system shall broadcast updated gold rates in real time to all connected admin and customer clients immediately after they are set. | Must |
FR-RATE-003 | The system shall expose current gold rates publicly without authentication, defaulting missing rates to zero. | Must |
FR-RATE-004 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-EXCH-001 | The 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-002 | The system shall resolve and display the from and to entities for each exchange rate. | Must |
FR-EXCH-003 | The 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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-SCHEME-001 | The system shall let administrators define savings scheme products with a type, purity, duration, linked accounts, benefits, and tiered bonuses. | Must |
FR-SCHEME-002 | The system shall support bonus tiers defined by a from/to range and a bonus expressed as an amount, gram, or percentage. | Should |
FR-SCHEME-003 | The system shall let staff enrol a customer in a scheme with optional minimum and maximum installment constraints, starting in pending status. | Must |
FR-SCHEME-004 | The system shall let an administrator move a scheme enrolment through active, completed, and cancelled states. | Must |
FR-SCHEME-005 | The 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-006 | The 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
Product & Pricing
Membership membership
Defines loyalty membership tiers, enrols customers, records reward transactions, and auto-upgrades members as they earn points.
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
| ID | Requirement | Priority |
|---|---|---|
FR-MEMB-001 | The system shall let administrators define membership tier products with level, spend thresholds, reward multiplier, benefits, branding colours, and linked accounts. | Must |
FR-MEMB-002 | The system shall let staff enrol a customer in a membership tier and manage its status as active, inactive, expired, or suspended. | Must |
FR-MEMB-003 | The 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-004 | The 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-005 | The system shall sum only confirmed reward points when evaluating tier eligibility. | Should |
FR-MEMB-006 | The 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
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-001 | The 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-002 | The 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-003 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-004 | The 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-005 | The 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-006 | The 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-007 | The system shall automatically compute a pure-metal value for metal-bearing transactions from the amount and purity. | Should |
Journal Entries
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-008 | The 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-009 | The 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-010 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-011 | The 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-012 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-013 | The 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-014 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-015 | The 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-016 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-FIN-017 | The 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-018 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-CART-001 | The system shall maintain a single cart per user, creating it automatically the first time the cart is accessed. | Must |
FR-CART-002 | The 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-003 | The 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-004 | The system shall maintain the cart's subtotal, tax and total amount as items are added, updated or removed. | Must |
FR-CART-005 | The 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
Transactions
Job Orders job-order
End-to-end management of bespoke jewellery manufacturing orders, from intake through production stages to delivery and invoicing.
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
| ID | Requirement | Priority |
|---|---|---|
FR-JOB-001 | The 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-002 | The 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-003 | The 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-004 | The 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-005 | The 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-006 | The 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
Known Issues
Transactions
Workflow & Approvals workflow
A configurable multi-stage approval engine that routes business documents through ordered stages of designated approvers before they take effect.
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
| ID | Requirement | Priority |
|---|---|---|
FR-WF-001 | The 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-002 | The system shall allow stages to be reordered, and shall restrict updating or deleting a workflow definition to its creator. | Should |
Submission & Routing
| ID | Requirement | Priority |
|---|---|---|
FR-WF-003 | The 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-004 | The system shall, on submission, set the first stage to awaiting approval and notify all of that stage's approvers in-app. | Must |
Approval & Completion
| ID | Requirement | Priority |
|---|---|---|
FR-WF-005 | The 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-006 | The system shall, when the final stage is approved, mark the originating document complete and notify the submitter. | Must |
FR-WF-007 | The 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
| ID | Requirement | Priority |
|---|---|---|
FR-WF-008 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-SUB-001 | The 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-002 | The 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-003 | The 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-004 | The 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-005 | The system shall allow platform operators to add and remove individual feature add-ons on a subscription, preventing duplicate add-ons. | Must |
FR-SUB-006 | The 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-007 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-NOTIF-001 | The system shall allow any business event to send in-app notifications to one or more users, deduplicating recipients before delivery. | Must |
FR-NOTIF-002 | The system shall deliver notifications to connected admin and app clients in real time, ensuring each user receives only their own notifications. | Must |
FR-NOTIF-003 | The system shall allow a user to view their recent notification history, filterable by read or unread state and sorted newest first. | Must |
FR-NOTIF-004 | The 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-005 | The 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-006 | The 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
Known Issues
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-DEVICE-001 | The 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-002 | The 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-003 | The system shall record the employee currently signed in on a device, succeeding silently if the device is not found. | Must |
FR-DEVICE-004 | The 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
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-UPLOAD-001 | The 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-002 | The system shall support generating resized image variants on upload, storing each variant as a separate file record. | Should |
FR-UPLOAD-003 | The 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-004 | The system shall transform stored file paths into publicly accessible URLs when files are read. | Must |
FR-UPLOAD-005 | The 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
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.
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
| ID | Requirement | Priority |
|---|---|---|
FR-LOG-001 | The 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-002 | The 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-003 | The system shall capture a field-level change map for update operations and full document snapshots when configured. | Must |
FR-LOG-004 | The 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-005 | The 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.