/** Analyse du scan (D4) : le QR des étiquettes A6 (R1) encode l'URL du * portail public `…/q/REF`. On accepte aussi une référence tapée à la main. * Retour : la référence normalisée, ou null si le code n'est pas un nôtre. */ const REF_VALIDE = /^[A-Z0-9][A-Z0-9-]{0,11}$/; export function analyseScan(brut: string): string | null { const texte = brut.trim(); if (!texte) return null; // URL d'étiquette : http(s)://…/q/A1 (quel que soit le domaine d'origine) const url = texte.match(/^https?:\/\/[^\s]+\/q\/([^\s/?#]+)$/i); const candidat = decodeURIComponent(url?.[1] ?? texte).toUpperCase(); return REF_VALIDE.test(candidat) ? candidat : null; }