Tax deductibility
AI-flagged LHDN disallowances and the manual override path.
Not every expense in the books reduces taxable income. Malaysian tax law (Income Tax Act 1967 and the Public Rulings on top of it) disallows or caps a long list of common business spending — fines, capital purchases under the wrong code, half of non-customer entertainment, etc.
Kiravy AI takes a first pass at flagging each transaction so you can focus on the disagreements rather than reviewing every row manually. The accountant still signs off — Kiravy AI is a triage layer, not a tax advisor.
The four verdicts
Every transaction can be in one of four states for tax purposes:
| Verdict | Meaning |
|---|---|
| Deductible | Fully allowable against taxable income |
| Partial | Subject to a statutory cap (e.g. 50% on non-customer entertainment) |
| Non-deductible | Explicitly disallowed by LHDN — won't reduce taxable income at all |
| Unknown | The AI couldn't classify with confidence; needs human review |
Newly created transactions are Unknown until classified.
What Kiravy AI checks
The classifier looks at the vendor, description, amount, and account code, and applies six common LHDN rules:
| Rule | Verdict applied | Reference |
|---|---|---|
| Fines & penalties | Non-deductible | ITA 1967 s. 33 / s. 39 |
| Non-customer entertainment | Partial (50% cap) | ITA 1967 s. 39(1)(l); Public Ruling 4/2015 |
| Capitalisable equipment (>RM 1,000) | Non-deductible (revenue) | ITA 1967 s. 39(1)(c); Schedule 3 |
| Private vehicle running costs | Partial | ITA 1967 s. 39(1)(a/b/k) |
| Capital legal fees | Non-deductible | ITA 1967 s. 39(1)(c) |
| Revenue / COGS accounts | Deductible (default) | — |
Anything that doesn't match a rule is left as Unknown — by design. The classifier is conservative: it would rather defer to you than guess wrong on a non-trivial case.
Kiravy AI checks six rules, not all of them. Edge cases — restructuring expenses, related-party transactions, expenses with mixed personal/business use beyond what's in the rules — need a tax adviser. The disclaimer is visible in the UI; treat the AI as triage, not a Form C generator.
How to run it
There are two paths:
From an engagement (recommended)
When you're working through Month-end close → Review queue tab → Run deductibility check button. The classifier runs across every unreviewed transaction in that engagement's period.
This is the normal monthly flow — close the books, classify deductibility in the same pass.
Per-transaction
When a single transaction's verdict is Unknown or you want to re-run after fixing the vendor / account code: open the transaction detail page and re-run from there. (UI surface for this is on the roadmap; today the engagement path is the main one.)
Overriding the AI
The AI is never the last word. Open any transaction → the Tax treatment section shows the current verdict + AI note, and gives you an editable form:
- Change the verdict dropdown to whatever you think it should be
- Add a short note explaining why (max 500 chars — for the audit trail)
- Apply override
The override is logged in audit_logs with your user id and timestamp. Future runs of the classifier skip rows you've manually overridden — your judgement sticks.
Who can override
Partner, Manager, or Staff. Viewers can see the verdict but can't change it.
Finding flagged expenses at year-end
There isn't a dedicated non-deductible expense report page (yet) — but the Transactions tab's filter does the job:
- Open the client → Transactions
- Tax filter → Flagged (this matches Non-deductible + Partial)
- Optionally narrow with the date range — usually the financial year
Or jump straight there with a URL like:
/clients/[clientId]/transactions?tax=flagged&from=2026-04-01&to=2027-03-31
Useful when preparing Form C — these are the expenses your tax adjustment schedule needs to remove (or partially remove) from the P&L.
What the verdict affects
| Surface | How it's used |
|---|---|
| Transactions list | An amber dot appears next to flagged rows (non-deductible + partial) |
| P&L report | Flagged rows show in a warning banner up top; they still appear in the P&L because they're still expenses — but the warning tells you what'll be added back in tax adjustment |
| AI assistant | Can answer questions like "what's our non-deductible spending this quarter?" by filtering on the verdict |
Audit trail
Every override is logged. Firm settings → Audit logs (Partners only, planned UI) will surface:
- Who overrode what
- When
- The before and after verdict
- The note they left
For now, the trail is in the database — visible to support / DB admins. The UI surfaces "Manually overridden [timestamp]" badge on transactions where it matters.
Limits today
- 6 rules, not the full LHDN ruleset — see the disclaimer
- Single-jurisdiction (Malaysia / LHDN only) — clients with cross-border operations need manual review
- No dedicated tax-adjustment schedule export — use the transactions filter + your existing template
- No tax-rate engine — Kiravy doesn't compute the actual tax payable, just the deductibility status of expenses
What's coming
- More rules — staff costs, R&D incentives, donations, capital allowances
- Sabah/Sarawak special exemptions
- Form C-style tax-adjustment schedule export
- Drill-through from P&L deductibility warning into the filtered transaction list
What's next
- Month-end close — where you usually run the classifier
- P&L report — surfaces deductibility flags as a warning
- Transactions — filter by tax verdict for ad-hoc analysis