8b5985dc80
- Extended keyword map: 100+ entries covering bread (bauletto->Pane), cheese (bel->Formaggio, casatella->Formaggio), wine (vesoletto/trebbiano->Vino), foreign brand names (kaffee->Caffe, risofrolle->Cracker, zuppalatte->Biscotti, inchusa->Birra, apfelsaft->Succo, kartoffelpüree->Purè, ciobar->Cioccolata calda, ovomaltine->Bevande), desserts (gelato->Gelato), herbs (camomilla->Camomilla), liquors (sambuca->Liquore), sugar variants (zuccheri->Zucchero), foreign words (jus/zumo/arome->Italian equivalents) - Add _geminiClassifyProduct(): calls Gemini 2.0 Flash for ambiguous product names, with persistent cache in data/shopping_name_cache.json (never re-queries same product) - computeShoppingName() now calls Gemini when keyword map and Bring! catalog both fail and the product name is multi-token or has a brand/category hint - saveProduct() auto-computes shopping_name on every create/update (already in prev commit) - DB migration: all 210 products re-classified with new rules - shopping list: 38->33 groups (Formaggio +4v, Affettato +5v, Biscotti +1v, Pane +1v...) - Final SQL fixes for edge cases: Gelato, Camomilla, brand name single tokens