From 35e59119b1054f0e17247c7dfe88fd788c8be3ac Mon Sep 17 00:00:00 2001 From: rxshellg Date: Mon, 1 Dec 2025 17:36:42 -0500 Subject: [PATCH] Reverted to original parsing logic --- src/pages/Review.tsx | 4 ---- src/utils/parseReceipt.ts | 36 +++++++++++------------------------- 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/src/pages/Review.tsx b/src/pages/Review.tsx index b7a3e83..a3695d9 100644 --- a/src/pages/Review.tsx +++ b/src/pages/Review.tsx @@ -7,10 +7,6 @@ const Review = () => { const [items, setItems] = useState([]); useEffect(() => { - console.log("OCR RAW TEXT:", JSON.stringify(ocrText)); - console.log("LINES:", ocrText.split(/\r?\n/)); - const parsed = parseItems(ocrText); - console.log("PARSED ITEMS:", parsed); setItems(parseItems(ocrText)); }, [ocrText]); diff --git a/src/utils/parseReceipt.ts b/src/utils/parseReceipt.ts index fca5dc5..e552377 100644 --- a/src/utils/parseReceipt.ts +++ b/src/utils/parseReceipt.ts @@ -1,44 +1,30 @@ export type Item = { name: string; price: number; quantity: number }; -const PRICE_END = /\$?\s*(\d{1,4}[.,]\d{2})\s*$/i; -const PRICE_LINE = /(.+?)\s+\$?\s*(\d{1,4}[.,]\d{2})\s*$/; const BANNED = ["total", "subtotal", "admin", "tax", "change", "instagram"]; export function parseItems(ocrText: string): Item[] { const lines = ocrText .split(/\r?\n/) - .map(l => l.trim()) + .map(line => line.trim()) .filter(Boolean); - const candidates: string[] = []; + const combined = lines.flatMap((line, i) => { + const priceMatch = line.match(/^\$?\d{1,4}[.,]\d{2}$/); + return priceMatch && i > 0 ? [`${lines[i - 1]} ${line}`] : []; + }); - for (let i = 0; i < lines.length; i++) { - const cur = lines[i]; - const prev = lines[i - 1]; - - // Case A: item and price are on the SAME line → keep as-is - if (PRICE_END.test(cur)) { - candidates.push(cur); - continue; - } - - // Case B: price-only line (e.g., "$7.00") → stitch with previous line - const isJustPrice = /^\$?\d{1,4}[.,]\d{2}$/.test(cur); - if (isJustPrice && prev) candidates.push(`${prev} ${cur}`); - } - - const parsed = candidates + const parsed = combined .map(line => { - const m = line.match(PRICE_LINE) - if (!m) return null; + const match = line.match(/^(.+?)\s+\$?(\d{1,4}[.,]\d{2})$/); + if (!match) return null; - let rawName = m[1]; - const priceStr = m[2]; + let rawName = match[1]; + const priceStr = match[2]; let quantity = 1; const q = rawName.match(/^(\d+)\s+(.*)$/); if (q) { - quantity = parseInt(q[1], 10) || 1; + quantity = parseInt(q[1]) || 1; rawName = q[2]; }