[object Object]

← back to Dw Yolo Loop

Romo pricing: fix double-tariff bug from authoritative trade portal

7e55c7b8173c04f4de84da9729f3daa2dd8c5235 · 2026-08-03 12:26:47 -0700 · steve-office

- Root cause: our_price built from net_cost (trade + 2x tariff) not total_price_per_roll (trade + 1x)
- Confirmed vs trade.theromogroup.com: Figura W948/03 Total/Roll $946.05 -> retail $1712.31
- Catalog: recomputed our_price for 382 rows (backup: our_price_pre_tariff_fix)
- Store: corrected 117 created products ($2890.79 overcharge removed, 6 active), ledgered before->after
- REPRICE-138 was BACKWARDS (compared correct-live vs wrong-our_price) -> cancelled

Files touched

Diff

commit 7e55c7b8173c04f4de84da9729f3daa2dd8c5235
Author: steve-office <steve@designerwallcoverings.com>
Date:   Mon Aug 3 12:26:47 2026 -0700

    Romo pricing: fix double-tariff bug from authoritative trade portal
    
    - Root cause: our_price built from net_cost (trade + 2x tariff) not total_price_per_roll (trade + 1x)
    - Confirmed vs trade.theromogroup.com: Figura W948/03 Total/Roll $946.05 -> retail $1712.31
    - Catalog: recomputed our_price for 382 rows (backup: our_price_pre_tariff_fix)
    - Store: corrected 117 created products ($2890.79 overcharge removed, 6 active), ledgered before->after
    - REPRICE-138 was BACKWARDS (compared correct-live vs wrong-our_price) -> cancelled
---
 artmura-site/romo-batch-create.py   |  75 +++++
 artmura-site/romo-reprice.py        |  66 ++++
 romo-price-correction-applied.jsonl | 117 +++++++
 romo-price-correction.json          | 587 ++++++++++++++++++++++++++++++++++++
 4 files changed, 845 insertions(+)

diff --git a/artmura-site/romo-batch-create.py b/artmura-site/romo-batch-create.py
new file mode 100644
index 0000000..b66efbb
--- /dev/null
+++ b/artmura-site/romo-batch-create.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+"""
+romo-batch-create.py — create the full remaining Romo true-new set on the LIVE store as DRAFT.
+Same structure/guards as the canary; resumable (skips SKUs that already exist), ledgered,
+throttled, progress every 25. Activation stays a SEPARATE gate.
+Env: SHOPIFY_ADMIN_TOKEN, STORE, INPUT (jsonl), LEDGER (jsonl).
+"""
+import json, os, time, urllib.request, urllib.error
+
+TOKEN=os.environ['SHOPIFY_ADMIN_TOKEN']; STORE=os.environ['STORE']
+INPUT=os.environ['INPUT']; LEDGER=os.environ['LEDGER']
+API=f"https://{STORE}/admin/api/2024-10"
+H={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"}
+
+def req(method,url,body=None):
+    data=json.dumps(body).encode() if body is not None else None
+    r=urllib.request.Request(url,data=data,headers=H,method=method)
+    for attempt in range(4):
+        try:
+            with urllib.request.urlopen(r,timeout=30) as resp:
+                return resp.status, json.loads(resp.read().decode())
+        except urllib.error.HTTPError as e:
+            if e.code==429: time.sleep(2*(attempt+1)); continue
+            return e.code, json.loads(e.read().decode() or '{}')
+        except Exception as ex:
+            time.sleep(1.5); continue
+    return 0, {"errors":"retries exhausted"}
+
+def sku_exists(sku):
+    _,d=req("POST",f"{API}/graphql.json",{"query":"{ productVariants(first:1, query:\"sku:%s\"){edges{node{id}}} }"%sku})
+    return bool(d.get("data",{}).get("productVariants",{}).get("edges"))
+
+def nl(x):
+    if isinstance(x,list): return x
+    if x and x not in ('','null'):
+        try: return json.loads(x)
+        except: return []
+    return []
+
+def build(row):
+    dw=row['dw']; title=f"{row['pattern']} {row['color']}".strip()
+    tags=list(dict.fromkeys(["Romo","Wallcovering","display_variant","Priced Per Single Roll",
+                             *nl(row.get('styles')),*nl(row.get('pats')),*nl(row.get('tags'))]))
+    ai=row.get('all_images')
+    imgs=[u.strip() for u in ai.split('|') if u.strip().startswith('http')] if isinstance(ai,str) and '|' in ai else nl(ai)
+    if not imgs and row.get('img'): imgs=[row['img']]
+    images=[{"src":u} for u in imgs][:6]
+    return {"product":{"title":title,"vendor":"Romo","product_type":row.get('type') or "Wallcovering",
+        "status":"draft","body_html":(f"<p>{row['desc']}</p>" if row.get('desc') else ""),"tags":", ".join(tags),
+        "options":[{"name":"Title","values":["Single Roll","Sample"]}],
+        "variants":[
+            {"option1":"Single Roll","price":str(row['price']),"sku":dw,"inventory_policy":"continue","requires_shipping":True,"taxable":True},
+            {"option1":"Sample","price":"4.25","sku":f"{dw}-Sample","inventory_policy":"deny","requires_shipping":True,"taxable":True}],
+        "images":images}}
+
+rows=[json.loads(l) for l in open(INPUT) if l.strip()]
+done={json.loads(l)['dw'] for l in open(LEDGER)} if os.path.exists(LEDGER) else set()
+led=open(LEDGER,"a")
+created=skipped=failed=0
+print(f"=== ROMO BATCH CREATE — {len(rows)} products, DRAFT (already ledgered: {len(done)}) ===",flush=True)
+for i,row in enumerate(rows,1):
+    dw=row['dw']
+    if dw in done: skipped+=1; continue
+    if sku_exists(dw):
+        led.write(json.dumps({"dw":dw,"skipped":"exists"})+"\n"); led.flush(); skipped+=1
+    else:
+        st,resp=req("POST",f"{API}/products.json",build(row))
+        if st in (200,201) and resp.get("product"):
+            p=resp["product"]; led.write(json.dumps({"dw":dw,"product_id":p["id"],"handle":p["handle"],"status":p["status"]})+"\n"); led.flush(); created+=1
+        else:
+            led.write(json.dumps({"dw":dw,"FAIL":str(resp.get('errors') or resp)[:150]})+"\n"); led.flush(); failed+=1
+    if i%25==0: print(f"  [{i}/{len(rows)}] created={created} skipped={skipped} failed={failed}",flush=True)
+    time.sleep(0.55)
+led.close()
+print(f"\n=== DONE: created={created} skipped={skipped} failed={failed} of {len(rows)} → {LEDGER} ===",flush=True)
diff --git a/artmura-site/romo-reprice.py b/artmura-site/romo-reprice.py
new file mode 100644
index 0000000..d1762dc
--- /dev/null
+++ b/artmura-site/romo-reprice.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+"""
+romo-reprice.py — reprice live Romo Single Roll variants to the catalog's correct retail.
+Re-fetches each product's LIVE current price (state-drift guard) before any change.
+Default = DRY-RUN (no writes). --apply performs live productVariantUpdate, ledgered before->after.
+Subset: --sku <dwsku> | --canary N | --all   (from romo-reprice-candidates.json)
+Env: SHOPIFY_ADMIN_TOKEN, STORE.
+"""
+import json, os, sys, time, urllib.request, urllib.error
+
+TOKEN=os.environ['SHOPIFY_ADMIN_TOKEN']; STORE=os.environ['STORE']
+API=f"https://{STORE}/admin/api/2024-10/graphql.json"
+H={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"}
+CANDS=os.path.join(os.path.dirname(__file__),"romo-reprice-candidates.json")
+LEDGER=os.path.expanduser("~/Projects/dw-yolo-loop/romo-reprice-applied.jsonl")
+
+def gql(q,v=None):
+    for a in range(4):
+        try:
+            r=urllib.request.Request(API,data=json.dumps({"query":q,"variables":v or {}}).encode(),headers=H,method="POST")
+            with urllib.request.urlopen(r,timeout=30) as resp: return json.loads(resp.read().decode())
+        except urllib.error.HTTPError as e:
+            if e.code==429: time.sleep(2*(a+1)); continue
+            return {"errors":str(e)}
+    return {"errors":"retries exhausted"}
+
+def live_variant(dwsku):
+    q='{ productVariants(first:1, query:"sku:%s"){edges{node{id price product{id status title}}}} }'%dwsku
+    d=gql(q); e=d.get("data",{}).get("productVariants",{}).get("edges") if "data" in d else None
+    if not e: return None
+    n=e[0]["node"]; return {"vid":n["id"],"price":n["price"],"pid":n["product"]["id"],"status":n["product"]["status"],"title":n["product"]["title"]}
+
+# args
+apply = "--apply" in sys.argv
+cands=json.load(open(CANDS))
+if "--sku" in sys.argv: sel=[c for c in cands if c["dw"]==sys.argv[sys.argv.index("--sku")+1]]
+elif "--canary" in sys.argv: sel=cands[:int(sys.argv[sys.argv.index("--canary")+1])]
+elif "--all" in sys.argv: sel=cands
+else: sel=cands[:10]
+
+print(f"=== ROMO REPRICE {'APPLY (LIVE WRITE)' if apply else 'DRY-RUN'} — {len(sel)} SKUs ===")
+print(f"{'DW SKU':<13}{'live now':>10}{'artifact':>10}{'→ new':>10}{'status':>8}  note")
+led=open(LEDGER,"a") if apply else None
+applied=skipped=drift=0
+for c in sel:
+    lv=live_variant(c["dw"])
+    if not lv: print(f"{c['dw']:<13}{'—':>10}  NOT FOUND on store (skip)"); skipped+=1; continue
+    live_now=float(lv["price"]); new=float(c["correct_price"]); art=float(c["live_price"])
+    note=[]
+    if abs(live_now-art)>=0.01: note.append(f"drift(artifact ${art:.2f})"); drift+=1
+    if abs(live_now-new)<0.01: note.append("already correct");
+    below = c.get("cost") and live_now<float(c["cost"])
+    if below: note.append("BELOW-COST")
+    flag=""
+    if apply and abs(live_now-new)>=0.01:
+        m='mutation($id:ID!,$p:String!){productVariantUpdate(input:{id:$id,price:$p}){productVariant{price} userErrors{message}}}'
+        r=gql(m,{"id":lv["vid"],"p":f"{new:.2f}"})
+        ue=r.get("data",{}).get("productVariantUpdate",{}).get("userErrors") if "data" in r else r.get("errors")
+        if not ue:
+            led.write(json.dumps({"dw":c["dw"],"vid":lv["vid"],"before":live_now,"after":round(new,2)})+"\n"); led.flush(); applied+=1; flag="✅ written"
+        else: flag=f"❌ {str(ue)[:60]}"
+    print(f"{c['dw']:<13}${live_now:>9.2f}${art:>9.2f}${new:>9.2f}{lv['status']:>8}  {' '.join(note)} {flag}")
+    time.sleep(0.5)
+if led: led.close()
+print(f"\n=== {'applied '+str(applied)+' writes' if apply else 'DRY-RUN — nothing written'} | drift:{drift} | not-found:{skipped} ===")
+if apply: print(f"reversible ledger: {LEDGER}")
diff --git a/romo-price-correction-applied.jsonl b/romo-price-correction-applied.jsonl
new file mode 100644
index 0000000..1962759
--- /dev/null
+++ b/romo-price-correction-applied.jsonl
@@ -0,0 +1,117 @@
+{"dw": "DWRM-240741", "vid": "gid://shopify/ProductVariant/44660165967923", "before": 296.65, "after": 283.17, "status": "ACTIVE"}
+{"dw": "DWRM-240706", "vid": "gid://shopify/ProductVariant/44660166197299", "before": 254.84, "after": 243.26, "status": "ACTIVE"}
+{"dw": "DWRM-240614", "vid": "gid://shopify/ProductVariant/44660166524979", "before": 246.88, "after": 235.66, "status": "ACTIVE"}
+{"dw": "DWRM-240624", "vid": "gid://shopify/ProductVariant/44660215054387", "before": 246.88, "after": 235.66, "status": "DRAFT"}
+{"dw": "DWRM-241163", "vid": "gid://shopify/ProductVariant/44660215119923", "before": 256.83, "after": 245.16, "status": "DRAFT"}
+{"dw": "DWRM-240333", "vid": "gid://shopify/ProductVariant/44660215283763", "before": 254.84, "after": 243.26, "status": "DRAFT"}
+{"dw": "DWRM-241258", "vid": "gid://shopify/ProductVariant/44660216954931", "before": 1845.61, "after": 1761.72, "status": "DRAFT"}
+{"dw": "DWRM-241531", "vid": "gid://shopify/ProductVariant/44660217380915", "before": 1616.65, "after": 1543.17, "status": "DRAFT"}
+{"dw": "DWRM-240866", "vid": "gid://shopify/ProductVariant/44660218298419", "before": 169.23, "after": 161.54, "status": "DRAFT"}
+{"dw": "DWRM-241264", "vid": "gid://shopify/ProductVariant/44660218363955", "before": 1556.92, "after": 1486.15, "status": "DRAFT"}
+{"dw": "DWRM-241267", "vid": "gid://shopify/ProductVariant/44660218658867", "before": 1835.66, "after": 1752.22, "status": "DRAFT"}
+{"dw": "DWRM-240760", "vid": "gid://shopify/ProductVariant/44660218724403", "before": 139.37, "after": 133.03, "status": "DRAFT"}
+{"dw": "DWRM-241271", "vid": "gid://shopify/ProductVariant/44660218789939", "before": 3247.24, "after": 3099.64, "status": "DRAFT"}
+{"dw": "DWRM-241273", "vid": "gid://shopify/ProductVariant/44660218921011", "before": 3713.12, "after": 3544.34, "status": "DRAFT"}
+{"dw": "DWRM-241047", "vid": "gid://shopify/ProductVariant/44660219019315", "before": 191.13, "after": 182.44, "status": "DRAFT"}
+{"dw": "DWRM-241275", "vid": "gid://shopify/ProductVariant/44660219346995", "before": 688.87, "after": 657.56, "status": "DRAFT"}
+{"dw": "DWRM-240772", "vid": "gid://shopify/ProductVariant/44660219740211", "before": 139.37, "after": 133.03, "status": "DRAFT"}
+{"dw": "DWRM-240670", "vid": "gid://shopify/ProductVariant/44660220559411", "before": 246.88, "after": 235.66, "status": "DRAFT"}
+{"dw": "DWRM-241231", "vid": "gid://shopify/ProductVariant/44660220788787", "before": 1696.29, "after": 1619.19, "status": "DRAFT"}
+{"dw": "DWRM-241292", "vid": "gid://shopify/ProductVariant/44660221935667", "before": 1674.39, "after": 1598.28, "status": "DRAFT"}
+{"dw": "DWRM-241296", "vid": "gid://shopify/ProductVariant/44660222787635", "before": 1005.43, "after": 959.73, "status": "DRAFT"}
+{"dw": "DWRM-241298", "vid": "gid://shopify/ProductVariant/44660222885939", "before": 645.07, "after": 615.75, "status": "DRAFT"}
+{"dw": "DWRM-241299", "vid": "gid://shopify/ProductVariant/44660223606835", "before": 645.07, "after": 615.75, "status": "DRAFT"}
+{"dw": "DWRM-241300", "vid": "gid://shopify/ProductVariant/44660223770675", "before": 645.07, "after": 615.75, "status": "DRAFT"}
+{"dw": "DWRM-241325", "vid": "gid://shopify/ProductVariant/44660224262195", "before": 334.48, "after": 319.28, "status": "DRAFT"}
+{"dw": "DWRM-241446", "vid": "gid://shopify/ProductVariant/44660225245235", "before": 308.6, "after": 294.57, "status": "DRAFT"}
+{"dw": "DWRM-241448", "vid": "gid://shopify/ProductVariant/44660225802291", "before": 509.68, "after": 486.52, "status": "DRAFT"}
+{"dw": "DWRM-241457", "vid": "gid://shopify/ProductVariant/44660226031667", "before": 217.01, "after": 207.15, "status": "DRAFT"}
+{"dw": "DWRM-241458", "vid": "gid://shopify/ProductVariant/44660293763123", "before": 177.19, "after": 169.14, "status": "DRAFT"}
+{"dw": "DWRM-241459", "vid": "gid://shopify/ProductVariant/44660294058035", "before": 177.19, "after": 169.14, "status": "DRAFT"}
+{"dw": "DWRM-240297", "vid": "gid://shopify/ProductVariant/44660294221875", "before": 177.19, "after": 169.14, "status": "DRAFT"}
+{"dw": "DWRM-240312", "vid": "gid://shopify/ProductVariant/44660294385715", "before": 276.74, "after": 264.16, "status": "DRAFT"}
+{"dw": "DWRM-240318", "vid": "gid://shopify/ProductVariant/44660294713395", "before": 268.78, "after": 256.56, "status": "DRAFT"}
+{"dw": "DWRM-241464", "vid": "gid://shopify/ProductVariant/44660294975539", "before": 217.01, "after": 207.15, "status": "DRAFT"}
+{"dw": "DWRM-240319", "vid": "gid://shopify/ProductVariant/44660295106611", "before": 191.13, "after": 182.44, "status": "DRAFT"}
+{"dw": "DWRM-240735", "vid": "gid://shopify/ProductVariant/44660295172147", "before": 318.55, "after": 304.07, "status": "DRAFT"}
+{"dw": "DWRM-240346", "vid": "gid://shopify/ProductVariant/44660295368755", "before": 254.84, "after": 243.26, "status": "DRAFT"}
+{"dw": "DWRM-240744", "vid": "gid://shopify/ProductVariant/44660295630899", "before": 338.46, "after": 323.08, "status": "DRAFT"}
+{"dw": "DWRM-240373", "vid": "gid://shopify/ProductVariant/44660296056883", "before": 213.03, "after": 203.35, "status": "DRAFT"}
+{"dw": "DWRM-240394", "vid": "gid://shopify/ProductVariant/44660296384563", "before": 236.92, "after": 226.15, "status": "DRAFT"}
+{"dw": "DWRM-241499", "vid": "gid://shopify/ProductVariant/44660296581171", "before": 1616.65, "after": 1543.17, "status": "DRAFT"}
+{"dw": "DWRM-240460", "vid": "gid://shopify/ProductVariant/44660296745011", "before": 298.64, "after": 285.07, "status": "DRAFT"}
+{"dw": "DWRM-240473", "vid": "gid://shopify/ProductVariant/44660297203763", "before": 274.75, "after": 262.26, "status": "DRAFT"}
+{"dw": "DWRM-240756", "vid": "gid://shopify/ProductVariant/44660297629747", "before": 139.37, "after": 133.03, "status": "DRAFT"}
+{"dw": "DWRM-241506", "vid": "gid://shopify/ProductVariant/44660297728051", "before": 1130.86, "after": 1079.46, "status": "DRAFT"}
+{"dw": "DWRM-240485", "vid": "gid://shopify/ProductVariant/44660297793587", "before": 408.14, "after": 389.59, "status": "DRAFT"}
+{"dw": "DWRM-241508", "vid": "gid://shopify/ProductVariant/44660297924659", "before": 1616.65, "after": 1543.17, "status": "DRAFT"}
+{"dw": "DWRM-240523", "vid": "gid://shopify/ProductVariant/44660297990195", "before": 230.95, "after": 220.45, "status": "DRAFT"}
+{"dw": "DWRM-240785", "vid": "gid://shopify/ProductVariant/44660298219571", "before": 137.38, "after": 131.13, "status": "DRAFT"}
+{"dw": "DWRM-240811", "vid": "gid://shopify/ProductVariant/44660298285107", "before": 205.07, "after": 195.75, "status": "DRAFT"}
+{"dw": "DWRM-240596", "vid": "gid://shopify/ProductVariant/44660298416179", "before": 362.35, "after": 345.88, "status": "DRAFT"}
+{"dw": "DWRM-240851", "vid": "gid://shopify/ProductVariant/44660298514483", "before": 284.71, "after": 271.76, "status": "DRAFT"}
+{"dw": "DWRM-240861", "vid": "gid://shopify/ProductVariant/44660298645555", "before": 254.84, "after": 243.26, "status": "DRAFT"}
+{"dw": "DWRM-240767", "vid": "gid://shopify/ProductVariant/44660298711091", "before": 139.37, "after": 133.03, "status": "DRAFT"}
+{"dw": "DWRM-240865", "vid": "gid://shopify/ProductVariant/44660299202611", "before": 254.84, "after": 243.26, "status": "DRAFT"}
+{"dw": "DWRM-240764", "vid": "gid://shopify/ProductVariant/44660299366451", "before": 139.37, "after": 133.03, "status": "DRAFT"}
+{"dw": "DWRM-240875", "vid": "gid://shopify/ProductVariant/44660299431987", "before": 169.23, "after": 161.54, "status": "DRAFT"}
+{"dw": "DWRM-240890", "vid": "gid://shopify/ProductVariant/44660299497523", "before": 167.24, "after": 159.64, "status": "DRAFT"}
+{"dw": "DWRM-240908", "vid": "gid://shopify/ProductVariant/44660299759667", "before": 234.93, "after": 224.25, "status": "DRAFT"}
+{"dw": "DWRM-240800", "vid": "gid://shopify/ProductVariant/44660299857971", "before": 211.04, "after": 201.45, "status": "DRAFT"}
+{"dw": "DWRM-240958", "vid": "gid://shopify/ProductVariant/44660300185651", "before": 252.85, "after": 241.36, "status": "DRAFT"}
+{"dw": "DWRM-240968", "vid": "gid://shopify/ProductVariant/44660300349491", "before": 262.81, "after": 250.86, "status": "DRAFT"}
+{"dw": "DWRM-240813", "vid": "gid://shopify/ProductVariant/44660300513331", "before": 222.99, "after": 212.85, "status": "DRAFT"}
+{"dw": "DWRM-240995", "vid": "gid://shopify/ProductVariant/44660300677171", "before": 300.63, "after": 286.97, "status": "DRAFT"}
+{"dw": "DWRM-240817", "vid": "gid://shopify/ProductVariant/44660300841011", "before": 205.07, "after": 195.75, "status": "DRAFT"}
+{"dw": "DWRM-240997", "vid": "gid://shopify/ProductVariant/44660300972083", "before": 300.63, "after": 286.97, "status": "DRAFT"}
+{"dw": "DWRM-240854", "vid": "gid://shopify/ProductVariant/44660301201459", "before": 284.71, "after": 271.76, "status": "DRAFT"}
+{"dw": "DWRM-241032", "vid": "gid://shopify/ProductVariant/44660301332531", "before": 191.13, "after": 182.44, "status": "DRAFT"}
+{"dw": "DWRM-241043", "vid": "gid://shopify/ProductVariant/44660301496371", "before": 191.13, "after": 182.44, "status": "DRAFT"}
+{"dw": "DWRM-240886", "vid": "gid://shopify/ProductVariant/44660301594675", "before": 169.23, "after": 161.54, "status": "DRAFT"}
+{"dw": "DWRM-240897", "vid": "gid://shopify/ProductVariant/44660301824051", "before": 205.07, "after": 195.75, "status": "DRAFT"}
+{"dw": "DWRM-241076", "vid": "gid://shopify/ProductVariant/44660301889587", "before": 563.44, "after": 537.83, "status": "DRAFT"}
+{"dw": "DWRM-240921", "vid": "gid://shopify/ProductVariant/44660302118963", "before": 163.26, "after": 155.84, "status": "DRAFT"}
+{"dw": "DWRM-241086", "vid": "gid://shopify/ProductVariant/44660302217267", "before": 193.12, "after": 184.34, "status": "DRAFT"}
+{"dw": "DWRM-240953", "vid": "gid://shopify/ProductVariant/44660302413875", "before": 207.06, "after": 197.65, "status": "DRAFT"}
+{"dw": "DWRM-241101", "vid": "gid://shopify/ProductVariant/44660302512179", "before": 215.02, "after": 205.25, "status": "DRAFT"}
+{"dw": "DWRM-241103", "vid": "gid://shopify/ProductVariant/44660302708787", "before": 234.93, "after": 224.25, "status": "DRAFT"}
+{"dw": "DWRM-241014", "vid": "gid://shopify/ProductVariant/44660302839859", "before": 300.63, "after": 286.97, "status": "DRAFT"}
+{"dw": "DWRM-241111", "vid": "gid://shopify/ProductVariant/44660302938163", "before": 226.97, "after": 216.65, "status": "DRAFT"}
+{"dw": "DWRM-241115", "vid": "gid://shopify/ProductVariant/44660303167539", "before": 199.1, "after": 190.05, "status": "DRAFT"}
+{"dw": "DWRM-241053", "vid": "gid://shopify/ProductVariant/44660303331379", "before": 539.55, "after": 515.02, "status": "DRAFT"}
+{"dw": "DWRM-241054", "vid": "gid://shopify/ProductVariant/44660303462451", "before": 539.55, "after": 515.02, "status": "DRAFT"}
+{"dw": "DWRM-241123", "vid": "gid://shopify/ProductVariant/44660303659059", "before": 159.28, "after": 152.04, "status": "DRAFT"}
+{"dw": "DWRM-241071", "vid": "gid://shopify/ProductVariant/44660303757363", "before": 213.03, "after": 203.35, "status": "DRAFT"}
+{"dw": "DWRM-241134", "vid": "gid://shopify/ProductVariant/44660303953971", "before": 521.63, "after": 497.92, "status": "DRAFT"}
+{"dw": "DWRM-241094", "vid": "gid://shopify/ProductVariant/44660304052275", "before": 169.23, "after": 161.54, "status": "DRAFT"}
+{"dw": "DWRM-241135", "vid": "gid://shopify/ProductVariant/44660304117811", "before": 521.63, "after": 497.92, "status": "DRAFT"}
+{"dw": "DWRM-241136", "vid": "gid://shopify/ProductVariant/44660304216115", "before": 159.28, "after": 152.04, "status": "DRAFT"}
+{"dw": "DWRM-241137", "vid": "gid://shopify/ProductVariant/44660304347187", "before": 306.61, "after": 292.67, "status": "DRAFT"}
+{"dw": "DWRM-240657", "vid": "gid://shopify/ProductVariant/44660304412723", "before": 348.42, "after": 332.58, "status": "DRAFT"}
+{"dw": "DWRM-241139", "vid": "gid://shopify/ProductVariant/44660304478259", "before": 306.61, "after": 292.67, "status": "DRAFT"}
+{"dw": "DWRM-241161", "vid": "gid://shopify/ProductVariant/44660304609331", "before": 250.86, "after": 239.46, "status": "DRAFT"}
+{"dw": "DWRM-241142", "vid": "gid://shopify/ProductVariant/44660304674867", "before": 256.83, "after": 245.16, "status": "DRAFT"}
+{"dw": "DWRM-240533", "vid": "gid://shopify/ProductVariant/44660305035315", "before": 955.66, "after": 912.22, "status": "DRAFT"}
+{"dw": "DWRM-241255", "vid": "gid://shopify/ProductVariant/44660305526835", "before": 1845.61, "after": 1761.72, "status": "DRAFT"}
+{"dw": "DWRM-241262", "vid": "gid://shopify/ProductVariant/44660305657907", "before": 1556.92, "after": 1486.15, "status": "DRAFT"}
+{"dw": "DWRM-241184", "vid": "gid://shopify/ProductVariant/44660306935859", "before": 1023.35, "after": 976.83, "status": "DRAFT"}
+{"dw": "DWRM-241188", "vid": "gid://shopify/ProductVariant/44660307001395", "before": 692.85, "after": 661.36, "status": "DRAFT"}
+{"dw": "DWRM-241125", "vid": "gid://shopify/ProductVariant/44660307230771", "before": 177.19, "after": 169.14, "status": "DRAFT"}
+{"dw": "DWRM-241351", "vid": "gid://shopify/ProductVariant/44660307296307", "before": 601.27, "after": 573.94, "status": "DRAFT"}
+{"dw": "DWRM-241207", "vid": "gid://shopify/ProductVariant/44660307361843", "before": 280.72, "after": 267.96, "status": "DRAFT"}
+{"dw": "DWRM-241214", "vid": "gid://shopify/ProductVariant/44660307722291", "before": 441.99, "after": 421.9, "status": "DRAFT"}
+{"dw": "DWRM-241132", "vid": "gid://shopify/ProductVariant/44660307820595", "before": 521.63, "after": 497.92, "status": "DRAFT"}
+{"dw": "DWRM-241234", "vid": "gid://shopify/ProductVariant/44660308017203", "before": 1134.84, "after": 1083.26, "status": "DRAFT"}
+{"dw": "DWRM-241239", "vid": "gid://shopify/ProductVariant/44660309360691", "before": 1112.94, "after": 1062.35, "status": "DRAFT"}
+{"dw": "DWRM-241503", "vid": "gid://shopify/ProductVariant/44660309688371", "before": 1130.86, "after": 1079.46, "status": "DRAFT"}
+{"dw": "DWRM-241240", "vid": "gid://shopify/ProductVariant/44660310016051", "before": 1730.14, "after": 1651.49, "status": "DRAFT"}
+{"dw": "DWRM-240942", "vid": "gid://shopify/ProductVariant/44660310310963", "before": 248.87, "after": 237.56, "status": "DRAFT"}
+{"dw": "DWRM-240269", "vid": "gid://shopify/ProductVariant/44660310507571", "before": 244.89, "after": 233.76, "status": "DRAFT"}
+{"dw": "DWRM-241141", "vid": "gid://shopify/ProductVariant/44660310999091", "before": 256.83, "after": 245.16, "status": "DRAFT"}
+{"dw": "DWRM-241421", "vid": "gid://shopify/ProductVariant/44660311162931", "before": 481.81, "after": 459.91, "status": "DRAFT"}
+{"dw": "DWRM-241056", "vid": "gid://shopify/ProductVariant/44660311490611", "before": 213.03, "after": 203.35, "status": "DRAFT"}
+{"dw": "DWRM-241119", "vid": "gid://shopify/ProductVariant/44660312801331", "before": 226.97, "after": 216.65, "status": "DRAFT"}
+{"dw": "DWRM-240948", "vid": "gid://shopify/ProductVariant/44660312997939", "before": 215.02, "after": 205.25, "status": "DRAFT"}
+{"dw": "DWRM-241249", "vid": "gid://shopify/ProductVariant/44660165673011", "before": 1793.85, "after": 1712.31, "status": "ACTIVE"}
+{"dw": "DWRM-241252", "vid": "gid://shopify/ProductVariant/44660166131763", "before": 1477.29, "after": 1410.14, "status": "ACTIVE"}
+{"dw": "DWRM-240437", "vid": "gid://shopify/ProductVariant/44660166819891", "before": 300.63, "after": 286.97, "status": "ACTIVE"}
diff --git a/romo-price-correction.json b/romo-price-correction.json
new file mode 100644
index 0000000..8b664d8
--- /dev/null
+++ b/romo-price-correction.json
@@ -0,0 +1,587 @@
+[
+ {
+  "dw": "DWRM-240741",
+  "from": 296.65,
+  "to": 283.17
+ },
+ {
+  "dw": "DWRM-240706",
+  "from": 254.84,
+  "to": 243.26
+ },
+ {
+  "dw": "DWRM-240614",
+  "from": 246.88,
+  "to": 235.66
+ },
+ {
+  "dw": "DWRM-240624",
+  "from": 246.88,
+  "to": 235.66
+ },
+ {
+  "dw": "DWRM-241163",
+  "from": 256.83,
+  "to": 245.16
+ },
+ {
+  "dw": "DWRM-240333",
+  "from": 254.84,
+  "to": 243.26
+ },
+ {
+  "dw": "DWRM-241258",
+  "from": 1845.61,
+  "to": 1761.72
+ },
+ {
+  "dw": "DWRM-241531",
+  "from": 1616.65,
+  "to": 1543.17
+ },
+ {
+  "dw": "DWRM-240866",
+  "from": 169.23,
+  "to": 161.54
+ },
+ {
+  "dw": "DWRM-241264",
+  "from": 1556.92,
+  "to": 1486.15
+ },
+ {
+  "dw": "DWRM-241267",
+  "from": 1835.66,
+  "to": 1752.22
+ },
+ {
+  "dw": "DWRM-240760",
+  "from": 139.37,
+  "to": 133.03
+ },
+ {
+  "dw": "DWRM-241271",
+  "from": 3247.24,
+  "to": 3099.64
+ },
+ {
+  "dw": "DWRM-241273",
+  "from": 3713.12,
+  "to": 3544.34
+ },
+ {
+  "dw": "DWRM-241047",
+  "from": 191.13,
+  "to": 182.44
+ },
+ {
+  "dw": "DWRM-241275",
+  "from": 688.87,
+  "to": 657.56
+ },
+ {
+  "dw": "DWRM-240772",
+  "from": 139.37,
+  "to": 133.03
+ },
+ {
+  "dw": "DWRM-240670",
+  "from": 246.88,
+  "to": 235.66
+ },
+ {
+  "dw": "DWRM-241231",
+  "from": 1696.29,
+  "to": 1619.19
+ },
+ {
+  "dw": "DWRM-241292",
+  "from": 1674.39,
+  "to": 1598.28
+ },
+ {
+  "dw": "DWRM-241296",
+  "from": 1005.43,
+  "to": 959.73
+ },
+ {
+  "dw": "DWRM-241298",
+  "from": 645.07,
+  "to": 615.75
+ },
+ {
+  "dw": "DWRM-241299",
+  "from": 645.07,
+  "to": 615.75
+ },
+ {
+  "dw": "DWRM-241300",
+  "from": 645.07,
+  "to": 615.75
+ },
+ {
+  "dw": "DWRM-241325",
+  "from": 334.48,
+  "to": 319.28
+ },
+ {
+  "dw": "DWRM-241446",
+  "from": 308.6,
+  "to": 294.57
+ },
+ {
+  "dw": "DWRM-241448",
+  "from": 509.68,
+  "to": 486.52
+ },
+ {
+  "dw": "DWRM-241457",
+  "from": 217.01,
+  "to": 207.15
+ },
+ {
+  "dw": "DWRM-241458",
+  "from": 177.19,
+  "to": 169.14
+ },
+ {
+  "dw": "DWRM-241459",
+  "from": 177.19,
+  "to": 169.14
+ },
+ {
+  "dw": "DWRM-240297",
+  "from": 177.19,
+  "to": 169.14
+ },
+ {
+  "dw": "DWRM-240312",
+  "from": 276.74,
+  "to": 264.16
+ },
+ {
+  "dw": "DWRM-240318",
+  "from": 268.78,
+  "to": 256.56
+ },
+ {
+  "dw": "DWRM-241464",
+  "from": 217.01,
+  "to": 207.15
+ },
+ {
+  "dw": "DWRM-240319",
+  "from": 191.13,
+  "to": 182.44
+ },
+ {
+  "dw": "DWRM-240735",
+  "from": 318.55,
+  "to": 304.07
+ },
+ {
+  "dw": "DWRM-240346",
+  "from": 254.84,
+  "to": 243.26
+ },
+ {
+  "dw": "DWRM-240744",
+  "from": 338.46,
+  "to": 323.08
+ },
+ {
+  "dw": "DWRM-240373",
+  "from": 213.03,
+  "to": 203.35
+ },
+ {
+  "dw": "DWRM-240394",
+  "from": 236.92,
+  "to": 226.15
+ },
+ {
+  "dw": "DWRM-241499",
+  "from": 1616.65,
+  "to": 1543.17
+ },
+ {
+  "dw": "DWRM-240460",
+  "from": 298.64,
+  "to": 285.07
+ },
+ {
+  "dw": "DWRM-240473",
+  "from": 274.75,
+  "to": 262.26
+ },
+ {
+  "dw": "DWRM-240756",
+  "from": 139.37,
+  "to": 133.03
+ },
+ {
+  "dw": "DWRM-241506",
+  "from": 1130.86,
+  "to": 1079.46
+ },
+ {
+  "dw": "DWRM-240485",
+  "from": 408.14,
+  "to": 389.59
+ },
+ {
+  "dw": "DWRM-241508",
+  "from": 1616.65,
+  "to": 1543.17
+ },
+ {
+  "dw": "DWRM-240523",
+  "from": 230.95,
+  "to": 220.45
+ },
+ {
+  "dw": "DWRM-240785",
+  "from": 137.38,
+  "to": 131.13
+ },
+ {
+  "dw": "DWRM-240811",
+  "from": 205.07,
+  "to": 195.75
+ },
+ {
+  "dw": "DWRM-240596",
+  "from": 362.35,
+  "to": 345.88
+ },
+ {
+  "dw": "DWRM-240851",
+  "from": 284.71,
+  "to": 271.76
+ },
+ {
+  "dw": "DWRM-240861",
+  "from": 254.84,
+  "to": 243.26
+ },
+ {
+  "dw": "DWRM-240767",
+  "from": 139.37,
+  "to": 133.03
+ },
+ {
+  "dw": "DWRM-240865",
+  "from": 254.84,
+  "to": 243.26
+ },
+ {
+  "dw": "DWRM-240764",
+  "from": 139.37,
+  "to": 133.03
+ },
+ {
+  "dw": "DWRM-240875",
+  "from": 169.23,
+  "to": 161.54
+ },
+ {
+  "dw": "DWRM-240890",
+  "from": 167.24,
+  "to": 159.64
+ },
+ {
+  "dw": "DWRM-240908",
+  "from": 234.93,
+  "to": 224.25
+ },
+ {
+  "dw": "DWRM-240800",
+  "from": 211.04,
+  "to": 201.45
+ },
+ {
+  "dw": "DWRM-240958",
+  "from": 252.85,
+  "to": 241.36
+ },
+ {
+  "dw": "DWRM-240968",
+  "from": 262.81,
+  "to": 250.86
+ },
+ {
+  "dw": "DWRM-240813",
+  "from": 222.99,
+  "to": 212.85
+ },
+ {
+  "dw": "DWRM-240995",
+  "from": 300.63,
+  "to": 286.97
+ },
+ {
+  "dw": "DWRM-240817",
+  "from": 205.07,
+  "to": 195.75
+ },
+ {
+  "dw": "DWRM-240997",
+  "from": 300.63,
+  "to": 286.97
+ },
+ {
+  "dw": "DWRM-240854",
+  "from": 284.71,
+  "to": 271.76
+ },
+ {
+  "dw": "DWRM-241032",
+  "from": 191.13,
+  "to": 182.44
+ },
+ {
+  "dw": "DWRM-241043",
+  "from": 191.13,
+  "to": 182.44
+ },
+ {
+  "dw": "DWRM-240886",
+  "from": 169.23,
+  "to": 161.54
+ },
+ {
+  "dw": "DWRM-240897",
+  "from": 205.07,
+  "to": 195.75
+ },
+ {
+  "dw": "DWRM-241076",
+  "from": 563.44,
+  "to": 537.83
+ },
+ {
+  "dw": "DWRM-240921",
+  "from": 163.26,
+  "to": 155.84
+ },
+ {
+  "dw": "DWRM-241086",
+  "from": 193.12,
+  "to": 184.34
+ },
+ {
+  "dw": "DWRM-240953",
+  "from": 207.06,
+  "to": 197.65
+ },
+ {
+  "dw": "DWRM-241101",
+  "from": 215.02,
+  "to": 205.25
+ },
+ {
+  "dw": "DWRM-241103",
+  "from": 234.93,
+  "to": 224.25
+ },
+ {
+  "dw": "DWRM-241014",
+  "from": 300.63,
+  "to": 286.97
+ },
+ {
+  "dw": "DWRM-241111",
+  "from": 226.97,
+  "to": 216.65
+ },
+ {
+  "dw": "DWRM-241115",
+  "from": 199.1,
+  "to": 190.05
+ },
+ {
+  "dw": "DWRM-241053",
+  "from": 539.55,
+  "to": 515.02
+ },
+ {
+  "dw": "DWRM-241054",
+  "from": 539.55,
+  "to": 515.02
+ },
+ {
+  "dw": "DWRM-241123",
+  "from": 159.28,
+  "to": 152.04
+ },
+ {
+  "dw": "DWRM-241071",
+  "from": 213.03,
+  "to": 203.35
+ },
+ {
+  "dw": "DWRM-241134",
+  "from": 521.63,
+  "to": 497.92
+ },
+ {
+  "dw": "DWRM-241094",
+  "from": 169.23,
+  "to": 161.54
+ },
+ {
+  "dw": "DWRM-241135",
+  "from": 521.63,
+  "to": 497.92
+ },
+ {
+  "dw": "DWRM-241136",
+  "from": 159.28,
+  "to": 152.04
+ },
+ {
+  "dw": "DWRM-241137",
+  "from": 306.61,
+  "to": 292.67
+ },
+ {
+  "dw": "DWRM-240657",
+  "from": 348.42,
+  "to": 332.58
+ },
+ {
+  "dw": "DWRM-241139",
+  "from": 306.61,
+  "to": 292.67
+ },
+ {
+  "dw": "DWRM-241161",
+  "from": 250.86,
+  "to": 239.46
+ },
+ {
+  "dw": "DWRM-241142",
+  "from": 256.83,
+  "to": 245.16
+ },
+ {
+  "dw": "DWRM-240533",
+  "from": 955.66,
+  "to": 912.22
+ },
+ {
+  "dw": "DWRM-241255",
+  "from": 1845.61,
+  "to": 1761.72
+ },
+ {
+  "dw": "DWRM-241262",
+  "from": 1556.92,
+  "to": 1486.15
+ },
+ {
+  "dw": "DWRM-241184",
+  "from": 1023.35,
+  "to": 976.83
+ },
+ {
+  "dw": "DWRM-241188",
+  "from": 692.85,
+  "to": 661.36
+ },
+ {
+  "dw": "DWRM-241125",
+  "from": 177.19,
+  "to": 169.14
+ },
+ {
+  "dw": "DWRM-241351",
+  "from": 601.27,
+  "to": 573.94
+ },
+ {
+  "dw": "DWRM-241207",
+  "from": 280.72,
+  "to": 267.96
+ },
+ {
+  "dw": "DWRM-241214",
+  "from": 441.99,
+  "to": 421.9
+ },
+ {
+  "dw": "DWRM-241132",
+  "from": 521.63,
+  "to": 497.92
+ },
+ {
+  "dw": "DWRM-241234",
+  "from": 1134.84,
+  "to": 1083.26
+ },
+ {
+  "dw": "DWRM-241239",
+  "from": 1112.94,
+  "to": 1062.35
+ },
+ {
+  "dw": "DWRM-241503",
+  "from": 1130.86,
+  "to": 1079.46
+ },
+ {
+  "dw": "DWRM-241240",
+  "from": 1730.14,
+  "to": 1651.49
+ },
+ {
+  "dw": "DWRM-240942",
+  "from": 248.87,
+  "to": 237.56
+ },
+ {
+  "dw": "DWRM-240269",
+  "from": 244.89,
+  "to": 233.76
+ },
+ {
+  "dw": "DWRM-241141",
+  "from": 256.83,
+  "to": 245.16
+ },
+ {
+  "dw": "DWRM-241421",
+  "from": 481.81,
+  "to": 459.91
+ },
+ {
+  "dw": "DWRM-241056",
+  "from": 213.03,
+  "to": 203.35
+ },
+ {
+  "dw": "DWRM-241119",
+  "from": 226.97,
+  "to": 216.65
+ },
+ {
+  "dw": "DWRM-240948",
+  "from": 215.02,
+  "to": 205.25
+ },
+ {
+  "dw": "DWRM-241249",
+  "from": 1793.85,
+  "to": 1712.31
+ },
+ {
+  "dw": "DWRM-241252",
+  "from": 1477.29,
+  "to": 1410.14
+ },
+ {
+  "dw": "DWRM-240437",
+  "from": 300.63,
+  "to": 286.97
+ }
+]
\ No newline at end of file

← 69ae2e6 Romo REPRICE dry-run: 138 live-reconciled candidates (1 belo  ·  back to Dw Yolo Loop  ·  Romo close: batch ledger + price-correction ledger + audit a 5df288c →