Customers
Everyone this client invoices — contacts, codes, status.
The Customers tab is the AR side of a client's contact list. It's a flat view of every customer that exists in this client's books, source-agnostic — accounting software imports, manual entry, all surface here the same way.
Open it from any client → Customers.
What you see
Each row shows:
| Column | What it is |
|---|---|
| Name | The customer's company name. Click to open the detail page. |
| Code | The customer's reference code in the source system (e.g. CUST001 from SQL Account). Used for invoicing and is the stable identifier. |
| Currency | The customer's default currency (MYR for most Malaysian SMEs) |
| Credit limit | Maximum outstanding the SME extends to this customer. — if not set. |
| Terms | Credit period in days (30d, 60d). Pulled from the source CREDITTERM text and parsed to a number. |
| Status | Active / Inactive. |
| Source | integration (synced), manual (typed in directly), or one of receipt/bank/csv (rare for customers) |
Sorted by name, A–Z. Up to 500 rows on one page — beyond that, filter to narrow.
Filtering and searching
The toolbar above the list:
- Search — case-insensitive substring match on name or code. 300ms debounced so it doesn't fire on every keystroke.
- Active filter — All customers / Active only / Inactive only. Defaults to All.
URL-driven (?search=…&active=yes), so you can bookmark or share filtered views.
The detail page
Click any customer → /clients/[clientId]/customers/[customerId]. Shows everything the list page does, plus:
- External ID — the upstream system's stable id (e.g.
arcust_CUST001for SQL Account). Used by sync to de-dup; mostly an internal detail but exposed for support. - Email and phone — currently
—because they live on theBRANCHchild table in SQL Account and aren't pulled in v1. Phase 2 will sync those.
Eventually the detail page will also list every AR invoice this customer has — that view will land alongside the AR tab.
Where do customers come from?
Customers are imported from your accounting software during migration or added manually once the manual-create UI ships. After an initial import, this list is typically static day-to-day.
| Source | When |
|---|---|
| Integration | Imported from an accounting software migration (SQL Account, and Xero / QuickBooks in future) |
| Manual | Hand-added — not yet exposed in the UI, planned for a future release |
| CSV | Bulk import — also future |
Customer codes — what they are and aren't
The code is the source system's identifier — CUST001, C-0042, whatever the firm set up in their accounting software. Kiravy stores it verbatim.
It's not a Kiravy concept; it's a passthrough so reconciliation between Kiravy and your source system stays one-to-one. See How Kiravy thinks about Chart of Accounts — the same design principle applies here.
What each role sees
Customers respect the standard RLS rules:
- Partner / Manager — every client's customers across the firm
- Staff / Viewer — only customers belonging to clients they're assigned to. Open Customers tab on a client you're not assigned to → 404.
CRUD is currently read-only across all roles. Manual create / edit / delete is a planned feature once integration churn settles.
What's coming
- Email and phone from
AR_CUSTOMERBRANCH(SQL Account child table) - Invoice history on the detail page — once AR tab lands cross-linking
- Manual create + edit — for customers added in Kiravy directly
- Outstanding total — running sum per customer from the AR invoices
What's next
- Suppliers — mirror of this on the AP side
- Accounts receivable — the invoices these customers owe you