A janitorial and sanitation supply distributor running six operating entities under one NetSuite instance, with credit memos applied to the wrong entity 8% of the time. Every misapplied memo meant a reversal, an A/R hour, and a customer call. We rebuilt the memo-matching path: LlamaParse on the intake, Google Document AI on scanned memos, first-pass match against the originating invoice and entity before post.
| CM # | Customer | Invoice | Amount | Reason | Status |
|---|---|---|---|---|---|
| CM-91204 | Riverbend Facility Svcs | INV-48221 | $1,245.00 | Freight | posted |
| CM-91205 | Northgate Sanitation | INV-48097 | $382.40 | Pricing | posted |
| CM-91206 | Cedar Ridge Hospitality | INV-47863 | $2,118.75 | Shortage | awaiting RMA |
| CM-91207 | Atlas Janitorial Co. | INV-48304 | $642.18 | Damage | posted |
| CM-91208 | Brookline Property Mgmt | INV-48142 | $1,890.00 | Return | posted |
| CM-91209 |
| Summit Cleaning Group |
| not found |
| $415.60 |
| Pricing |
| no match, A/R review |
| CM-91210 | Harborline Hospitality | INV-48256 | $978.50 | Promo | posted |
| CM-91211 | Greenfield Schools Co-op | INV-48188 | $3,402.10 | Return | awaiting RMA |
| CM-91212 | Lakeside Care Network | INV-48319 | $214.95 | Damage | posted |
At a glance
One A/R team, six operating entities, one NetSuite instance. The memo-matching logic was the part that had to survive audit.
The engagement
The stack
ISO 27001 · ISO 9001 · DPA and NDA signed at kickoff.
Before, the A/R desk
The A/R team processed memos every day. They processed them against the customer, not the invoice, and the entity came from whichever one the customer last bought from. These were the patterns we found in discovery.
Customers bought across multiple entities. A memo for a disputed freight charge could reference an invoice from entity A, an account balance on entity B, and a customer that dealt with both. The A/R team applied it to whichever entity the customer most recently bought from. Every time that was the wrong one, the memo reversed out and posted again.
Pre-build baseline: approximately 8% of memos required a reversal and re-post to the correct entity.
Every Friday the A/R manager pulled the misapplied memo list, wrote reversals, and applied the original memos to the correct entity. That was four hours of manager time per week. The close timeline showed it as a recurring item on the manager's calendar, not as an exception.
Pre-build baseline: 4 hours per week of A/R manager time spent on reversals.
The memo usually carried an invoice reference somewhere (header, customer note, scanned attachment), but which field held it varied by customer. A/R staff opened the memo, searched NetSuite for the invoice number, and applied the memo against it. A lot of clicks per memo and an error rate on the invoice reference field of around 5%.
Pre-build baseline: 4 to 7 minutes per memo for the invoice match step alone.
What we built
The pipeline follows the same five stages we run on every distribution engagement. The invoice-and-entity match logic is the part we tuned specifically against this client's six-entity NetSuite setup.
A/R mailbox polled on a 5-minute cadence. Customer portals polled on a 15-minute cadence. Warehouse scanners drop returns paperwork to SFTP. Every inbound assigned a single memo ID before matching.
Document type tagged on ingest. Credit memos, customer complaints (which become memos), and originating invoices routed separately. Classification confidence below 0.90 holds the memo for a human tag.
Customer account, originating invoice number (searched across header, customer note, and any scanned attachment), memo amount, reason code. The invoice reference carries the entity implicitly.
Invoice number resolved against NetSuite, which returns the issuing entity. Memo amount checked against the invoice balance. Below 0.95 confidence on invoice match, or any entity disagreement, holds the memo for A/R review.
Clean memos posted to NetSuite via SuiteTalk, applied against the originating invoice on the correct entity's ledger. Source document attached. Exceptions routed to a named A/R queue with the flag in plain English.
After, the numbers the desk signs off
Same A/R team, same six entities, same customers. The pipeline resolved the originating invoice before the memo posted, and the weekly reversal cycle went away.
The A/R team still owns the exception queue. They still sign off any memo with a disagreement between the memo, the invoice, and the entity. The difference is that the Friday reversal session, which used to take the A/R manager out of close for four hours, no longer sits on the calendar. The A/R team runs the pipeline today, with Hexaa on call for a fixed retention period.
Related cases
Each links to a named client, a named document, and the system the clean data lands in. We publish only what the client signed off to publish.
Contract pricing checked against the customer's schedule before the order posts. 1,100 contract customers, credit-memo queue down 82%.
→Construction · 2026Shared-service AP · Three-way match against the ERPPO, receipt, and invoice reconciled inside the AP queue. Clean matches posted to the ledger; exceptions routed to a named A/P analyst.
→Distribution · 2024Electrical wholesaler · Order confirmations inside the business dayOrder confirmations sent back to customers inside business hours across 14 branches, built on Epicor Eclipse.
→Free 30-minute call
You'll leave with a clear next step.
The memo references invoice INV-48221. NetSuite says that invoice sits on entity C, not entity A (where the customer most recently bought). The pipeline applies the memo to entity C, against the originating invoice, and the A/R team never sees a reversal. Disagreements between entities flag before post, not after.