diff --git a/app.js b/app.js index 76f4d9c..119e031 100644 --- a/app.js +++ b/app.js @@ -261,17 +261,33 @@ function updateQueuePill() { } // ── Barcode extraction ──────────────────────────────────────────────── -// Scanned codes have 8 space-separated blocks; the 3rd through 6th -// (0-indexed 2..5) form the real scan code, concatenated without spaces. -// E.g. "0003 580 0626 5027 3077 23 328 040" → "06265027307723" +// Handles multiple formats: +// 1. DPD barcode starting with %: +// % + 7-char postcode + 14-digit tracking + 3-digit service + 3-digit country +// E.g. "%000460006265029820831328040" → "06265029820831" +// 2. Space-separated blocks: 3rd through 6th (0-indexed 2..5) joined +// E.g. "0003 580 0626 5027 3077 23 328 040" → "06265027307723" function extractCode(raw) { // Strip parentheses first const cleaned = raw.trim().replace(/[()]/g, ""); + + // Handle %-prefixed DPD barcode + if (cleaned.startsWith("%")) { + const withoutPct = cleaned.slice(1); + if (withoutPct.length >= 21) { + // Skip 7-char postcode, take 14-digit tracking number, drop the rest + return withoutPct.slice(7, 21); + } + return withoutPct; // fallback: return everything after % + } + + // Handle space-separated format const parts = cleaned.split(/\s+/); if (parts.length >= 6) { return parts.slice(2, 6).join(""); } - return cleaned; // fallback: use cleaned input + + return cleaned; // fallback: use as-is } // ── Enqueue (called immediately on Enter) ──────────────────────────────