diff --git a/flutter/lib/features/import/utils/receipt_import_utils.dart b/flutter/lib/features/import/utils/receipt_import_utils.dart index 76313593..e5ab44a6 100644 --- a/flutter/lib/features/import/utils/receipt_import_utils.dart +++ b/flutter/lib/features/import/utils/receipt_import_utils.dart @@ -74,6 +74,15 @@ bool isPackageLikeUnit(String? unit) { return (packQuantity: value, packUnit: sizeUnit); } +double? extractMultipackCountFromRawName(String rawName) { + final match = RegExp( + r'(\d+)\s*[x×]\s*\d+(?:[\.,]\d+)?\s*(ml|cl|dl|l|g|kg)\b', + caseSensitive: false, + ).firstMatch(rawName); + if (match == null) return null; + return double.tryParse(match.group(1)!); +} + // ── Paketfältsinferens ──────────────────────────────────────────────────────── typedef PackageFields = ({ @@ -92,6 +101,7 @@ PackageFields inferPackageFields({ final normalizedUnit = unit?.trim().toLowerCase(); final safeCount = (quantity != null && quantity > 0) ? quantity : 1.0; final extracted = extractPackageSizeFromRawName(rawName); + final multipackCount = extractMultipackCountFromRawName(rawName); // Om rånamnet innehåller storlek (t.ex. "5dl") och enhet saknas eller är // paketliknande — använd extraherad storlek. @@ -99,11 +109,14 @@ PackageFields inferPackageFields({ (normalizedUnit == null || normalizedUnit.isEmpty || isPackageLikeUnit(normalizedUnit))) { + final packageCount = multipackCount != null && multipackCount > 0 + ? multipackCount + : safeCount; return ( packQuantity: extracted.packQuantity, packUnit: extracted.packUnit, - packageCount: safeCount, - totalQuantity: extracted.packQuantity * safeCount, + packageCount: packageCount, + totalQuantity: extracted.packQuantity * packageCount, totalUnit: extracted.packUnit, ); }