← back to Dw Five Field Step0
Load 1,934 JD combined costs durably + make priceable + queue (DTD-C)
8c4a666ad635bf3f83ba7798cdbd47bfb70eb607 · 2026-06-21 20:04:49 -0700 · steve
product_map.map_price keyed by synthetic dw_sku=mfr_sku (1,562 distinct),
map_source=jd-pointe-pricelist-2026-06; audit read paths (priceability.sql +
resolve-priceability.js) gain an mfr_sku LEFT JOIN so dw_sku-less JD rows
resolve durably. 1,934 queued into bulk_fivefield_worklist (build-roll,
pending). 161 held (114 discontinued/MTO + 47 unmatched) untouched. No Shopify
writes, no activation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
A jd-combined-cost-load.pyA out/jd-combined-cost-load-report.jsonM out/priceability.jsonM scripts/priceability.sqlM scripts/resolve-priceability.js
Diff
commit 8c4a666ad635bf3f83ba7798cdbd47bfb70eb607
Author: steve <steve@designerwallcoverings.com>
Date: Sun Jun 21 20:04:49 2026 -0700
Load 1,934 JD combined costs durably + make priceable + queue (DTD-C)
product_map.map_price keyed by synthetic dw_sku=mfr_sku (1,562 distinct),
map_source=jd-pointe-pricelist-2026-06; audit read paths (priceability.sql +
resolve-priceability.js) gain an mfr_sku LEFT JOIN so dw_sku-less JD rows
resolve durably. 1,934 queued into bulk_fivefield_worklist (build-roll,
pending). 161 held (114 discontinued/MTO + 47 unmatched) untouched. No Shopify
writes, no activation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
jd-combined-cost-load.py | 168 +++++++++++++++++++++++
out/jd-combined-cost-load-report.json | 21 +++
out/priceability.json | 252 +++++++++++++++++-----------------
scripts/priceability.sql | 9 +-
scripts/resolve-priceability.js | 13 +-
5 files changed, 331 insertions(+), 132 deletions(-)
diff --git a/jd-combined-cost-load.py b/jd-combined-cost-load.py
new file mode 100644
index 0000000..3ac3cd0
--- /dev/null
+++ b/jd-combined-cost-load.py
@@ -0,0 +1,168 @@
+#!/usr/bin/env python3
+"""
+JD COMBINED-COST LOADER — load the 1,934 Justin-David private-label costs DURABLY
++ make them priceable + queue them. Steve-authorized write (officers/vp-dw-commerce,
+2026-06-21). Source = out/jd-combined-cost-diff.json (will_load=true rows only).
+
+WHY THIS IS DIFFERENT FROM batch-1 (cost-relink-load.py):
+ Every JD product (Shopify vendors "Los Angeles Fabrics" / "Phillipe Romano" /
+ "Architectural Wallcoverings") has dw_sku = NULL everywhere — shopify_products,
+ active_five_field_gaps, active_five_field_status. So the batch-1 path
+ (product_map keyed by the REAL dw_sku) is unavailable. DTD verdict C (3/3,
+ 2026-06-21) chose: reuse product_map, key each row by a DETERMINISTIC SYNTHETIC
+ dw_sku = the mfr_sku string (JD mfr_skus are unique-by-pattern-color, satisfy
+ the PK, replication-safe upsert), populate product_map.mfr_sku, and add ONE
+ mfr_sku LEFT JOIN to the two audit read paths (priceability.sql +
+ resolve-priceability.js) so the 5-field audit resolves these by mfr_sku after a
+ rebuild. Those read-path edits are committed alongside this loader.
+
+KEYS:
+ - product_map (durable retail): 1,562 DISTINCT mfr_skus (367 mfr_skus map to
+ >1 Shopify product; cost is pattern-level so de-dupe to one map_price each).
+ dw_sku = mfr_sku (synthetic), map_price = computed retail, mfr_sku populated,
+ map_source = 'jd-pointe-pricelist-2026-06', map_unit='ROLL'. UPSERT on PK.
+ - bulk_fivefield_worklist (queue): all 1,934 DISTINCT shopify_ids
+ (status='pending', fix_type='build-roll', computed_price = retail, dw_sku
+ left blank since none exists). INSERT-only, replication-safe, idempotent by
+ shopify_id.
+
+HOLD (untouched): the 114 discontinued/MTO + 47 unmatched = 161 will_load=false rows.
+NO Shopify writes. NO variant builds. NO activation. The drain handles that on its
+own Steve-gated schedule. NEVER expose Pointe / Justin David / Command54 customer-
+facing (private label).
+
+Run with --apply to write; default is dry-run.
+"""
+import json, os, re, subprocess, sys, datetime
+
+ROOT = os.path.dirname(os.path.abspath(__file__))
+DIFF = os.path.join(ROOT, "out", "jd-combined-cost-diff.json")
+REPORT = os.path.join(ROOT, "out", "jd-combined-cost-load-report.json")
+APPLY = "--apply" in sys.argv
+SOURCE_TAG = "jd-pointe-pricelist-2026-06"
+
+
+def psql(sql, want_rows=True):
+ env = dict(os.environ); env.pop("PGPASSWORD", None); env.pop("DATABASE_URL", None)
+ r = subprocess.run(["psql", "-d", "dw_unified", "-v", "ON_ERROR_STOP=1",
+ "-tAF", "\t", "-f", "-"],
+ input=sql, capture_output=True, text=True, env=env)
+ if r.returncode != 0:
+ raise RuntimeError(f"psql failed: {r.stderr.strip()[:800]}")
+ if not want_rows:
+ return r.stdout
+ return [ln.split("\t") for ln in r.stdout.split("\n") if ln != ""]
+
+
+def q(v):
+ return "'" + str(v).replace("'", "''") + "'"
+
+
+def main():
+ d = json.load(open(DIFF))
+ rows = d["rows"]
+ will = [r for r in rows if r.get("will_load")]
+ held = [r for r in rows if not r.get("will_load")]
+ assert len(will) == 1934, f"expected 1934 will_load, got {len(will)}"
+ assert len(held) == 161, f"expected 161 held, got {len(held)}"
+
+ # ---- product_map upsert set: ONE row per distinct mfr_sku (synthetic dw_sku) ----
+ # cost is pattern-level so all dupes share map_price; de-dupe, assert no conflict.
+ pm = {}
+ for r in will:
+ mfr = r["mfr_sku"]
+ price = r["proposed_retail"]
+ if mfr in pm and abs(pm[mfr]["map_price"] - price) > 1e-9:
+ raise RuntimeError(f"conflicting retail for {mfr}: {pm[mfr]['map_price']} vs {price}")
+ pm.setdefault(mfr, {
+ "dw_sku": mfr, # synthetic PK = mfr_sku (DTD-C)
+ "sku": mfr,
+ "vendor": r["vendor"],
+ "pattern": (r.get("matched_pattern") or ""),
+ "color": "",
+ "map_price": price,
+ "mfr_sku": mfr,
+ })
+ pm_rows = list(pm.values())
+
+ # ---- worklist queue set: one row per distinct shopify_id ----
+ queue = [{
+ "shopify_id": r["shopify_id"], "dw_sku": (r.get("dw_sku") or ""),
+ "mfr_sku": r["mfr_sku"], "vendor": r["vendor"],
+ "computed_price": r["proposed_retail"],
+ } for r in will]
+
+ print(f"will_load rows: {len(will)}", file=sys.stderr)
+ print(f" -> product_map upserts: {len(pm_rows)} (distinct mfr_sku)", file=sys.stderr)
+ print(f" -> worklist queue rows: {len(queue)} (distinct shopify_id)", file=sys.stderr)
+ print(f"held (untouched): {len(held)}", file=sys.stderr)
+
+ report = {
+ "generatedAt": datetime.datetime.utcnow().isoformat() + "Z",
+ "apply": APPLY, "source_tag": SOURCE_TAG,
+ "durable_cost_location": "product_map.map_price (synthetic dw_sku=mfr_sku, "
+ "mfr_sku populated; audit reads via new mfr_sku LEFT JOIN) "
+ "[DTD-C 2026-06-21]",
+ "will_load": len(will),
+ "product_map_upserts": len(pm_rows),
+ "worklist_queue": len(queue),
+ "held_untouched": len(held),
+ "held_breakdown": {"discontinued_or_mto": 114, "unmatched": 47},
+ "retail_range": [min(x["map_price"] for x in pm_rows), max(x["map_price"] for x in pm_rows)],
+ }
+
+ if not APPLY:
+ report["mode"] = "DRY-RUN (no writes). Re-run with --apply."
+ json.dump(report, open(REPORT, "w"), indent=2)
+ print(json.dumps(report, indent=2))
+ return
+
+ # ---- WRITE 1: UPSERT into product_map (durable, replication-safe via PK) ----
+ vals = []
+ for x in pm_rows:
+ vals.append("(" + ",".join([
+ q(x["dw_sku"]), q(x["sku"]), q(x["vendor"]), q(x["pattern"]),
+ q(x["color"]), str(x["map_price"]), q("ROLL"), q(SOURCE_TAG),
+ "now()", q(x["mfr_sku"])]) + ")")
+ upsert = (
+ "BEGIN;\n"
+ "INSERT INTO product_map (dw_sku, sku, vendor, pattern, color, map_price, "
+ "map_unit, map_source, updated_at, mfr_sku) VALUES\n"
+ + ",\n".join(vals) +
+ "\nON CONFLICT (dw_sku) DO UPDATE SET "
+ "map_price=EXCLUDED.map_price, map_source=EXCLUDED.map_source, "
+ "map_unit=EXCLUDED.map_unit, updated_at=EXCLUDED.updated_at, "
+ "vendor=EXCLUDED.vendor, pattern=EXCLUDED.pattern, "
+ "mfr_sku=COALESCE(NULLIF(product_map.mfr_sku,''),EXCLUDED.mfr_sku);\n"
+ "COMMIT;")
+ psql(upsert, want_rows=False)
+ print(f"product_map UPSERT done: {len(pm_rows)} rows", file=sys.stderr)
+
+ # ---- WRITE 2: INSERT into bulk_fivefield_worklist (INSERT-only, repl-safe) ----
+ existing = set(r[0] for r in psql(
+ "SELECT DISTINCT shopify_id FROM bulk_fivefield_worklist;"))
+ base = int(psql("SELECT COALESCE(max(order_rank),0) FROM bulk_fivefield_worklist;")[0][0])
+ qvals = []; rank = base; seen = set()
+ for x in queue:
+ if x["shopify_id"] in existing or x["shopify_id"] in seen:
+ continue
+ seen.add(x["shopify_id"]); rank += 1
+ qvals.append("(" + ",".join([
+ str(rank), q(x["shopify_id"]), q(x["dw_sku"]), q(x["mfr_sku"]),
+ q(x["vendor"]), q("build-roll"), "false",
+ str(x["computed_price"]), "NULL", q("pending")]) + ")")
+ if qvals:
+ ins = ("BEGIN;\nINSERT INTO bulk_fivefield_worklist "
+ "(order_rank, shopify_id, dw_sku, mfr_sku, vendor, fix_type, "
+ "is_kravet_fam, computed_price, kravet_price, status) VALUES\n"
+ + ",\n".join(qvals) + ";\nCOMMIT;")
+ psql(ins, want_rows=False)
+ report["worklist_inserted"] = len(qvals)
+ report["worklist_skipped_existing"] = len(queue) - len(qvals)
+ report["mode"] = "APPLIED"
+ json.dump(report, open(REPORT, "w"), indent=2)
+ print(json.dumps(report, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/out/jd-combined-cost-load-report.json b/out/jd-combined-cost-load-report.json
new file mode 100644
index 0000000..940c1f3
--- /dev/null
+++ b/out/jd-combined-cost-load-report.json
@@ -0,0 +1,21 @@
+{
+ "generatedAt": "2026-06-22T03:03:33.775603Z",
+ "apply": true,
+ "source_tag": "jd-pointe-pricelist-2026-06",
+ "durable_cost_location": "product_map.map_price (synthetic dw_sku=mfr_sku, mfr_sku populated; audit reads via new mfr_sku LEFT JOIN) [DTD-C 2026-06-21]",
+ "will_load": 1934,
+ "product_map_upserts": 1562,
+ "worklist_queue": 1934,
+ "held_untouched": 161,
+ "held_breakdown": {
+ "discontinued_or_mto": 114,
+ "unmatched": 47
+ },
+ "retail_range": [
+ 28.05,
+ 541.18
+ ],
+ "worklist_inserted": 1934,
+ "worklist_skipped_existing": 0,
+ "mode": "APPLIED"
+}
\ No newline at end of file
diff --git a/out/priceability.json b/out/priceability.json
index 533f538..f990cb8 100644
--- a/out/priceability.json
+++ b/out/priceability.json
@@ -1,11 +1,11 @@
{
- "generatedAt": "2026-06-21T21:45:27.781Z",
+ "generatedAt": "2026-06-22T03:04:30.094Z",
"totals": {
"need_fix": 47443,
"miss_product": 32966,
"miss_sample": 14444,
- "priceable": 11566,
- "hold": 35877
+ "priceable": 13953,
+ "hold": 33490
},
"vendors": [
{
@@ -14,9 +14,9 @@
"miss_product": 5864,
"miss_sample": 4406,
"zero": 2,
- "priceable": 0,
- "source": "product_map?",
- "hold": 10272
+ "priceable": 12,
+ "source": "product_map(dw_sku|mfr_sku)",
+ "hold": 10260
},
{
"vendor": "Clarke And Clarke",
@@ -35,7 +35,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2472
},
{
@@ -45,7 +45,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2351
},
{
@@ -75,7 +75,7 @@
"miss_sample": 0,
"zero": 11,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1810
},
{
@@ -85,7 +85,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1788
},
{
@@ -104,9 +104,9 @@
"miss_product": 1406,
"miss_sample": 0,
"zero": 0,
- "priceable": 0,
- "source": "product_map?",
- "hold": 1406
+ "priceable": 1309,
+ "source": "product_map(dw_sku|mfr_sku)",
+ "hold": 97
},
{
"vendor": "Coordonné",
@@ -115,7 +115,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1320
},
{
@@ -124,9 +124,9 @@
"miss_product": 1181,
"miss_sample": 84,
"zero": 0,
- "priceable": 0,
- "source": "product_map?",
- "hold": 1265
+ "priceable": 646,
+ "source": "product_map(dw_sku|mfr_sku)",
+ "hold": 619
},
{
"vendor": "Brunschwig & Fils",
@@ -154,9 +154,9 @@
"miss_product": 960,
"miss_sample": 0,
"zero": 0,
- "priceable": 0,
- "source": "product_map?",
- "hold": 960
+ "priceable": 420,
+ "source": "product_map(dw_sku|mfr_sku)",
+ "hold": 540
},
{
"vendor": "Osborne & Little",
@@ -175,7 +175,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 853
},
{
@@ -185,7 +185,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 842
},
{
@@ -205,7 +205,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 624
},
{
@@ -215,7 +215,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 583
},
{
@@ -225,7 +225,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 551
},
{
@@ -235,7 +235,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 515
},
{
@@ -245,7 +245,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 490
},
{
@@ -255,7 +255,7 @@
"miss_sample": 418,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 418
},
{
@@ -285,7 +285,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 357
},
{
@@ -295,7 +295,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 350
},
{
@@ -305,7 +305,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 328
},
{
@@ -315,7 +315,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 327
},
{
@@ -325,7 +325,7 @@
"miss_sample": 98,
"zero": 2,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 326
},
{
@@ -335,7 +335,7 @@
"miss_sample": 283,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 284
},
{
@@ -355,7 +355,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 269
},
{
@@ -375,7 +375,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 243
},
{
@@ -385,7 +385,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 170
},
{
@@ -395,7 +395,7 @@
"miss_sample": 4,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 158
},
{
@@ -415,7 +415,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 149
},
{
@@ -425,7 +425,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 147
},
{
@@ -435,7 +435,7 @@
"miss_sample": 19,
"zero": 2,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 140
},
{
@@ -455,7 +455,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 112
},
{
@@ -465,7 +465,7 @@
"miss_sample": 1,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 95
},
{
@@ -475,7 +475,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 75
},
{
@@ -485,7 +485,7 @@
"miss_sample": 2,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 72
},
{
@@ -505,7 +505,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 68
},
{
@@ -515,7 +515,7 @@
"miss_sample": 0,
"zero": 1,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 65
},
{
@@ -525,7 +525,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 55
},
{
@@ -535,7 +535,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 55
},
{
@@ -545,7 +545,7 @@
"miss_sample": 35,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 48
},
{
@@ -555,7 +555,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 42
},
{
@@ -565,7 +565,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 41
},
{
@@ -575,7 +575,7 @@
"miss_sample": 7,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 38
},
{
@@ -585,7 +585,7 @@
"miss_sample": 2,
"zero": 1,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 37
},
{
@@ -595,7 +595,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 35
},
{
@@ -605,7 +605,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 31
},
{
@@ -615,7 +615,7 @@
"miss_sample": 25,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 31
},
{
@@ -625,7 +625,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 27
},
{
@@ -635,7 +635,7 @@
"miss_sample": 17,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 27
},
{
@@ -645,7 +645,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 26
},
{
@@ -655,7 +655,7 @@
"miss_sample": 0,
"zero": 14,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 23
},
{
@@ -665,7 +665,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 23
},
{
@@ -675,7 +675,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 21
},
{
@@ -695,7 +695,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 13
},
{
@@ -705,7 +705,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 13
},
{
@@ -715,7 +715,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 12
},
{
@@ -725,7 +725,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 12
},
{
@@ -735,7 +735,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 10
},
{
@@ -745,7 +745,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 10
},
{
@@ -755,7 +755,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 10
},
{
@@ -765,7 +765,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 10
},
{
@@ -775,7 +775,7 @@
"miss_sample": 9,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 10
},
{
@@ -785,7 +785,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 9
},
{
@@ -795,7 +795,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 9
},
{
@@ -805,7 +805,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 9
},
{
@@ -815,7 +815,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 8
},
{
@@ -825,7 +825,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 8
},
{
@@ -835,7 +835,7 @@
"miss_sample": 0,
"zero": 1,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 7
},
{
@@ -845,7 +845,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 6
},
{
@@ -855,7 +855,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 6
},
{
@@ -865,7 +865,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 5
},
{
@@ -885,7 +885,7 @@
"miss_sample": 2,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 5
},
{
@@ -895,7 +895,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 4
},
{
@@ -905,7 +905,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 4
},
{
@@ -915,7 +915,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 4
},
{
@@ -925,7 +925,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 4
},
{
@@ -935,7 +935,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -945,7 +945,7 @@
"miss_sample": 1,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -955,7 +955,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -965,7 +965,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -975,7 +975,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -985,7 +985,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -995,7 +995,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -1005,7 +1005,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -1015,7 +1015,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -1025,7 +1025,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 3
},
{
@@ -1035,7 +1035,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2
},
{
@@ -1045,7 +1045,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2
},
{
@@ -1055,7 +1055,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2
},
{
@@ -1065,7 +1065,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 2
},
{
@@ -1075,7 +1075,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1085,7 +1085,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1095,7 +1095,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1105,7 +1105,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1115,7 +1115,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1125,7 +1125,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1135,7 +1135,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1145,7 +1145,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1155,7 +1155,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1165,7 +1165,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1175,7 +1175,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1195,7 +1195,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1205,7 +1205,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1215,7 +1215,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1225,7 +1225,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1235,7 +1235,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1245,7 +1245,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1255,7 +1255,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1265,7 +1265,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1275,7 +1275,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1285,7 +1285,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 1,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 0
},
{
@@ -1295,7 +1295,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1305,7 +1305,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1315,7 +1315,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1325,7 +1325,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
},
{
@@ -1335,7 +1335,7 @@
"miss_sample": 0,
"zero": 0,
"priceable": 0,
- "source": "product_map?",
+ "source": "product_map(dw_sku|mfr_sku)",
"hold": 1
}
]
diff --git a/scripts/priceability.sql b/scripts/priceability.sql
index 9e0c7d0..1886a87 100644
--- a/scripts/priceability.sql
+++ b/scripts/priceability.sql
@@ -53,8 +53,11 @@ SELECT
CASE WHEN k.is_kravet_fam THEN NULLIF(pm.map_price,0) END,
CASE WHEN k.is_kravet_fam THEN NULLIF(kmp.map_price,0) END,
CASE WHEN k.is_kravet_fam THEN NULLIF(kc.dw_sell_price,0) END,
- -- generic product_map MAP (covers some non-kravet too)
- NULLIF(pm.map_price,0)
+ -- generic product_map MAP by dw_sku (covers some non-kravet too)
+ NULLIF(pm.map_price,0),
+ -- generic product_map MAP by mfr_sku (DTD-C 2026-06-21: covers dw_sku-less
+ -- private-label rows like Justin-David whose dw_sku is NULL everywhere)
+ NULLIF(pmm.map_price,0)
) AS kravet_price,
vm.cost AS km_cost,
pm.map_price AS pm_map,
@@ -62,5 +65,7 @@ SELECT
FROM keyed k
LEFT JOIN kravet_dwkk_variant_map vm ON vm.dw_sku = k.dw_sku
LEFT JOIN product_map pm ON pm.dw_sku = k.dw_sku
+LEFT JOIN product_map pmm ON pmm.mfr_sku IS NOT NULL
+ AND upper(pmm.mfr_sku) = upper(k.mfr_sku)
LEFT JOIN kravet_master_price kmp ON upper(kmp.mfr_sku) = upper(k.mfr_sku)
LEFT JOIN kravet_catalog kc ON upper(kc.mfr_sku) = upper(k.mfr_sku);
diff --git a/scripts/resolve-priceability.js b/scripts/resolve-priceability.js
index 7bc38f8..cf1ff70 100644
--- a/scripts/resolve-priceability.js
+++ b/scripts/resolve-priceability.js
@@ -92,15 +92,20 @@ function main() {
try { byDw = +psql(q(`c.dw_sku=sp.dw_sku`)).trim() || 0; } catch {}
priceable = Math.max(byMfr, byDw);
} else {
- // no cadence config -> probe product_map MAP (some non-kravet have real MAP)
- source = 'product_map?';
+ // no cadence config -> probe product_map MAP (some non-kravet have real MAP).
+ // DTD-C 2026-06-21: join product_map by dw_sku OR by mfr_sku so dw_sku-less
+ // private-label rows (Justin-David: dw_sku NULL everywhere, keyed by mfr_sku)
+ // resolve to their durable map_price after a full audit rebuild.
+ source = 'product_map(dw_sku|mfr_sku)';
priceable = +psql(`
SELECT count(DISTINCT a.shopify_id)
FROM active_five_field_status a
JOIN shopify_products sp ON sp.shopify_id=a.shopify_id
- JOIN product_map pm ON pm.dw_sku=sp.dw_sku
+ LEFT JOIN product_map pm ON pm.dw_sku=sp.dw_sku
+ LEFT JOIN product_map pmm ON pmm.mfr_sku IS NOT NULL
+ AND upper(pmm.mfr_sku)=upper(sp.mfr_sku)
WHERE a.vendor='${v}' AND (NOT a.has_product OR NOT a.has_sample OR a.any_zero)
- AND pm.map_price>0;`).trim() || 0;
+ AND (pm.map_price>0 OR pmm.map_price>0);`).trim() || 0;
}
}
// sample-only-gap SKUs are always "fixable" (flat $4.25) even with no cost,
← 893920e auto-save: 2026-06-21T20:01:45 (3 files) — results/ vendor-p
·
back to Dw Five Field Step0
·
Add skip-guard: rows with no resolvable base SKU (dw_sku Non 4cfe6da →