Skip to content
Enes Cavus
All work
Tools14 / 20

BUL — Component Catalogue

A desktop tool that turns years of BOM spreadsheets into one searchable parts catalogue — did we buy this part, how many are left, which boards used it.

1Features

  • One canonical record per part: LTC6909HMS#PBF and ltc6909hms/pbf are the same part
  • Parametric search typed the way engineers talk — “0402 100k”, “22uf 0805”, any word order
  • Stock kept as an event ledger: balances are computed, never stored, so every change can be undone
  • Board builds: preview what building N boards consumes, record it, roll it back
  • File inventory by content hash — knows which BOMs were imported, changed or went missing
  • The importer never drops a row: anything it can't resolve goes to a review queue with the reason
  • 204 automated tests, one for every data trap found in real BOM files

2Specifications

Language
Python 3.11
Storage
SQLite · SQLAlchemy 2
Import
.xlsx / .xls
Search
Part no. + parametric + fuzzy
Interface
Desktop app + CLI
Tests
204

3Figure 1 — Parametric search

BUL — Component Catalogue

4In use

Every 0402 part in the catalogue with its stock and source files
Board builds: consumption per BOM with build history and undo

5Description

Parts bought for a board end up spread across dozens of BOM spreadsheets, each spelling the same part a little differently. BUL reads those files into one catalogue, so the everyday questions — have we bought this before, how many are left, what can replace it, which projects used it — take one search.

It is built as a catalogue rather than a list of purchase rows. Every manufacturer part number collapses to one normalised record, and purchases, projects and distributor codes hang off it. Values are pulled out of free-text descriptions into SI units, so “0402 100nF” matches on capacitance and package rather than on spelling, and a part number and parameters can be mixed in one query.

It was built against real files and their traps: Excel turning part numbers into scientific notation or dropping leading zeros, manufacturer BOMs writing 4K7 and 13.3K, a quantity column that meant per-board in one file and per-order in another, a formula multiplied twice. Each trap is detected and flagged rather than guessed at, and each is locked in with a test.

6Design tools

PythonSQLAlchemySQLiteTkinteropenpyxlrapidfuzz