← back to Council 0809 Builds
rolls-ar-deeplink/audit-collision-split.js
24 lines
#!/usr/bin/env node
// read-only: split the divergent cross-vendor collisions into dangerous vs benign-rounding.
'use strict';
const { execFileSync } = require('child_process');
const psql = s => execFileSync('psql', ['-h', '/tmp', '-d', 'dw_unified', '-tAF\t', '-X', '-c', s], { encoding: 'utf8', maxBuffer: 1 << 28 });
const toIn = v => { const m = String(v).match(/[0-9]+(\.[0-9]+)?/); if (!m) return null; const n = parseFloat(m[0]); return n > 0 ? Math.round(n * 100) / 100 : null; };
const tabs = psql("select table_name from information_schema.columns where table_schema='public' and column_name='repeat_v' and table_name like '%_catalog' and table_name not like '%_bak%' and table_name not like '_bak%'").trim().split('\n').map(s => s.trim());
const km = new Map();
for (const t of tabs) {
const cols = psql(`select column_name from information_schema.columns where table_schema='public' and table_name='${t}'`).trim().split('\n').map(s => s.trim());
const sk = ['mfr_sku', 'manufacturer_sku', 'sku', 'pattern_number', 'product_code', 'style_number'].find(c => cols.includes(c));
if (!sk) continue;
let rows = []; try { rows = psql(`select ${sk}::text,repeat_v::text from ${t} where repeat_v is not null`).trim().split('\n').filter(Boolean); } catch { continue; }
for (const l of rows) { const [s, rv] = l.split('\t'); const n = toIn(rv); if (!s || n == null) continue; const k = s.trim().toUpperCase(); if (!km.has(k)) km.set(k, []); km.get(k).push({ v: n, t: t.replace('_catalog', '') }); }
}
let benign = 0, danger = 0; const dex = [];
for (const [k, a] of km) {
const vals = a.map(x => x.v); const u = [...new Set(vals)]; if (u.length < 2) continue;
const mn = Math.min(...vals), mx = Math.max(...vals);
if (mx / mn > 1.5 || mx - mn > 3) { danger++; if (dex.length < 15) dex.push(`${k}: ${[...new Set(a.map(x => x.t + '=' + x.v))].join(' / ')}`); }
else benign++;
}
console.log(JSON.stringify({ divergent_total: benign + danger, benign_rounding: benign, DANGEROUS_material: danger, examples: dex }, null, 2));