The Approval Queue is where you review, edit, and post the daily journal entries the system has staged from your POS data. In Manual Approval mode (the default and recommended sync mode), no journal entry reaches QuickBooks until you act on it here.

> **Permissions:** Admin-only. You need the `quickbooks_config` permission for the store.

***

## Where to find it

From the admin sidebar: **QuickBooks** > **Approval Queue**. Direct URL: `/admin/{typeNum}/quickbooks/approval-queue`.

The Dashboard also surfaces a "Pending Approvals" card with a `View Queue` shortcut.

***

## How an entry gets here

Every night, BuyerKiosk reads your POS daily close data and builds a balanced journal entry (debits = credits). In Manual Approval mode the entry is **staged** — written to a queue table with a `pending_approval` status and the full payload preserved — instead of being posted to QBO directly.

You'll see one row per business date.

***

## Reading the queue

Each row shows:

| Column | Meaning |
| ------ | ------- |
| Date | The business date this entry covers (POS close date) |
| Status | `pending_approval`, `approved`, `posted`, `rejected`, or `voided` |
| Doc Number | The DocNumber that will be sent to QBO (format `BK-{typeNum}-{yyyymmdd}`) |
| Total Debits / Credits | If they don't match, the difference is the variance — see below |
| Actions | Per-status buttons (Approve, Edit, Reject, Void, Re-sync) |

Use the status filter dropdown above the grid to narrow the list. By default you see all statuses.

***

## The five statuses

| Status | What it means | What you can do |
| ------ | ------------- | --------------- |
| `pending_approval` | Staged and waiting for review | Approve, Edit, Reject |
| `approved` | Manually marked approved (rare; usually skipped via direct Approve&Post) | — |
| `posted` | Successfully posted to QBO; you have a real journal entry | Void |
| `rejected` | You said no — the original is preserved as an audit record | Re-sync (creates a fresh staged entry) |
| `voided` | Was posted, then voided in QBO | — |

***

## Approving an entry

1. Click the green check `Approve` button on a `pending_approval` row.
2. The Approve confirmation modal opens. Review the journal lines, totals, and the QBO target accounts.
3. Review the **balance preview banner** — see "Understanding the balance banner" below.
4. Click `Approve & Post`. The system calls QBO and posts the journal entry.
5. On success the row flips to `posted` and gets a `Journal Entry ID` (the QBO JE id you can search for in QuickBooks).

> **Tip:** Chronological ordering is enforced. You cannot approve March 5 if March 3 is still `pending_approval`. Approve oldest first.

If QBO returns an error (period closed, account no longer exists, rate limit) the entry stays `pending_approval` and a clear error message is shown — fix the cause and try again.

***

## Understanding the balance banner

When the staged journal entry's debits don't equal its credits, the system needs to add a balancing line ("plug") to make the entry valid in QuickBooks. The Approve modal makes this explicit so you always know what will post.

The plug goes to the `Cash Over/Short` account by default (the account configured for `cashOverShort` in your Account Mapping page). The amount is the difference between debits and credits.

**Three banner colors based on the size of the imbalance:**

| Banner | Imbalance range | What it means | Approve & Post button |
| ------ | --------------- | ------------- | --------------------- |
| (none) | ≤ $0.01 | Entry is balanced as-is. No plug needed. | Enabled |
| Blue (info) | ≤ auto-cap | Small imbalance — system will silently plug to Cash Over/Short. Normal drawer variance lives here. | Enabled |
| Yellow (warning) | between caps | Larger imbalance — review carefully. Tick the confirmation checkbox to proceed. | Enabled only after checkbox is ticked |
| Red (block) | > hard-cap | Very large imbalance. Almost always a mapping configuration error. | Disabled — fix mappings first |

**Default thresholds:** auto-cap `$10.00`, hard-cap `$100.00`. Adjust per store in **QuickBooks > Settings > Sync Configuration > Cash Over/Short Caps**.

**Why the plug matters:** prior to this transparency feature, the system silently injected the plug at post time without showing it in the queue. Configuration errors (e.g. an unmapped offset account causing one side of every transaction to be missing) hid behind the plug, posting as inflated Cash Over/Short on real books. Now you see the imbalance before you approve, and large imbalances block until you've checked the underlying mappings.

> **Tip:** If you see a yellow or red banner consistently across multiple days, the issue is almost certainly an **account mapping problem**, not real drawer variance. Open the [Account Mapping](/support/articles/quickbooks-account-mapping) page and check that critical fields have the right accounts and (if applicable) offset accounts configured.

***

## Editing before approval

Use `Edit` to change values before posting — useful for one-off corrections (e.g. POS reported wrong cash count) without going back to fix source data.

- Edit the line amounts in the modal.
- If any field changes by more than $1.00 the system requires an `Edit Reason` (10+ characters) for the audit trail.
- You cannot zero out `taxCollected` — the system blocks this to prevent accidental tax reporting bugs.
- A maximum of 20 adjustment lines per entry.
- After saving, the entry is still `pending_approval` — click `Approve & Post` to send the *edited* version to QBO.

***

## Rejecting an entry

Use `Reject` when the entry is wrong and you don't want it posted at all (e.g. the close report itself is bogus and you'll re-import).

1. Click `Reject` (red thumbs-down) on the row.
2. Enter a rejection reason (10+ characters required).
3. Click confirm. The row's status becomes `rejected`.

Rejected rows are **preserved as audit records** — they're never deleted. If you reject by mistake or get corrected source data, click `Re-sync` on the rejected row (or use the Manual Sync API) to stage a fresh entry for the same date. The audit log shows the supersession chain.

***

## Voiding a posted entry

Use `Void` when an entry was already posted to QBO and needs to be reversed.

1. Click `Void` on a `posted` row.
2. Enter a void reason (10+ characters required).
3. Confirm. The system calls QBO's void endpoint and updates the local row to `voided`.

Voiding in QBO does not delete the journal entry — it stamps it Void in QuickBooks (preserving the audit trail there too) so reports correctly reflect the reversal.

***

## Bulk Approve

To approve multiple consecutive days in one click:

1. Tick the checkbox on each pending row you want to approve.
2. The bulk action bar at the top of the page shows your selected count and `Bulk Approve` becomes available.
3. Click `Bulk Approve`. The confirmation modal lists the dates.
4. Click `Confirm`. The system processes them sequentially in chronological order.

> **Warning:** Bulk Approve **stops on the first failure**. If day 3 fails, days 1–2 are posted and visible as `posted`; day 3 stays `pending_approval` with the error message; days 4+ are not attempted. Re-run after fixing the cause.

***

## The Sync Log

The Sync Log (`QuickBooks` > `Sync Log` in the sidebar) shows every sync attempt, successful or failed, including the request payload, response payload, and any error message. Use it to:

- See *why* a posting failed (look at `errorMessage`).
- Verify what was actually sent to QBO when reconciling later.
- Track retry history (each retry increments `retryCount`).

The Sync Log is read-only — you can't edit history. It's an audit-grade record of every API call.

***

## Common gotchas

- **"Cannot approve out of chronological order"** → look at the date filter, find the earlier `pending_approval` row, handle it first.
- **"Mapping incomplete"** → critical fields (cashTendered, totalSales, taxCollected, etc.) aren't mapped to QBO accounts. Visit the Account Mapping page first.
- **"Period is closed"** → QBO has a closed accounting period that includes this date. Re-open it in QBO, or re-stage the entry for a later date.
- **Sandbox banner missing when you expected sandbox** → stop, check the Settings page environment indicator, do not approve until you confirm.

***

## What's next

- [Reconciliation & audit](/support/articles/quickbooks-reconciliation-and-audit) — verify QBO matches your POS totals after posting.
- [Account mapping](/support/articles/quickbooks-account-mapping) — fix the "mapping incomplete" block.
- [Connect & configure](/support/articles/quickbooks-connect-and-configure) — change sync mode, memo template, or environment.
