BILLING
The invoice argument is never about the invoice.
It is about whose spreadsheet is right.
Your client queries a line. Someone pulls the WMS export, someone else pulls the carrier bill, and two days later you are reconciling numbers by email to defend work you already did correctly. The charge was never the problem. Having two versions of it was.
Can you break down what the 1,768.24 is for? Our numbers do not match yours.
The email that costs a TuesdaySame rows. Same amounts. Different columns.
Your client cannot be looking at different numbers than you, because there are not two documents. There is one set of events, and two rate cards deciding what each side sees.
| Charge group | Cost | Markup | Margin | Billed |
|---|---|---|---|---|
| Receiving, putaway, kitting | 171.86 | 76.74 | 30.9% | 248.60 |
| Pick and pack | 139.20 | 60.56 | 30.3% | 199.76 |
| Storage, 6 days | 24.36 | 10.92 | 31.0% | 35.28 |
| Freight | 1,284.60 | 0.00 | — | 1,284.60 |
| Profit retained 148.22 | 1,620.02 | 148.22 | 30.6% | 1,768.24 |
Internal Notes:
Storage basis pulled from client WMS, 22 Jul. Freight billed at cost per contract.
| Service | Basis | Units | Amount |
|---|---|---|---|
| Receiving, putaway, kitting | pallet, kit | 14, 48 | 248.60 |
| Pick and pack | unit, carton | 212, 96 | 199.76 |
| Storage, 6 days | pallet day | 84 | 35.28 |
| Freight | at cost | 96 | 1,284.60 |
| Invoice total, cycle 22 to 28 Jul 2026 | 1,768.24 | ||
Notes:
Kitting spec updated 24 Jul at your request. Freight billed at carrier cost.
248.60, 199.76, 35.28 and 1,284.60 in both. Your client gains the basis and the units. You keep cost, markup and margin. Neither view can contradict the other because there is only one set of events underneath.
Rate cards decide more than price
Two rate cards run against the same events. The internal one prices what the work cost you. The customer facing one prices what you bill, and it also decides how lines are grouped and which columns render at all.
What it costs
The internal card carries what the warehouse, the carrier and the value add actually charged, so margin is visible on the same row as the work that earned it.
What they pay
The customer card prices the same events for the client. Change a rate and every subsequent event prices against the new one, without anyone reissuing a spreadsheet.
What they see
Grouping and visibility travel with the card. Your client sees services and units. Cost and markup are not hidden from them so much as never sent.
Principal and Tenant, not trust and hope
The reason a client login is safe to hand out is that visibility is a permission, not a habit. Roles Management already governs who sees what inside OMNI, and billing follows the same model.
Principal
You see everything. Your costs, your markup, your margin by charge group, the notes your team leaves each other, and the button that pushes the invoice into QuickBooks.
Tenant
Your client sees their statement, the basis for every charge, the units behind it, and a way to ask about a line. Nothing else renders, on any export, in any format.
Questions land on the line, not in your inbox
When a client does query a charge, Raise Question attaches it to the specific line rather than starting an email chain. The charge, its basis, its units and the conversation about it stay together, so the next person to look does not start from scratch.
Attached to the charge
The question sits on the row it is about. No screenshots, no forwarded threads, no reconstructing which invoice and which week.
Answered from the same record
You are looking at the row they are looking at, with the events behind it one click away. Most queries stop being disputes at that point.
Kept with the history
Notes stay on the line. When the same question comes back next quarter, the answer is already there.
Situations this gets built for
Not testimonials. These are shapes of operation we work in, with names removed.
Rate cards living in spreadsheets
An operator whose pricing lived in a workbook only two people fully understood, where onboarding a new client meant copying a tab and editing it.
The rates were fine. The version control was not.
Reselling warehouse capacity
A partner buying space and labour at one rate and selling it at another, needing the spread visible internally and invisible externally.
Two cards, one set of events.
Multi leg orders, one invoice
Charges accruing at an inbound port, a storage site and an outbound building for the same order, previously assembled by hand at month end.
One order, several facilities, one line item the client understands.
Start with the client who queries the most
Not the easy account. Take the one whose invoices always come back with questions, load their rate card, and price a cycle beside whatever you do now. Compare the two before anything is sent. If it does not hold up, nothing changed and nobody outside your building saw it.