← back to Dw Five Field Step0

scripts/priceability.sql

72 lines

-- Step-0 priceability resolver (DTD verdict B, 2026-06-21). READ-ONLY.
-- Joins each ACTIVE product (live-scanned structure in active_five_field_status)
-- to its REAL cost across verified sources, EXCLUDING product_pricing placeholder
-- stubs (flat $4/$5 sample prices that are NOT roll cost).
--
-- Cost-source priority (first non-null >0 wins):
--   Kravet family:  kravet_dwkk_variant_map.price (MAP-floored) by dw_sku
--                -> product_map.map_price by dw_sku
--                -> kravet_master_price.map_price by mfr_sku
--                -> kravet_catalog (cost_price / MAP) by mfr_sku then dw_sku
--   All others:     vendor catalog price_trade / cost / price_retail (the costExpr
--                   the cadence importer trusts) by mfr_sku then dw_sku, >0 only.
--
-- Output: per-vendor split of (needs roll OR needs sample) into priceable vs hold.

\timing off
\pset pager off

-- Kravet-family vendor names (CLAUDE.md MAP list).
DROP TABLE IF EXISTS _kravet_fam;
CREATE TEMP TABLE _kravet_fam(vendor text);
INSERT INTO _kravet_fam VALUES
 ('Kravet'),('Kravet Couture'),('Kravet Design'),('Kravet Contract'),('Kravet Basics'),
 ('Lee Jofa'),('Lee Jofa Modern'),('Groundworks'),('Brunschwig & Fils'),('Cole & Son'),
 ('GP & J Baker'),('Colefax And Fowler'),('Colefax and Fowler'),('Clarke And Clarke'),
 ('Clarke & Clarke'),('Mulberry'),('Mulberry Home'),('Threads'),('Baker Lifestyle'),
 ('Andrew Martin'),('Nicolette Mayer'),('Aerin'),('Barclay Butera'),('Thom Filicia'),
 ('Gaston Y Daniela'),('Gaston y Daniela'),('Donghia');

-- Per-SKU resolved cost.
DROP TABLE IF EXISTS active_five_field_priceable;
CREATE TABLE active_five_field_priceable AS
WITH s AS (
  SELECT a.*, regexp_replace(a.shopify_id,'\D','','g') AS shop_num,
         (kf.vendor IS NOT NULL) AS is_kravet_fam
  FROM active_five_field_status a
  LEFT JOIN _kravet_fam kf ON kf.vendor = a.vendor
),
-- the mirror carries dw_sku + mfr_sku per product; join structure back to it for keys
keyed AS (
  SELECT DISTINCT ON (s.shopify_id) s.*, sp.dw_sku, sp.mfr_sku
  FROM s
  LEFT JOIN shopify_products sp ON sp.shopify_id = s.shopify_id
  ORDER BY s.shopify_id
)
SELECT
  k.shopify_id, k.vendor, k.is_kravet_fam, k.dw_sku, k.mfr_sku,
  k.has_sample, k.has_product, k.any_zero, k.product_price, k.sample_price,
  -- resolved cost/price (the number a remediation write would use)
  COALESCE(
    -- Kravet family: MAP-floored variant price, then product_map, then master price
    CASE WHEN k.is_kravet_fam THEN NULLIF(vm.price,0) END,
    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 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,
  kmp.map_price AS master_map
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);