Deckt die Samsung-Referenz-Teilenummer aus dem physisch vorhandenen Modul ab. Unbekannte Fragmente (z.B. nicht gelistete Dichte-Codes) liefern bewusst null statt einer Vermutung - das ist der geplante Uebergang zum OCR-Weg, kein Fehlerfall. Das im Task-Brief vorgegebene Regex-Muster liess das literale 'A' der Dichte-Kennung ausserhalb der Erfassungsgruppe, wodurch die Tabellensuche nach 'A8K40' nie greifen konnte. Muster korrigiert, damit die ebenfalls vorgegebenen Tests bestehen; Tabelleninhalte und Warnkommentar blieben wortgleich.
35 lines
930 B
JavaScript
35 lines
930 B
JavaScript
import { emptySpec, normalizeToken } from './spec.js';
|
|
import { VENDOR_TABLES } from './pn-tables.js';
|
|
|
|
/**
|
|
* Leitet aus einer Hersteller-Teilenummer die Spec-Felder ab.
|
|
* Nicht ableitbare Felder bleiben null - das ist kein Fehler,
|
|
* sondern der regulaere Uebergang zum OCR-Weg.
|
|
*/
|
|
export function decodePartNumber(pn) {
|
|
const spec = emptySpec();
|
|
const normalized = normalizeToken(pn);
|
|
if (normalized === '') return spec;
|
|
|
|
spec.partNumber = normalized;
|
|
|
|
for (const table of VENDOR_TABLES) {
|
|
const match = normalized.match(table.pattern);
|
|
if (!match) continue;
|
|
|
|
const [, formCode, densityCode, speedCode] = match;
|
|
|
|
spec.formFactor = table.formFactor[formCode] ?? null;
|
|
spec.speed = table.speed[speedCode] ?? null;
|
|
|
|
const density = table.density[densityCode];
|
|
if (density) {
|
|
spec.capacityGb = density.capacityGb;
|
|
spec.rank = density.rank;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return spec;
|
|
}
|