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:

ColumnWhat it is
NameThe customer's company name. Click to open the detail page.
CodeThe customer's reference code in the source system (e.g. CUST001 from SQL Account). Used for invoicing and is the stable identifier.
CurrencyThe customer's default currency (MYR for most Malaysian SMEs)
Credit limitMaximum outstanding the SME extends to this customer. if not set.
TermsCredit period in days (30d, 60d). Pulled from the source CREDITTERM text and parsed to a number.
StatusActive / Inactive.
Sourceintegration (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.

[Screenshot pending] Customers list with search + active filter, several rows including one Inactive supplier shown grey

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 filterAll 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_CUST001 for SQL Account). Used by sync to de-dup; mostly an internal detail but exposed for support.
  • Email and phone — currently because they live on the BRANCH child 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.

[Screenshot pending] Customer detail page showing all fields plus the External ID and a placeholder for invoice history

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.

SourceWhen
IntegrationImported from an accounting software migration (SQL Account, and Xero / QuickBooks in future)
ManualHand-added — not yet exposed in the UI, planned for a future release
CSVBulk 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