added a server manager

This commit is contained in:
2025-10-29 14:27:44 +00:00
parent fa25f7bafd
commit 85fafae311
4 changed files with 4246 additions and 71 deletions
+3
View File
@@ -9,3 +9,6 @@ __pycache__/
.env .env
*.log *.log
/uploads /uploads
server_manager.sh
server.log
server.pid
+73 -71
View File
@@ -731,79 +731,81 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
match_responses = [] match_responses = []
for result in matching_results: for result in matching_results:
# Get final tax amount from LLM analysis if available, otherwise use receipt's stated tax # Get final tax amount from LLM analysis if available, otherwise use receipt's stated tax
final_tax = result.receipt.tax if result.confidence_score > 0:
# if result.tax_analysis and "final_tax_amount" in result.tax_analysis: final_tax = result.receipt.tax
# final_tax = result.tax_analysis["final_tax_amount"] # if result.tax_analysis and "final_tax_amount" in result.tax_analysis:
# final_tax = result.tax_analysis["final_tax_amount"]
# Extract flag_for_review and auto_approve from tax_analysis if available # Extract flag_for_review and auto_approve from tax_analysis if available
flag_for_review = None flag_for_review = None
auto_approve = None auto_approve = None
if result.tax_analysis: if result.tax_analysis:
flag_for_review = result.tax_analysis.get("flag_for_review") flag_for_review = result.tax_analysis.get("flag_for_review")
auto_approve = result.tax_analysis.get("auto_approve") auto_approve = result.tax_analysis.get("auto_approve")
match_response = MatchResponse( match_response = MatchResponse(
receipt_id=result.receipt.id, receipt_id=result.receipt.id,
transaction_id=result.transaction.id transaction_id=result.transaction.id
if result.transaction if result.transaction
else "no_match", else "no_match",
confidence_score=result.confidence_score * 100, confidence_score=result.confidence_score * 100,
match_reason=result.match_reason, match_reason=result.match_reason,
receipt_vendor=result.receipt.vendor, receipt_vendor=result.receipt.vendor,
receipt_amount=result.receipt.amount, receipt_amount=result.receipt.amount,
receipt_description=result.receipt.description, receipt_description=result.receipt.description,
receipt_category=result.receipt.category, receipt_category=result.receipt.category,
receipt_tax_amount=final_tax, receipt_tax_amount=final_tax,
transaction_vendor=result.transaction.vendor transaction_vendor=result.transaction.vendor
if result.transaction if result.transaction
else "", else "",
transaction_amount=result.transaction.amount transaction_amount=result.transaction.amount
if result.transaction if result.transaction
else 0.0, else 0.0,
tax_analysis=result.tax_analysis, tax_analysis=result.tax_analysis,
flag_for_review=flag_for_review, flag_for_review=flag_for_review,
auto_approve=auto_approve, auto_approve=auto_approve,
# Transaction metadata # Transaction metadata
transaction_source=result.transaction.source transaction_source=result.transaction.source
if result.transaction if result.transaction
else None, else None,
# QuickBooks CSV fields # QuickBooks CSV fields
TxnId=result.transaction.TxnId if result.transaction else None, TxnId=result.transaction.TxnId if result.transaction else None,
AccountType=result.transaction.AccountType AccountType=result.transaction.AccountType
if result.transaction if result.transaction
else None, else None,
AccountNumber=result.transaction.AccountNumber AccountNumber=result.transaction.AccountNumber
if result.transaction if result.transaction
else None, else None,
TransactionDate=result.transaction.TransactionDate TransactionDate=result.transaction.TransactionDate
if result.transaction if result.transaction
else None, else None,
TransactionType=result.transaction.TransactionType TransactionType=result.transaction.TransactionType
if result.transaction if result.transaction
else None, else None,
ChequeNumber=result.transaction.ChequeNumber ChequeNumber=result.transaction.ChequeNumber
if result.transaction if result.transaction
else None, else None,
Description1=result.transaction.Description1 Description1=result.transaction.Description1
if result.transaction if result.transaction
else None, else None,
Description2=result.transaction.Description2 Description2=result.transaction.Description2
if result.transaction if result.transaction
else None, else None,
VendorId=result.transaction.VendorId VendorId=result.transaction.VendorId
if result.transaction if result.transaction
else None, else None,
VendorName=result.transaction.VendorName VendorName=result.transaction.VendorName
if result.transaction if result.transaction
else None, else None,
AccountId=result.transaction.AccountId AccountId=result.transaction.AccountId
if result.transaction if result.transaction
else None, else None,
AccountName=result.transaction.AccountName AccountName=result.transaction.AccountName
if result.transaction if result.transaction
else None, else None,
) Source=result.transaction.source if result.transaction else None,
match_responses.append(match_response) )
match_responses.append(match_response)
# Calculate statistics # Calculate statistics
high_confidence = len( high_confidence = len(
+1
View File
@@ -181,6 +181,7 @@ class MatchResponse(BaseModel):
VendorName: Optional[str] = None VendorName: Optional[str] = None
AccountId: Optional[str] = None AccountId: Optional[str] = None
AccountName: Optional[str] = None AccountName: Optional[str] = None
Source: Optional[str] = None
class MatchingResponse(BaseModel): class MatchingResponse(BaseModel):
+4169
View File
File diff suppressed because it is too large Load Diff