added unmatched transactions

This commit is contained in:
2025-11-17 14:43:54 +00:00
parent 8d745c1f8e
commit f6535908fe
+51 -2
View File
@@ -732,6 +732,19 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
filtered_results = [r for r in matching_results if r.confidence_score >= CONFIDENCE_THRESHOLD]
logger.info(f"After filtering by {CONFIDENCE_THRESHOLD*100}% threshold: {len(filtered_results)} matches remain")
# Track matched transaction IDs
matched_transaction_ids = set()
for result in filtered_results:
if result.transaction:
matched_transaction_ids.add(result.transaction.id)
# Find unmatched transactions
unmatched_transactions = [
txn for txn in transactions
if txn.id not in matched_transaction_ids
]
logger.info(f"Found {len(unmatched_transactions)} unmatched transactions")
# Convert matching results to response format
match_responses = []
for result in filtered_results:
@@ -811,6 +824,40 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
)
match_responses.append(match_response)
# Add unmatched transactions as MatchResponse objects with empty receipt data
for txn in unmatched_transactions:
unmatched_match = MatchResponse(
receipt_id="",
transaction_id=txn.id,
confidence_score=0.0,
match_reason="Unmatched transaction",
receipt_vendor="",
receipt_amount=0.0,
receipt_description="",
receipt_category="",
receipt_tax_amount=0.0,
transaction_vendor=txn.vendor,
transaction_amount=txn.amount,
tax_analysis=None,
flag_for_review=None,
auto_approve=None,
transaction_source=txn.source,
TxnId=txn.TxnId,
AccountType=txn.AccountType,
AccountNumber=txn.AccountNumber,
TransactionDate=txn.TransactionDate,
TransactionType=txn.TransactionType,
ChequeNumber=txn.ChequeNumber,
Description1=txn.Description1,
Description2=txn.Description2,
VendorId=txn.VendorId,
VendorName=txn.VendorName,
AccountId=txn.AccountId,
AccountName=txn.AccountName,
Source=txn.source,
)
match_responses.append(unmatched_match)
# Calculate statistics on filtered results
high_confidence = len(
[r for r in filtered_results if r.confidence_score >= 0.8]
@@ -827,15 +874,17 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
stats = {
"total": len(match_responses),
"matched": len(filtered_results),
"unmatched_transactions": len(unmatched_transactions),
"high_confidence": high_confidence,
"low_confidence": low_confidence,
"avg_score": round(avg_score, 2),
}
logger.info(f"Generated stats: {stats}")
logger.info(f"Match responses: {match_responses}")
logger.info(f"Total responses (matched + unmatched): {len(match_responses)}")
logger.info(
f"Match-specific completed successfully with {len(match_responses)} matches"
f"Match-specific completed successfully with {len(filtered_results)} matches and {len(unmatched_transactions)} unmatched transactions"
)
return MatchingResponse(matches=match_responses, stats=stats)