How it works
Three inputs you already have, one map out. The interesting part is what happens when the inputs disagree with each other — which, with real data, they will.
The inputs
Placement data
The pick-and-place / centroid export for the board. This is what makes the tool autonomous: it already knows where every component sits, so nothing has to be placed by hand.
A board image
A top-down photo or a CAD/Gerber render. If the photo has margins around the board, a two-click calibration lines the coordinate system up with the picture.
Failure data
Whatever your systems export. Formats are detected per file, so you can drop a test export, a repair log and a quality-system extract in together.
What happens to a record
Every input format is normalized into the same record shape before anything else happens, so nothing downstream depends on where the data came from. Records are grouped per reference designator, located from the placement data, and drawn.
| Step | What it does | What it refuses to do |
|---|---|---|
| Detect | Works out the format and the delimiter from the file itself | Accept a placement file or a parts list as failure data — each would invent one failure per part |
| Normalize | Designators, dates, quantities and defect types to one vocabulary | Round an explicit quantity of zero up to one |
| Aggregate | Counts per component, split by cause | Drop a row without counting it — totals have to reconcile |
| Place | Board millimetres to image pixels, using the origin found in the file | Assume the placement origin is (0,0) — it usually is not |
When the inputs disagree
These are the failures that matter, because each one can produce a chart that looks completely plausible and is wrong. All of them are surfaced in the app rather than absorbed silently.
The two systems spell designators differently
Your placement file says U7; the test system says U007.
The report works out which unmapped designators would match, names the change,
and asks. Matching is by canonical form only — never by similarity, because
U7 and U9 are one character apart and are different parts.
The coordinates do not start at zero
KiCad exports negative Y; Altium can export from a sheet origin far from the board. Assuming zero puts every part off the image while the totals still add up. The origin is read from the data, shown as an editable field, and the report says so if parts still land outside the board.
One export covers several products
U7 on one assembly is a different part from U7 on
another. Exports naming more than one assembly are flagged, and the whole
report can be scoped to a single product.
Some parts cannot be tested
Transparent-to-test components are excluded from the map by policy — and always disclosed, with their count shown separately, so the totals still reconcile against the raw record count.
What you get out
An engineering view with per-cause filters and drill-down, an executive view for a management readout, a PNG for slides, and a self-contained HTML file that keeps the interactivity and opens with no network. Reports say how they were scoped — which assembly, which period, and whether any designators were matched.