feat(receipt-import): enhance bread category detection and improve session management
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -83,6 +83,15 @@ double? extractMultipackCountFromRawName(String rawName) {
|
||||
return double.tryParse(match.group(1)!);
|
||||
}
|
||||
|
||||
double? extractPieceCountFromRawName(String rawName) {
|
||||
final match = RegExp(
|
||||
r'(\d+(?:[\.,]\d+)?)\s*st\b',
|
||||
caseSensitive: false,
|
||||
).firstMatch(rawName);
|
||||
if (match == null) return null;
|
||||
return double.tryParse(match.group(1)!.replaceAll(',', '.'));
|
||||
}
|
||||
|
||||
// ── Paketfältsinferens ────────────────────────────────────────────────────────
|
||||
|
||||
typedef PackageFields = ({
|
||||
@@ -102,6 +111,18 @@ PackageFields inferPackageFields({
|
||||
final safeCount = (quantity != null && quantity > 0) ? quantity : 1.0;
|
||||
final extracted = extractPackageSizeFromRawName(rawName);
|
||||
final multipackCount = extractMultipackCountFromRawName(rawName);
|
||||
final pieceCount = extractPieceCountFromRawName(rawName);
|
||||
|
||||
// Exempel: "SALAMI PEPPAR 150G 2st" ska ge pack=150g och antal förpackningar=2.
|
||||
if (extracted != null && pieceCount != null && pieceCount > 0) {
|
||||
return (
|
||||
packQuantity: extracted.packQuantity,
|
||||
packUnit: extracted.packUnit,
|
||||
packageCount: pieceCount,
|
||||
totalQuantity: extracted.packQuantity * pieceCount,
|
||||
totalUnit: extracted.packUnit,
|
||||
);
|
||||
}
|
||||
|
||||
// Om rånamnet innehåller storlek (t.ex. "5dl") och enhet saknas eller är
|
||||
// paketliknande — använd extraherad storlek.
|
||||
@@ -132,11 +153,14 @@ PackageFields inferPackageFields({
|
||||
}
|
||||
|
||||
if (isPackageLikeUnit(normalizedUnit) && extracted != null) {
|
||||
final packageCount = pieceCount != null && pieceCount > 0
|
||||
? pieceCount
|
||||
: quantity;
|
||||
return (
|
||||
packQuantity: extracted.packQuantity,
|
||||
packUnit: extracted.packUnit,
|
||||
packageCount: quantity,
|
||||
totalQuantity: extracted.packQuantity * quantity,
|
||||
packageCount: packageCount,
|
||||
totalQuantity: extracted.packQuantity * packageCount,
|
||||
totalUnit: extracted.packUnit,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user