From Scale to Invoice: Weighing Every Case Straight Into Odoo

The weakest link in catch weight is the clipboard
Once you commit to billing actual weight, every invoice is downstream of a number somebody captured at a scale. In most plants that capture is a clipboard at the pack-out table and a data-entry session at the end of the shift. Two transcriptions, two chances to drop a case, swap a digit, or bill the wrong order — and by the time anyone notices, the truck is gone.
The fix isn't more careful handwriting. It's removing the handwriting: the scale should talk to the ERP.
What the WeightSheet terminal does
The WeightSheet weigh station is a small terminal application that runs on any Windows or Linux box at the pack-out table, between the scale and your Odoo instance. The loop per case is seconds: case on the platter, one keypress, next case.
- It speaks scale. Mettler-Toledo indicators via the SICS protocol and CAS indicators (ED/ER/MW/PD families) over plain serial — the bench and floor scales already common at pack-out tables. Keyed entry works identically for stations without hardware.
- It only accepts stable readings. Both protocols distinguish a settled weight from a platter still in motion. In-motion, over-range, and under-range readings are refused, not recorded. A weight in the system means the scale had actually settled.
- It checks tolerance at the scale. The product's min/max piece weight rides along, so a 13.5 lb case of a product that maxes at 10 gets flagged while the case is still in someone's hands.
- It converts units honestly. Scale reads kilos, product priced in pounds? The conversion happens once, explicitly, at capture — not in a spreadsheet later.
Offline-first, because plant WiFi is plant WiFi
Every reading is persisted locally the instant it's taken — the terminal keeps its own store and stamps each case as it syncs. If the network drops mid-shift, weighing continues; the queue drains when connectivity returns. A power cycle resumes exactly where the line left off. The rule is simple: the scale reading is never the thing you lose.
Landing in Odoo, in the right place
Captured weights post over Odoo's standard JSON-RPC API into the WeightSheet — Catch Weight addon: the terminal resolves the sales order, finds the pending delivery, and writes one line per weighed case — gross, tare, net — exactly where the addon's validation and true-up logic expects them. From there the standard flow takes over: validation enforces the tolerance band, the sale line trues-up to actual pounds, and the invoice bills to the cent. No export files, no re-keying, no end-of-shift data entry session.
Money math worth trusting
A detail we're opinionated about: the terminal does its arithmetic in integer cents with banker's rounding, not floating-point dollars. Fractional pounds times fractional prices, thousands of times a month, is precisely the workload where float rounding quietly drifts — we've seen legacy POS systems mis-total large orders for exactly this reason. Billing by weight only builds trust if the pennies always add up.
Where this is going
The terminal's scale layer is a driver interface, so additional indicator protocols slot in as customers need them, and GS1-128 case labels — scan a case anywhere and its net weight rides in the barcode — are the natural next step. If you're running Odoo and weighing cases by hand today, the addon is on the Odoo Apps store, the full solution is at WeightSheet — Catch Weight for Odoo, and we're happy to talk through your pack-out setup.


