/// Geparster Scan-Code im Format /// `;;`. typedef ScanCode = ({String articleNumber, int customerErpId, String beleg}); /// Parst das QR-Code-Format `;;`. /// /// Trimmt jedes Feld, lehnt leere Felder und nicht-numerische /// Kundennummern ab. Liefert `null`, wenn das Format nicht stimmt — der /// Aufrufer übersetzt das in eine einheitliche „nicht vorgesehen"-Meldung, /// damit der Fahrer kein Backstage-Tech-Feedback bekommt. /// /// Geteilt zwischen Beladen-Phase (`LoadingCustomerPage`) und Filial-Abholung /// (`FilialePickupScanPage`) — beide nutzen dasselbe Sticker-Format. ScanCode? parseScanCode(String raw) { final parts = raw.split(';'); if (parts.length != 3) return null; final articleNumber = parts[0].trim(); final customerStr = parts[1].trim(); final beleg = parts[2].trim(); if (articleNumber.isEmpty || beleg.isEmpty) return null; final customerErpId = int.tryParse(customerStr); if (customerErpId == null) return null; return ( articleNumber: articleNumber, customerErpId: customerErpId, beleg: beleg, ); }