Files
ocr_scanner/src/scan-modes.js
T
TanerUsluandClaude Opus 5 2d7778cea8 Funktion 2 liest 2D-Codes statt nur QR (Auftraggeber-Entscheidung revidiert)
Der Auftraggeber hatte Funktion 2 ausdruecklich auf QR beschraenkt, obwohl
die 2D-Codes auf seinen RAM-Etiketten DataMatrix sind. Am Geraet zeigte sich,
dass die Funktion auf seiner Ware nichts fand - er hat die Entscheidung
revidiert. Funktion 2 liest jetzt zusaetzlich zu QRCode/MicroQRCode/RMQRCode
auch DataMatrix, Aztec und PDF417 und heisst in der Oberflaeche "2D-Code"
statt "QR-Code". Die Kennung bleibt aus historischen Gruenden `qrcode`.

Veralteten Kommentar in scan-modes.js berichtigt, Test auf die neue
Codeliste/Beschriftung umgestellt (statt geloescht) und einen Test ergaenzt,
der paarweise verschiedene Kennungen/Beschriftungen der drei Funktionen
erzwingt. README-Funktionstabelle und Geraete-Checkliste entsprechend
angepasst.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 14:32:41 +02:00

73 lines
2.8 KiB
JavaScript

// Die drei Scan-Funktionen, die der Nutzer vor dem Scannen waehlt. Reines
// Modul ohne Browser-Zugriff (kein window/document/navigator) - einzige
// Quelle fuer Kennung, Beschriftung, Codearten und Verhalten je Funktion.
// Sowohl die Auswahl-Oberflaeche als auch main.js lesen ausschliesslich von
// hier - es darf keine zweite Stelle geben, an der Codearten oder
// Beschriftungen stehen.
//
// Funktion 2 ("2D-Code") deckt die praktisch vorkommenden zweidimensionalen
// Codearten ab: die QR-Varianten (QRCode, MicroQRCode, RMQRCode) sowie
// DataMatrix, Aztec und PDF417. Grund: Die 2D-Codes auf den eigenen
// RAM-Etiketten sind DataMatrix, nicht QR - eine auf QR beschraenkte Funktion
// faende auf dieser Ware nichts. Die Kennung heisst weiterhin `qrcode`, siehe
// Kommentar dort.
/**
* @typedef {object} ScanMode
* @property {string} id Kennung, intern verwendet (main.js, Speicherung der Wahl).
* @property {string} label Deutsche Beschriftung fuer die Oberflaeche.
* @property {string[]} barcodeFormats An decodeBarcodes() zu uebergebende
* Codearten (zxing-wasm-Formatnamen). Leer, wenn die Funktion keine
* Barcode-Dekodierung nutzt.
* @property {boolean} continuousSearch Ob waehrend die Kamera laeuft
* fortwaehrend nach Codes gesucht wird (statt nur auf Knopfdruck).
* @property {boolean} useOcr Ob die Texterkennung (Tesseract) genutzt wird.
*/
/** @type {ScanMode[]} */
export const SCAN_MODES = [
{
id: 'barcode',
label: 'Strichcode',
// Eindimensionale Codes, wie sie auf Teilenummern-Etiketten vorkommen.
barcodeFormats: ['Code128', 'Code39', 'Code93', 'ITF', 'EAN13', 'EAN8', 'UPCA', 'UPCE', 'Codabar'],
continuousSearch: true,
useOcr: false,
},
{
// Kennung bleibt aus historischen Gruenden `qrcode`, obwohl die Funktion
// inzwischen alle 2D-Codearten liest (nicht mehr nur QR) - Umbenennung
// nicht vorgenommen, da `qrcode` an mehreren Stellen durchgereicht wird.
id: 'qrcode',
label: '2D-Code',
// QR-Varianten plus DataMatrix, Aztec, PDF417 - siehe Kommentar am Kopf.
barcodeFormats: ['QRCode', 'MicroQRCode', 'RMQRCode', 'DataMatrix', 'Aztec', 'PDF417'],
continuousSearch: true,
useOcr: false,
},
{
id: 'ocr',
label: 'Text erkennen',
// Keine Codes - allein die Texterkennung, auf Knopfdruck.
barcodeFormats: [],
continuousSearch: false,
useOcr: true,
},
];
/**
* Liefert die Funktion zu einer Kennung.
* @param {string} id
* @returns {ScanMode}
* @throws {Error} wenn die Kennung keiner der drei Funktionen entspricht -
* ein Programmfehler (main.js darf nie eine fremde Kennung durchreichen),
* kein regulaerer Ausgang.
*/
export function getScanMode(id) {
const mode = SCAN_MODES.find((candidate) => candidate.id === id);
if (!mode) {
throw new Error(`Unbekannte Scan-Funktion: ${id}`);
}
return mode;
}