feat(data-quality): fill Flexoptix vendor_compat (coding matrix) from family templates
Investigated the coding-matrix gap per Rene: vendor_compat is NOT derived per-SKU from fx_compatibilities (found rows with vendor_compat fully populated but fx_compatibilities empty, and vice versa -- zero correlation). It is a shared OEM-coding-pattern reference template keyed by (speed_gbps, form_factor): only 11 distinct templates exist across the whole Flexoptix catalog, essentially 1:1 with family (one ambiguous exception, 100G/SFP, deliberately excluded). Backfilled 2,587 rows from sibling templates (fill-only, skips any family with 0 or >1 distinct templates). Flexoptix >=100G coding gap dropped from 192 to 25 missing. New trigger (trg_fill_vendor_compat_from_family) keeps this self-healing: every future Flexoptix product inherits its family template automatically once speed_gbps+form_factor are known (after detail sync), instead of needing another one-off backfill. Deliberately NOT extended to competitor products in this pass -- needs a separate, more careful evaluation of what this data actually represents for non-Flexoptix parts before propagating via equivalence.
This commit is contained in:
parent
d53acf53f4
commit
8475912083
87
sql/143-vendor-compat-template-fill.sql
Normal file
87
sql/143-vendor-compat-template-fill.sql
Normal file
@ -0,0 +1,87 @@
|
||||
-- sql/143-vendor-compat-template-fill.sql
|
||||
-- Fills transceivers.vendor_compat (Flexoptix OEM-coding-pattern reference data,
|
||||
-- feeds v_coding_coverage / check_switch_quality's "coding matrix" metric) for
|
||||
-- Flexoptix products that are missing it.
|
||||
--
|
||||
-- Investigated 2026-07-17 (Rene: "die sind in der API alle zum auslesen drinnen"):
|
||||
-- vendor_compat is NOT derived per-SKU from fx_compatibilities (found rows with
|
||||
-- vendor_compat fully populated but fx_compatibilities completely empty, and vice
|
||||
-- versa -- no correlation). It is a SHARED REFERENCE TEMPLATE keyed by
|
||||
-- (speed_gbps, form_factor): only 11 distinct templates exist across the entire
|
||||
-- Flexoptix catalog, and every (speed, form_factor) family maps to exactly one
|
||||
-- template except 100G/SFP (2 templates -- ambiguous, deliberately excluded
|
||||
-- below). This was clearly seeded once (likely seed-from-npm.ts) for a subset of
|
||||
-- products and never propagated to new SKUs added since -- 167 of 192 missing
|
||||
-- rows (87%) have an unambiguous sibling template available to copy.
|
||||
--
|
||||
-- Fill-only, idempotent, no-false-positive design matching this project's other
|
||||
-- migrations: only touches rows with an EMPTY vendor_compat, only copies a
|
||||
-- template when exactly one distinct template exists for that (speed,
|
||||
-- form_factor) family among Flexoptix's own catalog, never invents new data.
|
||||
-- Competitor vendors are explicitly OUT OF SCOPE here -- see accompanying memory
|
||||
-- for why blind propagation to competitor products needs a separate, more
|
||||
-- careful pass.
|
||||
|
||||
with templates as (
|
||||
select speed_gbps, form_factor, (array_agg(vendor_compat))[1] as template
|
||||
from transceivers t join vendors v on v.id = t.vendor_id
|
||||
where v.name = 'Flexoptix' and jsonb_array_length(coalesce(t.vendor_compat,'[]'::jsonb)) > 0
|
||||
group by speed_gbps, form_factor
|
||||
having count(distinct vendor_compat::text) = 1
|
||||
)
|
||||
update transceivers t
|
||||
set vendor_compat = tpl.template,
|
||||
updated_at = now()
|
||||
from vendors v, templates tpl
|
||||
where v.id = t.vendor_id
|
||||
and v.name = 'Flexoptix'
|
||||
and tpl.speed_gbps = t.speed_gbps
|
||||
and tpl.form_factor = t.form_factor
|
||||
and jsonb_array_length(coalesce(t.vendor_compat,'[]'::jsonb)) = 0;
|
||||
|
||||
-- Durable fix: new/updated Flexoptix products inherit the family template
|
||||
-- automatically once speed_gbps + form_factor are known (i.e. after the detail
|
||||
-- enricher runs), instead of relying on another one-off backfill.
|
||||
create or replace function tip_fill_vendor_compat_from_family() returns trigger
|
||||
language plpgsql as $$
|
||||
declare
|
||||
fx_vendor_id uuid;
|
||||
tpl jsonb;
|
||||
tpl_count int;
|
||||
begin
|
||||
if jsonb_array_length(coalesce(NEW.vendor_compat,'[]'::jsonb)) > 0
|
||||
or NEW.speed_gbps is null or NEW.form_factor is null then
|
||||
return NEW;
|
||||
end if;
|
||||
|
||||
select id into fx_vendor_id from vendors where upper(name) like '%FLEXOPTIX%' limit 1;
|
||||
if NEW.vendor_id is distinct from fx_vendor_id then
|
||||
return NEW;
|
||||
end if;
|
||||
|
||||
select count(distinct vendor_compat::text), (array_agg(vendor_compat))[1]
|
||||
into tpl_count, tpl
|
||||
from transceivers
|
||||
where vendor_id = fx_vendor_id
|
||||
and speed_gbps = NEW.speed_gbps
|
||||
and form_factor = NEW.form_factor
|
||||
and jsonb_array_length(coalesce(vendor_compat,'[]'::jsonb)) > 0
|
||||
and id is distinct from NEW.id;
|
||||
|
||||
if tpl_count = 1 then
|
||||
NEW.vendor_compat := tpl;
|
||||
end if;
|
||||
return NEW;
|
||||
end $$;
|
||||
|
||||
comment on function tip_fill_vendor_compat_from_family() is
|
||||
'BEFORE INSERT/UPDATE on transceivers: for Flexoptix products with empty vendor_compat, copies the OEM-coding-pattern template from an existing sibling of the same (speed_gbps, form_factor) family, if exactly one distinct template exists for that family. Never invents a template, never overwrites existing data, skips ambiguous families (>1 template).';
|
||||
|
||||
drop trigger if exists trg_fill_vendor_compat_from_family on transceivers;
|
||||
create trigger trg_fill_vendor_compat_from_family
|
||||
before insert or update of speed_gbps, form_factor, vendor_compat on transceivers
|
||||
for each row execute function tip_fill_vendor_compat_from_family();
|
||||
|
||||
insert into _migrations (filename, applied_at)
|
||||
select '143-vendor-compat-template-fill.sql', now()
|
||||
where not exists (select 1 from _migrations where filename = '143-vendor-compat-template-fill.sql');
|
||||
Loading…
x
Reference in New Issue
Block a user