Five detection passes hunted the same obligation paid twice: same-vendor amount/date collisions, cross-vendor collisions (re-onboarded supplier records), cross-subsidiary collisions, bills carrying more than one payment, and vendor-master duplicate records. The verdict: zero confirmed duplicate payments in $3.40M of vendor billing. Thirteen candidate pairs matched on vendor + amount + date proximity — every one dissolved under the evidence chain: each bill traces to its own purchase order with its own item receipt. What looked like duplicates is a business that orders identical replenishment baskets on rhythm (the currency axis collapses by configuration: this is a single-currency USD instance, verified).
The hunt still produced two things worth money and attention. First, a $33,700 near-miss: bill VB05 (Generation N) briefly carried two $33,700 payments — the original was voided the same day the replacement posted. The control worked; the evidence chain (kept in §03) shows exactly what a real duplicate will look like when one eventually survives. Second, the credit-side trace found a live recovery ledger of $369.88: a supplier credit agreed 54 days ago and never issued, a credit received but never applied to any bill, an unapplied credit tied to the Vol. III anomaly, and a paid vendor prepayment awaiting offset. Small dollars — but each is a process leak, and one of them connects directly to the VB397 investigation.
| Pass | Hunts for | Candidates | Confirmed | Verdict |
|---|---|---|---|---|
| P1 — Same vendor, same amount, ±5 days | Classic re-keyed bill | 13 pairs | 0 | CLEARED BY PO CHAIN |
| P2 — Different vendor records, same amount, ±3 days | Re-onboarded supplier duplicates | 2 pairs | 0 | DIFFERENT GOODS |
| P3 — Same vendor, same amount, different subsidiary, ±10 days | Cross-entity double entry | 0 | 0 | CLEAN |
| P4 — One bill, multiple payments | Same obligation paid twice | 1 (VB05) | 0 | NEAR-MISS — VOIDED |
| P5 — Vendor-master duplicate records | Same supplier onboarded twice | 1 pattern | 0 with bills | HYGIENE FLAG |
Every candidate pair traces to two distinct purchase orders, each with its own item receipt — the goods arrived twice because they were ordered twice, deliberately. The clearest proof: Health & Beauty Supplies shows four $310.00 pairs spread across two years (Sep 2024, Mar 2025, Oct 2025, Apr 2026). Those are two different standing baskets — a body-care basket (PO791 lineage) and a cosmetics basket (PO985 lineage) — that both happen to total $310.00 and re-order on the same ~6-month rhythm. Same-amount collision, entirely different goods.
| Candidate pair | Vendor | Amount | Evidence that cleared it |
|---|---|---|---|
| Bills of Aug 9 + Aug 10, 2026 | Broyhill | $2,780.00 | PO1141 + PO1142 — identical 13-line furniture baskets, separate receipts; sequential store replenishment CONFIRM CADENCE |
| Bills of Jul 9 + Jul 14, 2026 | Broyhill | $2,780.00 | PO1125 + PO1130 — same pattern, 5 days apart, separate receipts |
| Bills of Apr 12 + Apr 12, 2026 | Hestra | $2,600.00 | PO908 + PO911 — same day, but different size/color quantity mixes (40 units each); separate receipts |
| Bills of Jul 3 + Jul 6, 2026 | Core4Solutions | $1,758.00 | PO1195 + PO1196 — distinct POs, separate receipts (PCB materials) |
| 4 × $310.00 pairs, 2024–2026 | Health & Beauty | $310.00 | Two different standing baskets that coincidentally total $310; line detail differs entirely |
| 4 further pairs, $114–$785 | Various | — | All: distinct POs, distinct receipts, line-level differences |
Both payments were created the same day against the same bill; the duplicate was voided rather than deleted, preserving the audit trail. No recovery is due. This is retained in the ledger as the reference specimen: the P4 detector (§08, Q4) exists precisely because next time the void step might not happen — and it is also the second time the off-PO bill family from Vol. III appears at the center of a payment-control event.
Every credit-side instrument in the account, traced end-to-end: vendor return authorizations (returns made), bill credits (credits agreed), vendor prepayments, and refund checks. No rebate program exists in this account (no rebate items, accruals, or credit memos referencing rebates) — stated as a scope boundary, not silently skipped.
| Instrument | Vendor | Amount | Date | Status (NS) | Trace Result |
|---|---|---|---|---|---|
| VRMA21 return auth | Generation N | $149.95 | Jul 3, 2026 | Pending Credit | CREDIT NEVER RECEIVED — 54 days |
| VRMA20 return auth → bill credit | Generation N | $89.97 | Jul 16, 2026 | Credited / credit open | RECEIVED, NEVER APPLIED to any bill |
| Bill credit 4433911592582809 | Generation N | $29.99 | Aug 24, 2026 | Open | UNAPPLIED — and tied to the VB397 case |
| Vendor prepayment 354 | Generation N | $99.97 | Aug 24, 2026 | Paid | CASH OUT — NOT YET OFFSET against a bill |
| VRMA22 return auth | Generation N | $119.96 | Aug 2, 2026 | Pending Return | PIPELINE — goods not yet shipped back |
| VRMA23 return auth | Generation N | $29.99 | Aug 10, 2026 | Pending Approval | PIPELINE — approve or cancel |
| Check 363 (refund in) | — | $29.99 | Aug 24, 2026 | Posted | Same-day, same-amount counterpart of the credit above — see §05 item 3 |
| # | Item | Amount | Action to Recover | Evidence Chain |
|---|---|---|---|---|
| 1 | Credit agreed, never received VRMA21 · Generation N | $149.95 | Demand bill credit from vendor; 54 days outstanding | VRMA21 (id 40426, Jul 3) status Pending Credit → goods returned (memo "DIG - R2D") → no VendCred references it → credit owed |
| 2 | Credit received, never applied VRMA20 credit · Generation N | $89.97 | Apply against next Generation N bill (AP action, 5 minutes) | VRMA20 auth (id 40423) status Credited → VendCred (id 40425, Jul 16) exists, open → applied-to-bills = $0.00 → sits idle while new bills are paid gross |
| 3 | Unapplied credit — VB397-linked Credit ···2809 · Generation N | $29.99 | Resolve within the VB397 investigation; apply or match to refund check 363 | VendCred id 27973 (Aug 24) tranid = 4433911592582809 — the same card-formatted string in VB397's memo (Vol. III) → same-day Check 363 for $29.99 → neither applied to any bill → untangle as one case |
| 4 | Prepayment paid, not offset VPrep 354 · Generation N | $99.97 | Apply against open Generation N bills or claw back | VPrep id 27963 (Aug 24) status Paid → $99.97 cash out → no application lines to any bill → vendor holds the cash |
| 5 | Pipeline: VRMA22 (return not shipped) | ($119.96) | Ship the return or cancel the authorization | Id 40427, Aug 2, status Pending Return — becomes item-1-style leakage if it stalls |
| 6 | Pipeline: VRMA23 (awaiting approval) | ($29.99) | Approve or reject — 16 days in queue | Id 40429, Aug 10, status Pending Approval |
| Recoverable now (items 1–4) | $369.88 | + $149.95 pipeline at risk (items 5–6) · + $2,984.52 VB397 claim already open in Vol. III | ||
Duplicates: five passes over all 1,017 VendBills — (P1) same vendor + |Δamount| < $0.005 + ≤5 days; (P2) different vendors, same amount, ≤3 days, ≥$500; (P3) same vendor + amount, different subsidiary (via mainline transactionline.subsidiary), ≤10 days; (P4) bills with >1 non-void payment or applied total > bill total (payment links via transactionline.createdfrom on VendPymt lines); (P5) vendor-master scan on normalized name/email. Candidates cleared only by evidence: distinct POs with distinct item receipts and line-level differences — never by assumption. Credits: full census of VendAuth, VendCred, VPrep, Check; each traced from authorization → credit issuance → application lines → residual, with NetSuite display statuses decoded (VendAuth: A=Pending Approval, B=Pending Return, F=Pending Credit, G=Credited).
(1) Single currency (USD, verified) — the cross-currency duplicate axis is structurally empty in this account; the P1–P3 queries carry the FX variant in comments for multi-currency instances. (2) No rebate program exists in the account (no rebate items/accruals found) — "rebates earned" is out of scope by absence, stated rather than skipped. (3) Amount-tolerance $0.005 and date windows (5/3/10 days) are the detection envelope; widening them found no additional candidates at 2× windows. (4) The Broyhill PO1141/PO1142 identical-basket pattern cleared on separate receipts but is flagged to confirm the ordering cadence with purchasing — near-identical POs a day apart is also what a re-keyed PO looks like. (5) One SuiteQL artifact handled: payment-application joins fan out across payment lines; per-payment dedup (COUNT DISTINCT payment id, MAX not SUM per doc) prevents false "overpaid" hits — the naive join showed VB01 "paid $341K" until deduped to its single payment.
(i) A bill credit's tranid is a 16-digit card-formatted number — same string as VB397's memo; both belong to the same case file and the number should be redacted from both records. (ii) The voided payment retains its full application trail — good void hygiene worth keeping. (iii) 18 inactive Tax Agency vendor shells (see Rec. 05). (iv) All credit instruments cluster in Jul–Aug 2026, suggesting the returns process is newly in use — early enough to fix its latency before volume grows.
SELECT b1.id, b1.tranid, b2.id, b2.tranid, v.companyname,
TO_CHAR(b1.trandate,'YYYY-MM-DD') AS date1, TO_CHAR(b2.trandate,'YYYY-MM-DD') AS date2,
ROUND(ABS(b1.foreigntotal),2) AS amount, b1.status, b2.status
FROM transaction b1
JOIN transaction b2 ON b2.entity = b1.entity AND b2.id > b1.id
AND ABS(b2.foreigntotal - b1.foreigntotal) < 0.005
AND ABS(b2.trandate - b1.trandate) <= 5
JOIN vendor v ON v.id = b1.entity
WHERE b1.type = 'VendBill' AND b2.type = 'VendBill' AND ABS(b1.foreigntotal) >= 100
ORDER BY ABS(b1.foreigntotal) DESC
-- Clear candidates ONLY via the PO chain: each bill's createdfrom → distinct PO → own ItemRcpt.
-- Multi-currency instances: compare on base-currency totals or join currency and match per-pair.
-- P2: same amount, different vendor records, tight date window (re-onboarded supplier signature) SELECT b1.id, v1.companyname, b2.id, v2.companyname, TO_CHAR(b1.trandate,'YYYY-MM-DD') AS d1, TO_CHAR(b2.trandate,'YYYY-MM-DD') AS d2, ROUND(ABS(b1.foreigntotal),2) AS amount FROM transaction b1 JOIN transaction b2 ON b2.entity <> b1.entity AND b2.id > b1.id AND ABS(b2.foreigntotal - b1.foreigntotal) < 0.005 AND ABS(b2.trandate - b1.trandate) <= 3 JOIN vendor v1 ON v1.id = b1.entity JOIN vendor v2 ON v2.id = b2.entity WHERE b1.type = 'VendBill' AND b2.type = 'VendBill' AND ABS(b1.foreigntotal) >= 500 -- P5: vendor-master audit — names, emails, created dates, bill counts; eyeball near-matches SELECT v.id, v.entityid, v.companyname, v.email, v.isinactive, (SELECT COUNT(*) FROM transaction t WHERE t.entity = v.id AND t.type='VendBill') AS bills FROM vendor v ORDER BY UPPER(COALESCE(v.companyname, v.entityid))
SELECT v.companyname, b1.id, tl1.subsidiary AS sub1, b2.id, tl2.subsidiary AS sub2,
ROUND(ABS(b1.foreigntotal),2) AS amount, ABS(b2.trandate - b1.trandate) AS days_apart
FROM transaction b1
JOIN transactionline tl1 ON tl1.transaction = b1.id AND tl1.mainline='T'
JOIN transaction b2 ON b2.entity = b1.entity AND b2.id > b1.id
AND ABS(b2.foreigntotal - b1.foreigntotal) < 0.005 AND ABS(b2.trandate - b1.trandate) <= 10
JOIN transactionline tl2 ON tl2.transaction = b2.id AND tl2.mainline='T'
AND tl2.subsidiary <> tl1.subsidiary
JOIN vendor v ON v.id = b1.entity
WHERE b1.type='VendBill' AND b2.type='VendBill'
-- transaction.subsidiary is NOT_EXPOSED in this account; the mainline line carries it.
SELECT b.id, b.tranid, v.companyname, ROUND(ABS(b.foreigntotal),2) AS bill_total,
COUNT(DISTINCT p.id) AS payment_count
FROM transaction b
JOIN vendor v ON v.id = b.entity
JOIN transactionline ptl ON ptl.createdfrom = b.id
JOIN transaction p ON p.id = ptl.transaction AND p.type = 'VendPymt' AND p.status <> 'V'
WHERE b.type = 'VendBill'
GROUP BY b.id, b.tranid, v.companyname, b.foreigntotal
HAVING COUNT(DISTINCT p.id) > 1
-- CRITICAL: count DISTINCT payment ids — the line join fans out and a naive SUM of line
-- amounts reports fictitious overpayment. Exclude voided (status 'V') payments, but ALSO run
-- WITH voids included to find near-misses like VB05 (two payments, one voided).
-- Census: every credit-side instrument and its NS status SELECT t.id, t.tranid, t.type, t.status, BUILTIN.DF(t.status) AS status_name, TO_CHAR(t.trandate,'YYYY-MM-DD') AS dt, v.companyname, ROUND(t.foreigntotal,2) AS total FROM transaction t LEFT JOIN vendor v ON v.id = t.entity WHERE t.type IN ('VendAuth','VendCred','VPrep','Check') ORDER BY t.trandate -- Application trace per credit: which bills (if any) it reduces SELECT c.id, c.tranid, ROUND(c.foreigntotal,2) AS credit_total, ROUND(SUM(CASE WHEN app.type='VendBill' THEN ABS(ctl.foreignamount) ELSE 0 END),2) AS applied FROM transaction c LEFT JOIN transactionline ctl ON ctl.transaction = c.id AND ctl.createdfrom IS NOT NULL LEFT JOIN transaction app ON app.id = ctl.createdfrom WHERE c.type = 'VendCred' GROUP BY c.id, c.tranid, c.foreigntotal -- applied = 0 on an open credit → "received, never applied" ledger item. -- VendAuth status letters here: A=Pending Approval, B=Pending Return, F=Pending Credit, G=Credited.
SELECT t.type, t.tranid, v.companyname, ROUND(ABS(t.foreigntotal),2) AS amount,
BUILTIN.DF(t.status) AS status_name,
TRUNC(SYSDATE) - TRUNC(t.trandate) AS age_days
FROM transaction t
LEFT JOIN vendor v ON v.id = t.entity
WHERE (t.type = 'VendAuth' AND t.status IN ('A','B','F')) -- stuck before credit
OR (t.type = 'VendCred' AND t.status = 'Y') -- credit open/unapplied
OR (t.type = 'VPrep' AND t.status = 'B') -- prepayment paid, not offset
ORDER BY age_days DESC
-- Anything over 30 days = AP huddle agenda. Current hits: VRMA21 (54d), VRMA20 credit (41d),
-- credit ···2809 (2d), VPrep 354 (2d), VRMA22 (24d), VRMA23 (16d).