Sales invoices (AR)
Create invoices, submit to LHDN MyInvois, track outstanding, review aging.
The AR tab is where you manage every sales invoice for a client — what they billed, what's been paid, what's overdue — and where you submit e-invoices to LHDN MyInvois for compliance.
Open from any client → AR.
The aging strip
The top of the page summarises outstanding receivables across five buckets:
| Bucket | Definition |
|---|---|
| Current | Not yet due, or has no due date set |
| 1–30 days | 1 to 30 days past the due date |
| 31–60 days | 31 to 60 days past due |
| 61–90 days | 61 to 90 days past due |
| 90+ days | More than 90 days past due — highlighted red |
Each bucket shows the sum of outstanding amounts for invoices in that range. The top-right also shows the percentage of total outstanding that is overdue.
The strip is computed across all non-paid, non-cancelled invoices — filters below don't change it. Aging is a holistic AR-health number.
Multi-currency caveat. The strip sums amounts without FX conversion in v1. If a client invoices in mixed currencies the total will be approximately wrong proportional to the foreign-currency share. Phase 2 will bucket per currency.
The invoice list
Each row:
| Column | What it is |
|---|---|
| Doc no | Invoice number (e.g. INV-0042). Click to open detail. |
| Date | Document date |
| Due | Due date — — if not set |
| Customer | Customer name. Falls back to the raw code if the customer hasn't been imported. |
| Total | Total invoice amount |
| Outstanding | Amount still owed (= total − payments received) |
| Status | Paid (green) / Open (neutral) / Overdue (red) / Cancelled (grey) |
Sorted newest first by document date.
Invoice status — how it's computed
An invoice's status is one of three real states, set by what you do in Kiravy:
| State | Set when |
|---|---|
open | The invoice is raised and not yet settled |
paid | You mark it paid (records a payment against it) |
cancelled | You cancel the invoice |
Overdue is not a stored state — it's shown automatically when an open invoice passes its due date. The moment you record a payment, the same invoice stops showing overdue, because it becomes paid. Nothing has to flip a flag; overdue is derived from the status plus the due date at the time you look.
Filtering
Toolbar above the list:
- Status — All / Open / Overdue / Paid / Cancelled
- From date / To date — filters by document date
Filtering does not affect the aging strip.
e-Invoice: AR path (you send invoice to customer)
Malaysia's LHDN requires eligible sales invoices to be submitted to MyInvois. Kiravy submits on your behalf as your authorized intermediary — first authorize Kiravy and enable MyInvois under Settings → Tax & compliance.
How it works
Create invoice in Kiravy (MYR)
↓
Open the invoice → "Submit to MyInvois" ← Blocked: fix & retry
(checks: seller + customer details, 72h window)
↓
Submit to LHDN MyInvois
↓
LHDN validates ← Rejected: LHDN error code shown
↓
Validated — UUID + verification QR
↓
Send the invoice PDF to the customer
(QR on the PDF links to the MyInvois portal)
Submission is a manual action per invoice — Kiravy never auto-submits. Validation is asynchronous; status updates by itself (see below), or you can click Refresh status.
Before you submit
A few things must be in place, or submission is blocked with a clear message:
| Requirement | Where to set it |
|---|---|
| MyInvois enabled + seller TIN/ID | Settings → Tax & compliance |
| Seller MSIC, business activity, address | Settings → Tax & compliance |
| Customer TIN, ID type + number | Customers → customer detail (MyInvois section) |
| Customer address (line 1, city, postcode, state) | Customers → customer detail |
| Currency = MYR | The invoice (v1 supports MYR only) |
| Invoice date within 72 hours | The invoice — see the window note below |
On the invoice detail page, an amber warning next to the customer flags when the selected customer is missing any e-invoice field, so you can fix it before submitting.
The 72-hour submission window
LHDN rejects any invoice whose document date is more than 72 hours before submission (error CF321). Kiravy checks this up front: a stale invoice is blocked at submit with a message, and the detail page warns as the window approaches. Kiravy does not quietly rewrite the document date to dodge this — correct the date, or void and reissue, so your books stay in sync with LHDN.
LHDN rejection
If LHDN rejects the invoice, Kiravy shows the LHDN error code and description on the detail page. Fix the underlying issue and click Resubmit to MyInvois.
UUID, verification QR, and the customer's window
Once validated, LHDN assigns a UUID and a long identifier. Kiravy builds a verification QR code from these and renders it on the invoice detail page and the invoice PDF — the customer scans it to verify the e-invoice on the MyInvois portal. The customer has 72 hours to reject the invoice via MyInvois.
Status updates automatically
You don't have to keep clicking Refresh:
- Opening the invoice re-checks LHDN if the status isn't final yet — so a validated invoice (and its QR) appears on its own.
- A background sweep also keeps statuses current, including catching a
cancelled/rejectedthat happens within the 72h window when nobody's looking.
Invoice statuses (e-invoice)
| Status | Meaning |
|---|---|
| Submitting | Claimed and in flight to LHDN (prevents a duplicate submission) |
| Submitted | Sent to LHDN, awaiting validation |
| Valid | LHDN validated; UUID + QR assigned; ready to send to customer |
| Rejected | LHDN rejected; fix and resubmit |
| Cancelled | Cancelled at LHDN (e.g. within the 72h window) |
If a submission can't be confirmed (e.g. a network drop), the invoice stays Submitting and shows Check status instead of Submit — Kiravy reconciles against LHDN before letting you retry, so you never accidentally file a duplicate e-invoice.
The detail page
Click any invoice:
- Customer (name + code), with the e-invoice readiness warning if any field is missing
- Document date / Due date / Currency
- Total / Outstanding
- Description
- e-Invoice status badge, UUID, and the verification QR once validated
Line items are not synced in v1 — that's a planned Phase 2 feature.
How invoices post to the ledger
You create invoices directly in Kiravy, and the moment you raise one it posts to the ledger as a balanced journal entry — in plain words: debit Accounts receivable for the total, credit Revenue for the net, and credit SST output for the tax. That's what feeds the trial balance, P&L, and SST summary. See How Kiravy's general ledger works for the full picture.
Recording a payment — when you Mark as paid, Kiravy posts a payment (debit Bank, credit Accounts receivable), which clears the outstanding amount and moves the invoice to paid.
Changing or undoing a posted invoice
Because a posted invoice has already hit the books, it's immutable — you can't edit it in place. To correct one:
- Open (unpaid) invoice — cancel it and re-issue a fresh one with the right figures.
- Paid invoice — you can't plain-cancel it (a payment is already recorded against it). Issue a refund / void instead, which reverses both the invoice and its payment. See Settlements & refunds.
What each role sees
- Partner / Manager — every client's invoices firm-wide
- Staff / Viewer — only assigned clients; read-only
What's coming
- Line items per invoice
- Per-currency aging buckets
- Customer linkout from invoice detail
- Partial payments (today's Mark as paid settles an invoice in full)
What's next
- Bills & expenses (AP) — the AP-side mirror
- Customers — who these invoices are owed by
- Month-end close — reconciling the aging picture at period close