Files
ds_quickbooks/nohup.out
T
2025-10-29 14:27:44 +00:00

4266 lines
220 KiB
Plaintext

INFO:__main__:filename: photo_2025-10-10_12-09-46.jpg, extension: jpg, google_file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:File photo_2025-10-10_12-09-46.jpg with ID 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN already exists, returning existing record
INFO: 199.241.139.243:44702 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN already exists, returning existing record
INFO: 199.241.139.243:44718 - "POST /process/1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN HTTP/1.1" 200 OK
INFO:__main__:filename: Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png, extension: png, google_file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:File Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png with ID 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl already exists, returning existing record
INFO: 199.241.139.243:44720 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl already exists, returning existing record
INFO: 199.241.139.243:44726 - "POST /process/1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg, extension: jpg, google_file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:File WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg with ID 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g already exists, returning existing record
INFO: 199.241.139.243:44732 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g already exists, returning existing record
INFO: 199.241.139.243:44746 - "POST /process/11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19.jpeg, extension: jpeg, google_file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19.jpeg with ID 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW already exists, returning existing record
INFO: 199.241.139.243:44758 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW already exists, returning existing record
INFO: 199.241.139.243:44774 - "POST /process/1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg, extension: jpeg, google_file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg with ID 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E already exists, returning existing record
INFO: 199.241.139.243:44780 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E already exists, returning existing record
INFO: 199.241.139.243:44784 - "POST /process/1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg, extension: jpeg, google_file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg with ID 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa already exists, returning existing record
INFO: 199.241.139.243:45370 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa already exists, returning existing record
INFO: 199.241.139.243:45378 - "POST /process/1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18.jpeg, extension: jpeg, google_file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.18.jpeg with ID 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY already exists, returning existing record
INFO: 199.241.139.243:45392 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY already exists, returning existing record
INFO: 199.241.139.243:45398 - "POST /process/1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg, extension: jpeg, google_file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg with ID 1-ocsQytyZP397IrLSEv5j5pco10UTbaq already exists, returning existing record
INFO: 199.241.139.243:45408 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1-ocsQytyZP397IrLSEv5j5pco10UTbaq already exists, returning existing record
INFO: 199.241.139.243:45418 - "POST /process/1-ocsQytyZP397IrLSEv5j5pco10UTbaq HTTP/1.1" 200 OK
INFO:__main__:filename: photo_2025-10-10_12-09-46.jpg, extension: jpg, google_file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:File photo_2025-10-10_12-09-46.jpg with ID 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN already exists, returning existing record
INFO: 199.241.139.243:46978 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN already exists, returning existing record
INFO: 199.241.139.243:46994 - "POST /process/1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN HTTP/1.1" 200 OK
INFO:__main__:filename: Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png, extension: png, google_file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:File Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png with ID 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl already exists, returning existing record
INFO: 199.241.139.243:47002 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl already exists, returning existing record
INFO: 199.241.139.243:47004 - "POST /process/1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg, extension: jpg, google_file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:File WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg with ID 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g already exists, returning existing record
INFO: 199.241.139.243:47010 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g already exists, returning existing record
INFO: 199.241.139.243:47022 - "POST /process/11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19.jpeg, extension: jpeg, google_file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19.jpeg with ID 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW already exists, returning existing record
INFO: 199.241.139.243:47028 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW already exists, returning existing record
INFO: 199.241.139.243:47750 - "POST /process/1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg, extension: jpeg, google_file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg with ID 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E already exists, returning existing record
INFO: 199.241.139.243:47762 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E already exists, returning existing record
INFO: 199.241.139.243:47768 - "POST /process/1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg, extension: jpeg, google_file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg with ID 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa already exists, returning existing record
INFO: 199.241.139.243:47784 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa already exists, returning existing record
INFO: 199.241.139.243:47786 - "POST /process/1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18.jpeg, extension: jpeg, google_file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.18.jpeg with ID 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY already exists, returning existing record
INFO: 199.241.139.243:47798 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY already exists, returning existing record
INFO: 199.241.139.243:47812 - "POST /process/1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg, extension: jpeg, google_file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:File WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg with ID 1-ocsQytyZP397IrLSEv5j5pco10UTbaq already exists, returning existing record
INFO: 199.241.139.243:47824 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:__main__:Receipt for file 1-ocsQytyZP397IrLSEv5j5pco10UTbaq already exists, returning existing record
INFO: 199.241.139.243:47832 - "POST /process/1-ocsQytyZP397IrLSEv5j5pco10UTbaq HTTP/1.1" 200 OK
/root/ds_quickbooks_v2/app/main.py:58: DeprecationWarning:
on_event is deprecated, use lifespan event handlers instead.
Read more about it in the
[FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
@app.on_event("startup")
INFO: Started server process [60419]
INFO: Waiting for application startup.
INFO:__main__:Starting up application...
INFO:database:Creating database tables...
INFO:database:Database tables created successfully
INFO:__main__:Application startup complete
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8654 (Press CTRL+C to quit)
INFO: Shutting down
INFO: Waiting for application shutdown.
INFO: Application shutdown complete.
INFO: Finished server process [60419]
/root/ds_quickbooks_v2/app/main.py:58: DeprecationWarning:
on_event is deprecated, use lifespan event handlers instead.
Read more about it in the
[FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
@app.on_event("startup")
INFO: Started server process [60971]
INFO: Waiting for application startup.
INFO:__main__:Starting up application...
INFO:database:Database tables already exist: ['receipts', 'transactions', 'uploaded_files']
INFO:__main__:Application startup complete
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8654 (Press CTRL+C to quit)
INFO: 102.89.46.156:6869 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh3zluqt_2xp5i1
INFO:__main__:Found 5 transactions in database
INFO:__main__:Converted 5 transactions
WARNING:__main__:Receipt 1-ocsQytyZP397IrLSEv5j5pco10UTbaq not found in database
WARNING:__main__:Receipt 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY not found in database
WARNING:__main__:Receipt 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa not found in database
WARNING:__main__:Receipt 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E not found in database
WARNING:__main__:Receipt 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW not found in database
WARNING:__main__:Receipt 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g not found in database
WARNING:__main__:Receipt 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl not found in database
WARNING:__main__:Receipt 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN not found in database
INFO:__main__:Found 0 receipts, 8 missing
WARNING:__main__:Missing files: ['1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN']
WARNING:__main__:No valid receipts found
INFO: 102.89.46.156:7131 - "POST /match-specific HTTP/1.1" 400 Bad Request
INFO:__main__:filename: photo_2025-10-10_12-09-46.jpg, extension: jpg, google_file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Uploaded new file photo_2025-10-10_12-09-46.jpg with ID 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'MAPLE LEAF MOTORS INC.', 'description': 'Vehicle: ROMATOKI', 'total_amount': 38531.87, 'tax_amount': 4432.87, 'date': '2025-10-07', 'category': 'Supercar', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': True, 'name_of_asset': 'ROMATOKI', 'cca_rate': 0.3, 'useful_life': 8, 'residual_value': 7706.37, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN HTTP/1.1" 200 OK
INFO:__main__:filename: Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png, extension: png, google_file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Uploaded new file Gemini_Generated_Image_9xuhxd9xuhxd9xuh.png with ID 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'MAPLE LEAF MOTORS INC.', 'description': 'Vehicle Purchase', 'total_amount': 38531.87, 'tax_amount': 4432.87, 'date': '2025-10-07', 'category': 'Supercar', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': True, 'name_of_asset': 'ROMATOKI', 'cca_rate': 0.3, 'useful_life': 8, 'residual_value': 7706.37, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg, extension: jpg, google_file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Uploaded new file WhatsApp Image 2025-10-08 at 18.25.20_7f76d34e.jpg with ID 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'MAPLE LEAF MOTORS INC.', 'description': 'ROMATOKI', 'total_amount': 38531.87, 'tax_amount': 4432.87, 'date': '2025-10-07', 'category': 'Supercar', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': True, 'name_of_asset': 'ROMATOKI', 'cca_rate': 0.3, 'useful_life': 8, 'residual_value': 7706.37, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19.jpeg, extension: jpeg, google_file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Uploaded new file WhatsApp Image 2025-07-04 at 11.52.19.jpeg with ID 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'Figma, Inc.', 'description': 'Professional Full seats (monthly) Jun 19 - Jul 19, 2025', 'total_amount': 27.0, 'tax_amount': 0.0, 'date': '2025-06-19', 'category': 'technology', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg, extension: jpeg, google_file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Uploaded new file WhatsApp Image 2025-07-04 at 11.52.19 (2).jpeg with ID 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'Google LLC', 'description': 'Google Workspace', 'total_amount': 21.15, 'tax_amount': 2.43, 'date': '2025-05-31', 'category': 'cloud service', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg, extension: jpeg, google_file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Uploaded new file WhatsApp Image 2025-07-04 at 11.52.19 (1).jpeg with ID 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'Figma, Inc.', 'description': 'Professional Full seats (monthly) Jun 19 - Jul 19, 2025', 'total_amount': 27.0, 'tax_amount': 0.0, 'date': '2025-06-19', 'category': 'technology', 'confidence': 0.95, 'currency': 'CAD', 'location': 'Ontario, Canada', 'calculated_tax': None, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18.jpeg, extension: jpeg, google_file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Uploaded new file WhatsApp Image 2025-07-04 at 11.52.18.jpeg with ID 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'Bzabaowskyj', 'description': 'Paypal *Bzabaowskyj* 4029357733 On', 'total_amount': 37.55, 'tax_amount': 0.0, 'date': '2024-05-22', 'category': 'cloud service', 'confidence': 0.95, 'currency': 'USD', 'location': None, 'calculated_tax': 0.0, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY HTTP/1.1" 200 OK
INFO:__main__:filename: WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg, extension: jpeg, google_file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Uploaded new file WhatsApp Image 2025-07-04 at 11.52.18 (1).jpeg with ID 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO: 102.89.46.156:921 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'Eleven Labs Inc.', 'description': 'Pro Jun 10 - Jul 10, 2025', 'total_amount': 111.87, 'tax_amount': 12.87, 'date': '2025-06-10', 'category': 'cloud service', 'confidence': 0.95, 'currency': 'USD', 'location': 'New York, United States', 'calculated_tax': None, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 102.89.46.156:921 - "POST /process/1-ocsQytyZP397IrLSEv5j5pco10UTbaq HTTP/1.1" 200 OK
INFO: 102.89.46.156:421 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh3zvv06_9xepht
INFO:__main__:Found 5 transactions in database
INFO:__main__:Converted 5 transactions
INFO:__main__:Successfully loaded receipt for file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Successfully loaded receipt for file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Successfully loaded receipt for file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Successfully loaded receipt for file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Successfully loaded receipt for file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Successfully loaded receipt for file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Successfully loaded receipt for file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Successfully loaded receipt for file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Found 8 receipts, 0 missing
INFO:__main__:Starting matching with 8 receipts and 5 transactions
INFO:__main__:Using default/provided user_location: Canada
INFO:__main__:Applying 1 custom AI rules to matching
INFO:services.ai_matcher:Starting AI matching for 8 receipts against 5 transactions
INFO:services.ai_matcher:Processing receipt 1/8: Eleven Labs Inc. - $111.87
INFO:services.ai_matcher:Found 4 candidates for receipt: Eleven Labs Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Eleven Labs Inc.
- Amount: $111.87
- Date: 2025-06-10
- Description: Pro Jun 10 - Jul 10, 2025
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: UPDATESTACK LLC (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $110.37 (98.7%)
INFO:services.ai_matcher:Processing receipt 2/8: Bzabaowskyj - $37.55
INFO:services.ai_matcher:Found 4 candidates for receipt: Bzabaowskyj
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Bzabaowskyj
- Amount: $37.55
- Date: 2024-05-22
- Description: Paypal *Bzabaowskyj* 4029357733 On
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: UPDATESTACK LLC (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 3/8: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 4 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 4/8: Google LLC - $21.15
INFO:services.ai_matcher:Found 4 candidates for receipt: Google LLC
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Google LLC
- Amount: $21.15
- Date: 2025-05-31
- Description: Google Workspace
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 5/8: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 4 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 6/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 4: Unknown (score: 0.390)
INFO:services.ai_matcher:Found match: 0.390 - Amount similar (10%) with some matches
INFO:services.ai_matcher:Processing receipt 7/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle Purchase
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 4: Unknown (score: 0.390)
INFO:services.ai_matcher:Found match: 0.390 - Amount similar (10%) + some matches
INFO:services.ai_matcher:Processing receipt 8/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 4: Unknown (score: 0.690)
INFO:services.ai_matcher:Found match: 0.690 - Amount similar (10%) + some matches
INFO:services.ai_matcher:AI matching completed. Found 8 matches
INFO:services.ai_rules_matcher:Applying AI rules to 8 matches with 1 custom rules
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Unterminated string starting at: line 5 column 17 (char 151)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt and transaction currencies differ (CAD vs. CAD is not a match, but the currencies are the same, so this rule is not applicable, however, the built-in rule is applied because the currencies are the same, but the rule is not applicable, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies are the same, so we will use the built-in rule which is always applied when currencies differ, but in this case, the currencies are the same, so we will use the built-in rule which is not applicable, but the rule is applied because the currencies
INFO:services.ai_rules_matcher:Match receipt_1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN → txn_4: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Unterminated string starting at: line 5 column 17 (char 151)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt and transaction currencies differ (CAD vs. CAD is not a match, but the currencies are the same, so this rule is not applicable, however, the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same, but the rule is not applicable, so the built-in rule is applied because the currencies are the same
INFO:services.ai_rules_matcher:Match receipt_11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g → txn_4: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl → txn_4: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1-ocsQytyZP397IrLSEv5j5pco10UTbaq → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Unterminated string starting at: line 5 column 17 (char 151)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt and transaction currencies differ (CAD vs. CAD is not a match, but the currencies are the same so this rule is not triggered by currency difference, however, the built-in rule is triggered because the currencies are the same but the rule is looking for a difference, so it is triggered by the fact that the currencies are the same and the built-in rule is looking for a difference, but the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and the currencies are the same so it is actually triggered by the fact that the built-in rule is looking for a difference and
INFO:services.ai_rules_matcher:Match receipt_1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa → txn_1: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E → txn_1: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW → txn_1: flag_for_review=True, auto_approve=False
INFO:__main__:Matching completed, got 8 results
INFO:__main__:Generated stats: {'total': 8, 'high_confidence': 0, 'low_confidence': 7, 'avg_score': 0.18}
INFO:__main__:Match-specific completed successfully with 8 matches
INFO: 102.89.46.156:2103 - "POST /match-specific HTTP/1.1" 200 OK
INFO: 35.203.211.110:50807 - "GET / HTTP/1.0" 200 OK
INFO: 35.203.210.101:53359 - "GET / HTTP/1.0" 200 OK
INFO: 102.89.46.156:8540 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh5264l5_q9n774
INFO:__main__:Found 5 transactions in database
INFO:__main__:Converted 5 transactions
INFO:__main__:Successfully loaded receipt for file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Successfully loaded receipt for file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Successfully loaded receipt for file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Successfully loaded receipt for file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Successfully loaded receipt for file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Successfully loaded receipt for file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Successfully loaded receipt for file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Successfully loaded receipt for file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Found 8 receipts, 0 missing
INFO:__main__:Starting matching with 8 receipts and 5 transactions
INFO:__main__:Using default/provided user_location: Canada
INFO:__main__:Applying 1 custom AI rules to matching
INFO:services.ai_matcher:Starting AI matching for 8 receipts against 5 transactions
INFO:services.ai_matcher:Processing receipt 1/8: Eleven Labs Inc. - $111.87
INFO:services.ai_matcher:Found 4 candidates for receipt: Eleven Labs Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Eleven Labs Inc.
- Amount: $111.87
- Date: 2025-06-10
- Description: Pro Jun 10 - Jul 10, 2025
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: UPDATESTACK LLC (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $110.37 (98.7%)
INFO:services.ai_matcher:Processing receipt 2/8: Bzabaowskyj - $37.55
INFO:services.ai_matcher:Found 4 candidates for receipt: Bzabaowskyj
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Bzabaowskyj
- Amount: $37.55
- Date: 2024-05-22
- Description: Paypal *Bzabaowskyj* 4029357733 On
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: UPDATESTACK LLC (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 3/8: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 4 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 4/8: Google LLC - $21.15
INFO:services.ai_matcher:Found 4 candidates for receipt: Google LLC
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Google LLC
- Amount: $21.15
- Date: 2025-05-31
- Description: Google Workspace
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 5/8: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 4 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 6/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:Processing receipt 7/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle Purchase
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:Processing receipt 8/8: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 5 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: UPDATESTACK LLC
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 4:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 5:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:AI matching completed. Found 8 matches
INFO:services.ai_rules_matcher:Applying AI rules to 8 matches with 1 custom rules
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1-ocsQytyZP397IrLSEv5j5pco10UTbaq → txn_3: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY → txn_3: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN → txn_2: flag_for_review=True, auto_approve=False
INFO:__main__:Matching completed, got 8 results
INFO:__main__:Generated stats: {'total': 8, 'high_confidence': 0, 'low_confidence': 8, 'avg_score': 0.0}
INFO:__main__:Match-specific completed successfully with 8 matches
INFO: 102.89.46.156:6610 - "POST /match-specific HTTP/1.1" 200 OK
INFO: 102.89.46.156:6781 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO: 102.89.46.156:344 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO: 162.216.150.43:54386 - "GET / HTTP/1.0" 200 OK
INFO: 35.203.211.236:54792 - "GET / HTTP/1.0" 200 OK
INFO: 162.216.150.56:49721 - "GET / HTTP/1.0" 200 OK
INFO: 162.216.149.77:49852 - "GET / HTTP/1.0" 200 OK
INFO: 35.203.211.84:50663 - "GET / HTTP/1.0" 200 OK
INFO:__main__:filename: 1.jpg, extension: jpg, google_file_id: 1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD
INFO:__main__:Uploaded new file 1.jpg with ID 1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD
INFO: 199.241.139.243:42236 - "POST /upload-multiple HTTP/1.1" 200 OK
INFO:__main__:Request: file_id=None user_location=None ai_rules=[AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "mkd"', action='SET_CATEGORY: technology'), AIRules(condition='Vendor CONTAINS "aws"', action='SET_CATEGORY: cloud service'), AIRules(condition='Vendor CONTAINS "Maple"', action='SET_CATEGORY: Supercar')]
INFO:services.document_processor:This is the prompt:
Analyze this receipt image and extract the following information in JSON format.
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "mkd": Set category to "technology"
If the Vendor name contains "aws": Set category to "cloud service"
If the Vendor name contains "Maple": Set category to "Supercar"
JSON Format:
{
"vendor": "Store/company name",
"description": "Detailed description of items/services purchased",
"total_amount": 0.00,
"tax_amount": 0.00,
"date": "YYYY-MM-DD",
"category": "Check rules above first",
"confidence": 0.95,
"currency": "USD",
"location": "Province/State, Country",
"calculated_tax": 0.00,
"is_depreciable": false,
"name_of_asset": null,
"cca_rate": null,
"useful_life": null,
"residual_value": null,
"extraction_success": True
}
EXTRACTION Rules:
- Extract vendor name as it appears on receipt
- Extract description of items/services purchased (e.g., "Coffee and sandwich", "Gasoline", "Office supplies")
- Total amount should be the final total including tax
- Tax amount is separate tax line if available (if not clearly shown, calculate based on location)
- Date should be the date on the receipt
- Confidence score 0-1 based on how clear the receipt is
- Currency should be the currency used on the receipt (e.g., "USD", "EUR", "CAD")
LOCATION & TAX RULES:
- Extract location from receipt (look for store address, province/state, country)
- Format location as "Province/State, Country" (e.g., "Ontario, Canada" or "California, USA")
- If location not shown on receipt, return null for location (system will use user location as fallback)
TAX EXTRACTION RULES (IMPORTANT):
- If tax is EXPLICITLY shown on receipt (even if $0 or 0%), use that exact value:
* If receipt shows "Tax: $0", "Tax: $0.00", "Tax (0%)", or similar → set tax_amount to 0.00 and calculated_tax to null
* If receipt shows any other tax amount → set tax_amount to that value and calculated_tax to null
- If tax_amount is NOT shown or UNCLEAR on receipt, calculate it based on location:
* Ontario, Canada: 13% HST
* Quebec, Canada: 9.975% QST + 5% GST = 14.975% total
* British Columbia, Canada: 12% (5% GST + 7% PST)
* Alberta, Canada: 5% GST
* California, USA: ~7.25% (varies by locality)
* New York, USA: ~8.875% (varies by locality)
* Texas, USA: 6.25%
* For other locations, estimate based on typical rates
* Store calculated tax in "calculated_tax" field and set tax_amount to the calculated value
DEPRECIATION RULES:
- Determine if item is a depreciable asset (vehicles, machinery, equipment, computers, furniture, buildings)
- Set is_depreciable to true only for capital assets, false for consumables/services
- If is_depreciable is true, provide:
* name_of_asset: Specific name/model of the asset (e.g., "2024 Honda Accord", "Dell Laptop XPS 15", "Office Desk")
* cca_rate: CCA rate as decimal (e.g., 0.30 for 30%, 0.20 for 20%, 0.04 for 4%)
- Class 10 (Vehicles): 30%
- Class 8 (Furniture, equipment): 20%
- Class 50 (Computers, software): 55%
- Class 1 (Buildings): 4%
- Class 10.1 (Passenger vehicles >$30k): 30%
* useful_life: Expected years of use (e.g., 5 for computers, 8 for vehicles, 10 for furniture)
* residual_value: Estimated value at end of life (typically 10% of purchase price for equipment, 20% for vehicles)
- If is_depreciable is false, set name_of_asset, cca_rate, useful_life, and residual_value to null
Return only valid JSON.
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:__main__:Extracted receipt data: {'vendor': 'TRANSTAR SANITATION SUPPLY LTD', 'description': 'TWIN JR JUMBO TP DISPENSER', 'total_amount': 411.3, 'tax_amount': 44.07, 'date': '2025-09-24', 'category': 'technology', 'confidence': 0.95, 'currency': 'CAD', 'location': 'British Columbia, Canada', 'calculated_tax': None, 'is_depreciable': False, 'name_of_asset': None, 'cca_rate': None, 'useful_life': None, 'residual_value': None, 'extraction_success': True}
INFO: 199.241.139.243:42238 - "POST /process/1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD HTTP/1.1" 200 OK
INFO: 199.241.139.243:45686 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD', '1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh9fv7ab_90aosl
INFO:__main__:Found 3 transactions in database
INFO:__main__:Converted 3 transactions
INFO:__main__:Successfully loaded receipt for file_id: 1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD
INFO:__main__:Successfully loaded receipt for file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Successfully loaded receipt for file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Successfully loaded receipt for file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Successfully loaded receipt for file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Successfully loaded receipt for file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Successfully loaded receipt for file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Successfully loaded receipt for file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Successfully loaded receipt for file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Found 9 receipts, 0 missing
INFO:__main__:Starting matching with 9 receipts and 3 transactions
INFO:__main__:Using default/provided user_location: Canada
INFO:__main__:Applying 1 custom AI rules to matching
INFO:services.ai_matcher:Starting AI matching for 9 receipts against 3 transactions
INFO:services.ai_matcher:Processing receipt 1/9: TRANSTAR SANITATION SUPPLY LTD - $411.3
INFO:services.ai_matcher:Found 3 candidates for receipt: TRANSTAR SANITATION SUPPLY LTD
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: TRANSTAR SANITATION SUPPLY LTD
- Amount: $411.3
- Date: 2025-09-24
- Description: TWIN JR JUMBO TP DISPENSER
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $23.910000000000025 (5.8%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $409.8 (99.6%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $409.8 (99.6%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.870)
INFO:services.ai_matcher:Found match: 0.870 - Exact amount match with similar vendor
INFO:services.ai_matcher:Processing receipt 2/9: Eleven Labs Inc. - $111.87
INFO:services.ai_matcher:Found 2 candidates for receipt: Eleven Labs Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Eleven Labs Inc.
- Amount: $111.87
- Date: 2025-06-10
- Description: Pro Jun 10 - Jul 10, 2025
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $110.37 (98.7%)
INFO:services.ai_matcher:Processing receipt 3/9: Bzabaowskyj - $37.55
INFO:services.ai_matcher:Found 2 candidates for receipt: Bzabaowskyj
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Bzabaowskyj
- Amount: $37.55
- Date: 2024-05-22
- Description: Paypal *Bzabaowskyj* 4029357733 On
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 4/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 2 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 5/9: Google LLC - $21.15
INFO:services.ai_matcher:Found 2 candidates for receipt: Google LLC
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Google LLC
- Amount: $21.15
- Date: 2025-05-31
- Description: Google Workspace
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $19.65 (92.9%)
INFO:services.ai_matcher:Processing receipt 6/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 2 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $25.5 (94.4%)
INFO:services.ai_matcher:Processing receipt 7/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:Processing receipt 8/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle Purchase
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:Processing receipt 9/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:AI matching completed. Found 9 matches
INFO:services.ai_rules_matcher:Applying AI rules to 9 matches with 1 custom rules
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD → txn_1: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1-ocsQytyZP397IrLSEv5j5pco10UTbaq → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN → txn_2: flag_for_review=True, auto_approve=False
INFO:__main__:Matching completed, got 9 results
INFO:__main__:Generated stats: {'total': 9, 'high_confidence': 1, 'low_confidence': 8, 'avg_score': 0.1}
INFO:__main__:Match-specific completed successfully with 9 matches
INFO: 199.241.139.243:45700 - "POST /match-specific HTTP/1.1" 200 OK
INFO: 162.216.150.230:54226 - "GET / HTTP/1.0" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD', '1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh9fv7ab_90aosl
INFO:__main__:Found 3 transactions in database
INFO:__main__:Converted 3 transactions
INFO:__main__:Successfully loaded receipt for file_id: 1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD
INFO:__main__:Successfully loaded receipt for file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Successfully loaded receipt for file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Successfully loaded receipt for file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Successfully loaded receipt for file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Successfully loaded receipt for file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Successfully loaded receipt for file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Successfully loaded receipt for file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Successfully loaded receipt for file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Found 9 receipts, 0 missing
INFO:__main__:Starting matching with 9 receipts and 3 transactions
INFO:__main__:Using default/provided user_location: Canada
INFO:__main__:Applying 1 custom AI rules to matching
INFO:services.ai_matcher:Starting AI matching for 9 receipts against 3 transactions
INFO:services.ai_matcher:Processing receipt 1/9: TRANSTAR SANITATION SUPPLY LTD - $411.3
INFO:services.ai_matcher:Found 3 candidates for receipt: TRANSTAR SANITATION SUPPLY LTD
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: TRANSTAR SANITATION SUPPLY LTD
- Amount: $411.3
- Date: 2025-09-24
- Description: TWIN JR JUMBO TP DISPENSER
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $23.910000000000025 (5.8%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $409.8 (99.6%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $409.8 (99.6%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.870)
INFO:services.ai_matcher:Found match: 0.870 - Exact amount match with similar vendor
INFO:services.ai_matcher:Processing receipt 2/9: Eleven Labs Inc. - $111.87
INFO:services.ai_matcher:Found 2 candidates for receipt: Eleven Labs Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Eleven Labs Inc.
- Amount: $111.87
- Date: 2025-06-10
- Description: Pro Jun 10 - Jul 10, 2025
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $110.37 (98.7%)
INFO:services.ai_matcher:Processing receipt 3/9: Bzabaowskyj - $37.55
INFO:services.ai_matcher:Found 2 candidates for receipt: Bzabaowskyj
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Bzabaowskyj
- Amount: $37.55
- Date: 2024-05-22
- Description: Paypal *Bzabaowskyj* 4029357733 On
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - No exact vendor match
INFO:services.ai_matcher:Processing receipt 4/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 2 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $25.5 (94.4%)
INFO:services.ai_matcher:Processing receipt 5/9: Google LLC - $21.15
INFO:services.ai_matcher:Found 2 candidates for receipt: Google LLC
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Google LLC
- Amount: $21.15
- Date: 2025-05-31
- Description: Google Workspace
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $19.65 (92.9%)
INFO:services.ai_matcher:Processing receipt 6/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 2 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 7/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 8/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle Purchase
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 9/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 3 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
Candidate 3:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:AI matching completed. Found 9 matches
INFO:services.ai_rules_matcher:Applying AI rules to 9 matches with 1 custom rules
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Unterminated string starting at: line 5 column 17 (char 151)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt and transaction currencies differ (CAD vs. CAD is not a match, but the currencies are the same, so this rule is not applicable, however, the built-in rule is applied because the currencies are the same but the rule is based on the fact that they are different, but in this case they are the same, so the built-in rule is not applied, however, the rule is applied because the currencies are the same, but the rule is based on the fact that they are different, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is not applied, but the rule is applied because the currencies are the same, so the built-in rule is
INFO:services.ai_rules_matcher:Match receipt_1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD → txn_1: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1-ocsQytyZP397IrLSEv5j5pco10UTbaq → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Invalid control character at: line 5 column 211 (char 345)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt and transaction currencies differ (CAD vs. CAD is not a match, but the currencies are the same, so this rule is actually not applicable, however, the built-in rule is applied instead.)]
}
INFO:services.ai_rules_matcher:Match receipt_1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl → txn_2: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
ERROR:services.ai_rules_matcher:Failed to parse LLM response as JSON: Unterminated string starting at: line 5 column 17 (char 151)
ERROR:services.ai_rules_matcher:Response text: {
"flag_for_review": true,
"auto_approve": false,
"rules_applied": ["receipt currency differs from transaction currency"],
"reasons": ["Receipt currency (CAD) differs from transaction currency (CAD) is not possible, but built-in rule applies due to different currency being used in the match details, however, the currencies are the same, but the built-in rule still applies because of the difference in the match quality reason which is amount difference, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference which is a different scenario, but the currencies are the same, so the built-in rule applies because of the amount difference
INFO:services.ai_rules_matcher:Match receipt_1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN → txn_2: flag_for_review=True, auto_approve=False
INFO:__main__:Matching completed, got 9 results
INFO:__main__:Generated stats: {'total': 9, 'high_confidence': 1, 'low_confidence': 8, 'avg_score': 0.1}
INFO:__main__:Match-specific completed successfully with 9 matches
INFO: 199.241.139.243:57876 - "POST /match-specific HTTP/1.1" 200 OK
INFO: 199.241.139.243:59418 - "POST /transactions/import/csv HTTP/1.1" 200 OK
INFO:__main__:Starting match-specific for file IDs: ['1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD', '1-ocsQytyZP397IrLSEv5j5pco10UTbaq', '1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY', '1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa', '1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E', '1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW', '11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g', '1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl', '1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN'], categorization_id: cat_mh9gzb86_y6r8h0
INFO:__main__:Found 7 transactions in database
INFO:__main__:Converted 7 transactions
INFO:__main__:Successfully loaded receipt for file_id: 1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD
INFO:__main__:Successfully loaded receipt for file_id: 1-ocsQytyZP397IrLSEv5j5pco10UTbaq
INFO:__main__:Successfully loaded receipt for file_id: 1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY
INFO:__main__:Successfully loaded receipt for file_id: 1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa
INFO:__main__:Successfully loaded receipt for file_id: 1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E
INFO:__main__:Successfully loaded receipt for file_id: 1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW
INFO:__main__:Successfully loaded receipt for file_id: 11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g
INFO:__main__:Successfully loaded receipt for file_id: 1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl
INFO:__main__:Successfully loaded receipt for file_id: 1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN
INFO:__main__:Found 9 receipts, 0 missing
INFO:__main__:Starting matching with 9 receipts and 7 transactions
INFO:__main__:Using default/provided user_location: Canada
INFO:__main__:Applying 1 custom AI rules to matching
INFO:services.ai_matcher:Starting AI matching for 9 receipts against 7 transactions
INFO:services.ai_matcher:Processing receipt 1/9: TRANSTAR SANITATION SUPPLY LTD - $411.3
INFO:services.ai_matcher:Found 6 candidates for receipt: TRANSTAR SANITATION SUPPLY LTD
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: TRANSTAR SANITATION SUPPLY LTD
- Amount: $411.3
- Date: 2025-09-24
- Description: TWIN JR JUMBO TP DISPENSER
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $674.08 (absolute: $674.08)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $262.78000000000003 (63.9%)
Candidate 2:
- Vendor: Unknown
- Amount: $1025.07 (absolute: $1025.07)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $613.77 (149.2%)
Candidate 3:
- Vendor: Unknown
- Amount: $841.63 (absolute: $841.63)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $430.33 (104.6%)
Candidate 4:
- Vendor: Unknown
- Amount: $300.0 (absolute: $300.0)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $111.30000000000001 (27.1%)
Candidate 5:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $23.910000000000025 (5.8%)
Candidate 6:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (177 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $409.8 (99.6%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 5: Unknown (score: 0.580)
INFO:services.ai_matcher:Found match: 0.580 - Amount match with similar vendor and close date
INFO:services.ai_matcher:Processing receipt 2/9: Eleven Labs Inc. - $111.87
INFO:services.ai_matcher:Found 2 candidates for receipt: Eleven Labs Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Eleven Labs Inc.
- Amount: $111.87
- Date: 2025-06-10
- Description: Pro Jun 10 - Jul 10, 2025
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $300.0 (absolute: $300.0)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $188.13 (168.2%)
Candidate 2:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (71 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $110.37 (98.7%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 2: Unknown (score: 0.290)
INFO:services.ai_matcher:Found match: 0.290 - Amount similar (98.7%) with no other matches
INFO:services.ai_matcher:Processing receipt 3/9: Bzabaowskyj - $37.55
INFO:services.ai_matcher:Found 1 candidates for receipt: Bzabaowskyj
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Bzabaowskyj
- Amount: $37.55
- Date: 2024-05-22
- Description: Paypal *Bzabaowskyj* 4029357733 On
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (313 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $36.05 (96.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.290)
INFO:services.ai_matcher:Found match: 0.290 - Amount difference: $36.05 (96.0%)
INFO:services.ai_matcher:Processing receipt 4/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 1 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $25.5 (94.4%)
INFO:services.ai_matcher:Processing receipt 5/9: Google LLC - $21.15
INFO:services.ai_matcher:Found 1 candidates for receipt: Google LLC
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Google LLC
- Amount: $21.15
- Date: 2025-05-31
- Description: Google Workspace
- Category: cloud service
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (61 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $19.65 (92.9%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount very different (>20%)
INFO:services.ai_matcher:Processing receipt 6/9: Figma, Inc. - $27.0
INFO:services.ai_matcher:Found 1 candidates for receipt: Figma, Inc.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: Figma, Inc.
- Amount: $27.0
- Date: 2025-06-19
- Description: Professional Full seats (monthly) Jun 19 - Jul 19, 2025
- Category: technology
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (80 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $25.5 (94.4%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 1: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $25.5 (94.4%)
INFO:services.ai_matcher:Processing receipt 7/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 7 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $674.08 (absolute: $674.08)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37857.79 (98.3%)
Candidate 2:
- Vendor: Unknown
- Amount: $1025.07 (absolute: $1025.07)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37506.8 (97.3%)
Candidate 3:
- Vendor: Unknown
- Amount: $1443.42 (absolute: $1443.42)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37088.450000000004 (96.3%)
Candidate 4:
- Vendor: Unknown
- Amount: $841.63 (absolute: $841.63)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37690.240000000005 (97.8%)
Candidate 5:
- Vendor: Unknown
- Amount: $300.0 (absolute: $300.0)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38231.87 (99.2%)
Candidate 6:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 7:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 7: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: 0.01%
INFO:services.ai_matcher:Processing receipt 8/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 7 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle Purchase
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $674.08 (absolute: $674.08)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37857.79 (98.3%)
Candidate 2:
- Vendor: Unknown
- Amount: $1025.07 (absolute: $1025.07)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37506.8 (97.3%)
Candidate 3:
- Vendor: Unknown
- Amount: $1443.42 (absolute: $1443.42)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37088.450000000004 (96.3%)
Candidate 4:
- Vendor: Unknown
- Amount: $841.63 (absolute: $841.63)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37690.240000000005 (97.8%)
Candidate 5:
- Vendor: Unknown
- Amount: $300.0 (absolute: $300.0)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38231.87 (99.2%)
Candidate 6:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 7:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 7: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: 0.01%
INFO:services.ai_matcher:Processing receipt 9/9: MAPLE LEAF MOTORS INC. - $38531.87
INFO:services.ai_matcher:Found 7 candidates for receipt: MAPLE LEAF MOTORS INC.
INFO:services.ai_matcher:This is the prompt: You are an expert at matching receipts to bank transactions. Analyze the receipt below against ALL the candidate transactions and return the BEST match.
RECEIPT TO MATCH:
- Vendor: MAPLE LEAF MOTORS INC.
- Amount: $38531.87
- Date: 2025-10-07
- Description: Vehicle: ROMATOKI
- Category: Supercar
CANDIDATE TRANSACTIONS:
Candidate 1:
- Vendor: Unknown
- Amount: $674.08 (absolute: $674.08)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37857.79 (98.3%)
Candidate 2:
- Vendor: Unknown
- Amount: $1025.07 (absolute: $1025.07)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37506.8 (97.3%)
Candidate 3:
- Vendor: Unknown
- Amount: $1443.42 (absolute: $1443.42)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37088.450000000004 (96.3%)
Candidate 4:
- Vendor: Unknown
- Amount: $841.63 (absolute: $841.63)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $37690.240000000005 (97.8%)
Candidate 5:
- Vendor: Unknown
- Amount: $300.0 (absolute: $300.0)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38231.87 (99.2%)
Candidate 6:
- Vendor: Unknown
- Amount: $387.39 (absolute: $387.39)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank e-Transfer sent
- Amount difference: $38144.48 (99.0%)
Candidate 7:
- Vendor: Unknown
- Amount: $1.5 (absolute: $1.5)
- Date: 2025-03-31 (190 days difference)
- Notes: Bank INTERAC e-Transfer fee
- Amount difference: $38530.37 (100.0%)
SCORING CRITERIA (Amount is the PRIMARY factor):
Amount Similarity (MOST IMPORTANT - 60% weight):
- Exact match or within 1%: Start at 0.9-1.0
- Within 5%: Start at 0.75-0.89
- Within 10%: Start at 0.5-0.74
- Within 20%: Start at 0.3-0.49
- More than 20% difference: Start at 0.0-0.29
Then adjust UP or DOWN based on:
- Vendor similarity (20% weight): Exact or similar name increases score
- Date proximity (15% weight): Within 7 days increases score, within 30 days moderate increase
- Description/notes match (5% weight): Relevant keywords increase score
EXAMPLES:
- Amount match + vendor match + close date = 0.95-1.0 (Perfect match)
- Amount match + different vendor + close date = 0.85-0.94 (High confidence)
- Amount match + different vendor + far date = 0.70-0.84 (Medium-high confidence)
- Amount similar (5%) + vendor match = 0.75-0.85 (Medium-high confidence)
- Amount similar (10%) + some matches = 0.50-0.69 (Medium confidence)
- Amount very different (>20%) = 0.0-0.29 regardless of other factors
CRITICAL: You MUST return valid JSON only. No explanations, no text before or after.
Return format:
{"candidate_number": 1, "confidence_score": 0.87, "reason": "Exact amount match with similar vendor"}
Another example:
{"candidate_number": 3, "confidence_score": 0.15, "reason": "Poor match but best available"}
Return ONLY JSON for the best candidate:
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_matcher:AI selected candidate 7: Unknown (score: 0.000)
INFO:services.ai_matcher:Found match: 0.000 - Amount difference: $38530.37 (100.0%)
INFO:services.ai_matcher:AI matching completed. Found 9 matches
INFO:services.ai_rules_matcher:Applying AI rules to 9 matches with 1 custom rules
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1AIfenLjekjpZbiH-D3OHZkh2hdWo84BD → txn_6: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1-ocsQytyZP397IrLSEv5j5pco10UTbaq → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1IPNowE0xtbWUt1aqG8YPPVhqhBaPJsBY → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1j6guW-2aBy9pqCOzQGR1_iSCARR3KTGa → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1ygCC6SwLP13OY3Tv8UmKYKCfqHZQIO-E → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1elaDnpZhtFJezqXZraFbaWxhJMqC9IfW → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_11m5rdg47YPr41BKYIMvYdmPnZYnb0K4g → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1pjzC6yldJGxbL6n7Q2N6Dthp3e5rWCwl → txn_7: flag_for_review=True, auto_approve=False
INFO:httpx:HTTP Request: POST https://api.groq.com/openai/v1/chat/completions "HTTP/1.1 200 OK"
INFO:services.ai_rules_matcher:Match receipt_1Iv7JThQ59ZunCuUiz6YKRl2OTgbwLtkN → txn_7: flag_for_review=True, auto_approve=False
INFO:__main__:Matching completed, got 9 results
INFO:__main__:Generated stats: {'total': 9, 'high_confidence': 0, 'low_confidence': 8, 'avg_score': 0.13}
INFO:__main__:Match-specific completed successfully with 9 matches
INFO: 199.241.139.243:59430 - "POST /match-specific HTTP/1.1" 200 OK
INFO: 35.203.211.104:55370 - "GET / HTTP/1.0" 200 OK
INFO: 35.203.211.171:53878 - "GET / HTTP/1.0" 200 OK
INFO: 162.216.149.48:53815 - "GET / HTTP/1.0" 200 OK
INFO: Shutting down
INFO: Waiting for application shutdown.
INFO: Application shutdown complete.
INFO: Finished server process [60971]
/root/ds_quickbooks_v2/app/main.py:58: DeprecationWarning:
on_event is deprecated, use lifespan event handlers instead.
Read more about it in the
[FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
@app.on_event("startup")
INFO: Started server process [14740]
INFO: Waiting for application startup.
INFO:__main__:Starting up application...
INFO:database:Database tables already exist: ['receipts', 'transactions', 'uploaded_files']
INFO:__main__:Application startup complete
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8654 (Press CTRL+C to quit)