> ## Documentation Index
> Fetch the complete documentation index at: https://help.pragmachartered.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Review and approve an invoice

> Filter the queue, compare extracted fields with the original, save corrections, then make a decision.

![Review queue showing filters and an invoice row](https://help.pragmachartered.com/images/invoices/review-queue.png)

An assigned **Preparer** can correct and save a draft. An **Owner**, or **Manager** assigned to this client, can also approve, reject and reopen it. Managers and Preparers see only the clients they are assigned to; a **Connector admin** has no review queue and sees **Your role does not include invoices or the review queue.** A draft must have finished extraction before its invoice fields are available.

## Work through the queue

**Review queue** opens on **Open** items: those that **Need review**, are **Approved** or **Need attention**. The count beside the title shows how many rows are loaded out of the total, for example `50 of 120 items`; select **Load more** at the bottom of the table to load the next 50.

| Control | What it does |
| - | - |
| **Search party, invoice no. or client** | Filters the rows already loaded by party name, invoice number or client name. Press `/` anywhere on the page to jump into it. If you cannot find an invoice, select **Load more** first. |
| **Client** | **All clients**, or one client. Each client shows its count of matching items in brackets. |
| **Status** | **Open** (default), **Needs review**, **Approved**, **Needs attention** or **Rejected**. |
| **Exception** | **Any exception**, or one problem type with its count, for example **No Tally profile**, **Possibly already on file**, **Does not add up** or **Low confidence**. Only exceptions that currently occur are offered. |
| **Sort** | **Oldest invoice** (default), **Oldest received** or **Largest amount**. |

Each row shows **Date**, **Party** (the supplier on a purchase, the customer on a sale, with the client beneath), **Invoice no.**, **Taxable**, **Tax**, **Total**, **Exceptions** (up to two, then `+N`; **Clean** if none), **Conf.** (mean extraction confidence), **Status**, **Agent** and **Age**. Narrow windows hide some columns.

To work from the keyboard, select the table (or press Tab until it is focused), then use the Up and Down arrow keys to move between rows and **Enter** to open the selected row.

On an invoice, press `?` to see the shortcuts: **J** opens the next item and **K** the previous one in the open queue (in its default order, not your current filters); **A** approves and **R** starts a rejection (only if you can decide); **Esc** returns to the queue. Shortcuts are ignored while you type in a field.

## Review one invoice

**1. Open the invoice**

Select the row and compare the source document on the left with the proposed voucher on the right. For WhatsApp intake, the media may still be arriving (**Awaiting media**) or being read (**Extracting**); if the page says there is no proposal yet, wait for extraction rather than trying to approve a blank draft.

**2. Check direction before corrections**

A **Purchase** invoice is a supplier bill received by the client; a **Sales** invoice is one the client issued to a customer. While an invoice is **Needs review**, use the other-direction button beside the voucher heading if this is wrong and confirm **Re-read as purchase** or **Re-read as sales**. The document is read again from the other side and its voucher rebuilt. Corrections you already saved are kept; unsaved changes on screen are discarded, and ledgers chosen for this invoice are cleared. Earlier revisions stay in the audit trail. You cannot switch an already approved direction.

**3. Correct the extracted invoice fields**

Check each value against the original. Edit the inline box where the proposed value differs; a blank box clears a field, while an amount must be numeric. For amounts, enter the value shown on the invoice rather than adding your own tax calculation. The grid has these fields:

| Field | What to enter or check |
| - | - |
| **Supplier**, **Supplier GSTIN** (Purchase) | The issuer of the supplier bill and its printed GSTIN, if present. |
| **Customer**, **Customer GSTIN** (Sales) | The buyer on the client's issued invoice and its GSTIN, if present. Do not put the client's own identity in the customer box. |
| **PAN**, **Invoice no.**, **Invoice date** | Copy the relevant document identifier and date; the stored date is shown in `YYYY-MM-DD` format. |
| **Taxable value**, **CGST**, **SGST**, **IGST**, **Total** | Compare each printed amount separately, including the tax split and invoice total. Enter a number or clear a value not present on the document. |
| **Original invoice no.**, **Original invoice date** (credit or debit note only) | The invoice the note adjusts; the number is at most 50 characters. Zoho Books uses it to apply a credit or file a customer debit note; it is never sent to Tally. |

Hover or focus a field to see its source highlight where available. A missing highlight does not itself validate the value: use the actual document.

**4. Save and resolve posting blockers**

Select **Save revision** whenever you edit a field; it creates a new revision, and **Approve** stays disabled while edits are unsaved. Read **Not postable to Tally yet** (or **Not postable to Zoho Books yet** for a Zoho Books client) for exact blockers. If a party ledger falls back to a group ledger, a colleague with client-management permission can enter the **Party ledger name** as it exists in the client's Tally company and select **Remember**; reopen and revise this invoice to rebuild its voucher. Check the client's **Setup → Tally map** for a missing or incomplete Tally profile (see [Manage clients](https://help.pragmachartered.com/clients/manage-clients.md)); for a Zoho Books client, also check **Setup → Zoho Books** (see [Post approved invoices to Zoho Books](https://help.pragmachartered.com/invoices/zoho-books.md)). Approval also waits for a clean document scan; if a scan failed, use **Scan again** on the original document and wait for the result. Do not assume correcting a field alone makes a voucher executable.

**5. Make a decision**

With decision permission, select **Approve** only after checking the saved proposal and blockers. Approval changes the state to **Approved** (the label is the same whatever the client's books) and queues the handoff to the client's books destination; it is *not* confirmation that the books received the voucher. For a Tally client it queues a connector command (see [Tally handoff](https://help.pragmachartered.com/invoices/tally-handoff.md)); for a Zoho Books client, Pragma posts the matching Zoho Books document, such as a bill, invoice, credit note or payment (see [Post approved invoices to Zoho Books](https://help.pragmachartered.com/invoices/zoho-books.md)). Or select **Reject**, type the reason in **Why is this rejected? Recorded on the audit trail.** (nonblank, at most **1,000 characters**), then select **Reject** again. You can **Reopen** a rejected or approved item while the handoff has not been taken. Once the connector claims a Tally command, or once Pragma is sending to Zoho Books, the outcome is unknown or the document is there, rejection and reopening are locked because the books may already contain the voucher.

![Review page with the document, extracted fields and decision controls highlighted](https://help.pragmachartered.com/images/invoices/review-detail.png)

## See one client's invoice history

![Client page Books section with the Invoices tab and its history table](https://help.pragmachartered.com/images/invoices/client-invoices.png)

Open **Clients → \[client] → Books → Invoices**. Unlike the queue, this tab lists every uploaded, WhatsApp or register-imported invoice for the client in any state, including **Rejected** and already handed-off ones. Bank lines and hand-keyed vouchers are not listed here; they are on the **Bank** and **Vouchers** tabs. The columns are **Date**, **Party**, **Invoice no.**, **Total**, **Exceptions** (the first exception, then `+N`), **Status** and **Age**. Select a row to open its review page; select **Load more** for older invoices. With no invoices yet, use **Upload invoices** to go to [Invoice intake](https://help.pragmachartered.com/invoices/upload.md).

## When an action is refused

* **Someone else changed this item while you were editing it…** Another reviewer saved first. Reload, check their revision, then save again.
* **This voucher has already gone to the books…** The handoff is claimed or posted; the review can no longer be changed. Check the voucher in Tally or Zoho Books.
* **A handoff to the books was already recorded for this revision. Reopen the item and revise it to create a new one.**
* **This client has no Tally company profile yet, so a voucher cannot be proposed.** Set the company name, voucher type and ledger map on **Setup → Tally map**.
* **The malware scan…** The document is still scanning, failed its scan (use **Scan again**) or was flagged (ask the client to resend it).
* **This client's books are closed for that date…** The voucher's date falls in a closed period; see [Close the books](https://help.pragmachartered.com/books/close-books.md).

> [card] Still stuck?
>
> [Open a case](https://app.pragmachartered.com/support) from **Help & support** in Pragma, or [book a walkthrough](https://help.pragmachartered.com/support/book-a-walkthrough.md) and the team will show you around on a call. Can't sign in? [Contact support](https://app.pragmachartered.com/contact-support).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.