1.8 KiB
1.8 KiB
09 - Vendor BOM
Storage contract
Vendor BOM is stored in local_configurations.vendor_spec and synced with qt_configurations.vendor_spec.
Each row uses this canonical shape:
{
"sort_order": 10,
"vendor_partnumber": "ABC-123",
"quantity": 2,
"description": "row description",
"unit_price": 4500.0,
"total_price": 9000.0,
"lot_mappings": [
{ "lot_name": "LOT_A", "quantity_per_pn": 1 }
]
}
Rules:
lot_mappings[]is the only persisted PN -> LOT mapping contract;- QuoteForge does not use legacy BOM tables;
- apply flow rebuilds cart rows from
lot_mappings[].
Partnumber books
Partnumber books are pull-only snapshots from PriceForge.
Local tables:
local_partnumber_bookslocal_partnumber_book_items
Server tables:
qt_partnumber_booksqt_partnumber_book_items
Resolution flow:
- load the active local book;
- find
vendor_partnumber; - copy
lots_jsonintolot_mappings[]; - keep unresolved rows editable in the UI.
CFXML import
POST /api/projects/:uuid/vendor-import imports one vendor workspace into an existing project.
Rules:
- accepted file field is
file; - maximum file size is
1 GiB; - one
ProprietaryGroupIdentifierbecomes one QuoteForge configuration; - software rows stay inside their hardware group and never become standalone configurations;
- primary group row is selected structurally, without vendor-specific SKU hardcoding;
- imported configuration order follows workspace order.
Imported configuration fields:
namefrom primary rowProductNameserver_countfrom primary rowQuantityserver_modelfrom primary rowProductDescriptionarticleorsupport_codefromProprietaryProductIdentifier
Imported BOM rows become vendor_spec rows and are resolved through the active local partnumber book when possible.