AJ 5511709a86 Add receipt auto-mapping functionality
Implemented automatic mapping of parsed receipts to matching
transactions, with both automatic (after parsing) and manual
(via button) triggers.

New Service - ReceiptAutoMapper:
- AutoMapReceiptAsync: Maps a single receipt to a transaction
- AutoMapUnmappedReceiptsAsync: Bulk maps all unmapped receipts
- FindMatchingTransactionsAsync: Smart matching algorithm using:
  - Receipt date (+/- 3 days for processing delays)
  - Merchant name (matches against transaction merchant or name)
  - Total amount (within $0.10 tolerance)
  - Excludes transactions that already have receipts
  - Returns single match, multiple matches, or no match

Matching Strategy:
- Single match: Automatically maps
- Multiple matches: Reports count for manual review
- No match: Reports for manual intervention
- Not parsed: Skips (requires merchant, date, or total)

Integration Points:
- OpenAIReceiptParser: Triggers auto-mapping after successful parse
  (only for unmapped receipts, errors ignored to not fail parse)
- Receipts page: Added "Auto-Map Unmapped Receipts" button
  - Only shows when unmapped parsed receipts exist
  - Displays detailed results (mapped count, no match, multi-match)

This enables a streamlined workflow:
1. Upload receipt → 2. Parse receipt → 3. Auto-map to transaction
Users can also trigger bulk auto-mapping for all unmapped receipts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 13:07:35 -04:00
2025-10-04 02:19:54 -04:00
2025-10-04 02:13:50 -04:00
Description
No description provided
103 MiB
Languages
C# 66.6%
HTML 31.2%
JavaScript 1.9%
CSS 0.2%
Dockerfile 0.1%