Industries · 6 min read
Manufacturing ERP systems and the gap between the ledger and the floor
The WIP module knows what somebody typed at shift end. A camera counting units off the fixture as they happen posts the record by webhook, minutes behind.
Summary
This post looks at the inventory and work-in-progress modules of a manufacturing ERP, fed by handwritten logs and shift-end entries, and shows a camera counting completed units and consumed components per station as they happen, with the record arriving by webhook. It concludes that the ERP should read from a queue the camera posts to rather than talk to the camera, and that a count nobody checks is a typed number with extra steps. It is for plant IT, operations and finance teams.
Andreas Ohrvall · CTO · Sep 29, 2026

Packaging line, cartons passing a scanner on a conveyor, generated scene with detections from our model
At 4 pm the ERP's work-in-progress screen says station 4 has completed ninety housings against the day's order. The carbonless log book on the station says seventy, in the assembler's handwriting, and the twenty between them are the units the morning shift finished and forgot to book before the handover. The difference will be entered at shift end by the line lead, from memory, and the inventory module will then show a component shortage that the stockroom will spend Tuesday morning proving does not exist.
None of this is a fault in the ERP. The ERP records what somebody typed, and the floor moves faster than typing.
The ledger records what someone typed and the floor moves faster
Inventory and WIP are the two modules that live closest to the floor and furthest from the truth. Both are fed by events: a unit completed, a component consumed, a pallet moved. Both receive those events as a person's account of them, at the end of a shift, from a log or from memory. The latency is a shift. The errors are whatever a tired person got wrong. And the two together mean the ledger and the floor agree twice a day, at the two handovers, and disagree for the hours in between.
The manufacturing plants we work with already have the cameras that could close that gap. They were put over the stations for quality, and the count is a by-product nobody has asked them for.
A camera counts completed units off the fixture as they happen
The camera over station 4 sees a housing land on the fixture and sees it lift off toward the next station. A box on the housing in the fixture region, appearing and then disappearing, is one completed unit, with a timestamp. Ninety of those between 6 am and 4 pm is the count the WIP module wanted, and it exists at 4 pm rather than at the handover.
The model behind it is the presence check the station already runs for quality: a box on the housing, boxes on the parts that must be present. The completion count is what falls out of tracking the housing's box across frames, and it costs nothing extra to keep.
Consumed components are a count of what left the bin
The inventory side is the same idea pointed at the parts bins. A camera over the bench at station 4 sees the bin of fasteners and the bin of gaskets, and a hand taking a gasket from the bin is a consumption event for that part number. The count is coarser than a unit count, because hands hide things. The honest version is a count per unit completed, cross-checked against the bill of materials: one housing off the fixture means one gasket and four screws. The camera's job is to confirm the gasket was fitted rather than to count every screw.
On the lines we run this on, the consumption record is written against the completed unit, and the bin-level count is a reconciliation the stockroom runs at the end of the week rather than a live feed.
An aside from the bench: the carbonless log book has a top copy for the line lead and a yellow copy for the stockroom, and the two copies have been disagreeing with each other for as long as the book has existed.
The record arrives by webhook with a frame behind it
The ERP does not want a picture and it does not want a stream. It wants a record: station, unit serial, timestamp, event type, and for a consumption event the part number and the quantity. The layer between the camera and the ERP turns a detection into that record and posts it. The alert is a rule written as a sentence, "a housing completed on station 4", with a severity and a cooldown, approved before it goes live, and the delivery target is a webhook endpoint rather than a person. The monitoring guide covers the rule and where it lands.
My own view, from the architecture side, is that the ERP should never talk to the camera. The camera posts to a queue, the record carries the unit serial so a duplicate post is harmless, and the ERP reads from the queue on its own schedule. A direct integration ties the plant's ledger to the uptime of a box beside a recorder, and nobody in finance will thank you for that.
The frame behind each record is kept with it. When the stockroom disputes a consumption on Tuesday, the answer is a picture of the gasket going in at 10:14.
The gap between floor and ledger closes from a shift to minutes
With records arriving as events, the WIP screen at 4 pm shows what station 4 has done as of a few minutes ago rather than as of the last handover. The inventory module's component shortage on Tuesday does not appear, because the gaskets were booked against the housings as they were fitted. The line lead's shift-end entry becomes a check on the camera's count rather than the source of the count.
The number that changes is not the accuracy of any one entry. It is the age of the ledger. A ledger that is a shift behind supports decisions made once a shift. A ledger that is minutes behind supports the decision the scheduler wants to make at 2 pm about whether to release the next order to station 4.
A count nobody checks is a typed number with extra steps
LexData takes the station model through its whole life. You type what to look for, Lexi puts a box on every frame, and a person checks each label before anything trains on it. The model then watches the station camera the plant already has, on a runner beside the recorder, so the frames stay on the floor and what leaves is the record. Frames it is unsure of come back to a person, the corrections retrain it, and the new version replaces the old one with no downtime.
The 99%+ accuracy maintained in production across our manufacturing work is held by that review loop, and a count from a model nobody checks is a typed number with a camera in front of it.
The fixture on station 4 gets repainted in November. The housing's box is doubted for a shift, the frames come back, a person confirms them, and the count on the WIP screen never learns that anything happened.
See it on your own footage.
Start with your footageMore in Industries

Industries · 7 min read
Aerial fire detection from a drone patrol, smoke before the flame reaches the line
On a right-of-way patrol, smoke is a few dozen grey pixels that look like haze. Two boxed classes, an alert with a cooldown, and the bad-weather days kept.
Rob Hickey · Sep 29, 2026

Industries · 6 min read
AI in robotics after the robot ships, what the warehouse cameras keep learning
The forward camera boxed pallets and people well at the pilot site. Then the racking moved, and the edge cases the planner never saw came back for review.
Andreas Ohrvall · Sep 29, 2026

Industries · 6 min read
Automated sorting with computer vision, from the camera over the conveyor to the diverter
A box on every apple, a grade from the box, and an air jet that acts on it before the belt moves on. The new cultivar is when the model needs the graders again.
Rob Hickey · Sep 29, 2026