Anonymized portfolio piece. All job names, project numbers, part numbers, manufacturers, and client identities are removed. The mechanism and results are real; the example figures are rounded and the illustrative example is generalized.
The problem
A commercial controls contractor's quoting workflow starts with a flat vendor export: a skeleton of device and part lines with no grouping, no services, no boilerplate. Turning that into a quote the company's ERP can import is a manual assembly job every time: rename groups to match whatever breakout the customer asked for, reorder lines by type, drop in the recurring services block, add any lot-priced subsystem lines, insert subtotals and blank-line spacing, then append the plans-basis and code-compliance notes. All of it is mechanical: re-typing the same structure into a new shape, under a deadline, by hand.
That repetition is where errors live. On a prior job, two breakout groups that were supposed to carry the same lot-priced subsystem line ended up sharing an identical dollar figure in the finished quote, even though the underlying revision figures behind them were different. Nobody caught it during assembly, because catching it means comparing the finished quote against the source figures line by line, and nobody has time to do that on every quote.
What I built
I built a script that takes the raw vendor export plus a short per-job config (the customer's requested breakout, any lot-priced subsystem figures, and which boilerplate notes apply) and assembles the entire structured, import-ready quote in one pass: correct group naming and order, line sorting, the services block, lot-priced subsystem lines with the right pricing and commission treatment, subtotals, and the trailing notes. It draws catalog pricing from one shared source instead of letting per-job pricing drift, and it never touches the part-number or manufacturer-code fields the ERP needs untouched to auto-price a line correctly.
The output goes straight into the ERP's import. The human step becomes review.
The result
On the pilot job, the script converted a 24-line raw vendor export into an 88-line structured, import-ready quote, and every one of the 20 tool-priced lines matched the correct figure exactly. Run against a second, unrelated job the script had never seen, 91 of 98 tool-priced lines matched exactly, with the handful of misses traced to catalog entries that needed an update; the assembly logic itself held.
More importantly, generating the quote directly from validated source information removed entire categories of transcription risk. The exact three steps where the prior revision error happened, group renaming, line reordering, and services-block assembly, no longer touch a human hand.
An illustrative example (sanitized)
On the pilot job, the customer's breakout request named several groups by drawing area, each needing its own device lines, its own services lines, and a shared lot-priced subsystem line at a figure carried over from a vendor quotation. Built by hand, that job had previously produced two breakout groups with an identical subsystem figure despite different source revisions behind them, a mistake that would have shipped in the quote had it not been caught on a later re-check. Rebuilt through the script from the same raw export and the same customer request, every group's subsystem figure was pulled directly from its own source figure, and the two groups priced correctly and differently, matching the underlying revisions instead of each other.
Why it transfers
The specific tool here is a lighting-controls quoting pipeline, but the pattern is a standard shape:
- A flat, machine-readable export exists somewhere upstream (a vendor system, a takeoff tool, a spreadsheet).
- A human currently re-types that export into a different, structured format by hand, on a deadline, for every job.
- The re-typing is mechanical: naming, ordering, grouping, boilerplate, and pricing lookups that follow fixed rules.
Any workflow with that shape, a repeatable transform from a raw export to a structured document another system consumes, can be scripted the same way: validated against real historical jobs until it matches exactly, then run in one pass with a human reviewing the output instead of building it. That is the same layer I would build on top of any quoting, estimating, or order-entry system that currently depends on a person re-assembling the same structure by hand every time: not replacing the system, feeding it correctly the first time.
Josiah Bujanda • AI & Construction Technology Consultant. Mechanical engineer with more than ten years in commercial lighting controls and Division 26 electrical, plus hands-on architecture of production AI and automation systems.