‹ All insights

Why Your Reports and Your ERP Disagree (and How to Make Them Stop)

July 8, 2026 · Nick Calderon

It happens in almost every produce company I walk into. The Monday meeting starts, finance puts up a number, operations puts up a different number, and the next twenty minutes go to arguing about whose spreadsheet is right instead of what to do about the business.

Nobody in that room is careless. The numbers disagree because of how they got there.

Where the disagreement actually comes from

Most reporting in this industry starts with an export. Someone pulls data out of the ERP into Excel, cleans it up, adds a few lookups, and builds the report leadership sees. That process has three quiet failure points.

First, timing. Finance exported on Friday afternoon. Operations exported Monday morning, after the weekend’s shipments posted. Both reports are correct for the moment they were pulled, and they will never match.

Second, definitions. One report counts a lot as shipped when it leaves the dock. Another counts it when it invoices. “Shipped” is now two different numbers with the same name, and nobody wrote either definition down.

Third, drift. Every export gets a little manual repair: a renamed customer here, a corrected commodity code there. Those fixes live only in that one spreadsheet. The next export starts the drift all over again, slightly differently.

None of this is an ERP defect. Legacy produce ERP systems are generally fine at being the system of record. The trouble starts the moment data leaves them through a dozen side doors.

The fix is one door, governed

The way out is to give the data one controlled exit instead of a dozen exports. Pull it from the ERP into a governed data layer, which is a separate database that holds a clean copy of the authoritative records and refreshes itself automatically.

Governed is doing real work in that sentence, and it means two plain things:

  • Every record keeps one permanent ID. A grower, item, customer, or lot means exactly the same thing in every report that touches it. This is what an immutable ID is: a name for a record that never changes, even if the label on it does.
  • Data flows one direction. The ERP writes, the data layer serves. Nobody can quietly edit a number downstream and change the story, because downstream is read-only.

Every report, dashboard, and internal tool then draws from that one layer. Finance and operations can still ask different questions. They just can no longer get different answers to the same question.

What changes in the room

When this is in place, the Monday meeting changes shape. The number on the screen is the number, timing and definitions included, and the conversation moves to what the number means. Reconciliation work shrinks. And the analysts who spent their week rebuilding exports get that week back.

If your team recognizes the Monday argument, the fix is less exotic than it sounds. It is plumbing, done once, with discipline. That is exactly the problem my Data-as-a-Service engagements exist to solve, and it is usually a shorter road than anyone in the room expects.

Let's talk shop

If my name came up in a conversation, this is what they meant. Reach out and let’s talk shop.