fix(receipt-import): infer size from raw name when unit is missing

This commit is contained in:
Nils-Johan Gynther
2026-05-02 22:52:21 +02:00
parent 60ab2465aa
commit 60056b94bf
@@ -63,7 +63,23 @@ bool _isPackageLikeUnit(String? unit) {
required double? quantity, required double? quantity,
required String? unit, required String? unit,
}) { }) {
if (quantity == null || unit == null) { final normalizedUnit = unit?.trim().toLowerCase();
final safeCount = (quantity != null && quantity > 0) ? quantity : 1.0;
final extracted = _extractPackageSizeFromRawName(rawName);
// If the receipt name contains size (e.g. "5dl"), prefer it when unit is
// missing/unknown or when OCR reports package-like count units (st/pkt/etc).
if (extracted != null && (normalizedUnit == null || normalizedUnit.isEmpty || _isPackageLikeUnit(normalizedUnit))) {
return (
packQuantity: extracted.packQuantity,
packUnit: extracted.packUnit,
packageCount: safeCount,
totalQuantity: extracted.packQuantity * safeCount,
totalUnit: extracted.packUnit,
);
}
if (quantity == null || normalizedUnit == null || normalizedUnit.isEmpty) {
return ( return (
packQuantity: null, packQuantity: null,
packUnit: null, packUnit: null,
@@ -73,8 +89,7 @@ bool _isPackageLikeUnit(String? unit) {
); );
} }
final looksLikePackage = _isPackageLikeUnit(unit); final looksLikePackage = _isPackageLikeUnit(normalizedUnit);
final extracted = _extractPackageSizeFromRawName(rawName);
if (looksLikePackage && extracted != null) { if (looksLikePackage && extracted != null) {
return ( return (
@@ -88,10 +103,10 @@ bool _isPackageLikeUnit(String? unit) {
return ( return (
packQuantity: quantity, packQuantity: quantity,
packUnit: unit, packUnit: normalizedUnit,
packageCount: 1, packageCount: 1,
totalQuantity: quantity, totalQuantity: quantity,
totalUnit: unit, totalUnit: normalizedUnit,
); );
} }