← back to Dw Unbuyable Recovery Pilot
TK-11041: Innovations reprice — LIST basis, decimal-safe /0.65/0.85 markup, Skylark by-roll, current 2026-09-15 terms + auto-exclude disco rule
d4fae99bf04d944e9f3d2bde827abd01983ce76f · 2026-09-15 09:35:22 -0700 · Steve
Files touched
A tk11041-innovations-reconcile/rescrape/config/innovations-current-pricing.jsonM tk11041-innovations-reconcile/rescrape/data/pattern-order-terms.jsonA tk11041-innovations-reconcile/rescrape/data/tk11041-authoritative-table.jsonM tk11041-innovations-reconcile/rescrape/stage-reprice.mjsA tk11041-innovations-reconcile/rescrape/tk11041-authoritative-table.mjs
Diff
commit d4fae99bf04d944e9f3d2bde827abd01983ce76f
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Sep 15 09:35:22 2026 -0700
TK-11041: Innovations reprice — LIST basis, decimal-safe /0.65/0.85 markup, Skylark by-roll, current 2026-09-15 terms + auto-exclude disco rule
---
.../config/innovations-current-pricing.json | 40 +
.../rescrape/data/pattern-order-terms.json | 372 +++++++--
.../rescrape/data/tk11041-authoritative-table.json | 927 +++++++++++++++++++++
.../rescrape/stage-reprice.mjs | 20 +-
.../rescrape/tk11041-authoritative-table.mjs | 97 +++
5 files changed, 1385 insertions(+), 71 deletions(-)
diff --git a/tk11041-innovations-reconcile/rescrape/config/innovations-current-pricing.json b/tk11041-innovations-reconcile/rescrape/config/innovations-current-pricing.json
new file mode 100644
index 0000000..9451bb6
--- /dev/null
+++ b/tk11041-innovations-reconcile/rescrape/config/innovations-current-pricing.json
@@ -0,0 +1,40 @@
+{
+ "_doc": "AUTHORITATIVE current Innovations (private-label Phillipe Romano) pricing + order terms. Innovations is sold customer-facing ONLY as Phillipe Romano (PRW-/PR- / La Turino etc.) — the names 'Innovations'/'Innovations USA' must NEVER be customer-facing.",
+ "vendor_code": "innovations",
+ "catalog_table": "innovations_catalog",
+ "trade_discount_pct": 10,
+ "trade_discount_source": "Sales Order O-111475 + Currier correction (SETTLED); vendor_registry.innovations.vendor_discount_pct=10",
+ "price_basis": "LIST (vendor's quoted price). Steve-confirmed 2026-09-15.",
+ "formula": {
+ "net_cost": "round(list * 0.90, 2) -> price_trade (10% trade discount)",
+ "retail": "round(net_cost / 0.65 / 0.85, 2) -> our_price (canonical DW markup; matches scripts/innovations-reprice/stage-innov-reprice.mjs line 40)",
+ "rounding": "DECIMAL/integer-cents (half-up). NOT naive JS float — 132.95*0.90=119.655 must round to 119.66, a PostgreSQL NUMERIC round(list*0.90,2) is correct."
+ },
+ "price_list_source": "Hektor Martinez reply 2026-09-15 (pattern-level LIST)",
+ "patterns": {
+ "Costine": { "prefix": "CSO", "list_per_yd": 49.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 4, "cut_fee_below_yds": 30, "net_per_yd": 44.96, "retail_per_yd": 81.38 },
+ "Enchase": { "prefix": "ENS", "list_per_yd": 69.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 5, "cut_fee_below_yds": 30, "net_per_yd": 62.96, "retail_per_yd": 113.95 },
+ "Flanders": { "prefix": "FLN", "list_per_yd": 132.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 5, "cut_fee_below_yds": 30, "net_per_yd": 119.66, "retail_per_yd": 216.58, "note": "half-cent boundary: net must be 119.66 (decimal round), not 119.65 (float artifact)" },
+ "Province": { "prefix": "PRO", "list_per_yd": 31.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 4, "cut_fee_below_yds": 30, "net_per_yd": 28.76, "retail_per_yd": 52.05 },
+ "Skylark": { "prefix": "SKL", "list_per_yd": 134.95, "sold_by": "roll", "roll_yds": 10, "min_order_yds": 10, "list_per_roll": 1349.50, "net_per_roll": 1214.55, "retail_per_roll": 2198.28, "cut_fee_per_yd": null, "note": "SOLD BY THE ROLL (10yd/roll). Was MTO on the Oct-2025 list; vendor 2026-09-15 confirms stocked, by the roll. price_unit='roll'; price computed at the ROLL unit, not per-yard-then-x10." },
+ "Tatami": { "prefix": "TTM", "list_per_yd": 64.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 5, "cut_fee_below_yds": 30, "net_per_yd": 58.46, "retail_per_yd": 105.81 },
+ "Vinyl Cork": { "prefix": "VCO", "list_per_yd": 49.95, "sold_by": "yard", "min_order_yds": 10, "cut_fee_per_yd": 4, "cut_fee_below_yds": 30, "net_per_yd": 44.96, "retail_per_yd": 81.38 }
+ },
+ "discontinued_patterns": {
+ "Whistler": {
+ "prefix": "WHL",
+ "status": "discontinued",
+ "reason": "vendor 2026-09-15 (Hektor Martinez): discontinued, only limited per-color stock ('which color are you interested in?').",
+ "sku_count": 12,
+ "on_shopify": false,
+ "action": "EXCLUDE from publish/buyable. Not on Shopify (0 live products) — no archive needed; mark do_not_publish in dw_unified so it never gets published going forward."
+ }
+ },
+ "standing_rules": {
+ "auto_exclude_from_publish": "Any SKU that is DISCONTINUED or LIMITED-STOCK per the vendor is auto-excluded from publish/buyable going forward (Steve 2026-09-15: 'Drop any with limited stock going fwd or disco'). Do not make it freely buyable; keep it off Shopify (archive if already live). This applies to future scrapes/refreshes, not just Whistler.",
+ "list_basis": "Vendor-quoted numbers are LIST; net = list*0.90; never apply the discount twice.",
+ "never_active_without_image_and_width": "Standard DW rule still applies — no product goes ACTIVE without image + width metafield."
+ },
+ "generated": "2026-09-15",
+ "ticket": "TK-11041"
+}
diff --git a/tk11041-innovations-reconcile/rescrape/data/pattern-order-terms.json b/tk11041-innovations-reconcile/rescrape/data/pattern-order-terms.json
index b395d69..fad45eb 100644
--- a/tk11041-innovations-reconcile/rescrape/data/pattern-order-terms.json
+++ b/tk11041-innovations-reconcile/rescrape/data/pattern-order-terms.json
@@ -7,7 +7,13 @@
"pattern": "Costine",
"warehouse": "NJ",
"weight": "34 oz",
- "width": "52\""
+ "width": "52\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"CSO-002": {
"freight_or_mto": "Fee A",
@@ -17,7 +23,13 @@
"pattern": "Costine",
"warehouse": "NJ",
"weight": "34 oz",
- "width": "52\""
+ "width": "52\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"CSO-003": {
"freight_or_mto": "Fee A",
@@ -27,117 +39,189 @@
"pattern": "Costine",
"warehouse": "NJ",
"weight": "34 oz",
- "width": "52\""
+ "width": "52\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"ENS-01": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"ENS-02": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"ENS-03": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"ENS-04": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"ENS-05": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"ENS-06": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 69.95,
"pattern": "Enchase",
"warehouse": "NJ",
"weight": "7 oz",
- "width": "35\""
+ "width": "35\"",
+ "current_list_per_yd": 69.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$69.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"FLN-01": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 112.95,
"pattern": "Flanders",
"warehouse": "INTL",
"weight": "16 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 132.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$132.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"FLN-02": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 112.95,
"pattern": "Flanders",
"warehouse": "INTL",
"weight": "16 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 132.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$132.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"FLN-03": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 112.95,
"pattern": "Flanders",
"warehouse": "INTL",
"weight": "16 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 132.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$132.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"FLN-04": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 112.95,
"pattern": "Flanders",
"warehouse": "INTL",
"weight": "16 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 132.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$132.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"FLN-05": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 112.95,
"pattern": "Flanders",
"warehouse": "INTL",
"weight": "16 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 132.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$132.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"PRO-012": {
"freight_or_mto": "Fee A",
@@ -147,117 +231,197 @@
"pattern": "Province",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 31.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$31.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"SKL-001": {
"freight_or_mto": "MTO (no cut-fee code)",
- "made_to_order": true,
+ "made_to_order": false,
"min_order_yds": 10,
"oct2025_list_per_yd": 129.95,
"pattern": "Skylark",
- "warehouse": "MTO",
+ "warehouse": "stock (by roll)",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 134.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "roll",
+ "roll_yds": 10,
+ "roll_list": 1349.5,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "terms_note": "SOLD BY THE ROLL, 10yd/roll. Was MTO on Oct-2025 list; vendor 2026-09-15 confirms stocked by roll."
},
"SKL-002": {
"freight_or_mto": "MTO (no cut-fee code)",
- "made_to_order": true,
+ "made_to_order": false,
"min_order_yds": 10,
"oct2025_list_per_yd": 129.95,
"pattern": "Skylark",
- "warehouse": "MTO",
+ "warehouse": "stock (by roll)",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 134.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "roll",
+ "roll_yds": 10,
+ "roll_list": 1349.5,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "terms_note": "SOLD BY THE ROLL, 10yd/roll. Was MTO on Oct-2025 list; vendor 2026-09-15 confirms stocked by roll."
},
"SKL-003": {
"freight_or_mto": "MTO (no cut-fee code)",
- "made_to_order": true,
+ "made_to_order": false,
"min_order_yds": 10,
"oct2025_list_per_yd": 129.95,
"pattern": "Skylark",
- "warehouse": "MTO",
+ "warehouse": "stock (by roll)",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 134.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "roll",
+ "roll_yds": 10,
+ "roll_list": 1349.5,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "terms_note": "SOLD BY THE ROLL, 10yd/roll. Was MTO on Oct-2025 list; vendor 2026-09-15 confirms stocked by roll."
},
"SKL-004": {
"freight_or_mto": "MTO (no cut-fee code)",
- "made_to_order": true,
+ "made_to_order": false,
"min_order_yds": 10,
"oct2025_list_per_yd": 129.95,
"pattern": "Skylark",
- "warehouse": "MTO",
+ "warehouse": "stock (by roll)",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 134.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "roll",
+ "roll_yds": 10,
+ "roll_list": 1349.5,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "terms_note": "SOLD BY THE ROLL, 10yd/roll. Was MTO on Oct-2025 list; vendor 2026-09-15 confirms stocked by roll."
},
"TTM-01": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-02": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-03": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-04": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-05": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-06": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"TTM-07": {
"freight_or_mto": "Fee C",
"made_to_order": false,
- "min_order_yds": 6,
+ "min_order_yds": 10,
"oct2025_list_per_yd": 59.95,
"pattern": "Tatami",
"warehouse": "NJ",
"weight": "8 oz",
- "width": "36\""
+ "width": "36\"",
+ "current_list_per_yd": 64.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$64.95/yd list, 10yd min, +$5/yd cut fee on orders <30yd"
},
"VCO-001": {
"freight_or_mto": "Fee A",
@@ -267,7 +431,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-002": {
"freight_or_mto": "Fee A",
@@ -277,7 +447,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-003": {
"freight_or_mto": "Fee A",
@@ -287,7 +463,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-004": {
"freight_or_mto": "Fee A",
@@ -297,7 +479,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-005": {
"freight_or_mto": "Fee A",
@@ -307,7 +495,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-006": {
"freight_or_mto": "Fee A",
@@ -317,7 +511,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-007": {
"freight_or_mto": "Fee A",
@@ -327,7 +527,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-008": {
"freight_or_mto": "Fee A",
@@ -337,7 +543,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-009": {
"freight_or_mto": "Fee A",
@@ -347,7 +559,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-010": {
"freight_or_mto": "Fee A",
@@ -357,7 +575,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-011": {
"freight_or_mto": "Fee A",
@@ -367,7 +591,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-012": {
"freight_or_mto": "Fee A",
@@ -377,7 +607,13 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
},
"VCO-013": {
"freight_or_mto": "Fee A",
@@ -387,6 +623,12 @@
"pattern": "Vinyl Cork",
"warehouse": "NJ",
"weight": "20 oz",
- "width": "54\""
+ "width": "54\"",
+ "current_list_per_yd": 49.95,
+ "current_list_source": "Hektor Martinez reply 2026-09-15",
+ "sold_by": "yard",
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "terms_note": "$49.95/yd list, 10yd min, +$4/yd cut fee on orders <30yd"
}
}
\ No newline at end of file
diff --git a/tk11041-innovations-reconcile/rescrape/data/tk11041-authoritative-table.json b/tk11041-innovations-reconcile/rescrape/data/tk11041-authoritative-table.json
new file mode 100644
index 0000000..1864961
--- /dev/null
+++ b/tk11041-innovations-reconcile/rescrape/data/tk11041-authoritative-table.json
@@ -0,0 +1,927 @@
+{
+ "ticket": "TK-11041",
+ "kind": "authoritative-reprice-table",
+ "generated_at": "2026-09-15T16:34:00.361Z",
+ "read_only": true,
+ "no_db_write": true,
+ "no_shopify_write": true,
+ "basis": "LIST (Steve-confirmed; Hektor Martinez reply 2026-09-15)",
+ "formula": "net = round(list*0.90); retail = round(net/0.65/0.85). Matches stage-innov-reprice.mjs.",
+ "skylark_note": "SOLD BY THE ROLL (10yd/roll). price_trade/our_price computed at the ROLL unit.",
+ "cohort_n": 39,
+ "rows": [
+ {
+ "mfr_sku": "CSO-001",
+ "pattern": "Costine",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "52\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862998761523",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "CSO-002",
+ "pattern": "Costine",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "52\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862983622707",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "CSO-003",
+ "pattern": "Costine",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "52\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862984146995",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "ENS-01",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862983163955",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "ENS-02",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862984769587",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "ENS-03",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862985392179",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "ENS-04",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862982639667",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "ENS-05",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862983032883",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "ENS-06",
+ "pattern": "Enchase",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 69.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "35\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862987227187",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 62.96,
+ "retail_per_yd": 113.95,
+ "price_unit": "yard",
+ "price_trade": 62.96,
+ "our_price": 113.95
+ },
+ {
+ "mfr_sku": "FLN-01",
+ "pattern": "Flanders",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 132.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "INTL",
+ "shopify_product_id": "gid://shopify/Product/7862983786547",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 119.66,
+ "retail_per_yd": 216.58,
+ "price_unit": "yard",
+ "price_trade": 119.66,
+ "our_price": 216.58
+ },
+ {
+ "mfr_sku": "FLN-02",
+ "pattern": "Flanders",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 132.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "INTL",
+ "shopify_product_id": "gid://shopify/Product/7862985523251",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 119.66,
+ "retail_per_yd": 216.58,
+ "price_unit": "yard",
+ "price_trade": 119.66,
+ "our_price": 216.58
+ },
+ {
+ "mfr_sku": "FLN-03",
+ "pattern": "Flanders",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 132.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "INTL",
+ "shopify_product_id": "gid://shopify/Product/7862986080307",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 119.66,
+ "retail_per_yd": 216.58,
+ "price_unit": "yard",
+ "price_trade": 119.66,
+ "our_price": 216.58
+ },
+ {
+ "mfr_sku": "FLN-04",
+ "pattern": "Flanders",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 132.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "INTL",
+ "shopify_product_id": "gid://shopify/Product/7862983295027",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 119.66,
+ "retail_per_yd": 216.58,
+ "price_unit": "yard",
+ "price_trade": 119.66,
+ "our_price": 216.58
+ },
+ {
+ "mfr_sku": "FLN-05",
+ "pattern": "Flanders",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 132.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "INTL",
+ "shopify_product_id": "gid://shopify/Product/7862983688243",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 119.66,
+ "retail_per_yd": 216.58,
+ "price_unit": "yard",
+ "price_trade": 119.66,
+ "our_price": 216.58
+ },
+ {
+ "mfr_sku": "PRO-012",
+ "pattern": "Province",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 31.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7863155425331",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 28.76,
+ "retail_per_yd": 52.05,
+ "price_unit": "yard",
+ "price_trade": 28.76,
+ "our_price": 52.05
+ },
+ {
+ "mfr_sku": "SKL-001",
+ "pattern": "Skylark",
+ "sold_by": "roll",
+ "vendor_list_per_yd": 134.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "width": "54\"",
+ "warehouse": "stock (by roll)",
+ "shopify_product_id": "gid://shopify/Product/7862993682483",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "roll",
+ "roll_yds": 10,
+ "list_roll": 1349.5,
+ "net_cost_roll": 1214.55,
+ "retail_roll": 2198.28,
+ "ref_net_per_yd": 121.46,
+ "ref_retail_per_yd": 219.84,
+ "price_unit": "roll",
+ "price_trade": 1214.55,
+ "our_price": 2198.28
+ },
+ {
+ "mfr_sku": "SKL-002",
+ "pattern": "Skylark",
+ "sold_by": "roll",
+ "vendor_list_per_yd": 134.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "width": "54\"",
+ "warehouse": "stock (by roll)",
+ "shopify_product_id": "gid://shopify/Product/7862991028275",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "roll",
+ "roll_yds": 10,
+ "list_roll": 1349.5,
+ "net_cost_roll": 1214.55,
+ "retail_roll": 2198.28,
+ "ref_net_per_yd": 121.46,
+ "ref_retail_per_yd": 219.84,
+ "price_unit": "roll",
+ "price_trade": 1214.55,
+ "our_price": 2198.28
+ },
+ {
+ "mfr_sku": "SKL-003",
+ "pattern": "Skylark",
+ "sold_by": "roll",
+ "vendor_list_per_yd": 134.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "width": "54\"",
+ "warehouse": "stock (by roll)",
+ "shopify_product_id": "gid://shopify/Product/7862991683635",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "roll",
+ "roll_yds": 10,
+ "list_roll": 1349.5,
+ "net_cost_roll": 1214.55,
+ "retail_roll": 2198.28,
+ "ref_net_per_yd": 121.46,
+ "ref_retail_per_yd": 219.84,
+ "price_unit": "roll",
+ "price_trade": 1214.55,
+ "our_price": 2198.28
+ },
+ {
+ "mfr_sku": "SKL-004",
+ "pattern": "Skylark",
+ "sold_by": "roll",
+ "vendor_list_per_yd": 134.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": null,
+ "cut_fee_below_yds": null,
+ "width": "54\"",
+ "warehouse": "stock (by roll)",
+ "shopify_product_id": "gid://shopify/Product/7862995255347",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "roll",
+ "roll_yds": 10,
+ "list_roll": 1349.5,
+ "net_cost_roll": 1214.55,
+ "retail_roll": 2198.28,
+ "ref_net_per_yd": 121.46,
+ "ref_retail_per_yd": 219.84,
+ "price_unit": "roll",
+ "price_trade": 1214.55,
+ "our_price": 2198.28
+ },
+ {
+ "mfr_sku": "TTM-01",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862991421491",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-02",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862992109619",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-03",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862995714099",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-04",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862992371763",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-05",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862993715251",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-06",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862994272307",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "TTM-07",
+ "pattern": "Tatami",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 64.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 5,
+ "cut_fee_below_yds": 30,
+ "width": "36\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862991650867",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 58.46,
+ "retail_per_yd": 105.81,
+ "price_unit": "yard",
+ "price_trade": 58.46,
+ "our_price": 105.81
+ },
+ {
+ "mfr_sku": "VCO-001",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862996697139",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-002",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862993354803",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-003",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862994632755",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-004",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862995320883",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-005",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862992601139",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-006",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862993190963",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-007",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862996893747",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-008",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862993551411",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-009",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862994829363",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-010",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862995484723",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-011",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862992830515",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-012",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862993387571",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ },
+ {
+ "mfr_sku": "VCO-013",
+ "pattern": "Vinyl Cork",
+ "sold_by": "yard",
+ "vendor_list_per_yd": 49.95,
+ "min_order_yds": 10,
+ "cut_fee_per_yd": 4,
+ "cut_fee_below_yds": 30,
+ "width": "54\"",
+ "warehouse": "NJ",
+ "shopify_product_id": "gid://shopify/Product/7862997090355",
+ "restore": {
+ "old_price_trade": null,
+ "old_our_price": null,
+ "old_price_unit": null
+ },
+ "order_unit": "yard",
+ "net_cost_per_yd": 44.96,
+ "retail_per_yd": 81.38,
+ "price_unit": "yard",
+ "price_trade": 44.96,
+ "our_price": 81.38
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tk11041-innovations-reconcile/rescrape/stage-reprice.mjs b/tk11041-innovations-reconcile/rescrape/stage-reprice.mjs
index 9128902..1811737 100644
--- a/tk11041-innovations-reconcile/rescrape/stage-reprice.mjs
+++ b/tk11041-innovations-reconcile/rescrape/stage-reprice.mjs
@@ -25,15 +25,23 @@ const TERMS = path.join(HERE, 'data/pattern-order-terms.json');
const PREFIX_OF = { Costine:'CSO', Enchase:'ENS', Flanders:'FLN', Province:'PRO',
Skylark:'SKL', Tatami:'TTM', 'Vinyl Cork':'VCO' };
const DISCOUNT = 0.90; // 10% off list — vendor Sales Order O-111475, 3x corroborated
-const MARKUP = 1.81; // 1/0.65/0.85, verified 57/57 rows to 4dp
const r2 = n => Math.round(n * 100) / 100;
+// DECIMAL-SAFE money math via integer cents — matches a PostgreSQL NUMERIC round(list*0.90,2) write.
+// Plain Math.round(list*0.90*100)/100 hits an IEEE-754 artifact on half-cent boundaries
+// (132.95*0.90 = 119.655 reads as 119.6549999 -> rounds DOWN to 119.65, a silent 1c Flanders
+// underprice). Integer cents keeps 119.655 -> 11965.5 -> half-up 11966 -> $119.66.
+const cents = d => Math.round(d * 100);
+const netFromList = list => Math.round(cents(list) * 9 / 10) / 100; // 10% off, exact decimal
+// Retail = net / 0.65 / 0.85 — canonical DW markup, matching production writer stage-innov-reprice.mjs
+// line 40 (RETAIL = c => round(c/0.65/0.85)). (Was MARKUP=1.81, a 4dp approx 1c high on boundaries.)
+const retailOf = net => Math.round(cents(net) / 0.65 / 0.85) / 100;
// Returns {list, net, retail} or throws. Never silently coerces.
function derive(value, basis) {
if (!Number.isFinite(value) || value <= 0) throw new Error(`price must be a positive number, got ${value}`);
- if (basis === 'list') { const net = r2(value * DISCOUNT); return { list: r2(value), net, retail: r2(net * MARKUP) }; }
- if (basis === 'net') { const net = r2(value); return { list: r2(value / DISCOUNT), net, retail: r2(net * MARKUP) }; }
+ if (basis === 'list') { const net = netFromList(value); return { list: r2(value), net, retail: retailOf(net) }; }
+ if (basis === 'net') { const net = r2(value); return { list: r2(cents(value) * 10 / 9) / 100, net, retail: retailOf(net) }; }
throw new Error(`basis must be "list" or "net", got ${JSON.stringify(basis)}`);
}
@@ -60,7 +68,7 @@ function selftest() {
console.log('[selftest] TK-11041 stage-reprice');
const L = derive(45.95, 'list');
ck('list 45.95 -> net 41.36 (x0.90)', L.net === 41.36);
- ck('list 45.95 -> retail 74.86 (net x1.81)', L.retail === r2(41.36 * 1.81));
+ ck('list 45.95 -> retail 74.86 (net / 0.65 / 0.85)', L.retail === r2(41.36 / 0.65 / 0.85));
const N = derive(41.36, 'net');
ck('net 41.36 round-trips to list ~45.96', Math.abs(N.list - 45.96) < 0.02);
ck('net and list bases agree on retail', N.retail === L.retail);
@@ -109,8 +117,8 @@ for (const [sku, t] of Object.entries(terms).sort()) {
const ts = new Date().toISOString().replace(/[:.]/g, '').slice(0, 15) + 'Z';
const doc = {
- ticket: 'TK-11041', generated: ts, basis, quoted, discount: DISCOUNT, markup: MARKUP,
- formula: 'list x0.90 = net cost; net x1.81 (1/0.65/0.85) = retail. Verified on 57 rows.',
+ ticket: 'TK-11041', generated: ts, basis, quoted, discount: DISCOUNT, markup: '1/0.65/0.85',
+ formula: 'list x0.90 = net cost; retail = net / 0.65 / 0.85 (canonical DW markup, matches stage-innov-reprice.mjs). Verified on 57 rows.',
priced: out.length, not_priced: missing,
sanity_flags: flags,
made_to_order_warning: out.some(r => r.made_to_order)
diff --git a/tk11041-innovations-reconcile/rescrape/tk11041-authoritative-table.mjs b/tk11041-innovations-reconcile/rescrape/tk11041-authoritative-table.mjs
new file mode 100644
index 0000000..43a4efd
--- /dev/null
+++ b/tk11041-innovations-reconcile/rescrape/tk11041-authoritative-table.mjs
@@ -0,0 +1,97 @@
+#!/usr/bin/env node
+/**
+ * TK-11041 — the AUTHORITATIVE per-SKU reprice table for the 39 live PR-Innovations items.
+ * READ-ONLY. Writes NOTHING to dw_unified or Shopify. Emits JSON + markdown for the gated memo.
+ *
+ * Canonical chain — EXACTLY matches the production gated writer
+ * scripts/innovations-reprice/stage-innov-reprice.mjs line 40:
+ * price_trade (net) = round(list * 0.90) # 10% trade discount, Sales Order O-111475
+ * our_price (retail) = round(price_trade / 0.65 / 0.85) # canonical DW markup (NOT the 1.81 approx)
+ * Net is rounded to cents FIRST because price_trade is a real 2dp stored cost column, then retail
+ * is derived from that stored net — this is the DW cadence-import convention.
+ *
+ * SKYLARK is SOLD BY THE ROLL (vendor 2026-09-15). Its price_trade/our_price are computed at the
+ * ROLL unit (list_roll = list_per_yd * 10), NOT per-yard-then-x10 — that avoids the 12-cent
+ * rounding drift ($2198.28 roll-level vs $2198.40 per-yд-x10).
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execFileSync } from 'node:child_process';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const TERMS = JSON.parse(fs.readFileSync(path.join(HERE, 'data/pattern-order-terms.json'), 'utf8'));
+const r2 = n => Math.round(n * 100) / 100;
+// DECIMAL-SAFE money math via integer cents — matches a PostgreSQL NUMERIC round(list*0.90,2)
+// write. Plain JS `Math.round(list*0.90*100)/100` hits an IEEE-754 artifact on half-cent
+// boundaries (132.95*0.90 = 119.655 reads as 119.6549999 and rounds DOWN to 119.65, a silent 1c
+// underprice on Flanders). Integer cents keeps 119.655 -> 11965.5 -> half-up 11966 -> $119.66.
+const cents = dollars => Math.round(dollars * 100);
+const netOf = list => Math.round(cents(list) * 9 / 10) / 100; // 10% off, exact
+const retailOf = net => Math.round(cents(net) / 0.65 / 0.85) / 100; // canonical DW markup
+
+// live shopify_product_id from the Mac2 mirror (READ-ONLY) for the restore-map
+const psql = sql => execFileSync('psql', ['-h', '/tmp', '-At', '-F', '\t', '-d', 'dw_unified', '-c', sql], { encoding: 'utf8' }).trim();
+const spidRows = psql(`SELECT mfr_sku, coalesce(shopify_product_id::text,''), coalesce(price_trade::text,''),
+ coalesce(our_price::text,''), coalesce(price_unit,'') FROM innovations_catalog
+ WHERE substring(mfr_sku from '^[A-Za-z]+') IN ('CSO','ENS','FLN','PRO','SKL','TTM','VCO') ORDER BY mfr_sku;`);
+const SPID = {};
+for (const l of spidRows.split('\n').filter(Boolean)) {
+ const [sku, spid, pt, op, pu] = l.split('\t');
+ SPID[sku] = { spid, old_price_trade: pt || null, old_our_price: op || null, old_price_unit: pu || null };
+}
+
+const rows = [];
+for (const [sku, t] of Object.entries(TERMS).sort()) {
+ const listYd = t.current_list_per_yd;
+ const base = {
+ mfr_sku: sku, pattern: t.pattern, sold_by: t.sold_by,
+ vendor_list_per_yd: listYd, min_order_yds: t.min_order_yds,
+ cut_fee_per_yd: t.cut_fee_per_yd, cut_fee_below_yds: t.cut_fee_below_yds,
+ width: t.width, warehouse: t.warehouse,
+ shopify_product_id: SPID[sku]?.spid || null,
+ restore: { old_price_trade: SPID[sku]?.old_price_trade ?? null,
+ old_our_price: SPID[sku]?.old_our_price ?? null,
+ old_price_unit: SPID[sku]?.old_price_unit ?? null },
+ };
+ if (t.sold_by === 'roll') {
+ const listRoll = r2(listYd * t.roll_yds); // 134.95 * 10 = 1349.50
+ const netRoll = netOf(listRoll); // round(1349.50 * 0.90) = 1214.55
+ const retailRoll = retailOf(netRoll); // round(1214.55 / 0.65 / 0.85) = 2198.28
+ rows.push({ ...base, order_unit: 'roll', roll_yds: t.roll_yds,
+ list_roll: listRoll, net_cost_roll: netRoll, retail_roll: retailRoll,
+ // per-yд shown for reference only; NOT the stored price for a by-roll item
+ ref_net_per_yd: netOf(listYd), ref_retail_per_yd: retailOf(netOf(listYd)),
+ price_unit: 'roll', price_trade: netRoll, our_price: retailRoll });
+ } else {
+ const net = netOf(listYd);
+ rows.push({ ...base, order_unit: 'yard',
+ net_cost_per_yd: net, retail_per_yd: retailOf(net),
+ price_unit: 'yard', price_trade: net, our_price: retailOf(net) });
+ }
+}
+
+const now = new Date().toISOString();
+const doc = {
+ ticket: 'TK-11041', kind: 'authoritative-reprice-table', generated_at: now,
+ read_only: true, no_db_write: true, no_shopify_write: true,
+ basis: 'LIST (Steve-confirmed; Hektor Martinez reply 2026-09-15)',
+ formula: 'net = round(list*0.90); retail = round(net/0.65/0.85). Matches stage-innov-reprice.mjs.',
+ skylark_note: 'SOLD BY THE ROLL (10yd/roll). price_trade/our_price computed at the ROLL unit.',
+ cohort_n: rows.length, rows,
+};
+fs.writeFileSync(path.join(HERE, 'data/tk11041-authoritative-table.json'), JSON.stringify(doc, null, 2));
+
+// pattern-level summary
+const money = v => '$' + Number(v).toFixed(2);
+const byPat = {};
+for (const r of rows) if (!byPat[r.pattern]) byPat[r.pattern] = r;
+console.log('PATTERN UNIT LIST NET RETAIL min cutfee');
+for (const p of Object.keys(byPat)) {
+ const r = byPat[p];
+ if (r.order_unit === 'roll')
+ console.log(`${p.padEnd(14)} roll ${money(r.list_roll).padEnd(10)} ${money(r.net_cost_roll).padEnd(10)} ${money(r.retail_roll).padEnd(11)} ${String(r.min_order_yds).padEnd(3)} n/a (roll) [per-yd ref retail ${money(r.ref_retail_per_yd)}]`);
+ else
+ console.log(`${p.padEnd(14)} yard ${money(r.vendor_list_per_yd).padEnd(10)} ${money(r.net_cost_per_yd).padEnd(10)} ${money(r.retail_per_yd).padEnd(11)} ${String(r.min_order_yds).padEnd(3)} +$${r.cut_fee_per_yd}/yd <${r.cut_fee_below_yds}yd`);
+}
+console.log(`\nrows=${rows.length} -> data/tk11041-authoritative-table.json`);
← 18ec8a3 TK-11252 fork-1: set 8 Hollywood/Versa dead-ends to DRAFT (S
·
back to Dw Unbuyable Recovery Pilot
·
TK-11041 Innovations (Phillipe Romano) go-live: 39 repriced e8277ec →