Expense Lifecycle
This page explains the full journey of an expense from creation to closure, including all decision points and system actions.
Full lifecycle
Employee System Approver(s)
| | |
|-- Create draft --------> | |
|-- Attach receipt ------> | |
|-- Submit --------------> | Policy check |
| | (flag or block) |
| |-- Notify step 1 -----------> |
| | Review |
| | <-- Approve --------------- |
| |-- Notify step 2 -----------> |
| | Review |
| | <-- Approve --------------- |
| | |
| | Status: Approved |
| | |
| <-- Notify Finance ---- | |
| (mark paid) | |
| <-- Email: paid ------- | |
| | Auto-close after 7 days |
| | Status: Closed |
Key rules
- Draft expenses are never visible to approvers
- Submitted expenses cannot be edited by the employee (only retracted before the first approver acts)
- Rejected expenses can be resubmitted as new records — the original is preserved
- Approved expenses are immutable except for the Finance "mark paid" action
- Closed expenses are fully immutable — enforced at the database level
- The entire lifecycle is captured in the Audit Log
SLA escalation
Each approval step has an SLA deadline in hours. If an approver does not act in time:
- The system inserts a warning comment on the expense
- An audit entry is created
- The workspace Admin is notified
The expense does not auto-approve or auto-escalate — it waits for a human decision.
Email notifications
Klear sends a transactional email at each key transition. Notifications are best-effort — a delivery failure never blocks the state change.
| Transition | Who is emailed |
|---|---|
| Submitted | Step-1 approver only |
| Step N approved → step N+1 activated | Step-N+1 approver |
| All steps approved | Submitter |
| Rejected | Submitter (with reason and note) |
| Info requested | Submitter (with approver's message) |
See Email Notifications for the full reference including provider configuration.
Multi-currency
Expenses can be entered in any currency. Klear converts to SGD using the FX rate table at the time of submission. The SGD equivalent is used for policy thresholds and reports. Live FX rate feeds (MAS / Open Exchange Rates) are coming in v1.5.