Transactions
The full ledger view for the customer.
What Customers See
┌────────────────────────────────────────────────────┐
│ H1: Transactions │
│ Sub: Every move on your wallet │
├────────────────────────────────────────────────────┤
│ Filter chips │
│ All Credit Debit Refund Cashback Transfer │
│ Withdrawal Topup BNPL repay │
├────────────────────────────────────────────────────┤
│ Search [______________] Date [from] [to] │
│ [Export ▼]│
├────────────────────────────────────────────────────┤
│ Row icon Topup +₹500 2026-04-22 14:23 │
│ Order #1234 │
│ Balance after ₹1,500 │
├────────────────────────────────────────────────────┤
│ Row icon Cashback +₹25 2026-04-21 09:01 │
│ Order #1230 │
│ Balance after ₹1,000 │
├────────────────────────────────────────────────────┤
│ Pagination Prev / Next │
└────────────────────────────────────────────────────┘

Filter Chips
Click to filter by type. URL syncs ?type=credit etc.
| Chip | Filters |
|---|---|
| All | (no filter) |
| Credit | money in |
| Debit | money out |
| Refund | refund-to-wallet rows |
| Cashback | cashback rows |
| Transfer | sent + received |
| Withdrawal | payouts out |
| Topup | recharge credits |
| BNPL repay | auto-deductions for BNPL debt |
Counts shown next to each chip — within the active date range.

Search
Free-text search against the note field on each row.
?q=lunch
Date Range
from + to inputs. Default last 30 days. "Clear" resets.
Row Anatomy
Each row shows:
- Type icon (coloured tile by type)
- Type label
- Amount (signed)
- Linked order (if any)
- Date in customer's timezone
- Note (if any)
- Balance after the transaction

CSV Export
Export ▼ dropdown:
- Current page
- Current filters (all matching rows)
- Last 90 days
- Last 365 days
CSV columns: id, date, type, amount, balance_after, currency, order_id, reference, note.
Pagination
Default 25 rows per page. Cursor-based — fast even with millions of rows.
Print View
Add ?print=1 to strip chrome (sidebar, header, filter bar) — only the table renders. Browser "Save as PDF" works the same way.
Empty State
Filtered:
"No transactions match these filters." [ Clear filters ]
Unfiltered (new customer):
"No transactions yet." [ Top up wallet ]
Common Scenarios
Customer disputes a charge
Open their wallet card from the user profile → look at the row in question → date / amount / order link / reference all visible.
Tax / accounting export
CSV export of last 365 days → into a spreadsheet → match against orders table.
Audit a specific batch
If you ran a bulk credit batch, search for bulk: in the filter — all rows from that batch show up.
When Something Goes Wrong
| Problem | Fix |
|---|---|
| List empty though balance > 0 | History denorm out of sync — re-run via Status Tools |
| CSV download timeouts | Reduce date range; raise the export row cap if needed |
| Type icon missing for a custom type | Register icon via filter (see dev section) |
| Filter chip count off | Stale cache — clear via Status Tools |
For developers — hooks
Hooks
| Hook | Type | When |
|---|---|---|
wkwp_central_transactions_query | filter | mutate the list query |
wkwp_central_transactions_chips | filter | mutate filter chip list |
wkwp_central_transactions_csv_columns | filter | mutate CSV header / row mapping |
wkwp_central_transaction_icon | filter | per-type icon override |
wkwp_central_transaction_row_html | filter | rewrite per-row markup |
