From 49ae276173de1d029eccda3137478c8f5f15253f Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 09:39:24 -0700 Subject: [PATCH 1/8] seed: a red check that no seed or import row holds a brand word or the real domain Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- core/internal/app/seed/demodata_test.go | 53 ++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/core/internal/app/seed/demodata_test.go b/core/internal/app/seed/demodata_test.go index 6b7a28bff..f0c011c0c 100644 --- a/core/internal/app/seed/demodata_test.go +++ b/core/internal/app/seed/demodata_test.go @@ -83,6 +83,34 @@ func TestDemoImportRequested(t *testing.T) { } } +// bannedSeedWords are real brands and a real domain the seeds and the import +// never carry: a product is named for what it is, and a demo address ends in +// a reserved ".example" domain. +var bannedSeedWords = []string{ + "simpson", "strong-tie", "hardie", "cemtrim", "channellock", "romex", + "dryline", "firecode", "brownwood", "turtle", "gable.com", + "nordstrom", "kellogg", +} + +// TestSeedDataHoldsNoBrandWord reads the embedded import and fails on any +// banned word, so the check needs no database. +func TestSeedDataHoldsNoBrandWord(t *testing.T) { + for name, data := range map[string][]byte{ + "catalog": catalogData, + "customers": customersData, + "staff": staffData, + "vendors": vendorsData, + "vendorkeys": vendorKeysData, + } { + lower := strings.ToLower(string(data)) + for _, word := range bannedSeedWords { + if strings.Contains(lower, word) { + t.Errorf("%s import holds %q", name, word) + } + } + } +} + func TestDemoImport(t *testing.T) { if testing.Short() { t.Skip("seeds a scratch database of its own; skipped under -short") @@ -135,7 +163,6 @@ func TestDemoImport(t *testing.T) { AND sku NOT LIKE 'SCR-%' AND sku NOT LIKE 'HANGER-%' AND sku NOT LIKE 'TIE-%' - AND sku NOT LIKE 'SIMP-%' AND sku NOT LIKE 'RF-%' AND sku NOT LIKE 'INS-%' AND sku NOT LIKE 'DR-%' @@ -187,6 +214,30 @@ func TestDemoImport(t *testing.T) { } }) + t.Run("no row carries a brand word or the real domain", func(t *testing.T) { + for _, c := range []struct{ table, column string }{ + {"products", "sku"}, + {"products", "description"}, + {"products", "vendor"}, + {"products", "category"}, + {"vendors", "name"}, + {"vendors", "vendor_key"}, + {"staff", "email"}, + {"staff", "full_name"}, + } { + for _, word := range bannedSeedWords { + var n int + q := fmt.Sprintf(`SELECT COUNT(*) FROM %s WHERE %s ILIKE $1`, c.table, c.column) + if err := db.QueryRow(q, "%"+word+"%").Scan(&n); err != nil { + t.Fatalf("%s.%s: %v", c.table, c.column, err) + } + if n > 0 { + t.Errorf("%s.%s: %d rows hold %q", c.table, c.column, n, word) + } + } + } + }) + t.Run("revenue trends across many days at each yard", func(t *testing.T) { var days int if err := db.QueryRow(` From 86f8f26ce1ff6fbb0d62d8bababb765d0c157e93 Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 09:39:38 -0700 Subject: [PATCH 2/8] seed: plain product words in place of real brand words Simpson Strong-Tie LUS28 (SIMP-LUS28) becomes Face Mount Joist Hanger 2x8 (HANGER-28FM); Cemtrim becomes Fibre Trim (vendor) and Composite Trim; Hardie becomes Fibre Cement; Romex becomes NM-B Cable; Channellock, Firecode, DRYLine TSX, Brownwood and Turtle Vent are named for what they are. Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- core/internal/app/seed/demodata/catalog.jsonl | 120 +++++++++--------- .../app/seed/demodata/vendor_keys.json | 4 +- core/internal/app/seed/dispatch_day.go | 2 +- core/internal/app/seed/seed.go | 20 +-- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/core/internal/app/seed/demodata/catalog.jsonl b/core/internal/app/seed/demodata/catalog.jsonl index e704cb4e1..f8b1173fc 100644 --- a/core/internal/app/seed/demodata/catalog.jsonl +++ b/core/internal/app/seed/demodata/catalog.jsonl @@ -373,19 +373,19 @@ {"sku":"PLS_ACXFIR_T050","description":"Plywood 0.5 4x8 ACX Fir","department":"Yard","category_slug":"lumber.sheathing","vendor_key":"GABLE_INTERNAL","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32}],"species":"Fir","grade":"ACX Fir","treatment":"Select","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":26.6,"cost":55.0,"price":78.57,"contractor_price":66.78,"vip_price":58.93,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"plywood_select_sheet","barcode":"2000100002614","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":240,"reorder_point":72,"reorder_qty":240},"WK":{"on_hand":72,"reorder_point":72,"reorder_qty":240},"LK":{"on_hand":24,"reorder_point":72,"reorder_qty":240}}} {"sku":"PLS_ACXFIR_T075","description":"Plywood 0.75 4x8 ACX Fir","department":"Yard","category_slug":"lumber.sheathing","vendor_key":"GABLE_INTERNAL","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32}],"species":"Fir","grade":"ACX Fir","treatment":"Select","board_thickness_in":0.75,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.75,"stackable":true,"weight_lbs":39.1,"cost":65.0,"price":92.86,"contractor_price":78.93,"vip_price":69.65,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"plywood_select_sheet","barcode":"2000100002621","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":315,"reorder_point":94,"reorder_qty":315},"WK":{"on_hand":94,"reorder_point":94,"reorder_qty":315},"LK":{"on_hand":31,"reorder_point":94,"reorder_qty":315}}} {"sku":"DW_14_REG_48","description":"Drywall 0.25 4X8 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.25,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.25,"stackable":true,"weight_lbs":24.75,"cost":13.0,"price":16.67,"contractor_price":14.17,"vip_price":12.5,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002628","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":228,"reorder_point":68,"reorder_qty":228},"WK":{"on_hand":68,"reorder_point":68,"reorder_qty":228},"LK":{"on_hand":22,"reorder_point":68,"reorder_qty":228}}} -{"sku":"DW_14_FC_48","description":"Drywall 0.25 4X8 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.25,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.25,"stackable":true,"weight_lbs":24.75,"cost":16.9,"price":21.67,"contractor_price":18.42,"vip_price":16.25,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002635","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":228,"reorder_point":68,"reorder_qty":228},"WK":{"on_hand":68,"reorder_point":68,"reorder_qty":228},"LK":{"on_hand":22,"reorder_point":68,"reorder_qty":228}}} +{"sku":"DW_14_FC_48","description":"Drywall 0.25 4X8 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.25,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.25,"stackable":true,"weight_lbs":24.75,"cost":16.9,"price":21.67,"contractor_price":18.42,"vip_price":16.25,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002635","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":228,"reorder_point":68,"reorder_qty":228},"WK":{"on_hand":68,"reorder_point":68,"reorder_qty":228},"LK":{"on_hand":22,"reorder_point":68,"reorder_qty":228}}} {"sku":"DW_14_MR_48","description":"Drywall 0.25 4X8 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.25,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.25,"stackable":true,"weight_lbs":24.75,"cost":18.85,"price":24.17,"contractor_price":20.54,"vip_price":18.13,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002642","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":228,"reorder_point":68,"reorder_qty":228},"WK":{"on_hand":68,"reorder_point":68,"reorder_qty":228},"LK":{"on_hand":22,"reorder_point":68,"reorder_qty":228}}} {"sku":"DW_14_AR_48","description":"Drywall 0.25 4X8 Abuse Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Abuse Resistant","treatment":"Sheet","board_thickness_in":0.25,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.25,"stackable":true,"weight_lbs":24.75,"cost":21.45,"price":27.5,"contractor_price":23.38,"vip_price":20.63,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002649","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":228,"reorder_point":68,"reorder_qty":228},"WK":{"on_hand":68,"reorder_point":68,"reorder_qty":228},"LK":{"on_hand":22,"reorder_point":68,"reorder_qty":228}}} {"sku":"DW_38_REG_48","description":"Drywall 0.375 4X8 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.375,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.375,"stackable":true,"weight_lbs":36.63,"cost":14.5,"price":18.59,"contractor_price":15.8,"vip_price":13.94,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002656","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":300,"reorder_point":90,"reorder_qty":300},"WK":{"on_hand":90,"reorder_point":90,"reorder_qty":300},"LK":{"on_hand":30,"reorder_point":90,"reorder_qty":300}}} -{"sku":"DW_38_FC_48","description":"Drywall 0.375 4X8 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.375,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.375,"stackable":true,"weight_lbs":36.63,"cost":18.85,"price":24.17,"contractor_price":20.54,"vip_price":18.13,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002663","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":300,"reorder_point":90,"reorder_qty":300},"WK":{"on_hand":90,"reorder_point":90,"reorder_qty":300},"LK":{"on_hand":30,"reorder_point":90,"reorder_qty":300}}} +{"sku":"DW_38_FC_48","description":"Drywall 0.375 4X8 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.375,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.375,"stackable":true,"weight_lbs":36.63,"cost":18.85,"price":24.17,"contractor_price":20.54,"vip_price":18.13,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002663","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":300,"reorder_point":90,"reorder_qty":300},"WK":{"on_hand":90,"reorder_point":90,"reorder_qty":300},"LK":{"on_hand":30,"reorder_point":90,"reorder_qty":300}}} {"sku":"DW_38_MR_48","description":"Drywall 0.375 4X8 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.375,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.375,"stackable":true,"weight_lbs":36.63,"cost":21.03,"price":26.96,"contractor_price":22.92,"vip_price":20.22,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002670","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":300,"reorder_point":90,"reorder_qty":300},"WK":{"on_hand":90,"reorder_point":90,"reorder_qty":300},"LK":{"on_hand":30,"reorder_point":90,"reorder_qty":300}}} {"sku":"DW_38_AR_48","description":"Drywall 0.375 4X8 Abuse Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Abuse Resistant","treatment":"Sheet","board_thickness_in":0.375,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.375,"stackable":true,"weight_lbs":36.63,"cost":23.93,"price":30.67,"contractor_price":26.07,"vip_price":23.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002677","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":300,"reorder_point":90,"reorder_qty":300},"WK":{"on_hand":90,"reorder_point":90,"reorder_qty":300},"LK":{"on_hand":30,"reorder_point":90,"reorder_qty":300}}} {"sku":"DW_12_REG_48","description":"Drywall 0.5 4X8 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":48.5,"cost":16.0,"price":20.51,"contractor_price":17.43,"vip_price":15.38,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002684","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":371,"reorder_point":111,"reorder_qty":371},"WK":{"on_hand":111,"reorder_point":111,"reorder_qty":371},"LK":{"on_hand":37,"reorder_point":111,"reorder_qty":371}}} {"sku":"DW_12_REG_410","description":"Drywall 0.5 4X10 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":60.63,"cost":16.0,"price":20.51,"contractor_price":17.43,"vip_price":15.38,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002691","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":444,"reorder_point":133,"reorder_qty":444},"WK":{"on_hand":133,"reorder_point":133,"reorder_qty":444},"LK":{"on_hand":44,"reorder_point":133,"reorder_qty":444}}} {"sku":"DW_12_REG_412","description":"Drywall 0.5 4X12 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":72.75,"cost":16.0,"price":20.51,"contractor_price":17.43,"vip_price":15.38,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002698","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":516,"reorder_point":154,"reorder_qty":516},"WK":{"on_hand":154,"reorder_point":154,"reorder_qty":516},"LK":{"on_hand":51,"reorder_point":154,"reorder_qty":516}}} -{"sku":"DW_12_FC_48","description":"Drywall 0.5 4X8 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":48.5,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002705","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":371,"reorder_point":111,"reorder_qty":371},"WK":{"on_hand":111,"reorder_point":111,"reorder_qty":371},"LK":{"on_hand":37,"reorder_point":111,"reorder_qty":371}}} -{"sku":"DW_12_FC_410","description":"Drywall 0.5 4X10 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":60.63,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002712","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":444,"reorder_point":133,"reorder_qty":444},"WK":{"on_hand":133,"reorder_point":133,"reorder_qty":444},"LK":{"on_hand":44,"reorder_point":133,"reorder_qty":444}}} -{"sku":"DW_12_FC_412","description":"Drywall 0.5 4X12 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":72.75,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002719","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":516,"reorder_point":154,"reorder_qty":516},"WK":{"on_hand":154,"reorder_point":154,"reorder_qty":516},"LK":{"on_hand":51,"reorder_point":154,"reorder_qty":516}}} +{"sku":"DW_12_FC_48","description":"Drywall 0.5 4X8 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":48.5,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002705","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":371,"reorder_point":111,"reorder_qty":371},"WK":{"on_hand":111,"reorder_point":111,"reorder_qty":371},"LK":{"on_hand":37,"reorder_point":111,"reorder_qty":371}}} +{"sku":"DW_12_FC_410","description":"Drywall 0.5 4X10 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":60.63,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002712","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":444,"reorder_point":133,"reorder_qty":444},"WK":{"on_hand":133,"reorder_point":133,"reorder_qty":444},"LK":{"on_hand":44,"reorder_point":133,"reorder_qty":444}}} +{"sku":"DW_12_FC_412","description":"Drywall 0.5 4X12 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":72.75,"cost":20.8,"price":26.67,"contractor_price":22.67,"vip_price":20.0,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002719","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":516,"reorder_point":154,"reorder_qty":516},"WK":{"on_hand":154,"reorder_point":154,"reorder_qty":516},"LK":{"on_hand":51,"reorder_point":154,"reorder_qty":516}}} {"sku":"DW_12_MR_48","description":"Drywall 0.5 4X8 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":48.5,"cost":23.2,"price":29.74,"contractor_price":25.28,"vip_price":22.31,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002726","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":371,"reorder_point":111,"reorder_qty":371},"WK":{"on_hand":111,"reorder_point":111,"reorder_qty":371},"LK":{"on_hand":37,"reorder_point":111,"reorder_qty":371}}} {"sku":"DW_12_MR_410","description":"Drywall 0.5 4X10 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":60.63,"cost":23.2,"price":29.74,"contractor_price":25.28,"vip_price":22.31,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002733","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":444,"reorder_point":133,"reorder_qty":444},"WK":{"on_hand":133,"reorder_point":133,"reorder_qty":444},"LK":{"on_hand":44,"reorder_point":133,"reorder_qty":444}}} {"sku":"DW_12_MR_412","description":"Drywall 0.5 4X12 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.5,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.5,"stackable":true,"weight_lbs":72.75,"cost":23.2,"price":29.74,"contractor_price":25.28,"vip_price":22.31,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002740","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":516,"reorder_point":154,"reorder_qty":516},"WK":{"on_hand":154,"reorder_point":154,"reorder_qty":516},"LK":{"on_hand":51,"reorder_point":154,"reorder_qty":516}}} @@ -395,9 +395,9 @@ {"sku":"DW_58_REG_48","description":"Drywall 0.625 4X8 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":60.38,"cost":17.5,"price":22.44,"contractor_price":19.07,"vip_price":16.83,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002768","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":442,"reorder_point":132,"reorder_qty":442},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":442},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":442}}} {"sku":"DW_58_REG_410","description":"Drywall 0.625 4X10 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":75.47,"cost":17.5,"price":22.44,"contractor_price":19.07,"vip_price":16.83,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002775","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":533,"reorder_point":159,"reorder_qty":533},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":533},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":533}}} {"sku":"DW_58_REG_412","description":"Drywall 0.625 4X12 Regular","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Regular","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":90.56,"cost":17.5,"price":22.44,"contractor_price":19.07,"vip_price":16.83,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002782","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":623,"reorder_point":186,"reorder_qty":623},"WK":{"on_hand":186,"reorder_point":186,"reorder_qty":623},"LK":{"on_hand":62,"reorder_point":186,"reorder_qty":623}}} -{"sku":"DW_58_FC_48","description":"Drywall 0.625 4X8 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":60.38,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002789","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":442,"reorder_point":132,"reorder_qty":442},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":442},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":442}}} -{"sku":"DW_58_FC_410","description":"Drywall 0.625 4X10 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":75.47,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002796","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":533,"reorder_point":159,"reorder_qty":533},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":533},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":533}}} -{"sku":"DW_58_FC_412","description":"Drywall 0.625 4X12 Firecode","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Firecode","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":90.56,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002803","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":623,"reorder_point":186,"reorder_qty":623},"WK":{"on_hand":186,"reorder_point":186,"reorder_qty":623},"LK":{"on_hand":62,"reorder_point":186,"reorder_qty":623}}} +{"sku":"DW_58_FC_48","description":"Drywall 0.625 4X8 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":60.38,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002789","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":442,"reorder_point":132,"reorder_qty":442},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":442},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":442}}} +{"sku":"DW_58_FC_410","description":"Drywall 0.625 4X10 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":75.47,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002796","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":533,"reorder_point":159,"reorder_qty":533},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":533},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":533}}} +{"sku":"DW_58_FC_412","description":"Drywall 0.625 4X12 Type X","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Type X","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":90.56,"cost":22.75,"price":29.17,"contractor_price":24.79,"vip_price":21.88,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002803","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":623,"reorder_point":186,"reorder_qty":623},"WK":{"on_hand":186,"reorder_point":186,"reorder_qty":623},"LK":{"on_hand":62,"reorder_point":186,"reorder_qty":623}}} {"sku":"DW_58_MR_48","description":"Drywall 0.625 4X8 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":32.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":60.38,"cost":25.38,"price":32.53,"contractor_price":27.65,"vip_price":24.4,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002810","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":442,"reorder_point":132,"reorder_qty":442},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":442},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":442}}} {"sku":"DW_58_MR_410","description":"Drywall 0.625 4X10 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":40.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":75.47,"cost":25.38,"price":32.53,"contractor_price":27.65,"vip_price":24.4,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002817","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":533,"reorder_point":159,"reorder_qty":533},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":533},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":533}}} {"sku":"DW_58_MR_412","description":"Drywall 0.625 4X12 Moisture Resistant","department":"Yard","category_slug":"drywall_finishing.drywall_sheets","vendor_key":"GYP_OKN","uom_primary":"PCS","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":48.0}],"species":"Gypsum","grade":"Moisture Resistant","treatment":"Sheet","board_thickness_in":0.625,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":48,"height_in":0.625,"stackable":true,"weight_lbs":90.56,"cost":25.38,"price":32.53,"contractor_price":27.65,"vip_price":24.4,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"drywall_sheet_stack","barcode":"2000100002824","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":623,"reorder_point":186,"reorder_qty":623},"WK":{"on_hand":186,"reorder_point":186,"reorder_qty":623},"LK":{"on_hand":62,"reorder_point":186,"reorder_qty":623}}} @@ -433,7 +433,7 @@ {"sku":"RB_S8_L20","description":"Rebar #8 Grade 60 20'","department":"Yard","category_slug":"concrete_masonry.rebar_wire","vendor_key":"STONE_CTR","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":20}],"species":"Steel","grade":"Grade 60","treatment":"Black","board_thickness_in":1.0,"board_width_in":null,"board_length_ft":20,"random_length":false,"length_in":240.0,"width_in":1.0,"height_in":1.0,"stackable":false,"weight_lbs":17.0,"cost":5.5,"price":7.64,"contractor_price":6.49,"vip_price":5.73,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"rebar_bundle","barcode":"2000100003034","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":182,"reorder_point":54,"reorder_qty":182},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":182},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":182}}} {"sku":"RB_S8_L24","description":"Rebar #8 Grade 60 24'","department":"Yard","category_slug":"concrete_masonry.rebar_wire","vendor_key":"STONE_CTR","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":24}],"species":"Steel","grade":"Grade 60","treatment":"Black","board_thickness_in":1.0,"board_width_in":null,"board_length_ft":24,"random_length":false,"length_in":288.0,"width_in":1.0,"height_in":1.0,"stackable":false,"weight_lbs":20.4,"cost":6.6,"price":9.17,"contractor_price":7.79,"vip_price":6.88,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"rebar_bundle","barcode":"2000100003041","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":202,"reorder_point":60,"reorder_qty":202},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":202},"LK":{"on_hand":20,"reorder_point":60,"reorder_qty":202}}} {"sku":"RF_3T25","description":"Shingle 3-Tab 25yr Black Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"3-Tab","treatment":"25yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":75.0,"cost":22.0,"price":28.21,"contractor_price":23.98,"vip_price":21.16,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003048","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":530,"reorder_point":159,"reorder_qty":530},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":530},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":530}}} -{"sku":"RF_3T25BW","description":"Shingle 3-Tab 25yr Brownwood Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"3-Tab","treatment":"25yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":75.0,"cost":22.0,"price":28.21,"contractor_price":23.98,"vip_price":21.16,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003055","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":530,"reorder_point":159,"reorder_qty":530},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":530},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":530}}} +{"sku":"RF_3T25BW","description":"Shingle 3-Tab 25yr Brown Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"3-Tab","treatment":"25yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":75.0,"cost":22.0,"price":28.21,"contractor_price":23.98,"vip_price":21.16,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003055","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":530,"reorder_point":159,"reorder_qty":530},"WK":{"on_hand":159,"reorder_point":159,"reorder_qty":530},"LK":{"on_hand":53,"reorder_point":159,"reorder_qty":530}}} {"sku":"RF_ARC30BLK","description":"Shingle Architectural 30yr Black Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"Architectural","treatment":"30yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":76.0,"cost":28.0,"price":35.9,"contractor_price":30.52,"vip_price":26.93,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003062","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":536,"reorder_point":160,"reorder_qty":536},"WK":{"on_hand":160,"reorder_point":160,"reorder_qty":536},"LK":{"on_hand":53,"reorder_point":160,"reorder_qty":536}}} {"sku":"RF_ARC30WW","description":"Shingle Architectural 30yr Weathered Wood Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"Architectural","treatment":"30yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":76.0,"cost":28.0,"price":35.9,"contractor_price":30.52,"vip_price":26.93,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003069","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":536,"reorder_point":160,"reorder_qty":536},"WK":{"on_hand":160,"reorder_point":160,"reorder_qty":536},"LK":{"on_hand":53,"reorder_point":160,"reorder_qty":536}}} {"sku":"RF_ARC30DR","description":"Shingle Architectural 30yr Driftwood Bundle","department":"Yard","category_slug":"roofing_ventilation.asphalt_shingles","vendor_key":"PEAK_ROOF","uom_primary":"BUNDLE","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":33.3},{"uom":"SQ","unit_qty":1,"stock_qty":0.333}],"species":"Asphalt","grade":"Architectural","treatment":"30yr","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":36,"width_in":12,"height_in":2,"stackable":true,"weight_lbs":76.0,"cost":28.0,"price":35.9,"contractor_price":30.52,"vip_price":26.93,"target_margin":22.0,"tax_class":"TAXABLE","image_family":"asphalt_shingle_bundle","barcode":"2000100003076","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":536,"reorder_point":160,"reorder_qty":536},"WK":{"on_hand":160,"reorder_point":160,"reorder_qty":536},"LK":{"on_hand":53,"reorder_point":160,"reorder_qty":536}}} @@ -464,18 +464,18 @@ {"sku":"RF_FL_PIPE4","description":"Flashing Pipe Boot 4'","department":"Yard","category_slug":"roofing_ventilation.flashing","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Galvanized Steel","grade":"Pipe Boot","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":5,"board_length_ft":0.041666666666666664,"random_length":false,"length_in":6.0,"width_in":5,"height_in":0.25,"stackable":true,"weight_lbs":0.75,"cost":2.73,"price":4.26,"contractor_price":3.62,"vip_price":3.2,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"roof_flashing_piece","barcode":"2000100003251","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":84,"reorder_point":25,"reorder_qty":84},"WK":{"on_hand":25,"reorder_point":25,"reorder_qty":84},"LK":{"on_hand":8,"reorder_point":25,"reorder_qty":84}}} {"sku":"RF_FL_VENT","description":"Flashing Ridge Vent 4'","department":"Yard","category_slug":"roofing_ventilation.flashing","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Galvanized Steel","grade":"Ridge Vent","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":5,"board_length_ft":0.3333333333333333,"random_length":false,"length_in":48.0,"width_in":5,"height_in":0.25,"stackable":true,"weight_lbs":2.5,"cost":4.3,"price":6.72,"contractor_price":5.71,"vip_price":5.04,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"roof_flashing_piece","barcode":"2000100003258","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":95,"reorder_point":28,"reorder_qty":95},"WK":{"on_hand":28,"reorder_point":28,"reorder_qty":95},"LK":{"on_hand":9,"reorder_point":28,"reorder_qty":95}}} {"sku":"RF_VT_RV4","description":"Vent Ridge Vent 4' Black","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Ridge","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":3.5,"board_length_ft":0.3333333333333333,"random_length":false,"length_in":48.0,"width_in":3.5,"height_in":1.0,"stackable":true,"weight_lbs":1.7,"cost":12.8,"price":19.1,"contractor_price":16.24,"vip_price":14.33,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003265","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":90,"reorder_point":27,"reorder_qty":90},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":90},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":90}}} -{"sku":"RF_VT_TV8","description":"Vent Turtle Vent 8x8 Brown","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Roof","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":8,"board_length_ft":0.6666666666666666,"random_length":false,"length_in":96.0,"width_in":8,"height_in":1.0,"stackable":true,"weight_lbs":2.9,"cost":17.6,"price":26.27,"contractor_price":22.33,"vip_price":19.7,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003272","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":97,"reorder_point":29,"reorder_qty":97},"WK":{"on_hand":29,"reorder_point":29,"reorder_qty":97},"LK":{"on_hand":9,"reorder_point":29,"reorder_qty":97}}} +{"sku":"RF_VT_TV8","description":"Box Vent 8x8 Brown","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Roof","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":8,"board_length_ft":0.6666666666666666,"random_length":false,"length_in":96.0,"width_in":8,"height_in":1.0,"stackable":true,"weight_lbs":2.9,"cost":17.6,"price":26.27,"contractor_price":22.33,"vip_price":19.7,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003272","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":97,"reorder_point":29,"reorder_qty":97},"WK":{"on_hand":29,"reorder_point":29,"reorder_qty":97},"LK":{"on_hand":9,"reorder_point":29,"reorder_qty":97}}} {"sku":"RF_VT_TCV","description":"Vent Roof Cap Vent 4'","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Roof","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":4,"board_length_ft":0.3333333333333333,"random_length":false,"length_in":48.0,"width_in":4,"height_in":1.0,"stackable":true,"weight_lbs":1.7,"cost":12.8,"price":19.1,"contractor_price":16.24,"vip_price":14.33,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003279","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":90,"reorder_point":27,"reorder_qty":90},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":90},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":90}}} {"sku":"RF_VT_FA8","description":"Vent Fascia Vent 8' White","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Fascia","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":4,"board_length_ft":0.6666666666666666,"random_length":false,"length_in":96.0,"width_in":4,"height_in":1.0,"stackable":true,"weight_lbs":2.9,"cost":17.6,"price":26.27,"contractor_price":22.33,"vip_price":19.7,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003286","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":97,"reorder_point":29,"reorder_qty":97},"WK":{"on_hand":29,"reorder_point":29,"reorder_qty":97},"LK":{"on_hand":9,"reorder_point":29,"reorder_qty":97}}} {"sku":"RF_VT_SOV12","description":"Vent Soffit Vent 12' Aluminum","department":"Yard","category_slug":"roofing_ventilation.vents_roof_accessories","vendor_key":"BC_ROOF","uom_primary":"PCS","alternate_uoms":[],"species":"Aluminum","grade":"Soffit","treatment":"Mill Finish","board_thickness_in":null,"board_width_in":4,"board_length_ft":1.0,"random_length":false,"length_in":144.0,"width_in":4,"height_in":1.0,"stackable":true,"weight_lbs":4.1,"cost":22.4,"price":33.43,"contractor_price":28.42,"vip_price":25.07,"target_margin":33.0,"tax_class":"TAXABLE","image_family":"roof_vent_piece","barcode":"2000100003293","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":105,"reorder_point":31,"reorder_qty":105},"WK":{"on_hand":31,"reorder_point":31,"reorder_qty":105},"LK":{"on_hand":10,"reorder_point":31,"reorder_qty":105}}} -{"sku":"SD_VN_D45_WHI","description":"Vinyl Siding D45 White 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"White","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003300","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D55_WHI","description":"Vinyl Siding D55 White 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003307","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D45_SAN","description":"Vinyl Siding D45 Sand 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Sand","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003314","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D55_SAN","description":"Vinyl Siding D55 Sand 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003321","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D45_DRI","description":"Vinyl Siding D45 Driftwood 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Driftwood","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003328","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D55_DRI","description":"Vinyl Siding D55 Driftwood 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Driftwood","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003335","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D45_SLA","description":"Vinyl Siding D45 Slate 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Slate","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003342","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} -{"sku":"SD_VN_D55_SLA","description":"Vinyl Siding D55 Slate 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Slate","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003349","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D45_WHI","description":"Vinyl Siding D45 White 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"White","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003300","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D55_WHI","description":"Vinyl Siding D55 White 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003307","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D45_SAN","description":"Vinyl Siding D45 Sand 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Sand","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003314","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D55_SAN","description":"Vinyl Siding D55 Sand 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003321","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D45_DRI","description":"Vinyl Siding D45 Driftwood 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Driftwood","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003328","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D55_DRI","description":"Vinyl Siding D55 Driftwood 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Driftwood","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003335","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D45_SLA","description":"Vinyl Siding D45 Slate 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D45","treatment":"Slate","board_thickness_in":null,"board_width_in":10,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":10,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003342","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} +{"sku":"SD_VN_D55_SLA","description":"Vinyl Siding D55 Slate 144\"","department":"Yard","category_slug":"siding_trim.vinyl_siding","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"D55","treatment":"Slate","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.04,"stackable":true,"weight_lbs":2.0,"cost":22.0,"price":32.35,"contractor_price":27.5,"vip_price":24.26,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_siding_panel","barcode":"2000100003349","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":92,"reorder_point":27,"reorder_qty":92},"WK":{"on_hand":27,"reorder_point":27,"reorder_qty":92},"LK":{"on_hand":9,"reorder_point":27,"reorder_qty":92}}} {"sku":"SD_WD_TNG_L08_CP","description":"Cedar Premium TNG Siding 8'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"Cedar","grade":"TNG","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":16.0,"cost":10.1,"price":14.03,"contractor_price":11.93,"vip_price":10.52,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003356","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":176,"reorder_point":52,"reorder_qty":176},"WK":{"on_hand":52,"reorder_point":52,"reorder_qty":176},"LK":{"on_hand":17,"reorder_point":52,"reorder_qty":176}}} {"sku":"SD_WD_TNG_L08_CS","description":"Cedar Standard TNG Siding 8'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"Cedar","grade":"TNG","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":16.0,"cost":6.5,"price":9.03,"contractor_price":7.68,"vip_price":6.77,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003363","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":176,"reorder_point":52,"reorder_qty":176},"WK":{"on_hand":52,"reorder_point":52,"reorder_qty":176},"LK":{"on_hand":17,"reorder_point":52,"reorder_qty":176}}} {"sku":"SD_WD_TNG_L08_PP","description":"Pine Premium TNG Siding 8'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"Pine","grade":"TNG","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":16.0,"cost":8.3,"price":11.53,"contractor_price":9.8,"vip_price":8.65,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003370","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":176,"reorder_point":52,"reorder_qty":176},"WK":{"on_hand":52,"reorder_point":52,"reorder_qty":176},"LK":{"on_hand":17,"reorder_point":52,"reorder_qty":176}}} @@ -503,10 +503,10 @@ {"sku":"SD_WD_BEVL_L16_CP","description":"Cedar Premium BEVL Siding 16'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"Cedar","grade":"BEVL","treatment":"S4S","board_thickness_in":0.625,"board_width_in":6,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":6,"height_in":0.625,"stackable":true,"weight_lbs":32.0,"cost":10.6,"price":14.72,"contractor_price":12.51,"vip_price":11.04,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003524","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":272,"reorder_point":81,"reorder_qty":272},"WK":{"on_hand":81,"reorder_point":81,"reorder_qty":272},"LK":{"on_hand":27,"reorder_point":81,"reorder_qty":272}}} {"sku":"SD_WD_BEVL_L16_CS","description":"Cedar Standard BEVL Siding 16'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"Cedar","grade":"BEVL","treatment":"S4S","board_thickness_in":0.625,"board_width_in":6,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":6,"height_in":0.625,"stackable":true,"weight_lbs":32.0,"cost":7.0,"price":9.72,"contractor_price":8.26,"vip_price":7.29,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003531","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":272,"reorder_point":81,"reorder_qty":272},"WK":{"on_hand":81,"reorder_point":81,"reorder_qty":272},"LK":{"on_hand":27,"reorder_point":81,"reorder_qty":272}}} {"sku":"SD_WD_BEVL_L16_PP","description":"Pine Premium BEVL Siding 16'","department":"Yard","category_slug":"siding_trim.wood_siding","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"Pine","grade":"BEVL","treatment":"S4S","board_thickness_in":0.625,"board_width_in":6,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":6,"height_in":0.625,"stackable":true,"weight_lbs":32.0,"cost":8.8,"price":12.22,"contractor_price":10.39,"vip_price":9.17,"target_margin":28.0,"tax_class":"TAXABLE","image_family":"wood_siding_panel","barcode":"2000100003538","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":272,"reorder_point":81,"reorder_qty":272},"WK":{"on_hand":81,"reorder_point":81,"reorder_qty":272},"LK":{"on_hand":27,"reorder_point":81,"reorder_qty":272}}} -{"sku":"SD_FC_PL4X8","description":"Fibre Cement Panel 4x8 Okanagan Cemtrim","department":"Yard","category_slug":"siding_trim.fibre_cement","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":64.0,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003545","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":464,"reorder_point":139,"reorder_qty":464},"WK":{"on_hand":139,"reorder_point":139,"reorder_qty":464},"LK":{"on_hand":46,"reorder_point":139,"reorder_qty":464}}} -{"sku":"SD_FC_PL4X10","description":"Fibre Cement Panel 4x10 Okanagan Cemtrim","department":"Yard","category_slug":"siding_trim.fibre_cement","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":80.0,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003552","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":56,"reorder_point":168,"reorder_qty":560}}} -{"sku":"SD_FC_TR12","description":"Fibre Cement Trim 1x4 12' Okanagan Cemtrim","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.75,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":12.0,"cost":8.0,"price":11.76,"contractor_price":10.0,"vip_price":8.82,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003559","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":152,"reorder_point":45,"reorder_qty":152},"WK":{"on_hand":45,"reorder_point":45,"reorder_qty":152},"LK":{"on_hand":15,"reorder_point":45,"reorder_qty":152}}} -{"sku":"SD_FC_SO12","description":"Fibre Cement Soffit 4x8 Okanagan Cemtrim","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":60.0,"cost":8.0,"price":11.76,"contractor_price":10.0,"vip_price":8.82,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_soffit","barcode":"2000100003566","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":440,"reorder_point":132,"reorder_qty":440},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":440},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":440}}} +{"sku":"SD_FC_PL4X8","description":"Fibre Cement Panel 4x8 Okanagan Fibre Trim","department":"Yard","category_slug":"siding_trim.fibre_cement","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":64.0,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003545","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":464,"reorder_point":139,"reorder_qty":464},"WK":{"on_hand":139,"reorder_point":139,"reorder_qty":464},"LK":{"on_hand":46,"reorder_point":139,"reorder_qty":464}}} +{"sku":"SD_FC_PL4X10","description":"Fibre Cement Panel 4x10 Okanagan Fibre Trim","department":"Yard","category_slug":"siding_trim.fibre_cement","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":120,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":80.0,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003552","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":56,"reorder_point":168,"reorder_qty":560}}} +{"sku":"SD_FC_TR12","description":"Fibre Cement Trim 1x4 12' Okanagan Fibre Trim","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.75,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":144,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":12.0,"cost":8.0,"price":11.76,"contractor_price":10.0,"vip_price":8.82,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_panel","barcode":"2000100003559","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":152,"reorder_point":45,"reorder_qty":152},"WK":{"on_hand":45,"reorder_point":45,"reorder_qty":152},"LK":{"on_hand":15,"reorder_point":45,"reorder_qty":152}}} +{"sku":"SD_FC_SO12","description":"Fibre Cement Soffit 4x8 Okanagan Fibre Trim","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[],"species":"Fibre Cement","grade":"Standard","treatment":"Primed","board_thickness_in":0.31,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":96,"width_in":48,"height_in":0.31,"stackable":true,"weight_lbs":60.0,"cost":8.0,"price":11.76,"contractor_price":10.0,"vip_price":8.82,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"fibre_cement_soffit","barcode":"2000100003566","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":440,"reorder_point":132,"reorder_qty":440},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":440},"LK":{"on_hand":44,"reorder_point":132,"reorder_qty":440}}} {"sku":"SD_TR_CED_1X4_L08","description":"Cedar 1x4 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CORNICE_VLY","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"Cedar","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":12.0,"cost":5.5,"price":7.86,"contractor_price":6.68,"vip_price":5.9,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003573","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":152,"reorder_point":45,"reorder_qty":152},"WK":{"on_hand":45,"reorder_point":45,"reorder_qty":152},"LK":{"on_hand":15,"reorder_point":45,"reorder_qty":152}}} {"sku":"SD_TR_CED_1X4_L12","description":"Cedar 1x4 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CORNICE_VLY","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"Cedar","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":18.0,"cost":5.65,"price":8.07,"contractor_price":6.86,"vip_price":6.05,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003580","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":188,"reorder_point":56,"reorder_qty":188},"WK":{"on_hand":56,"reorder_point":56,"reorder_qty":188},"LK":{"on_hand":18,"reorder_point":56,"reorder_qty":188}}} {"sku":"SD_TR_CED_1X4_L16","description":"Cedar 1x4 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CORNICE_VLY","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"Cedar","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":24.0,"cost":5.8,"price":8.29,"contractor_price":7.05,"vip_price":6.22,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003587","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":224,"reorder_point":67,"reorder_qty":224},"WK":{"on_hand":67,"reorder_point":67,"reorder_qty":224},"LK":{"on_hand":22,"reorder_point":67,"reorder_qty":224}}} @@ -531,36 +531,36 @@ {"sku":"SD_TR_PIN_1X10_L08","description":"Pine 1x10 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"Pine","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":7.2,"cost":4.38,"price":6.26,"contractor_price":5.32,"vip_price":4.7,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003720","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":123,"reorder_point":36,"reorder_qty":123},"WK":{"on_hand":36,"reorder_point":36,"reorder_qty":123},"LK":{"on_hand":12,"reorder_point":36,"reorder_qty":123}}} {"sku":"SD_TR_PIN_1X10_L12","description":"Pine 1x10 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"Pine","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":10.8,"cost":4.47,"price":6.39,"contractor_price":5.43,"vip_price":4.79,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003727","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":145,"reorder_point":43,"reorder_qty":145},"WK":{"on_hand":43,"reorder_point":43,"reorder_qty":145},"LK":{"on_hand":14,"reorder_point":43,"reorder_qty":145}}} {"sku":"SD_TR_PIN_1X10_L16","description":"Pine 1x10 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"OKN_LBR_MILL","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"Pine","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":14.4,"cost":4.56,"price":6.51,"contractor_price":5.53,"vip_price":4.88,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003734","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":166,"reorder_point":49,"reorder_qty":166},"WK":{"on_hand":49,"reorder_point":49,"reorder_qty":166},"LK":{"on_hand":16,"reorder_point":49,"reorder_qty":166}}} -{"sku":"SD_TR_PVC_1X4_L08","description":"PVC 1x4 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":7.7,"price":11.0,"contractor_price":9.35,"vip_price":8.25,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003741","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} -{"sku":"SD_TR_PVC_1X4_L12","description":"PVC 1x4 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":7.91,"price":11.3,"contractor_price":9.61,"vip_price":8.48,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003748","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} -{"sku":"SD_TR_PVC_1X4_L16","description":"PVC 1x4 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":8.12,"price":11.6,"contractor_price":9.86,"vip_price":8.7,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003755","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} -{"sku":"SD_TR_PVC_1X6_L08","description":"PVC 1x6 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":8.54,"price":12.2,"contractor_price":10.37,"vip_price":9.15,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003762","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} -{"sku":"SD_TR_PVC_1X6_L12","description":"PVC 1x6 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":8.75,"price":12.5,"contractor_price":10.63,"vip_price":9.38,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003769","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} -{"sku":"SD_TR_PVC_1X6_L16","description":"PVC 1x6 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":8.96,"price":12.8,"contractor_price":10.88,"vip_price":9.6,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003776","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} -{"sku":"SD_TR_PVC_1X8_L08","description":"PVC 1x8 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":9.38,"price":13.4,"contractor_price":11.39,"vip_price":10.05,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003783","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} -{"sku":"SD_TR_PVC_1X8_L12","description":"PVC 1x8 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":9.59,"price":13.7,"contractor_price":11.65,"vip_price":10.28,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003790","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} -{"sku":"SD_TR_PVC_1X8_L16","description":"PVC 1x8 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":9.8,"price":14.0,"contractor_price":11.9,"vip_price":10.5,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003797","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} -{"sku":"SD_TR_PVC_1X10_L08","description":"PVC 1x10 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":10.22,"price":14.6,"contractor_price":12.41,"vip_price":10.95,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003804","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} -{"sku":"SD_TR_PVC_1X10_L12","description":"PVC 1x10 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":10.43,"price":14.9,"contractor_price":12.67,"vip_price":11.18,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003811","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} -{"sku":"SD_TR_PVC_1X10_L16","description":"PVC 1x10 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":10.64,"price":15.2,"contractor_price":12.92,"vip_price":11.4,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003818","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} -{"sku":"SD_VN_VNT_WHI","description":"Vinyl VNT White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003825","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_SLD_WHI","description":"Vinyl SLD White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003832","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_FAS4_WHI","description":"Vinyl FAS4 White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003839","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_VNT_BRO","description":"Vinyl VNT Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"Brown","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003846","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_SLD_BRO","description":"Vinyl SLD Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003853","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_FAS4_BRO","description":"Vinyl FAS4 Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003860","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_VNT_SAN","description":"Vinyl VNT Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003867","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_SLD_SAN","description":"Vinyl SLD Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003874","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_VN_FAS4_SAN","description":"Vinyl FAS4 Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003881","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} -{"sku":"SD_AL_VNT_WHI","description":"Aluminum VNT White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003888","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_SLD_WHI","description":"Aluminum SLD White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003895","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_FAS4_WHI","description":"Aluminum FAS4 White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003902","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_VNT_BRO","description":"Aluminum VNT Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"Brown","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003909","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_SLD_BRO","description":"Aluminum SLD Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003916","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_FAS4_BRO","description":"Aluminum FAS4 Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003923","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_VNT_SAN","description":"Aluminum VNT Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003930","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_SLD_SAN","description":"Aluminum SLD Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003937","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} -{"sku":"SD_AL_FAS4_SAN","description":"Aluminum FAS4 Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"CEMTRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003944","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_TR_PVC_1X4_L08","description":"PVC 1x4 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":7.7,"price":11.0,"contractor_price":9.35,"vip_price":8.25,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003741","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} +{"sku":"SD_TR_PVC_1X4_L12","description":"PVC 1x4 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":7.91,"price":11.3,"contractor_price":9.61,"vip_price":8.48,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003748","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} +{"sku":"SD_TR_PVC_1X4_L16","description":"PVC 1x4 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":4,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":4,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":8.12,"price":11.6,"contractor_price":9.86,"vip_price":8.7,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003755","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} +{"sku":"SD_TR_PVC_1X6_L08","description":"PVC 1x6 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":8.54,"price":12.2,"contractor_price":10.37,"vip_price":9.15,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003762","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} +{"sku":"SD_TR_PVC_1X6_L12","description":"PVC 1x6 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":8.75,"price":12.5,"contractor_price":10.63,"vip_price":9.38,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003769","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} +{"sku":"SD_TR_PVC_1X6_L16","description":"PVC 1x6 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":6,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":6,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":8.96,"price":12.8,"contractor_price":10.88,"vip_price":9.6,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003776","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} +{"sku":"SD_TR_PVC_1X8_L08","description":"PVC 1x8 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":9.38,"price":13.4,"contractor_price":11.39,"vip_price":10.05,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003783","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} +{"sku":"SD_TR_PVC_1X8_L12","description":"PVC 1x8 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":9.59,"price":13.7,"contractor_price":11.65,"vip_price":10.28,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003790","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} +{"sku":"SD_TR_PVC_1X8_L16","description":"PVC 1x8 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":8,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":8,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":9.8,"price":14.0,"contractor_price":11.9,"vip_price":10.5,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003797","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} +{"sku":"SD_TR_PVC_1X10_L08","description":"PVC 1x10 Trim 8'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":8}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":8,"random_length":false,"length_in":96.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":16.8,"cost":10.22,"price":14.6,"contractor_price":12.41,"vip_price":10.95,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003804","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":181,"reorder_point":54,"reorder_qty":181},"WK":{"on_hand":54,"reorder_point":54,"reorder_qty":181},"LK":{"on_hand":18,"reorder_point":54,"reorder_qty":181}}} +{"sku":"SD_TR_PVC_1X10_L12","description":"PVC 1x10 Trim 12'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":12,"random_length":false,"length_in":144.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":25.2,"cost":10.43,"price":14.9,"contractor_price":12.67,"vip_price":11.18,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003811","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":231,"reorder_point":69,"reorder_qty":231},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":231},"LK":{"on_hand":23,"reorder_point":69,"reorder_qty":231}}} +{"sku":"SD_TR_PVC_1X10_L16","description":"PVC 1x10 Trim 16'","department":"Yard","category_slug":"siding_trim.exterior_trim","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":16}],"species":"PVC","grade":"#1","treatment":"S4S","board_thickness_in":0.75,"board_width_in":10,"board_length_ft":16,"random_length":false,"length_in":192.0,"width_in":10,"height_in":0.75,"stackable":true,"weight_lbs":33.6,"cost":10.64,"price":15.2,"contractor_price":12.92,"vip_price":11.4,"target_margin":30.0,"tax_class":"TAXABLE","image_family":"cedar_trim_board","barcode":"2000100003818","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":282,"reorder_point":84,"reorder_qty":282},"WK":{"on_hand":84,"reorder_point":84,"reorder_qty":282},"LK":{"on_hand":28,"reorder_point":84,"reorder_qty":282}}} +{"sku":"SD_VN_VNT_WHI","description":"Vinyl VNT White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003825","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_SLD_WHI","description":"Vinyl SLD White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003832","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_FAS4_WHI","description":"Vinyl FAS4 White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003839","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_VNT_BRO","description":"Vinyl VNT Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"Brown","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003846","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_SLD_BRO","description":"Vinyl SLD Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003853","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_FAS4_BRO","description":"Vinyl FAS4 Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003860","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_VNT_SAN","description":"Vinyl VNT Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"VNT","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003867","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_SLD_SAN","description":"Vinyl SLD Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"SLD","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":14.0,"price":20.59,"contractor_price":17.5,"vip_price":15.44,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003874","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_VN_FAS4_SAN","description":"Vinyl FAS4 Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Vinyl","grade":"FAS4","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":11.52,"cost":12.0,"price":17.65,"contractor_price":15.0,"vip_price":13.24,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"vinyl_soffit_panel","barcode":"2000100003881","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":149,"reorder_point":44,"reorder_qty":149},"WK":{"on_hand":44,"reorder_point":44,"reorder_qty":149},"LK":{"on_hand":14,"reorder_point":44,"reorder_qty":149}}} +{"sku":"SD_AL_VNT_WHI","description":"Aluminum VNT White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"White","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003888","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_SLD_WHI","description":"Aluminum SLD White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003895","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_FAS4_WHI","description":"Aluminum FAS4 White 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"White","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003902","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_VNT_BRO","description":"Aluminum VNT Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"Brown","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003909","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_SLD_BRO","description":"Aluminum SLD Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003916","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_FAS4_BRO","description":"Aluminum FAS4 Brown 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"Brown","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003923","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_VNT_SAN","description":"Aluminum VNT Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"VNT","treatment":"Sand","board_thickness_in":null,"board_width_in":12,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":12,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003930","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_SLD_SAN","description":"Aluminum SLD Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"SLD","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":19.6,"price":28.82,"contractor_price":24.5,"vip_price":21.62,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003937","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} +{"sku":"SD_AL_FAS4_SAN","description":"Aluminum FAS4 Sand 12'","department":"Yard","category_slug":"siding_trim.soffit_fascia","vendor_key":"FIBRETRIM_OK","uom_primary":"PCS","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":12.0}],"species":"Aluminum","grade":"FAS4","treatment":"Sand","board_thickness_in":null,"board_width_in":6,"board_length_ft":12.0,"random_length":false,"length_in":144,"width_in":6,"height_in":0.5,"stackable":true,"weight_lbs":16.13,"cost":16.8,"price":24.71,"contractor_price":21.0,"vip_price":18.53,"target_margin":32.0,"tax_class":"TAXABLE","image_family":"aluminum_soffit_panel","barcode":"2000100003944","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":177,"reorder_point":53,"reorder_qty":177},"WK":{"on_hand":53,"reorder_point":53,"reorder_qty":177},"LK":{"on_hand":17,"reorder_point":53,"reorder_qty":177}}} {"sku":"IN_FB_R12","description":"R-12 Fiberglass Batt 88 sf","department":"Yard","category_slug":"insulation_air.fiberglass_batts","vendor_key":"CAR_INS","uom_primary":"BAG","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":88}],"species":"Fiberglass","grade":"R12","treatment":"Unfaced","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":48,"width_in":15,"height_in":6.5,"stackable":true,"weight_lbs":8.8,"cost":35.2,"price":47.57,"contractor_price":40.43,"vip_price":35.68,"target_margin":26.0,"tax_class":"TAXABLE","image_family":"fiberglass_insulation_batt","barcode":"2000100003951","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":133,"reorder_point":39,"reorder_qty":133},"WK":{"on_hand":39,"reorder_point":39,"reorder_qty":133},"LK":{"on_hand":13,"reorder_point":39,"reorder_qty":133}}} {"sku":"IN_FB_R14","description":"R-14 Fiberglass Batt 75 sf","department":"Yard","category_slug":"insulation_air.fiberglass_batts","vendor_key":"CAR_INS","uom_primary":"BAG","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":75}],"species":"Fiberglass","grade":"R14","treatment":"Unfaced","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":48,"width_in":15,"height_in":6.5,"stackable":true,"weight_lbs":7.5,"cost":30.0,"price":40.54,"contractor_price":34.46,"vip_price":30.41,"target_margin":26.0,"tax_class":"TAXABLE","image_family":"fiberglass_insulation_batt","barcode":"2000100003958","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":125,"reorder_point":37,"reorder_qty":125},"WK":{"on_hand":37,"reorder_point":37,"reorder_qty":125},"LK":{"on_hand":12,"reorder_point":37,"reorder_qty":125}}} {"sku":"IN_FB_R20","description":"R-20 Fiberglass Batt 50 sf","department":"Yard","category_slug":"insulation_air.fiberglass_batts","vendor_key":"CAR_INS","uom_primary":"BAG","alternate_uoms":[{"uom":"SF","unit_qty":1,"stock_qty":50}],"species":"Fiberglass","grade":"R20","treatment":"Kraft Faced","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":48,"width_in":15,"height_in":5.5,"stackable":true,"weight_lbs":5.0,"cost":20.0,"price":27.03,"contractor_price":22.98,"vip_price":20.27,"target_margin":26.0,"tax_class":"TAXABLE","image_family":"fiberglass_insulation_batt","barcode":"2000100003965","is_commodity":false,"yards_stocked":["KEL-MAIN","WK","LK"],"inventory":{"KEL-MAIN":{"on_hand":110,"reorder_point":33,"reorder_qty":110},"WK":{"on_hand":33,"reorder_point":33,"reorder_qty":110},"LK":{"on_hand":11,"reorder_point":33,"reorder_qty":110}}} @@ -715,7 +715,7 @@ {"sku":"HT_HAM16","description":"Stone Hammer 16 oz Claw","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":2.5,"cost":11.75,"price":18.36,"contractor_price":15.61,"vip_price":13.77,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"claw_hammer","barcode":"2000100005008","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":95,"reorder_point":28,"reorder_qty":95},"WK":{"on_hand":28,"reorder_point":28,"reorder_qty":95},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"HT_HAM22","description":"Stone Hammer 22 oz Framing","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":3.5,"cost":13.25,"price":20.7,"contractor_price":17.6,"vip_price":15.53,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"claw_hammer","barcode":"2000100005015","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":101,"reorder_point":30,"reorder_qty":101},"WK":{"on_hand":30,"reorder_point":30,"reorder_qty":101},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"HT_WBAR","description":"Stone Wrecking Bar 36\"","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":7.0,"cost":18.5,"price":28.91,"contractor_price":24.57,"vip_price":21.68,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"wrecking_bar","barcode":"2000100005022","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":122,"reorder_point":36,"reorder_qty":122},"WK":{"on_hand":36,"reorder_point":36,"reorder_qty":122},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"HT_PLR","description":"Stone Pliers 8\" Channellock","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.6,"cost":8.9,"price":13.91,"contractor_price":11.82,"vip_price":10.43,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"pliers","barcode":"2000100005029","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":84,"reorder_point":25,"reorder_qty":84},"WK":{"on_hand":25,"reorder_point":25,"reorder_qty":84},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"HT_PLR","description":"Stone Pliers 8\" Tongue and Groove","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.6,"cost":8.9,"price":13.91,"contractor_price":11.82,"vip_price":10.43,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"pliers","barcode":"2000100005029","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":84,"reorder_point":25,"reorder_qty":84},"WK":{"on_hand":25,"reorder_point":25,"reorder_qty":84},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"HT_CUT","description":"Stone Cutters 9\" Side","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.7,"cost":9.05,"price":14.14,"contractor_price":12.02,"vip_price":10.61,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"pliers","barcode":"2000100005036","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":84,"reorder_point":25,"reorder_qty":84},"WK":{"on_hand":25,"reorder_point":25,"reorder_qty":84},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"HT_TAP25","description":"Stone Tape Measure 25'","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":1.5,"cost":10.25,"price":16.02,"contractor_price":13.62,"vip_price":12.02,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"tape_measure","barcode":"2000100005043","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":89,"reorder_point":26,"reorder_qty":89},"WK":{"on_hand":26,"reorder_point":26,"reorder_qty":89},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"HT_LVL48","description":"Stone Level 48\" Aluminum","department":"Home Center","category_slug":"hardware_tools.hand_tools","vendor_key":"HARD_WON","uom_primary":"EA","alternate_uoms":[],"species":"Tool","grade":"Standard","treatment":"Forged","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":2.5,"cost":11.75,"price":18.36,"contractor_price":15.61,"vip_price":13.77,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"level","barcode":"2000100005050","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":95,"reorder_point":28,"reorder_qty":95},"WK":{"on_hand":28,"reorder_point":28,"reorder_qty":95},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} @@ -826,13 +826,13 @@ {"sku":"FIX_TOILT","description":"Toilet Round Front White","department":"Home Center","category_slug":"plumbing.bath_fixtures","vendor_key":"OK_PLUMB","uom_primary":"EA","alternate_uoms":[],"species":"Vitreous China","grade":"Toilet","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":false,"weight_lbs":60.0,"cost":130.0,"price":200.0,"contractor_price":170.0,"vip_price":150.0,"target_margin":35.0,"tax_class":"TAXABLE","image_family":"bath_fixture_white","barcode":"2000100005785","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":440,"reorder_point":132,"reorder_qty":440},"WK":{"on_hand":132,"reorder_point":132,"reorder_qty":440},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"FIX_LAV","description":"Lavatory Sink White","department":"Home Center","category_slug":"plumbing.bath_fixtures","vendor_key":"OK_PLUMB","uom_primary":"EA","alternate_uoms":[],"species":"Vitreous China","grade":"Sink","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":false,"weight_lbs":25.0,"cost":50.0,"price":76.92,"contractor_price":65.38,"vip_price":57.69,"target_margin":35.0,"tax_class":"TAXABLE","image_family":"bath_fixture_white","barcode":"2000100005792","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":230,"reorder_point":69,"reorder_qty":230},"WK":{"on_hand":69,"reorder_point":69,"reorder_qty":230},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"FIX_TUB","description":"Bath Tub 5' White","department":"Home Center","category_slug":"plumbing.bath_fixtures","vendor_key":"OK_PLUMB","uom_primary":"EA","alternate_uoms":[],"species":"Chrome","grade":"Tub","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":false,"weight_lbs":90.0,"cost":200.0,"price":307.69,"contractor_price":261.54,"vip_price":230.77,"target_margin":35.0,"tax_class":"TAXABLE","image_family":"bath_fixture_white","barcode":"2000100005799","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":620,"reorder_point":186,"reorder_qty":620},"WK":{"on_hand":186,"reorder_point":186,"reorder_qty":620},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM142250","description":"14/2 Romex 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":16.0,"price":25.0,"contractor_price":21.25,"vip_price":18.75,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005806","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM122250","description":"12/2 Romex 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":23.0,"price":35.94,"contractor_price":30.55,"vip_price":26.96,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005813","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM102250","description":"10/2 Romex 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":35.0,"price":54.69,"contractor_price":46.49,"vip_price":41.02,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005820","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM143250","description":"14/3 Romex 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":22.0,"price":34.38,"contractor_price":29.22,"vip_price":25.79,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005827","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM123250","description":"12/3 Romex 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":32.0,"price":50.0,"contractor_price":42.5,"vip_price":37.5,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005834","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM141000","description":"14/2 Romex 1000'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":1000}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":83.33333333333333,"random_length":false,"length_in":12000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":80.0,"cost":64.0,"price":100.0,"contractor_price":85.0,"vip_price":75.0,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005841","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} -{"sku":"EL_NM121000","description":"12/2 Romex 1000'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":1000}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":83.33333333333333,"random_length":false,"length_in":12000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":80.0,"cost":92.0,"price":143.75,"contractor_price":122.19,"vip_price":107.81,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"romex_wire_coil","barcode":"2000100005848","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM142250","description":"14/2 NM-B Cable 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":16.0,"price":25.0,"contractor_price":21.25,"vip_price":18.75,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005806","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM122250","description":"12/2 NM-B Cable 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":23.0,"price":35.94,"contractor_price":30.55,"vip_price":26.96,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005813","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM102250","description":"10/2 NM-B Cable 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":35.0,"price":54.69,"contractor_price":46.49,"vip_price":41.02,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005820","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM143250","description":"14/3 NM-B Cable 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":22.0,"price":34.38,"contractor_price":29.22,"vip_price":25.79,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005827","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM123250","description":"12/3 NM-B Cable 250'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":250}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":20.833333333333332,"random_length":false,"length_in":3000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":20.0,"cost":32.0,"price":50.0,"contractor_price":42.5,"vip_price":37.5,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005834","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":200,"reorder_point":60,"reorder_qty":200},"WK":{"on_hand":60,"reorder_point":60,"reorder_qty":200},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM141000","description":"14/2 NM-B Cable 1000'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":1000}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":83.33333333333333,"random_length":false,"length_in":12000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":80.0,"cost":64.0,"price":100.0,"contractor_price":85.0,"vip_price":75.0,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005841","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} +{"sku":"EL_NM121000","description":"12/2 NM-B Cable 1000'","department":"Home Center","category_slug":"electrical.electrical_wire","vendor_key":"OK_ELEC","uom_primary":"RL","alternate_uoms":[{"uom":"LF","unit_qty":1,"stock_qty":1000}],"species":"Copper","grade":"NM-B","treatment":"PVC Jacket","board_thickness_in":null,"board_width_in":null,"board_length_ft":83.33333333333333,"random_length":false,"length_in":12000.0,"width_in":0.5,"height_in":0.5,"stackable":false,"weight_lbs":80.0,"cost":92.0,"price":143.75,"contractor_price":122.19,"vip_price":107.81,"target_margin":36.0,"tax_class":"TAXABLE","image_family":"nm_cable_coil","barcode":"2000100005848","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":560,"reorder_point":168,"reorder_qty":560},"WK":{"on_hand":168,"reorder_point":168,"reorder_qty":560},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"BX_BX14","description":"Outlet Box 14 cu in Plastic","department":"Home Center","category_slug":"electrical.boxes_conduit","vendor_key":"OK_ELEC","uom_primary":"EA","alternate_uoms":[],"species":"Plastic","grade":"Plastic","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.2,"cost":1.5,"price":2.42,"contractor_price":2.06,"vip_price":1.82,"target_margin":38.0,"tax_class":"TAXABLE","image_family":"electrical_outlet_box","barcode":"2000100005855","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":81,"reorder_point":24,"reorder_qty":81},"WK":{"on_hand":24,"reorder_point":24,"reorder_qty":81},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"BX_BX20","description":"Outlet Box 20 cu in Plastic","department":"Home Center","category_slug":"electrical.boxes_conduit","vendor_key":"OK_ELEC","uom_primary":"EA","alternate_uoms":[],"species":"Plastic","grade":"Plastic","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.2,"cost":1.8,"price":2.9,"contractor_price":2.47,"vip_price":2.18,"target_margin":38.0,"tax_class":"TAXABLE","image_family":"electrical_outlet_box","barcode":"2000100005862","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":81,"reorder_point":24,"reorder_qty":81},"WK":{"on_hand":24,"reorder_point":24,"reorder_qty":81},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} {"sku":"BX_BX4SQ","description":"4 Square Box Metal","department":"Home Center","category_slug":"electrical.boxes_conduit","vendor_key":"OK_ELEC","uom_primary":"EA","alternate_uoms":[],"species":"Metal","grade":"Metal","treatment":"Standard","board_thickness_in":null,"board_width_in":null,"board_length_ft":null,"random_length":false,"length_in":null,"width_in":null,"height_in":null,"stackable":true,"weight_lbs":0.5,"cost":2.5,"price":4.03,"contractor_price":3.43,"vip_price":3.02,"target_margin":38.0,"tax_class":"TAXABLE","image_family":"electrical_outlet_box","barcode":"2000100005869","is_commodity":false,"yards_stocked":["KEL-MAIN","WK"],"inventory":{"KEL-MAIN":{"on_hand":83,"reorder_point":24,"reorder_qty":83},"WK":{"on_hand":24,"reorder_point":24,"reorder_qty":83},"LK":{"on_hand":0,"reorder_point":0,"reorder_qty":0}}} diff --git a/core/internal/app/seed/demodata/vendor_keys.json b/core/internal/app/seed/demodata/vendor_keys.json index 9dfd76b14..8402fe3a5 100644 --- a/core/internal/app/seed/demodata/vendor_keys.json +++ b/core/internal/app/seed/demodata/vendor_keys.json @@ -157,8 +157,8 @@ "notes": "Invented connector brand. Joist hangers, hurricane ties, hold downs." }, { - "key": "CEMTRIM_OK", - "name": "Okanagan Cemtrim Ltd", + "key": "FIBRETRIM_OK", + "name": "Okanagan Fibre Trim Ltd", "category": "Fibre cement siding and trim", "payment_terms": "Net 30", "average_lead_time_days": 10, diff --git a/core/internal/app/seed/dispatch_day.go b/core/internal/app/seed/dispatch_day.go index a38d9164f..f9a63d10d 100644 --- a/core/internal/app/seed/dispatch_day.go +++ b/core/internal/app/seed/dispatch_day.go @@ -144,7 +144,7 @@ var productGeometry = []geometry{ noGeometry("HANGER-28"), noGeometry("HANGER-210"), noGeometry("TIE-H1"), - noGeometry("SIMP-LUS28"), + noGeometry("HANGER-28FM"), // --- Insulation: compressed bags --- dims("INS-R13-15", 48, 16, 20, true), diff --git a/core/internal/app/seed/seed.go b/core/internal/app/seed/seed.go index c1616966e..4f6d2ef30 100644 --- a/core/internal/app/seed/seed.go +++ b/core/internal/app/seed/seed.go @@ -470,7 +470,7 @@ func Run() { {"3/4 OSB T&G 4x8", "OSB-34-TG", "PCS", "Gable Building Supply", "Sheet Goods", 22.00, 34.00, 65.0, 100, 250}, {"7/16 OSB 4x8", "OSB-12", "PCS", "Gable Building Supply", "Sheet Goods", 12.00, 19.50, 44.0, 120, 300}, {"1/2 Drywall Regular 4x8", "DW-12-REG", "PCS", "Gable Building Supply", "Sheet Goods", 11.00, 16.00, 57.0, 100, 250}, - {"5/8 Drywall Firecode 4x8", "DW-58-FC", "PCS", "Gable Building Supply", "Sheet Goods", 14.00, 21.00, 70.0, 60, 150}, + {"5/8 Drywall Type X 4x8", "DW-58-FC", "PCS", "Gable Building Supply", "Sheet Goods", 14.00, 21.00, 70.0, 60, 150}, {"3-1/4\" Common Nails (25kg)", "NAIL-16D-50", "BOX", "Mountain Fastener Supply", "Hardware", 45.00, 65.00, 50.0, 20, 50}, {"3\" Common Nails (25kg)", "NAIL-10D-50", "BOX", "Mountain Fastener Supply", "Hardware", 45.00, 65.00, 50.0, 20, 50}, {"3\" Deck Screws (2.5kg)", "SCR-DECK-3-5", "BOX", "Mountain Fastener Supply", "Hardware", 18.00, 29.99, 5.0, 40, 100}, @@ -478,7 +478,7 @@ func Run() { {"Joist Hanger 2x8", "HANGER-28", "PCS", "Okanagan Hardware Distribution", "Hardware", 0.95, 1.65, 0.6, 150, 400}, {"Joist Hanger 2x10", "HANGER-210", "PCS", "Okanagan Hardware Distribution", "Hardware", 1.10, 1.85, 0.7, 100, 300}, {"Hurricane Tie H1", "TIE-H1", "PCS", "Okanagan Hardware Distribution", "Hardware", 0.65, 1.15, 0.3, 200, 500}, - {"Simpson Strong-Tie LUS28", "SIMP-LUS28", "PCS", "Okanagan Hardware Distribution", "Hardware", 0.90, 1.50, 0.4, 150, 400}, + {"Face Mount Joist Hanger 2x8", "HANGER-28FM", "PCS", "Okanagan Hardware Distribution", "Hardware", 0.90, 1.50, 0.4, 150, 400}, {"Architectural Shingles 30yr", "RF-ARCH-30", "BUNDLE", "BC Roofing Wholesale", "Roofing", 28.00, 42.00, 70.0, 50, 100}, {"Architectural Shingles (Black)", "RF-SH-BLK", "BUNDLE", "BC Roofing Wholesale", "Roofing", 28.00, 42.00, 70.0, 50, 100}, {"Architectural Shingles (Weathered Wood)", "RF-SH-WW", "BUNDLE", "BC Roofing Wholesale", "Roofing", 28.00, 42.00, 70.0, 50, 100}, @@ -506,15 +506,15 @@ func Run() { {"Flashing J 6 X 6 X 10", "CORN2006", "EA", "Gable Building Supply", "Cornice", 15.50, 23.25, 3.0, 20, 50}, {"Flashing Z Bar 3/4 X 10'", "CORN2009", "EA", "Gable Building Supply", "Cornice", 3.50, 5.25, 1.5, 30, 60}, {"Silicone Clear Caulk", "CORNCLEAR", "EA", "Okanagan Hardware Distribution", "Cornice", 5.75, 8.65, 0.8, 40, 80}, - {"Cemtrim Textured 7/16 X 4 X 12", "CORNCTRM412+", "EA", "Gable Building Supply", "Cornice", 7.54, 11.31, 12.0, 50, 120}, - {"Cemtrim Textured 7/16 X 6 X 12", "CORNCTRMG12+", "EA", "Gable Building Supply", "Cornice", 11.94, 17.91, 18.0, 30, 80}, + {"Composite Trim Textured 7/16 X 4 X 12", "CORNCTRM412+", "EA", "Gable Building Supply", "Cornice", 7.54, 11.31, 12.0, 50, 120}, + {"Composite Trim Textured 7/16 X 6 X 12", "CORNCTRMG12+", "EA", "Gable Building Supply", "Cornice", 11.94, 17.91, 18.0, 30, 80}, {"Vinyl H Mold 1/4 X 12'", "CORNHMOLD14", "EA", "Gable Building Supply", "Cornice", 4.00, 6.00, 1.0, 30, 60}, {"Poly Black 18 X 300", "CORNPOLY18", "RL", "Okanagan Hardware Distribution", "Cornice", 23.12, 34.68, 25.0, 10, 25}, - {"Solid Soffit Hardie Textured 1/4 X 12 X 12", "CORNSFT1212", "EA", "Gable Building Supply", "Cornice", 15.25, 22.88, 20.0, 30, 60}, - {"Solid Soffit Hardie Textured 1/4 X 16 X 12", "CORNSFT1612", "EA", "Gable Building Supply", "Cornice", 20.45, 30.68, 28.0, 20, 50}, - {"Vented Soffit Hardie Textured 1/4 X 16 X 12", "CORNSFT1612V", "EA", "Gable Building Supply", "Cornice", 26.15, 39.23, 30.0, 25, 60}, - {"Vented Soffit Hardie Textured 1/4 X 24 X 8", "CORNSFT2408V", "EA", "Gable Building Supply", "Cornice", 17.50, 26.25, 22.0, 20, 50}, - {"Sheathing 1/8 X 4 X 9 (Green) NSP DRYLine TSX", "CORNSHTGR49", "EA", "Gable Building Supply", "Cornice", 9.36, 14.04, 24.0, 40, 100}, + {"Solid Soffit Fibre Cement Textured 1/4 X 12 X 12", "CORNSFT1212", "EA", "Gable Building Supply", "Cornice", 15.25, 22.88, 20.0, 30, 60}, + {"Solid Soffit Fibre Cement Textured 1/4 X 16 X 12", "CORNSFT1612", "EA", "Gable Building Supply", "Cornice", 20.45, 30.68, 28.0, 20, 50}, + {"Vented Soffit Fibre Cement Textured 1/4 X 16 X 12", "CORNSFT1612V", "EA", "Gable Building Supply", "Cornice", 26.15, 39.23, 30.0, 25, 60}, + {"Vented Soffit Fibre Cement Textured 1/4 X 24 X 8", "CORNSFT2408V", "EA", "Gable Building Supply", "Cornice", 17.50, 26.25, 22.0, 20, 50}, + {"Sheathing 1/8 X 4 X 9 (Green) NSP Weather Barrier", "CORNSHTGR49", "EA", "Gable Building Supply", "Cornice", 9.36, 14.04, 24.0, 40, 100}, {"Window Tape 6\" (100')", "CORNTAPE", "RL", "Okanagan Hardware Distribution", "Cornice", 22.00, 33.00, 3.0, 15, 30}, // Random-length / economy grade @@ -1087,7 +1087,7 @@ func Run() { var podURL, podSigner *string var podTS *time.Time if dStatus == "DELIVERED" { - u := "https://storage.gable.com/pod/" + uuid.New().String() + ".jpg" + u := "https://storage.gablebuildingsupply.example/pod/" + uuid.New().String() + ".jpg" n := "Site Foreman" t := sDate.Add(time.Duration(8+rand.Intn(6)) * time.Hour) podURL = &u From 7cdc159205a8540d42a602e32181488d17e25ac8 Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 09:39:43 -0700 Subject: [PATCH 3/8] seed: invented staff surnames that are not brands Vince Nordstrom becomes Vince Ashgrove and Tara Kellogg becomes Tara Penhallow (STF-021, STF-024). The other staff surnames were read and none is a brand, a famous person or a company. Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- core/internal/app/seed/demodata/staff.jsonl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/internal/app/seed/demodata/staff.jsonl b/core/internal/app/seed/demodata/staff.jsonl index 0c4d8c677..924dee7a7 100644 --- a/core/internal/app/seed/demodata/staff.jsonl +++ b/core/internal/app/seed/demodata/staff.jsonl @@ -15,10 +15,10 @@ {"email":"home.center.associate.kel.1@brand.example","full_name":"Una Zellweger","staff_no":"STF-018","role":"home_center_associate","home_yard":"KEL-MAIN","active":true} {"email":"home.center.associate.kel.2@brand.example","full_name":"Yara Yardley","staff_no":"STF-019","role":"home_center_associate","home_yard":"KEL-MAIN","active":true} {"email":"home.center.associate.kel.3@brand.example","full_name":"Quinn Gardiner","staff_no":"STF-020","role":"home_center_associate","home_yard":"KEL-MAIN","active":true} -{"email":"home.center.associate.wk.1@brand.example","full_name":"Vince Nordstrom","staff_no":"STF-021","role":"home_center_associate","home_yard":"WK","active":true} +{"email":"home.center.associate.wk.1@brand.example","full_name":"Vince Ashgrove","staff_no":"STF-021","role":"home_center_associate","home_yard":"WK","active":true} {"email":"home.center.associate.wk.2@brand.example","full_name":"Olga Fairweather","staff_no":"STF-022","role":"home_center_associate","home_yard":"WK","active":true} {"email":"home.center.associate.lk.1@brand.example","full_name":"Kira Bergstrom","staff_no":"STF-023","role":"home_center_associate","home_yard":"LK","active":true} -{"email":"cashier.kel.1@brand.example","full_name":"Tara Kellogg","staff_no":"STF-024","role":"cashier","home_yard":"KEL-MAIN","active":true} +{"email":"cashier.kel.1@brand.example","full_name":"Tara Penhallow","staff_no":"STF-024","role":"cashier","home_yard":"KEL-MAIN","active":true} {"email":"cashier.kel.2@brand.example","full_name":"Mira Vanderpol","staff_no":"STF-025","role":"cashier","home_yard":"KEL-MAIN","active":true} {"email":"cashier.wk.1@brand.example","full_name":"Finn Underhill","staff_no":"STF-026","role":"cashier","home_yard":"WK","active":true} {"email":"cashier.lk.1@brand.example","full_name":"Avril MacNaught","staff_no":"STF-027","role":"cashier","home_yard":"LK","active":true} From 571372e4fcc2f1820452dbfaa4aca099c403f931 Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 09:53:18 -0700 Subject: [PATCH 4/8] seed: a reserved .example domain in place of the real one The AI_LM demo staff, their tests and fixtures use gablebuildingsupply.example. Migration 080 stays as applied history; migration 118 rewrites exactly its three staff addresses, and a test pins that a migrated database holds none. Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- core/internal/app/seed/demodata.go | 2 +- core/internal/app/seed/demodata_test.go | 10 ++++- .../integrations/ailm_contract_test.go | 4 +- core/internal/integrations/ailm_test.go | 38 +++++++++---------- .../ailm_validate_staff_entitled.json | 2 +- .../testdata/ailm_validate_staff_request.json | 2 +- core/internal/techadmin/migration_test.go | 2 +- core/migrations/118_staff_demo_domain.sql | 21 ++++++++++ .../down/118_staff_demo_domain_down.sql | 15 ++++++++ .../tech_admin/StaffModuleAccess.test.ts | 6 +-- web/e2e/admin.spec.ts | 6 +-- 11 files changed, 76 insertions(+), 32 deletions(-) create mode 100644 core/migrations/118_staff_demo_domain.sql create mode 100644 core/migrations/down/118_staff_demo_domain_down.sql diff --git a/core/internal/app/seed/demodata.go b/core/internal/app/seed/demodata.go index 3e8173839..7c2f552ec 100644 --- a/core/internal/app/seed/demodata.go +++ b/core/internal/app/seed/demodata.go @@ -746,7 +746,7 @@ func importCustomers(ctx context.Context, db *sql.DB, yards map[string]uuid.UUID // importStaff reads demodata/staff.jsonl and upserts each row into staff // and user_locations (the staff-home / yard grant). The legacy seed's three -// AI_LM demo rows (dispatcher@gable.com, yard@gable.com, admin@gable.com) +// AI_LM demo rows (dispatcher@gablebuildingsupply.example, yard@gablebuildingsupply.example, admin@gablebuildingsupply.example) // and the nine multi yard personas live in the same table and are preserved. func importStaff(ctx context.Context, db *sql.DB, yards map[string]uuid.UUID) error { scanner := bufio.NewScanner(bytes.NewReader(staffData)) diff --git a/core/internal/app/seed/demodata_test.go b/core/internal/app/seed/demodata_test.go index f0c011c0c..2d2776acf 100644 --- a/core/internal/app/seed/demodata_test.go +++ b/core/internal/app/seed/demodata_test.go @@ -117,6 +117,15 @@ func TestDemoImport(t *testing.T) { } db, dbURL := demoImportDB(t) runCommand(t, dbURL, "./cmd/migrate") + // Migrations 080 and 118 together: a migrated database, before any seed + // run, holds no row on the real domain. + var onRealDomain int + if err := db.QueryRow(`SELECT COUNT(*) FROM staff WHERE email ILIKE '%@gable.com'`).Scan(&onRealDomain); err != nil { + t.Fatalf("count staff on the real domain: %v", err) + } + if onRealDomain != 0 { + t.Errorf("a migrated database holds %d staff rows on @gable.com", onRealDomain) + } // The tenant takes a currency other than the documents' column default // (USD), so a history document that fell back to the default would show. res, err := db.Exec(`UPDATE system_settings SET value = 'CAD' WHERE key IN ('currency.default', 'currency.enabled')`) @@ -221,7 +230,6 @@ func TestDemoImport(t *testing.T) { {"products", "vendor"}, {"products", "category"}, {"vendors", "name"}, - {"vendors", "vendor_key"}, {"staff", "email"}, {"staff", "full_name"}, } { diff --git a/core/internal/integrations/ailm_contract_test.go b/core/internal/integrations/ailm_contract_test.go index 28a9f1a20..0e461a2b6 100644 --- a/core/internal/integrations/ailm_contract_test.go +++ b/core/internal/integrations/ailm_contract_test.go @@ -334,7 +334,7 @@ func TestAILMValidateStaffResponseContract(t *testing.T) { body string golden string }{ - {"entitled", `{"email":"dispatcher@gable.com"}`, "ailm_validate_staff_entitled.json"}, + {"entitled", `{"email":"dispatcher@gablebuildingsupply.example"}`, "ailm_validate_staff_entitled.json"}, {"unknown", `{"email":"stranger@example.com"}`, "ailm_validate_staff_unknown.json"}, } @@ -440,7 +440,7 @@ func TestAILMRequestContract(t *testing.T) { func TestAILMValidateStaffRequestContract(t *testing.T) { t.Parallel() - body := mustIndent(t, map[string]string{"email": "dispatcher@gable.com"}) + body := mustIndent(t, map[string]string{"email": "dispatcher@gablebuildingsupply.example"}) assertGolden(t, "ailm_validate_staff_request.json", body) srv := newTestServer(fullFakeStore(), testKey) diff --git a/core/internal/integrations/ailm_test.go b/core/internal/integrations/ailm_test.go index 62a3c4f45..71f41bca9 100644 --- a/core/internal/integrations/ailm_test.go +++ b/core/internal/integrations/ailm_test.go @@ -228,25 +228,25 @@ func fixtureOrders() []IntegrationOrderResponse { func fixtureStaff() map[string]*staffLookup { return map[string]*staffLookup{ - "dispatcher@gable.com": { - Found: true, ID: staffUUID, Email: "dispatcher@gable.com", + "dispatcher@gablebuildingsupply.example": { + Found: true, ID: staffUUID, Email: "dispatcher@gablebuildingsupply.example", Name: "Dana Ramirez", Role: "dispatcher", Active: true, Modules: []string{"ai_lm"}, }, - "onleave@gable.com": { + "onleave@gablebuildingsupply.example": { // Granted the module but deactivated: entitlement must be false. - Found: true, ID: staffUUID, Email: "onleave@gable.com", + Found: true, ID: staffUUID, Email: "onleave@gablebuildingsupply.example", Name: "Sam Vega", Role: "dispatcher", Active: false, Modules: []string{"ai_lm"}, }, - "yard@gable.com": { + "yard@gablebuildingsupply.example": { // Active, but AI_LM is not among their effective modules. - Found: true, ID: staffUUID, Email: "yard@gable.com", + Found: true, ID: staffUUID, Email: "yard@gablebuildingsupply.example", Name: "Yuki Tan", Role: "yard", Active: true, Modules: []string{"pos"}, }, - "noroles@gable.com": { - Found: true, ID: staffUUID, Email: "noroles@gable.com", + "noroles@gablebuildingsupply.example": { + Found: true, ID: staffUUID, Email: "noroles@gablebuildingsupply.example", Name: "Pat Doe", Role: "", Active: true, Modules: nil, }, } @@ -337,7 +337,7 @@ func TestAILMEndpointsRequireIntegrationKey(t *testing.T) { {http.MethodGet, "/api/integration/locations", ""}, {http.MethodGet, "/api/integration/orders?date=2026-08-21&status=CONFIRMED", ""}, {http.MethodPost, "/api/integration/delivery-routes", `{"vehicle_id":"` + vehicleUUID + `"}`}, - {http.MethodPost, "/api/integration/validate-staff", `{"email":"dispatcher@gable.com"}`}, + {http.MethodPost, "/api/integration/validate-staff", `{"email":"dispatcher@gablebuildingsupply.example"}`}, } cases := []struct { @@ -1043,45 +1043,45 @@ func TestValidateStaff(t *testing.T) { }{ { name: "entitled staff member", - body: `{"email":"dispatcher@gable.com"}`, + body: `{"email":"dispatcher@gablebuildingsupply.example"}`, wantCode: http.StatusOK, - wantJSON: `{"staff_id":"` + staffUUID + `","email":"dispatcher@gable.com", + wantJSON: `{"staff_id":"` + staffUUID + `","email":"dispatcher@gablebuildingsupply.example", "name":"Dana Ramirez","entitled":true, "roles":["dispatcher"],"modules":["ai_lm"]}`, }, { name: "email lookup is case-insensitive", - body: `{"email":"Dispatcher@Gable.com"}`, + body: `{"email":"Dispatcher@GableBuildingSupply.Example"}`, wantCode: http.StatusOK, - wantJSON: `{"staff_id":"` + staffUUID + `","email":"dispatcher@gable.com", + wantJSON: `{"staff_id":"` + staffUUID + `","email":"dispatcher@gablebuildingsupply.example", "name":"Dana Ramirez","entitled":true, "roles":["dispatcher"],"modules":["ai_lm"]}`, }, { name: "granted but deactivated staff member is not entitled", - body: `{"email":"onleave@gable.com"}`, + body: `{"email":"onleave@gablebuildingsupply.example"}`, // 200, not 401: AI_LM's client turns any non-2xx into a transport // error and would report "GableLBM is down" for a failed login. wantCode: http.StatusOK, - wantJSON: `{"staff_id":"` + staffUUID + `","email":"onleave@gable.com", + wantJSON: `{"staff_id":"` + staffUUID + `","email":"onleave@gablebuildingsupply.example", "name":"Sam Vega","entitled":false, "roles":["dispatcher"],"modules":["ai_lm"]}`, }, { name: "active staff member without the ai_lm module is not entitled", - body: `{"email":"yard@gable.com"}`, + body: `{"email":"yard@gablebuildingsupply.example"}`, wantCode: http.StatusOK, - wantJSON: `{"staff_id":"` + staffUUID + `","email":"yard@gable.com", + wantJSON: `{"staff_id":"` + staffUUID + `","email":"yard@gablebuildingsupply.example", "name":"Yuki Tan","entitled":false, "roles":["yard"],"modules":["pos"]}`, }, { name: "roles and modules are never null", - body: `{"email":"noroles@gable.com"}`, + body: `{"email":"noroles@gablebuildingsupply.example"}`, // AI_LM copies Roles straight into a JWT claim; a null would // marshal as `null` in the token instead of an empty array. wantCode: http.StatusOK, - wantJSON: `{"staff_id":"` + staffUUID + `","email":"noroles@gable.com", + wantJSON: `{"staff_id":"` + staffUUID + `","email":"noroles@gablebuildingsupply.example", "name":"Pat Doe","entitled":false,"roles":[],"modules":[]}`, }, { diff --git a/core/internal/integrations/testdata/ailm_validate_staff_entitled.json b/core/internal/integrations/testdata/ailm_validate_staff_entitled.json index 4ecc86ef5..f70aa3724 100644 --- a/core/internal/integrations/testdata/ailm_validate_staff_entitled.json +++ b/core/internal/integrations/testdata/ailm_validate_staff_entitled.json @@ -1,6 +1,6 @@ { "staff_id": "66666666-6666-4666-8666-111111111111", - "email": "dispatcher@gable.com", + "email": "dispatcher@gablebuildingsupply.example", "name": "Dana Ramirez", "entitled": true, "roles": [ diff --git a/core/internal/integrations/testdata/ailm_validate_staff_request.json b/core/internal/integrations/testdata/ailm_validate_staff_request.json index 73e9e5e17..0cda4e6fd 100644 --- a/core/internal/integrations/testdata/ailm_validate_staff_request.json +++ b/core/internal/integrations/testdata/ailm_validate_staff_request.json @@ -1,3 +1,3 @@ { - "email": "dispatcher@gable.com" + "email": "dispatcher@gablebuildingsupply.example" } diff --git a/core/internal/techadmin/migration_test.go b/core/internal/techadmin/migration_test.go index 429d8f9c9..7137dd398 100644 --- a/core/internal/techadmin/migration_test.go +++ b/core/internal/techadmin/migration_test.go @@ -127,7 +127,7 @@ func TestMigration095_BackfillsRowsThatExist(t *testing.T) { ('00000000-0000-0000-0000-0000000000a1','First RFC','draft','p1','s1','c1', now() - interval '2 hours', now() - interval '2 hours'), ('00000000-0000-0000-0000-0000000000a2','Second RFC','approved','p2','s2', NULL, NULL, NULL); INSERT INTO staff (id, email, full_name, staff_no, role, active) VALUES - ('00000000-0000-0000-0000-0000000000b1','dana@gable.com','Dana Ramirez','STF-101','dispatcher',TRUE); + ('00000000-0000-0000-0000-0000000000b1','dana@gablebuildingsupply.example','Dana Ramirez','STF-101','dispatcher',TRUE); INSERT INTO api_keys (id, name, key_hash, key_prefix, scopes, created_at) VALUES ('00000000-0000-0000-0000-0000000000c1','legacy','h','sk_live_xx','{quotes:read}', NULL);`); err != nil { t.Fatalf("legacy rows: %v", err) diff --git a/core/migrations/118_staff_demo_domain.sql b/core/migrations/118_staff_demo_domain.sql new file mode 100644 index 000000000..30f13f8b6 --- /dev/null +++ b/core/migrations/118_staff_demo_domain.sql @@ -0,0 +1,21 @@ +-- SPDX-License-Identifier: LicenseRef-OpenLBM-Commons-1.0 +-- SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributors + +-- Migration: 118_staff_demo_domain +-- Description: migration 080 seeded three demo staff rows on a real domain +-- (gable.com). A demo address belongs on a reserved .example domain, so this +-- rewrites exactly those three values and nothing else. A row is left alone +-- when the new address is already taken, and the staff id (so every module +-- grant) is unchanged. + +UPDATE staff SET email = 'dispatcher@gablebuildingsupply.example' +WHERE email = 'dispatcher@gable.com' + AND NOT EXISTS (SELECT 1 FROM staff WHERE email = 'dispatcher@gablebuildingsupply.example'); + +UPDATE staff SET email = 'yard@gablebuildingsupply.example' +WHERE email = 'yard@gable.com' + AND NOT EXISTS (SELECT 1 FROM staff WHERE email = 'yard@gablebuildingsupply.example'); + +UPDATE staff SET email = 'admin@gablebuildingsupply.example' +WHERE email = 'admin@gable.com' + AND NOT EXISTS (SELECT 1 FROM staff WHERE email = 'admin@gablebuildingsupply.example'); diff --git a/core/migrations/down/118_staff_demo_domain_down.sql b/core/migrations/down/118_staff_demo_domain_down.sql new file mode 100644 index 000000000..a39de2249 --- /dev/null +++ b/core/migrations/down/118_staff_demo_domain_down.sql @@ -0,0 +1,15 @@ +-- SPDX-License-Identifier: LicenseRef-OpenLBM-Commons-1.0 +-- SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributors + +-- Rollback for 118_staff_demo_domain.sql. +-- +-- Lives in migrations/down/ so cmd/migrate's `migrations/*.sql` glob cannot +-- pick it up and apply it as a forward migration. Apply by hand. +-- +-- The addresses stay on the reserved domain on purpose: the old values were a +-- real domain, and an operator may have edited a row since. + +DO $$ +BEGIN + RAISE NOTICE '118 down: the demo staff addresses stay on the reserved domain'; +END $$; diff --git a/web/apps/desk/src/pages/admin/tech_admin/StaffModuleAccess.test.ts b/web/apps/desk/src/pages/admin/tech_admin/StaffModuleAccess.test.ts index 0432c99fd..3f76faa66 100644 --- a/web/apps/desk/src/pages/admin/tech_admin/StaffModuleAccess.test.ts +++ b/web/apps/desk/src/pages/admin/tech_admin/StaffModuleAccess.test.ts @@ -34,7 +34,7 @@ function roster(danaHasAILM = true): StaffMember[] { return [ { id: DANA, - email: 'dispatcher@gable.com', + email: 'dispatcher@gablebuildingsupply.example', full_name: 'Dana Ramirez', staff_no: 'STF-001', role: 'dispatcher', @@ -46,7 +46,7 @@ function roster(danaHasAILM = true): StaffMember[] { }, { id: YUKI, - email: 'yard@gable.com', + email: 'yard@gablebuildingsupply.example', full_name: 'Yuki Tan', staff_no: null, role: 'yard', @@ -198,7 +198,7 @@ describe('Staff tab — roster', () => { const dana = Array.from(el.querySelectorAll('tbody tr')).find((tr) => text(tr).includes('Dana Ramirez'), )! - expect(text(dana)).toContain('dispatcher@gable.com') + expect(text(dana)).toContain('dispatcher@gablebuildingsupply.example') expect(text(dana)).toContain('STF-001') expect(text(dana)).toContain('Active') diff --git a/web/e2e/admin.spec.ts b/web/e2e/admin.spec.ts index 42aa2fa65..c7eb07246 100644 --- a/web/e2e/admin.spec.ts +++ b/web/e2e/admin.spec.ts @@ -94,8 +94,8 @@ test.describe('Tech admin flow on the new contract', () => { // The seeded roster renders with each member's grant state once the // tab's own loads finish. await expect(page.getByText('Staff & Module Access')).toBeVisible(); - await expect(page.getByText('dispatcher@gable.com')).toBeVisible(); - const yuki = page.locator('tr', { hasText: 'yard@gable.com' }); + await expect(page.getByText('dispatcher@gablebuildingsupply.example')).toBeVisible(); + const yuki = page.locator('tr', { hasText: 'yard@gablebuildingsupply.example' }); await expect(yuki).toContainText('Yuki Tan'); // Grant AI_LM to the inactive yard member: the write carries the staff @@ -128,7 +128,7 @@ test.describe('Tech admin flow on the new contract', () => { await toggle.click(); expect((await flip).status()).toBe(200); await expect(toggle).toHaveAttribute('aria-checked', 'false'); - const dana = page.locator('tr', { hasText: 'dispatcher@gable.com' }); + const dana = page.locator('tr', { hasText: 'dispatcher@gablebuildingsupply.example' }); await expect(dana.locator('input[type="checkbox"]')).toBeChecked(); await page.screenshot({ path: path.join(SHOTS_DIR, 'admin-staff-disabled.png') }); From 0343381b41aa87476d6d4d0fa457432f082f52bf Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 09:53:47 -0700 Subject: [PATCH 5/8] seed: re-record the goldens and list the moved values Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- .../testdata/goldens/dashboard.json | 8 +- .../testdata/goldens/portal_quotes.json | 12 +- .../testdata/goldens/pos.json | 120 +++--- .../testdata/goldens/purchase_order_flow.json | 342 +++++++++--------- docs/refactor/CONTRACT-CHANGES.md | 2 + 5 files changed, 243 insertions(+), 241 deletions(-) diff --git a/core/internal/characterization/testdata/goldens/dashboard.json b/core/internal/characterization/testdata/goldens/dashboard.json index b88dfd036..abf6dd8f5 100644 --- a/core/internal/characterization/testdata/goldens/dashboard.json +++ b/core/internal/characterization/testdata/goldens/dashboard.json @@ -30,7 +30,7 @@ "alert_type": "LOW_STOCK", "current_qty": 12, "location_id": "", - "name": "Sheathing 1/8 X 4 X 9 (Green) NSP DRYLine TSX", + "name": "Sheathing 1/8 X 4 X 9 (Green) NSP Weather Barrier", "product_id": "", "reorder_qty": 40, "sku": "CORNSHTGR49" @@ -39,10 +39,10 @@ "alert_type": "LOW_STOCK", "current_qty": 12, "location_id": "", - "name": "Simpson Strong-Tie LUS28", + "name": "Face Mount Joist Hanger 2x8", "product_id": "", "reorder_qty": 150, - "sku": "SIMP-LUS28" + "sku": "HANGER-28FM" }, { "alert_type": "LOW_STOCK", @@ -75,7 +75,7 @@ "alert_type": "LOW_STOCK", "current_qty": 17, "location_id": "", - "name": "Vented Soffit Hardie Textured 1/4 X 24 X 8", + "name": "Vented Soffit Fibre Cement Textured 1/4 X 24 X 8", "product_id": "", "reorder_qty": 20, "sku": "CORNSFT2408V" diff --git a/core/internal/characterization/testdata/goldens/portal_quotes.json b/core/internal/characterization/testdata/goldens/portal_quotes.json index 38a863fa4..e54b457d0 100644 --- a/core/internal/characterization/testdata/goldens/portal_quotes.json +++ b/core/internal/characterization/testdata/goldens/portal_quotes.json @@ -697,7 +697,7 @@ "lines": [ { "customer_note": "", - "description": "5/8 Drywall Firecode 4x8", + "description": "5/8 Drywall Type X 4x8", "id": "", "is_special_order": false, "line_total": 819, @@ -847,7 +847,7 @@ }, { "customer_note": "", - "description": "Vented Soffit Hardie Textured 1/4 X 24 X 8", + "description": "Vented Soffit Fibre Cement Textured 1/4 X 24 X 8", "id": "", "is_special_order": false, "line_total": 2703.75, @@ -873,7 +873,7 @@ }, { "customer_note": "", - "description": "Cemtrim Textured 7/16 X 6 X 12", + "description": "Composite Trim Textured 7/16 X 6 X 12", "id": "", "is_special_order": false, "line_total": 1504.44, @@ -919,7 +919,7 @@ }, { "customer_note": "", - "description": "Vented Soffit Hardie Textured 1/4 X 16 X 12", + "description": "Vented Soffit Fibre Cement Textured 1/4 X 16 X 12", "id": "", "is_special_order": false, "line_total": 3687.62, @@ -932,7 +932,7 @@ }, { "customer_note": "", - "description": "Vented Soffit Hardie Textured 1/4 X 16 X 12", + "description": "Vented Soffit Fibre Cement Textured 1/4 X 16 X 12", "id": "", "is_special_order": false, "line_total": 274.61, @@ -945,7 +945,7 @@ }, { "customer_note": "", - "description": "Sheathing 1/8 X 4 X 9 (Green) NSP DRYLine TSX", + "description": "Sheathing 1/8 X 4 X 9 (Green) NSP Weather Barrier", "id": "", "is_special_order": false, "line_total": 463.32, diff --git a/core/internal/characterization/testdata/goldens/pos.json b/core/internal/characterization/testdata/goldens/pos.json index 23cfa2bff..a166f0fcf 100644 --- a/core/internal/characterization/testdata/goldens/pos.json +++ b/core/internal/characterization/testdata/goldens/pos.json @@ -128,7 +128,7 @@ "uom": "EA" }, { - "description": "Cemtrim Textured 7/16 X 4 X 12", + "description": "Composite Trim Textured 7/16 X 4 X 12", "in_stock": "523", "product_id": "", "sku": "CORNCTRM412+", @@ -136,7 +136,7 @@ "uom": "EA" }, { - "description": "Cemtrim Textured 7/16 X 6 X 12", + "description": "Composite Trim Textured 7/16 X 6 X 12", "in_stock": "667", "product_id": "", "sku": "CORNCTRMG12+", @@ -160,7 +160,7 @@ "uom": "RL" }, { - "description": "Solid Soffit Hardie Textured 1/4 X 12 X 12", + "description": "Solid Soffit Fibre Cement Textured 1/4 X 12 X 12", "in_stock": "375", "product_id": "", "sku": "CORNSFT1212", @@ -168,7 +168,7 @@ "uom": "EA" }, { - "description": "Solid Soffit Hardie Textured 1/4 X 16 X 12", + "description": "Solid Soffit Fibre Cement Textured 1/4 X 16 X 12", "in_stock": "773", "product_id": "", "sku": "CORNSFT1612", @@ -176,7 +176,7 @@ "uom": "EA" }, { - "description": "Vented Soffit Hardie Textured 1/4 X 16 X 12", + "description": "Vented Soffit Fibre Cement Textured 1/4 X 16 X 12", "in_stock": "339", "product_id": "", "sku": "CORNSFT1612V", @@ -184,7 +184,7 @@ "uom": "EA" }, { - "description": "Vented Soffit Hardie Textured 1/4 X 24 X 8", + "description": "Vented Soffit Fibre Cement Textured 1/4 X 24 X 8", "in_stock": "471", "product_id": "", "sku": "CORNSFT2408V", @@ -192,7 +192,7 @@ "uom": "EA" }, { - "description": "Sheathing 1/8 X 4 X 9 (Green) NSP DRYLine TSX", + "description": "Sheathing 1/8 X 4 X 9 (Green) NSP Weather Barrier", "in_stock": "487", "product_id": "", "sku": "CORNSHTGR49", @@ -248,7 +248,7 @@ "uom": "PCS" }, { - "description": "5/8 Drywall Firecode 4x8", + "description": "5/8 Drywall Type X 4x8", "in_stock": "800", "product_id": "", "sku": "DW-58-FC", @@ -287,10 +287,18 @@ "unit_price_cents": 165, "uom": "PCS" }, + { + "description": "Face Mount Joist Hanger 2x8", + "in_stock": "846", + "product_id": "", + "sku": "HANGER-28FM", + "unit_price_cents": 150, + "uom": "PCS" + }, { "description": "R-14 Fiberglass Batts 15x93", "in_stock": "298", - "product_id": "", + "product_id": "", "sku": "INS-R13-15", "unit_price_cents": 6800, "uom": "BAG" @@ -298,7 +306,7 @@ { "description": "R-20 Fiberglass Batts 15x93", "in_stock": "932", - "product_id": "", + "product_id": "", "sku": "INS-R19-15", "unit_price_cents": 8200, "uom": "BAG" @@ -306,7 +314,7 @@ { "description": "R-28 Fiberglass Batts 24x48", "in_stock": "429", - "product_id": "", + "product_id": "", "sku": "INS-R30-24", "unit_price_cents": 9800, "uom": "BAG" @@ -314,7 +322,7 @@ { "description": "1x6x6 Cedar Fence Board", "in_stock": "739", - "product_id": "", + "product_id": "", "sku": "LUM-166-WRC", "unit_price_cents": 510, "uom": "PCS" @@ -322,7 +330,7 @@ { "description": "2x10x12 Hem-Fir No.2", "in_stock": "543", - "product_id": "", + "product_id": "", "sku": "LUM-21012-NO2", "unit_price_cents": 2450, "uom": "PCS" @@ -330,7 +338,7 @@ { "description": "2x12x16 Hem-Fir No.2", "in_stock": "586", - "product_id": "", + "product_id": "", "sku": "LUM-21216-NO2", "unit_price_cents": 4500, "uom": "PCS" @@ -338,7 +346,7 @@ { "description": "2x4x10 SPF Premium", "in_stock": "488", - "product_id": "", + "product_id": "", "sku": "LUM-2410-PREM", "unit_price_cents": 725, "uom": "PCS" @@ -346,7 +354,7 @@ { "description": "2x4x12 SPF Premium", "in_stock": "631", - "product_id": "", + "product_id": "", "sku": "LUM-2412-PREM", "unit_price_cents": 875, "uom": "PCS" @@ -354,7 +362,7 @@ { "description": "2x4x8 SPF Premium", "in_stock": "379", - "product_id": "", + "product_id": "", "sku": "LUM-248-PREM", "unit_price_cents": 550, "uom": "PCS" @@ -362,7 +370,7 @@ { "description": "2x4x92-5/8 SPF Stud", "in_stock": "635", - "product_id": "", + "product_id": "", "sku": "LUM-2492-STUD", "unit_price_cents": 510, "uom": "PCS" @@ -370,7 +378,7 @@ { "description": "2x6x10 SPF Premium", "in_stock": "869", - "product_id": "", + "product_id": "", "sku": "LUM-2610-PREM", "unit_price_cents": 980, "uom": "PCS" @@ -378,7 +386,7 @@ { "description": "2x6x12 SPF Premium", "in_stock": "200", - "product_id": "", + "product_id": "", "sku": "LUM-2612-PREM", "unit_price_cents": 1175, "uom": "PCS" @@ -386,7 +394,7 @@ { "description": "2x6x16 SPF Premium", "in_stock": "868", - "product_id": "", + "product_id": "", "sku": "LUM-2616-PREM", "unit_price_cents": 1560, "uom": "PCS" @@ -394,7 +402,7 @@ { "description": "2x8x10 Hem-Fir No.2", "in_stock": "622", - "product_id": "", + "product_id": "", "sku": "LUM-2810-NO2", "unit_price_cents": 1390, "uom": "PCS" @@ -402,7 +410,7 @@ { "description": "2x8x16 Hem-Fir No.2", "in_stock": "851", - "product_id": "", + "product_id": "", "sku": "LUM-2816-NO2", "unit_price_cents": 2225, "uom": "PCS" @@ -410,7 +418,7 @@ { "description": "4x4x10 Pressure Treated", "in_stock": "823", - "product_id": "", + "product_id": "", "sku": "LUM-4410-PT", "unit_price_cents": 1575, "uom": "PCS" @@ -418,7 +426,7 @@ { "description": "4x4x8 Pressure Treated", "in_stock": "646", - "product_id": "", + "product_id": "", "sku": "LUM-448-PT", "unit_price_cents": 1250, "uom": "PCS" @@ -426,7 +434,7 @@ { "description": "4x4x8 Western Red Cedar", "in_stock": "674", - "product_id": "", + "product_id": "", "sku": "LUM-448-WRC", "unit_price_cents": 3400, "uom": "PCS" @@ -434,7 +442,7 @@ { "description": "6x6x12 Pressure Treated", "in_stock": "406", - "product_id": "", + "product_id": "", "sku": "LUM-6612-PT", "unit_price_cents": 5500, "uom": "PCS" @@ -442,7 +450,7 @@ { "description": "1 X 4 RL #3 SPF", "in_stock": "787", - "product_id": "", + "product_id": "", "sku": "LUMB14RLN3+", "unit_price_cents": 52, "uom": "LF" @@ -450,7 +458,7 @@ { "description": "2 X 4 RL #3 SPF", "in_stock": "535", - "product_id": "", + "product_id": "", "sku": "LUMB24RLN3", "unit_price_cents": 46, "uom": "LF" @@ -458,7 +466,7 @@ { "description": "2 X 4 RL Utility", "in_stock": "590", - "product_id": "", + "product_id": "", "sku": "LUMBUT24RL", "unit_price_cents": 44, "uom": "LF" @@ -466,7 +474,7 @@ { "description": "Baseboard 3-1/4 MDF 16'", "in_stock": "645", - "product_id": "", + "product_id": "", "sku": "MLD-BASE-MDF", "unit_price_cents": 1950, "uom": "PCS" @@ -474,7 +482,7 @@ { "description": "Casing 2-1/4 MDF 14'", "in_stock": "542", - "product_id": "", + "product_id": "", "sku": "MLD-CASE-MDF", "unit_price_cents": 1350, "uom": "PCS" @@ -482,7 +490,7 @@ { "description": "3\" Common Nails (25kg)", "in_stock": "975", - "product_id": "", + "product_id": "", "sku": "NAIL-10D-50", "unit_price_cents": 6500, "uom": "BOX" @@ -490,7 +498,7 @@ { "description": "3-1/4\" Common Nails (25kg)", "in_stock": "336", - "product_id": "", + "product_id": "", "sku": "NAIL-16D-50", "unit_price_cents": 6500, "uom": "BOX" @@ -498,7 +506,7 @@ { "description": "7/16 OSB 4x8", "in_stock": "326", - "product_id": "", + "product_id": "", "sku": "OSB-12", "unit_price_cents": 1950, "uom": "PCS" @@ -506,7 +514,7 @@ { "description": "3/4 OSB T&G 4x8", "in_stock": "623", - "product_id": "", + "product_id": "", "sku": "OSB-34-TG", "unit_price_cents": 3400, "uom": "PCS" @@ -514,7 +522,7 @@ { "description": "1/2 Plywood G1S 4x8 (Fir)", "in_stock": "359", - "product_id": "", + "product_id": "", "sku": "PLY-12-CDX", "unit_price_cents": 2850, "uom": "PCS" @@ -522,7 +530,7 @@ { "description": "3/4 Plywood G1S 4x8 (Fir)", "in_stock": "859", - "product_id": "", + "product_id": "", "sku": "PLY-34-CDX", "unit_price_cents": 3800, "uom": "PCS" @@ -530,7 +538,7 @@ { "description": "Architectural Shingles 30yr", "in_stock": "990", - "product_id": "", + "product_id": "", "sku": "RF-ARCH-30", "unit_price_cents": 4200, "uom": "BUNDLE" @@ -538,7 +546,7 @@ { "description": "Roof Edge Drip 10'", "in_stock": "135", - "product_id": "", + "product_id": "", "sku": "RF-DRIP-10", "unit_price_cents": 750, "uom": "PCS" @@ -546,7 +554,7 @@ { "description": "Roof Edge Drip 10'", "in_stock": "548", - "product_id": "", + "product_id": "", "sku": "RF-EDGE-WHT", "unit_price_cents": 750, "uom": "PCS" @@ -554,7 +562,7 @@ { "description": "Roofing Felt #15", "in_stock": "404", - "product_id": "", + "product_id": "", "sku": "RF-FELT-15", "unit_price_cents": 2250, "uom": "RL" @@ -562,7 +570,7 @@ { "description": "Pipe Boot Flashing", "in_stock": "399", - "product_id": "", + "product_id": "", "sku": "RF-FLASH-PIPE", "unit_price_cents": 1400, "uom": "PCS" @@ -570,7 +578,7 @@ { "description": "Step Flashing", "in_stock": "272", - "product_id": "", + "product_id": "", "sku": "RF-FLASH-STEP", "unit_price_cents": 450, "uom": "PCS" @@ -578,7 +586,7 @@ { "description": "Ice & Water Shield 65'", "in_stock": "489", - "product_id": "", + "product_id": "", "sku": "RF-ICE-65", "unit_price_cents": 9800, "uom": "RL" @@ -586,7 +594,7 @@ { "description": "Ice & Water Shield", "in_stock": "359", - "product_id": "", + "product_id": "", "sku": "RF-ICE-WTR", "unit_price_cents": 9800, "uom": "RL" @@ -594,7 +602,7 @@ { "description": "1.25\" Roofing Nails 2.5kg", "in_stock": "958", - "product_id": "", + "product_id": "", "sku": "RF-NAIL-125", "unit_price_cents": 1900, "uom": "BOX" @@ -602,7 +610,7 @@ { "description": "Ridge Vent 4'", "in_stock": "690", - "product_id": "", + "product_id": "", "sku": "RF-RIDGE-4", "unit_price_cents": 1350, "uom": "PCS" @@ -610,7 +618,7 @@ { "description": "Architectural Shingles (Black)", "in_stock": "880", - "product_id": "", + "product_id": "", "sku": "RF-SH-BLK", "unit_price_cents": 4200, "uom": "BUNDLE" @@ -618,7 +626,7 @@ { "description": "Architectural Shingles (Weathered Wood)", "in_stock": "750", - "product_id": "", + "product_id": "", "sku": "RF-SH-WW", "unit_price_cents": 4200, "uom": "BUNDLE" @@ -626,7 +634,7 @@ { "description": "Starter Strip", "in_stock": "876", - "product_id": "", + "product_id": "", "sku": "RF-START", "unit_price_cents": 1000, "uom": "PCS" @@ -634,19 +642,11 @@ { "description": "3\" Deck Screws (2.5kg)", "in_stock": "537", - "product_id": "", + "product_id": "", "sku": "SCR-DECK-3-5", "unit_price_cents": 2999, "uom": "BOX" }, - { - "description": "Simpson Strong-Tie LUS28", - "in_stock": "846", - "product_id": "", - "sku": "SIMP-LUS28", - "unit_price_cents": 150, - "uom": "PCS" - }, { "description": "Hurricane Tie H1", "in_stock": "583", diff --git a/core/internal/characterization/testdata/goldens/purchase_order_flow.json b/core/internal/characterization/testdata/goldens/purchase_order_flow.json index b26c0ca32..5223ae97c 100644 --- a/core/internal/characterization/testdata/goldens/purchase_order_flow.json +++ b/core/internal/characterization/testdata/goldens/purchase_order_flow.json @@ -288,13 +288,22 @@ "product_id": "", "sku": "HANGER-28" }, + { + "avg_daily": 1.64, + "new_point": 18, + "new_qty": 50, + "old_point": 150, + "old_qty": 400, + "product_id": "", + "sku": "HANGER-28FM" + }, { "avg_daily": 3.18, "new_point": 34, "new_qty": 96, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "INS-R13-15" }, { @@ -303,7 +312,7 @@ "new_qty": 108, "old_point": 25, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "INS-R19-15" }, { @@ -312,7 +321,7 @@ "new_qty": 137, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "INS-R30-24" }, { @@ -321,7 +330,7 @@ "new_qty": 182, "old_point": 200, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-166-WRC" }, { @@ -330,7 +339,7 @@ "new_qty": 123, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-21012-NO2" }, { @@ -339,7 +348,7 @@ "new_qty": 82, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "LUM-21216-NO2" }, { @@ -348,7 +357,7 @@ "new_qty": 95, "old_point": 150, "old_qty": 400, - "product_id": "", + "product_id": "", "sku": "LUM-2410-PREM" }, { @@ -357,7 +366,7 @@ "new_qty": 66, "old_point": 100, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2412-PREM" }, { @@ -366,7 +375,7 @@ "new_qty": 167, "old_point": 200, "old_qty": 500, - "product_id": "", + "product_id": "", "sku": "LUM-248-PREM" }, { @@ -375,7 +384,7 @@ "new_qty": 199, "old_point": 300, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-2492-STUD" }, { @@ -384,7 +393,7 @@ "new_qty": 117, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2610-PREM" }, { @@ -393,7 +402,7 @@ "new_qty": 119, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "LUM-2612-PREM" }, { @@ -402,7 +411,7 @@ "new_qty": 52, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2616-PREM" }, { @@ -411,7 +420,7 @@ "new_qty": 118, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2810-NO2" }, { @@ -420,7 +429,7 @@ "new_qty": 86, "old_point": 50, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-2816-NO2" }, { @@ -429,7 +438,7 @@ "new_qty": 98, "old_point": 80, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-4410-PT" }, { @@ -438,7 +447,7 @@ "new_qty": 138, "old_point": 100, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-448-PT" }, { @@ -447,7 +456,7 @@ "new_qty": 126, "old_point": 40, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "LUM-448-WRC" }, { @@ -456,7 +465,7 @@ "new_qty": 98, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "LUM-6612-PT" }, { @@ -465,7 +474,7 @@ "new_qty": 57, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMB14RLN3+" }, { @@ -474,7 +483,7 @@ "new_qty": 56, "old_point": 1000, "old_qty": 5000, - "product_id": "", + "product_id": "", "sku": "LUMB24RLN3" }, { @@ -483,7 +492,7 @@ "new_qty": 77, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMBUT24RL" }, { @@ -492,7 +501,7 @@ "new_qty": 97, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-BASE-MDF" }, { @@ -501,7 +510,7 @@ "new_qty": 131, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-CASE-MDF" }, { @@ -510,7 +519,7 @@ "new_qty": 53, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-10D-50" }, { @@ -519,7 +528,7 @@ "new_qty": 144, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-16D-50" }, { @@ -528,7 +537,7 @@ "new_qty": 89, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "OSB-12" }, { @@ -537,7 +546,7 @@ "new_qty": 84, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "OSB-34-TG" }, { @@ -546,7 +555,7 @@ "new_qty": 108, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-12-CDX" }, { @@ -555,7 +564,7 @@ "new_qty": 311, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-34-CDX" }, { @@ -564,7 +573,7 @@ "new_qty": 75, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-ARCH-30" }, { @@ -573,7 +582,7 @@ "new_qty": 83, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-DRIP-10" }, { @@ -582,7 +591,7 @@ "new_qty": 65, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-EDGE-WHT" }, { @@ -591,7 +600,7 @@ "new_qty": 39, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-FELT-15" }, { @@ -600,7 +609,7 @@ "new_qty": 75, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-PIPE" }, { @@ -609,7 +618,7 @@ "new_qty": 93, "old_point": 60, "old_qty": 120, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-STEP" }, { @@ -618,7 +627,7 @@ "new_qty": 105, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-65" }, { @@ -627,7 +636,7 @@ "new_qty": 66, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-WTR" }, { @@ -636,7 +645,7 @@ "new_qty": 73, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "RF-NAIL-125" }, { @@ -645,7 +654,7 @@ "new_qty": 135, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-RIDGE-4" }, { @@ -654,7 +663,7 @@ "new_qty": 118, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-BLK" }, { @@ -663,7 +672,7 @@ "new_qty": 111, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-WW" }, { @@ -672,7 +681,7 @@ "new_qty": 42, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-START" }, { @@ -681,17 +690,8 @@ "new_qty": 68, "old_point": 40, "old_qty": 100, - "product_id": "", - "sku": "SCR-DECK-3-5" - }, - { - "avg_daily": 1.64, - "new_point": 18, - "new_qty": 50, - "old_point": 150, - "old_qty": 400, "product_id": "", - "sku": "SIMP-LUS28" + "sku": "SCR-DECK-3-5" }, { "avg_daily": 4.54, @@ -922,13 +922,22 @@ "product_id": "", "sku": "HANGER-28" }, + { + "avg_daily": 4.93, + "new_point": 52, + "new_qty": 148, + "old_point": 150, + "old_qty": 400, + "product_id": "", + "sku": "HANGER-28FM" + }, { "avg_daily": 9.53, "new_point": 101, "new_qty": 286, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "INS-R13-15" }, { @@ -937,7 +946,7 @@ "new_qty": 323, "old_point": 25, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "INS-R19-15" }, { @@ -946,7 +955,7 @@ "new_qty": 409, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "INS-R30-24" }, { @@ -955,7 +964,7 @@ "new_qty": 546, "old_point": 200, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-166-WRC" }, { @@ -964,7 +973,7 @@ "new_qty": 368, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-21012-NO2" }, { @@ -973,7 +982,7 @@ "new_qty": 246, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "LUM-21216-NO2" }, { @@ -982,7 +991,7 @@ "new_qty": 283, "old_point": 150, "old_qty": 400, - "product_id": "", + "product_id": "", "sku": "LUM-2410-PREM" }, { @@ -991,7 +1000,7 @@ "new_qty": 198, "old_point": 100, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2412-PREM" }, { @@ -1000,7 +1009,7 @@ "new_qty": 499, "old_point": 200, "old_qty": 500, - "product_id": "", + "product_id": "", "sku": "LUM-248-PREM" }, { @@ -1009,7 +1018,7 @@ "new_qty": 595, "old_point": 300, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-2492-STUD" }, { @@ -1018,7 +1027,7 @@ "new_qty": 349, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2610-PREM" }, { @@ -1027,7 +1036,7 @@ "new_qty": 355, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "LUM-2612-PREM" }, { @@ -1036,7 +1045,7 @@ "new_qty": 154, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2616-PREM" }, { @@ -1045,7 +1054,7 @@ "new_qty": 353, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2810-NO2" }, { @@ -1054,7 +1063,7 @@ "new_qty": 258, "old_point": 50, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-2816-NO2" }, { @@ -1063,7 +1072,7 @@ "new_qty": 294, "old_point": 80, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-4410-PT" }, { @@ -1072,7 +1081,7 @@ "new_qty": 413, "old_point": 100, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-448-PT" }, { @@ -1081,7 +1090,7 @@ "new_qty": 376, "old_point": 40, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "LUM-448-WRC" }, { @@ -1090,7 +1099,7 @@ "new_qty": 293, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "LUM-6612-PT" }, { @@ -1099,7 +1108,7 @@ "new_qty": 171, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMB14RLN3+" }, { @@ -1108,7 +1117,7 @@ "new_qty": 166, "old_point": 1000, "old_qty": 5000, - "product_id": "", + "product_id": "", "sku": "LUMB24RLN3" }, { @@ -1117,7 +1126,7 @@ "new_qty": 229, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMBUT24RL" }, { @@ -1126,7 +1135,7 @@ "new_qty": 289, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-BASE-MDF" }, { @@ -1135,7 +1144,7 @@ "new_qty": 393, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-CASE-MDF" }, { @@ -1144,7 +1153,7 @@ "new_qty": 157, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-10D-50" }, { @@ -1153,7 +1162,7 @@ "new_qty": 430, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-16D-50" }, { @@ -1162,7 +1171,7 @@ "new_qty": 265, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "OSB-12" }, { @@ -1171,7 +1180,7 @@ "new_qty": 252, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "OSB-34-TG" }, { @@ -1180,7 +1189,7 @@ "new_qty": 323, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-12-CDX" }, { @@ -1189,7 +1198,7 @@ "new_qty": 932, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-34-CDX" }, { @@ -1198,7 +1207,7 @@ "new_qty": 223, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-ARCH-30" }, { @@ -1207,7 +1216,7 @@ "new_qty": 250, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-DRIP-10" }, { @@ -1216,7 +1225,7 @@ "new_qty": 195, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-EDGE-WHT" }, { @@ -1225,7 +1234,7 @@ "new_qty": 117, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-FELT-15" }, { @@ -1234,7 +1243,7 @@ "new_qty": 224, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-PIPE" }, { @@ -1243,7 +1252,7 @@ "new_qty": 277, "old_point": 60, "old_qty": 120, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-STEP" }, { @@ -1252,7 +1261,7 @@ "new_qty": 314, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-65" }, { @@ -1261,7 +1270,7 @@ "new_qty": 196, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-WTR" }, { @@ -1270,7 +1279,7 @@ "new_qty": 218, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "RF-NAIL-125" }, { @@ -1279,7 +1288,7 @@ "new_qty": 405, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-RIDGE-4" }, { @@ -1288,7 +1297,7 @@ "new_qty": 352, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-BLK" }, { @@ -1297,7 +1306,7 @@ "new_qty": 332, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-WW" }, { @@ -1306,7 +1315,7 @@ "new_qty": 125, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-START" }, { @@ -1315,17 +1324,8 @@ "new_qty": 204, "old_point": 40, "old_qty": 100, - "product_id": "", - "sku": "SCR-DECK-3-5" - }, - { - "avg_daily": 4.93, - "new_point": 52, - "new_qty": 148, - "old_point": 150, - "old_qty": 400, "product_id": "", - "sku": "SIMP-LUS28" + "sku": "SCR-DECK-3-5" }, { "avg_daily": 13.63, @@ -1553,13 +1553,22 @@ "product_id": "", "sku": "HANGER-28" }, + { + "avg_daily": 1.64, + "new_point": 18, + "new_qty": 50, + "old_point": 150, + "old_qty": 400, + "product_id": "", + "sku": "HANGER-28FM" + }, { "avg_daily": 3.18, "new_point": 34, "new_qty": 96, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "INS-R13-15" }, { @@ -1568,7 +1577,7 @@ "new_qty": 108, "old_point": 25, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "INS-R19-15" }, { @@ -1577,7 +1586,7 @@ "new_qty": 137, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "INS-R30-24" }, { @@ -1586,7 +1595,7 @@ "new_qty": 182, "old_point": 200, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-166-WRC" }, { @@ -1595,7 +1604,7 @@ "new_qty": 123, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-21012-NO2" }, { @@ -1604,7 +1613,7 @@ "new_qty": 82, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "LUM-21216-NO2" }, { @@ -1613,7 +1622,7 @@ "new_qty": 95, "old_point": 150, "old_qty": 400, - "product_id": "", + "product_id": "", "sku": "LUM-2410-PREM" }, { @@ -1622,7 +1631,7 @@ "new_qty": 66, "old_point": 100, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2412-PREM" }, { @@ -1631,7 +1640,7 @@ "new_qty": 167, "old_point": 200, "old_qty": 500, - "product_id": "", + "product_id": "", "sku": "LUM-248-PREM" }, { @@ -1640,7 +1649,7 @@ "new_qty": 199, "old_point": 300, "old_qty": 600, - "product_id": "", + "product_id": "", "sku": "LUM-2492-STUD" }, { @@ -1649,7 +1658,7 @@ "new_qty": 117, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "LUM-2610-PREM" }, { @@ -1658,7 +1667,7 @@ "new_qty": 119, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "LUM-2612-PREM" }, { @@ -1667,7 +1676,7 @@ "new_qty": 52, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2616-PREM" }, { @@ -1676,7 +1685,7 @@ "new_qty": 118, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-2810-NO2" }, { @@ -1685,7 +1694,7 @@ "new_qty": 86, "old_point": 50, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-2816-NO2" }, { @@ -1694,7 +1703,7 @@ "new_qty": 98, "old_point": 80, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "LUM-4410-PT" }, { @@ -1703,7 +1712,7 @@ "new_qty": 138, "old_point": 100, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "LUM-448-PT" }, { @@ -1712,7 +1721,7 @@ "new_qty": 126, "old_point": 40, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "LUM-448-WRC" }, { @@ -1721,7 +1730,7 @@ "new_qty": 98, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "LUM-6612-PT" }, { @@ -1730,7 +1739,7 @@ "new_qty": 57, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMB14RLN3+" }, { @@ -1739,7 +1748,7 @@ "new_qty": 56, "old_point": 1000, "old_qty": 5000, - "product_id": "", + "product_id": "", "sku": "LUMB24RLN3" }, { @@ -1748,7 +1757,7 @@ "new_qty": 77, "old_point": 500, "old_qty": 2000, - "product_id": "", + "product_id": "", "sku": "LUMBUT24RL" }, { @@ -1757,7 +1766,7 @@ "new_qty": 97, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-BASE-MDF" }, { @@ -1766,7 +1775,7 @@ "new_qty": 131, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "MLD-CASE-MDF" }, { @@ -1775,7 +1784,7 @@ "new_qty": 53, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-10D-50" }, { @@ -1784,7 +1793,7 @@ "new_qty": 144, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "NAIL-16D-50" }, { @@ -1793,7 +1802,7 @@ "new_qty": 89, "old_point": 120, "old_qty": 300, - "product_id": "", + "product_id": "", "sku": "OSB-12" }, { @@ -1802,7 +1811,7 @@ "new_qty": 84, "old_point": 100, "old_qty": 250, - "product_id": "", + "product_id": "", "sku": "OSB-34-TG" }, { @@ -1811,7 +1820,7 @@ "new_qty": 108, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-12-CDX" }, { @@ -1820,7 +1829,7 @@ "new_qty": 311, "old_point": 80, "old_qty": 200, - "product_id": "", + "product_id": "", "sku": "PLY-34-CDX" }, { @@ -1829,7 +1838,7 @@ "new_qty": 75, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-ARCH-30" }, { @@ -1838,7 +1847,7 @@ "new_qty": 83, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-DRIP-10" }, { @@ -1847,7 +1856,7 @@ "new_qty": 65, "old_point": 60, "old_qty": 150, - "product_id": "", + "product_id": "", "sku": "RF-EDGE-WHT" }, { @@ -1856,7 +1865,7 @@ "new_qty": 39, "old_point": 30, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-FELT-15" }, { @@ -1865,7 +1874,7 @@ "new_qty": 75, "old_point": 20, "old_qty": 40, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-PIPE" }, { @@ -1874,7 +1883,7 @@ "new_qty": 93, "old_point": 60, "old_qty": 120, - "product_id": "", + "product_id": "", "sku": "RF-FLASH-STEP" }, { @@ -1883,7 +1892,7 @@ "new_qty": 105, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-65" }, { @@ -1892,7 +1901,7 @@ "new_qty": 66, "old_point": 20, "old_qty": 50, - "product_id": "", + "product_id": "", "sku": "RF-ICE-WTR" }, { @@ -1901,7 +1910,7 @@ "new_qty": 73, "old_point": 30, "old_qty": 60, - "product_id": "", + "product_id": "", "sku": "RF-NAIL-125" }, { @@ -1910,7 +1919,7 @@ "new_qty": 135, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-RIDGE-4" }, { @@ -1919,7 +1928,7 @@ "new_qty": 118, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-BLK" }, { @@ -1928,7 +1937,7 @@ "new_qty": 111, "old_point": 50, "old_qty": 100, - "product_id": "", + "product_id": "", "sku": "RF-SH-WW" }, { @@ -1937,7 +1946,7 @@ "new_qty": 42, "old_point": 40, "old_qty": 80, - "product_id": "", + "product_id": "", "sku": "RF-START" }, { @@ -1946,17 +1955,8 @@ "new_qty": 68, "old_point": 40, "old_qty": 100, - "product_id": "", - "sku": "SCR-DECK-3-5" - }, - { - "avg_daily": 1.64, - "new_point": 18, - "new_qty": 50, - "old_point": 150, - "old_qty": 400, "product_id": "", - "sku": "SIMP-LUS28" + "sku": "SCR-DECK-3-5" }, { "avg_daily": 4.54, @@ -1993,13 +1993,13 @@ { "cost": 20, "description": "r1b c sheet goods", - "product_id": "", + "product_id": "", "quantity": 10 }, { "cost": 8, "description": "r1b c lumber", - "product_id": "", + "product_id": "", "quantity": 5 } ], @@ -2019,7 +2019,7 @@ "description": "r1b c sheet goods", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 10 }, @@ -2028,7 +2028,7 @@ "description": "r1b c lumber", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 5 } @@ -2051,7 +2051,7 @@ { "cost": 9, "description": "r1b c draft only", - "product_id": "", + "product_id": "", "quantity": 1 } ], @@ -2071,7 +2071,7 @@ "description": "r1b c draft only", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 1 } @@ -2103,7 +2103,7 @@ "description": "r1b c lumber", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 5 }, @@ -2112,7 +2112,7 @@ "description": "r1b c sheet goods", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 10 } @@ -2473,7 +2473,7 @@ "description": "r1b c lumber", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 5 }, @@ -2482,7 +2482,7 @@ "description": "r1b c sheet goods", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 4, "quantity": 10 } @@ -2713,7 +2713,7 @@ "description": "r1b c lumber", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 0, "quantity": 5 }, @@ -2722,7 +2722,7 @@ "description": "r1b c sheet goods", "id": "", "po_id": "", - "product_id": "", + "product_id": "", "qty_received": 10, "quantity": 10 } diff --git a/docs/refactor/CONTRACT-CHANGES.md b/docs/refactor/CONTRACT-CHANGES.md index 710c3e45a..065e3d091 100644 --- a/docs/refactor/CONTRACT-CHANGES.md +++ b/docs/refactor/CONTRACT-CHANGES.md @@ -419,3 +419,5 @@ get an entry. | AI-ANTHROPIC-FIX1 | pim: `POST /api/v1/products/{id}/pim/generate/descriptions`, `/seo`, `/collateral`, `/image`; purchase_order: `POST /api/v1/purchase-orders/{id}/freight`; techadmin: `PUT /api/v1/admin/settings/ai` | With no AI key the PIM routes answered a 500 and the freight upload a bare 400 `Bad Request`; the PUT refused a provider alone with `api_key is required`, so the page could not switch back to OpenRouter | Every AI feature with no key (or a stored key the vault cannot open) answers 409 in the error envelope with the stable code `ai_off` and a plain message that AI is off and an administrator turns it on in Tech Admin, AI; image generation under the Anthropic provider is the same 409 naming that it needs the OpenRouter provider. The PUT accepts a provider or model alone. A save or delete takes effect at once. The intake's `synthetic_reason` no longer names an environment variable | | ACCOUNT-RULING-A | `GET /api/v1/accounts/{id}` | The account summary held the customer to the old finance wall: a user on a yard the customer is not linked to (by header, or with no header and grants that miss it) read it as 404 "account not found", although the Customers app lists every customer and the customer record opens (ruling A, ADR 0007 section 5.8) | The summary is the customer's dealer wide standing (balance, credit limit, open credits, unapplied cash; the same figures the counter's standing and the credit check read dealer wide, ADR 0007 section 5.8) and reads through ruling A's reach (`CustomerReadBranchForQuery`, `CustomerReadGrantsSubForQuery`): a user, an administrator and an unbound key reach every customer; a key bound to a branch keeps its pin and reads a customer outside it as 404, as before. Route, roles, body and error envelope are unchanged. Branch bound key class stays CONFINED (`CustomerBranch(path customer)`, `TestKeyBranchPin_PosAndAccountRows`). `GET /api/v1/accounts/{id}/transactions` and `GET /api/v1/ar/customers/{id}/statement` keep the finance documents' wall unchanged, as do each payment and credit memo: the subledger still answers 404 for a customer outside the caller's reach (the route now runs that wall as its own gate instead of through the summary), and the desk shows a calm note in the ledger's place | | DASH-AR-NET | `GET /api/v1/dashboard/summary` field `outstanding_ar` | The sum of `total_amount` over the yard's `UNPAID` and `PARTIAL` invoices, so part payments, open credit memos and unapplied cash were not netted and the figure disagreed with AR Aging for the same yard. | The yard's net open receivable as AR Aging reads it today (invoice open amounts, plus open credit memo amounts, less unapplied cash, inside the caller's wall). `outstanding_ar_count` is unchanged (open invoices). In the clockwindow golden `dashboard.summary.outstanding_ar` moved from 11865877 to 11056347; nothing else moved. | +| SEED-HYGIENE (items 108 and 109) | the base seed's product names and SKU, seen by the `dashboard`, `pos`, `portal_quotes` and `purchase_order_flow` goldens (no route or shape changes) | The seed carried real brand words in product names and one SKU: `Simpson Strong-Tie LUS28` (`SIMP-LUS28`), `Cemtrim Textured ...`, `... Soffit Hardie Textured ...`, `5/8 Drywall Firecode 4x8` and `... NSP DRYLine TSX`. | The same products under plain names: `Face Mount Joist Hanger 2x8` (`HANGER-28FM`), `Composite Trim Textured ...`, `... Soffit Fibre Cement Textured ...`, `5/8 Drywall Type X 4x8` and `... NSP Weather Barrier`. Products list in SKU order, so the renamed SKU moves one row and the `` placeholders after it shift by one; no value other than these names, that SKU and the placeholders moved. | +| SEED-HYGIENE (item 108 b) | migration 118 `staff_demo_domain` (operational, no route) | Migration 080 left three demo staff on `@gable.com`, a real domain. | Migration 118 rewrites those three addresses to `@gablebuildingsupply.example`; staff ids and grants are unchanged. | From 081dd58489ee60985de8bdd0f22d9e081b787364 Mon Sep 17 00:00:00 2001 From: colton Date: Wed, 14 Oct 2026 10:08:50 -0700 Subject: [PATCH 6/8] seed: the cable illustration follows its renamed image family Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: colton --- .../{romex_wire_coil.svg => nm_cable_coil.svg} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename web/apps/desk/public/catalog-illustrations/{romex_wire_coil.svg => nm_cable_coil.svg} (98%) diff --git a/web/apps/desk/public/catalog-illustrations/romex_wire_coil.svg b/web/apps/desk/public/catalog-illustrations/nm_cable_coil.svg similarity index 98% rename from web/apps/desk/public/catalog-illustrations/romex_wire_coil.svg rename to web/apps/desk/public/catalog-illustrations/nm_cable_coil.svg index af8f517f1..bf67e6cf5 100644 --- a/web/apps/desk/public/catalog-illustrations/romex_wire_coil.svg +++ b/web/apps/desk/public/catalog-illustrations/nm_cable_coil.svg @@ -1,5 +1,5 @@ - Coil of 14-2 NM Romex cable + Coil of 14-2 NM-B cable Portal logins: - demo@gable.com - summit@gable.com - elite@gable.com + demo@kelbrook.ca + okhomes@gablebuildingsupply.example + missionhill@gablebuildingsupply.example / password password