Bomer is a small, deterministic Bill of Materials (BoM) analysis and optimization engine.
It is designed for electronics and component teams who need repeatable, automation-friendly analysis on real BoMs – not just one-off LLM chat sessions.
Bomer is currently in an early CLI-focused phase (v0.1.x) and lives inside this repository (originally named BOMnet).
Current capabilities (v0.1):
-
CLI-first workflow
bomer analyzetakes a BoM CSV and supplier JSON and produces structured outputs. -
Canonical BoM normalization
Maps common column variations (e.g.mpn,Mfr Part #) into canonical fields likePartNumber,Manufacturer,Description,Quantity. -
Deterministic optimization
Aggregates duplicate parts, sums quantities, and produces a cleanoptimized_bom.csv. -
Cost analysis
Joins the BoM with supplier pricing data and computes:- per-line
UnitPriceandLineCost total_cost- list of parts with missing prices
- per-line
-
Basic risk scoring
Simple risk model based on:- single-sourced parts
- missing prices
- lifecycle status (e.g.
Obsolete/EOL)
-
Structured outputs
Generates machine- and human-readable artifacts:normalized_bom.csvoptimized_bom.csvanalysis.jsonissues.jsonsummary.txt
LLM-assisted normalization and alternative component suggestions are planned for later versions.
Bomer is a Python package located inside this repo.
Prerequisites:
- Python 3.9+
pipavailable- Optional: a virtual environment (recommended)
git clone https://github.com/emreyesilyurt/BOMnet.git
cd BOMnet
# Optional: create a virtualenv
python3 -m venv .venv
source .venv/bin/activate # on macOS / Linux
# .venv\Scripts\activate # on Windows
# Install in editable (dev) mode
pip install -e .If installation succeeds, you should have a bomer CLI on your PATH:
which bomer # or: where bomer on Windows.
├── bomer.yaml # Optional configuration (cost/risk weights, supplier path)
├── data/
│ ├── sample_bom.csv # Example BoM
│ └── suppliers.json # Example supplier price data
├── src/
│ └── bomer/
│ ├── cli.py # CLI entrypoint: `bomer analyze`
│ ├── core/ # Config, loading, schema/validation
│ ├── engines/ # Cost, risk, optimization
│ └── reporting/ # Writers for CSV/JSON/text outputs
└── output/ # Created when you run analyses (ignored by git)
bomer analyze --bom data/sample_bom.csv --suppliers data/suppliers.json --output-dir outputArguments:
--bom: path to a BoM CSV--suppliers: path to suppliers JSON--output-dir: directory for generated artifacts (default:./output)
Expected columns:
PartNumber/MPN/Mfr Part #Quantity/Qty
Optional:
ManufacturerDescriptionLifecycleStatusRoHS
Generated artifacts:
normalized_bom.csvoptimized_bom.csvanalysis.jsonissues.jsonsummary.txt
suppliers:
path: data/suppliers.json
cost:
currency: USD
default_volume: 1000
risk:
single_source_weight: 0.4
missing_price_weight: 0.3
lifecycle_weight: 0.3- Clone repo
- Create virtual env
- Install with
pip install -e . - Run tests with
pytest
Guidelines:
- Keep functions modular and testable
- Deterministic engines should stay deterministic
- Update documentation when adding new commands or outputs