feat: tabellengesteuerter Teilenummer-Decoder
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.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user