← back to Tk 11331 Exec
data/d3b-held-insert.sql
78 lines
-- TK-11331 D3b-heldreview — stage the 79 held extend/disambiguate colorways.
-- All held/verdict logic recomputed in SQL (mirrors the node classifier):
-- norm(x) = lower(btrim(regexp_replace(x,'\s+',' ','g')))
-- fcolor(x)= regexp_replace(replace(norm(x),'gray','grey'),'[^a-z0-9]','','g') -- Gray/Grey fold
-- HELD = in-scope feed row whose norm(pattern) IS staged, norm(pair) NOT staged, fcolor NOT staged.
-- Stage under canon_raw (the staged pattern spelling) => DISAMBIGUATE folds whitespace-variant
-- collision patterns (Rectangular *9/16 ) into the existing group; == feed spelling for clean STAGE-NEW.
-- dw_sku omitted (NULL — assign-sku FROZEN). cost=list*0.80, hw_price(sell)=list*1.448.
-- Guarded by ON CONFLICT (pattern_name,color_name) DO NOTHING. RETURNING prints inserted ids for restore.
\set ON_ERROR_STOP on
CREATE TEMP TABLE feed_tmp (
alt_product_description text, number text, preferred_color_number text, list_price text,
is_roll_price text, uom text, base_width text, category_name text, pattern_name text,
preferred_color_name text, product_line_code text
);
\copy feed_tmp FROM 'data/momentum_feed_full.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER true, QUOTE E'\x01')
WITH staged AS (
SELECT pattern_name,
lower(btrim(regexp_replace(pattern_name,'\s+',' ','g'))) AS np,
lower(btrim(regexp_replace(color_name,'\s+',' ','g'))) AS nc,
regexp_replace(replace(lower(btrim(regexp_replace(color_name,'\s+',' ','g'))),'gray','grey'),'[^a-z0-9]','','g') AS fc
FROM momentum_colorways
),
staged_pairs AS (SELECT DISTINCT np, nc FROM staged),
staged_fcolor AS (SELECT DISTINCT np, fc FROM staged),
canon_rank AS (
SELECT np, pattern_name,
row_number() OVER (PARTITION BY np ORDER BY count(*) DESC, length(pattern_name) ASC) rn
FROM staged GROUP BY np, pattern_name
),
canon1 AS (SELECT np, pattern_name AS canon_raw FROM canon_rank WHERE rn=1),
feed_norm AS (
SELECT number, preferred_color_number, list_price, uom, base_width, category_name,
pattern_name, preferred_color_name, product_line_code,
lower(btrim(regexp_replace(pattern_name,'\s+',' ','g'))) AS np,
lower(btrim(regexp_replace(preferred_color_name,'\s+',' ','g'))) AS nc,
regexp_replace(replace(lower(btrim(regexp_replace(preferred_color_name,'\s+',' ','g'))),'gray','grey'),'[^a-z0-9]','','g') AS fc,
row_number() OVER (PARTITION BY pattern_name, preferred_color_name ORDER BY number) AS dedup_rn
FROM feed_tmp
WHERE category_name IN ('Wallcovering','Acoustic')
AND btrim(pattern_name) <> '' AND btrim(preferred_color_name) <> ''
),
feed_dedup AS (SELECT * FROM feed_norm WHERE dedup_rn = 1),
held AS (
SELECT f.*, c.canon_raw
FROM feed_dedup f
JOIN canon1 c ON c.np = f.np -- pattern already staged (norm)
LEFT JOIN staged_pairs sp ON sp.np = f.np AND sp.nc = f.nc
LEFT JOIN staged_fcolor sx ON sx.np = f.np AND sx.fc = f.fc
WHERE sp.np IS NULL -- norm pair NOT staged
AND sx.np IS NULL -- fuzzy color NOT staged (drop Gray/Grey)
)
INSERT INTO momentum_colorways
(pattern_name,color_name,color_number,momentum_sku,image_url,list_price,width,category,
product_line,collection_name,uom,price_unit,cost,hw_price,sub_category,tags,created_at,updated_at)
SELECT
canon_raw,
preferred_color_name,
nullif(preferred_color_number,''),
nullif(number,''),
NULL,
nullif(list_price,'')::numeric,
nullif(btrim(base_width),''),
category_name,
nullif(btrim(product_line_code),''),
NULL,
nullif(btrim(uom),''),
nullif(btrim(uom),''),
round(nullif(list_price,'')::numeric * 0.80, 2),
round(nullif(list_price,'')::numeric * 1.448, 2),
CASE WHEN category_name = 'Acoustic' THEN 'Acoustic Panel' END,
CASE WHEN btrim(pattern_name) IN ('Hula WC','Sea Line','Palomar','Oakstone') THEN '["settlement-review"]' END,
now(), now()
FROM held
ON CONFLICT (pattern_name,color_name) DO NOTHING
RETURNING id, pattern_name, color_name;