bank feed imported the same payroll file twice: "duplicate batch" error never raised
Fixes a payroll file imported twice by the bank feed with no duplicate batch error: detect the doubled batch by totals, reverse one copy in full, and add a batch-level fingerprint check. Use when one payroll file created two import batches. Not for two separate payroll runs with equal totals.
TL;DR
A doubled payroll import doubles every line, so the fingerprint is totals: cash credited twice, wage expense twice, and a batch total exactly twice the payroll register. Find both import batches for the file, prove they carry the same file name or hash and register total, and reverse one batch in full. Then add a batch fingerprint, file name plus total plus pay date, that blocks a second import of the same file.
bank feed imported the same payroll file twice: "duplicate batch" error never raisedUse this when
- GL payroll amounts for the period are exactly twice the payroll register.
- Two import batches exist with the same file name, pay date, or total.
- The bank paid employees once; only the books doubled.
Not for this skill when
- Two real payroll runs share a total by coincidence, such as a repeated biweekly amount. Check run ids before reversing anything.
- Only some lines doubled. That is a partial duplicate, handled line by line, not with a full batch reversal.
Steps
- List import batches for the pay date with file name, total, line count, and import timestamp. Verify: two batches match on file identity and total
- Tie each batch total to the payroll register for that single run. Verify: each batch alone equals the register, together they double it
- Confirm from the bank that disbursement happened once. Verify: bank debits equal one run, not two
- Reverse the later batch in full as one reversing batch, referencing the original batch id and the duplicate. Verify: GL payroll now ties to the register and cash agrees to the bank
- Add or enable a batch fingerprint check on file name, total, and pay date in the import path, and test by re-offering the same file. Verify: the test import is blocked with a duplicate batch message
Variant phrasings
payroll file imported twice duplicate batch GL
The doubled-batch phrasing.
same payroll import doubled journal entries
Searching by the doubled totals symptom.
Compatibility: Payroll file imports and bank feed batch imports into NetSuite, Sage, QuickBooks, and Dynamics.
Why it happens
File imports dedupe at the level they are told to. If the check is per transaction or missing at batch level, a retry after a timeout, where the first import actually committed, posts the file again as a new batch with new internal ids, and no rule fires because no single transaction claims to be a duplicate. Batch fingerprints close that hole because a payroll file is identical as a whole even when its lines get fresh ids.
Edge cases / pitfalls
- If the doubled batch already fed a filed period, reverse in the next open period with a clear memo instead of reopening silently.
- A reversed batch that was also paid twice at the bank is a different emergency: stop and involve payroll and treasury before bookkeeping fixes.
- Scheduled imports plus manual upload of the same file is the usual human cause. The fingerprint check catches both paths.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_KB2HjpVQgfYchDfMYb6PCw