From bd9d72d1bc1747f6c6b8b463c9bc57d21c0f117f Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 11 Jun 2026 06:49:49 +0000 Subject: [PATCH] fix(flexoptix-enricher): handle Terabit Ethernet rates in speed extraction nominalSpeedFromSpecs missed '1.6T Ethernet' protocol entries (only matched 'G'), returning 800 for twin-port 1.6T parts instead of 1600. Added Terabit handling + guarded against 'Nx 800G' aggregate partial-matches. After re-deriving all 805 catalog-confirmed FX parts from their stored datasheet specs, DB now matches the Flexoptix datasheet 100%: Form Factor 802/802, Speed 801/801, 0 deviations. --- .../scraper/src/robots/flexoptix-detail-enricher.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/scraper/src/robots/flexoptix-detail-enricher.ts b/packages/scraper/src/robots/flexoptix-detail-enricher.ts index de934e0..c391594 100644 --- a/packages/scraper/src/robots/flexoptix-detail-enricher.ts +++ b/packages/scraper/src/robots/flexoptix-detail-enricher.ts @@ -227,8 +227,14 @@ function nominalSpeedFromSpecs(specs: FxApiSpec[]): number | null { if (/\bfast ethernet\b/.test(t)) sp = 0.1; else if (/\bgigabit ethernet\b/.test(t)) sp = 1; else { - const m = t.match(/\b(\d+(?:\.\d+)?)\s*g(?:b|be|ig)?\s*ethernet\b/) || t.match(/\b(\d+)\s*gbe\b/); - if (m) sp = parseFloat(m[1]); + // Terabit first ("1.6t ethernet" -> 1600), then Gigabit. Aggregate "Nx MMMg" + // twin-port labels resolve via the explicit total (e.g. "1.6T Ethernet"). + const mt = t.match(/\b(\d+(?:\.\d+)?)\s*t(?:b|be|ig)?\s*ethernet\b/); + if (mt) sp = parseFloat(mt[1]) * 1000; + else { + const m = t.match(/(?:^|[^x\d])(\d+(?:\.\d+)?)\s*g(?:b|be|ig)?\s*ethernet\b/) || t.match(/\b(\d+)\s*gbe\b/); + if (m) sp = parseFloat(m[1]); + } } if (sp !== null && (best === null || sp > best)) best = sp; }