/// Geparster Scan-Code im Format
/// `<Artikelnummer>;<Kundennummer>;<Belegnummer>`.
typedef ScanCode = ({String articleNumber, int customerErpId, String beleg});

/// Parst das QR-Code-Format `<Artikelnummer>;<Kundennummer>;<Belegnummer>`.
///
/// 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,
  );
}
