---
title: Proof Upload & Approval
slug: proof-upload-and-approval
docTags: 
createdAt: 2026-03-06T19:27:17.084Z
---

When a member pays via bank transfer, they upload a screenshot of their transaction receipt as **proof**. Admins review and approve or reject the proof.

## 📱 Member: Uploading Proof

1. Go to **My Payments** (web or mobile app)
2. Find the pending payment
3. Click **Upload Proof**
4. Take a photo of your bank transfer receipt or upload a screenshot
5. Submit — the payment status changes to **Processing** while awaiting review

Accepted file types: JPG, PNG, PDF.

***

## 🔧 Admin: Reviewing Proof

1. Go to **Payments**
2. Filter by status **Processing** to see pending proofs
3. Click on a payment to open it
4. View the uploaded receipt image
5. Click **Approve** or **Reject**

### Approving

- Payment status changes to **Paid**
- Member receives a WhatsApp message and/or email with their receipt
- The payment is recorded in the academy's revenue

### Rejecting

- Payment status changes to **Rejected**
- Admin can add a rejection reason (shown to the member)
- Member is notified and prompted to re-upload a correct receipt

***

## 🤖 AI Proof Verification

REMMU can use AI to automatically verify uploaded payment proofs, reducing the manual review workload for admins.

When enabled, each uploaded proof is analysed by AI which:

1. **Extracts key data** from the receipt image — amount, date, transaction status, bank name, and transfer type (Bank Transfer, DuitNow QR, Touch 'n Go, etc.)
2. **Scores the proof** against the payment details using up to 4 configurable signals:

| Signal     | What it checks                                                     |
| ---------- | ------------------------------------------------------------------ |
| **Amount** | Extracted amount matches the payment amount (within tolerance)     |
| **Status** | Receipt shows a success keyword (e.g. "Successful", "Berjaya")     |
| **Date**   | Receipt date matches the payment date (within tolerance days)      |
| **Bank**   | Bank name matches — applies to bank transfers only, skipped for QR |

3. **Auto-approves** the payment if the total confidence score meets your threshold (and the amount is within the configured max) — payment is marked Paid instantly without admin action
4. **Leaves it pending** for manual review if the score is below threshold — the AI breakdown is shown to help admins decide faster

### Viewing the AI result

On each proof submission card in the **Proof Submissions** panel, the AI confidence score and signal breakdown are shown. A circular score ring displays the overall confidence (green = auto-approved, amber = borderline, red = low confidence).

### Configuring AI Verification

Go to **Settings → Billing → Payment Methods → AI Proof Verification**:

| Setting                     | Description                                                                            |
| --------------------------- | -------------------------------------------------------------------------------------- |
| **Enable AI verification**  | Turn on/off for all new proof uploads                                                  |
| **Auto-approve threshold**  | Minimum score (50–100%) to auto-approve. Higher = stricter                             |
| **Max auto-approve amount** | Only auto-approve payments up to this amount (0 = unlimited)                           |
| **Date tolerance**          | How many days difference is acceptable (e.g. 3 days)                                   |
| **Signals**                 | Toggle which of the 4 signals are active; inactive signals are skipped (not penalised) |

:::hint{type="info"}
AI verification only auto-approves — it never auto-rejects. Proofs scoring below threshold stay pending for admin review with the AI breakdown visible.
:::

***

## ⚠️ Common Rejection Reasons

- Screenshot is blurry or incomplete
- Amount transferred doesn't match the payment amount
- Transfer was made to the wrong account
- Receipt is from a different date or transaction

***

## 🔄 Proof Status When Payment is Reverted

If an admin **reverts** a paid payment (changes it back to Pending or Unpaid), any approved proof attached to that payment is automatically marked as **Rejected** with the reason *"Payment reverted by admin"*.

This prevents the old proof from remaining in an approved state after the payment is undone. The student will need to re-upload proof when they pay again.

:::hint{type="warning"}
Reverting a payment invalidates the previously approved proof. If the student already paid correctly, make sure not to revert unless needed — they will need to re-upload their receipt.
:::

***

## ✏️ Admin: Manual Payment (No Proof)

Admins can mark a payment as paid without requiring proof upload — useful for cash payments or when the transfer is confirmed through other means:

1. Open the payment record
2. Click **Mark as Paid**
3. Add a note if needed (e.g. "Cash received at front desk")

***

## 🛡️ Proof Storage

All uploaded proofs are stored securely and accessible from the payment record at any time.
