Skip to main content

QuickBooks: Daily Approval Workflow

The Approval Queue is where you review, edit, and post the daily journal entries the system has staged from your DRS data. In Manual Approval mode the defaul...

Written by Ryan VanVuren

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

Approval Queue overview

The Approval Queue — each row is one business day's staged journal entry, with status, doc number, totals, and per-row actions.

Who can use this: Admins only. The Manager, Shift Lead, Buyer, and Cashier roles don't have QuickBooks access.


Where to find it

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

The Dashboard's "Needs your attention" panel surfaces a pending-approvals card with a shortcut. The page header also shows an amber pending count chip when there's work to do — at a glance, you know if the queue needs you.

Pending count chip in the page header

How an entry gets here

Every night, BuyerKiosk reads your DRS 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 (DRS 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 the balance banner below

Actions

Per-status icon buttons (Approve, Edit, Reject, Void, Re-sync)

Use the Status filter above the grid to narrow the list. By default you see only pending_approval so the queue is focused on actionable work.


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

Row action buttons — Approve / Edit / Reject

The three pending-row actions sit as compact icon buttons. Hover any one to see its color (green for Approve, red for Reject). The check icon already hints green even at rest.

  1. Click the ✓ Approve button on a pending_approval row.

  2. The Approve & Post 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 QBO Journal Entry ID. The doc number in the Sync Log now links directly to the JE in QuickBooks Online.

Approve & Post modal

The Approve & Post modal: totals summary, balance preview banner (when variance exists), and the post button.

Tip: Chronological ordering is enforced. You cannot approve March 5 if March 3 is still pending_approval. Approve oldest first. See Stuck on chronological order below for the escape valve.

If QBO returns an error (period closed, account no longer exists, rate limit) the entry stays pending_approval and a clear toast appears with the actual error — 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 your Cash Over/Short account (the account configured for cashOverShort in Account Mapping). 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 silently plugs 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, manual-review hard-cap $100.00. Adjust per store in QuickBooks > Settings > Approval thresholds — see Connect & Configure for the details.

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 page and check that critical fields have the right accounts and (if applicable) offset accounts configured.


Editing before approval

Edit modal

The Edit modal: balance indicator at the top, journal lines table in the middle, adjustment lines section below.

Use ✎ Edit to change values before posting — useful for one-off corrections (e.g. DRS 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.

The Approve modal shows a diff preview for edited entries — old value → new value side-by-side, so the approver can see exactly what was changed and why.


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 on the row. The Reject modal opens.

  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 Sync Log's Re-sync action) to stage a fresh entry for the same date. The audit log shows the supersession chain.


Stuck on chronological order

PRD F5 Rule 1: entries must be approved in chronological order. If March 3 is pending and you try to approve March 5, the system blocks with:

Cannot approve out of chronological order. Earlier pending entries must be approved first.

Why: posting out of order can break bank reconciliation in QBO (retroactive entries into closed periods), inventory running totals, and other downstream accounting workflows. Forcing chronological order mirrors how a manual bookkeeper would process the same pile.

The escape valve — reject + re-stage:

If March 3 has a real problem you can't fix in 5 minutes, you can keep moving:

  1. Reject March 3 with a clear reason ("data needs investigation, will re-stage later").

  2. March 4, 5, 6 are now approvable (no earlier pending entry).

  3. Fix the underlying issue (mis-mapped account, corrupt source file, whatever).

  4. Once fixed, re-stage March 3 via the Sync Log's Re-sync this date action — server creates a fresh staged entry. Approve it as soon as it appears.

So the rule isn't "approve in order or be stuck forever" — it's "either approve, reject, or fix the earliest pending entry before moving on."


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. The bulk action strip appears above the toolbar showing the selection count.

  2. Click Approve selected in the strip.

  3. The Bulk Approve modal opens — confirm.

  4. Entries are processed sequentially in chronological order. If one fails, processing stops and you're told which succeeded.

Tip: Bulk approve is most useful after a vacation week. The chronological-order rule still applies — you can only select consecutive pending entries.


Audit trail

Everything you do here is logged to the Audit Log:

  • sync_staged — system created the staged entry

  • approved → sync_posted — you approved, it posted to QBO

  • sync_failed — QBO rejected the post

  • edited — you modified the entry pre-approval (includes the edit reason + diff)

  • rejected — you rejected the entry (includes the reason)

  • voided — a posted entry was voided (includes the reason)

The audit log is append-only and includes user IDs, IP addresses, timestamps, and the full pre/post payload for every change.


What's next

  • Sync Log — see every posted entry (auto + manual) in one history with deep-links to the JE in QBO.

  • Audit Log — the full event history for compliance and debugging.

  • Reconciliation — periodic check that posted totals match DRS source data.

Did this answer your question?