dcc7e9de42
PHP smartShopping(): - Add nameTokens() helper (mirrors JS _nameTokens) - Build stockByFirstToken map before product loop - Skip depleted (qty=0) products whose first token has stock elsewhere → 'Aglio rosso' depleted but 'Aglio' qty=3 → skip → 'Latte Parzialmente Scremato' depleted but 'Latte di Montagna' 4.8 conf → skip → 'Muesli Frutta Secca' depleted but 'Muesli multifrutta' 930g → skip - Result: 13→9 items, no more false critical flagging for covered products JS cleanupObsoleteBringItems(): - Rewrite with stockByFirstToken approach (aggregate by first token, not product_id) - urgentMatch logic: if smart item is completely depleted (qty=0) but equivalent stock exists via first token → still remove from Bring (need is covered) - Only keep Bring item if: smart flags it with current_qty>0 (genuinely running low) Also: removed Milch/Knoblauch/Fruechte/Passata from Bring directly (immediate fix)