feat(receipt-import): enhance bread category detection and improve session management

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-05-03 16:34:15 +02:00
parent a1c4a2f24d
commit fa7f225ee5
7 changed files with 299 additions and 12 deletions
@@ -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,
);
}