feat(receipt-import): add multipack count extraction from raw name and update package fields inference
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user