expenses_agent: batch LLM calls + skip RAG to fix timeout on large uploads
- auto_rag=False: skip PeerBus odoo_doc_agent call on every execute();
eliminates 30s Ollama semaphore contention before parsing even starts
- _batch_parse_receipts(): Phase 1 regex (instant per-receipt: amount,
date, bank-statement skip); Phase 2 single batched LLM call for all
vendor+product_name instead of N individual calls; vision mode falls
back to per-receipt calls (can't batch images); LLM fallback on bad
JSON or wrong item count
- _act() updated to use _batch_parse_receipts()
- 7 new tests covering batch happy path, regex-only amounts, private-key
cleanup, bank-statement skip, malformed-JSON fallback, wrong-count
fallback, no-products short-circuit (99 tests total, all passing)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>