Update matching logic: AI scores all candidates, lower threshold, absolute amount, prompt improvements
This commit is contained in:
+101
@@ -0,0 +1,101 @@
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
class ReceiptRequest(BaseModel):
|
||||
id: str
|
||||
file_name: str
|
||||
upload_date: datetime
|
||||
receipt_date: datetime
|
||||
amount: float
|
||||
tax: float
|
||||
vendor: str
|
||||
category: str
|
||||
|
||||
class TransactionRequest(BaseModel):
|
||||
id: str
|
||||
transaction_date: datetime
|
||||
amount: float
|
||||
vendor: str
|
||||
notes: str
|
||||
|
||||
# New: QuickBooks specific models
|
||||
class QuickBooksTransaction(BaseModel):
|
||||
"""Raw QuickBooks transaction data"""
|
||||
id: str
|
||||
txn_date: str # QuickBooks date format
|
||||
amount: float
|
||||
payee_name: str # QuickBooks vendor field
|
||||
memo: Optional[str] = None
|
||||
account_name: Optional[str] = None
|
||||
txn_type: Optional[str] = None
|
||||
|
||||
class QuickBooksImportRequest(BaseModel):
|
||||
"""Request to import QuickBooks transactions"""
|
||||
transactions: List[QuickBooksTransaction]
|
||||
date_range: Optional[dict] = None
|
||||
account_filter: Optional[str] = None
|
||||
|
||||
class QuickBooksImportResponse(BaseModel):
|
||||
"""Response from QuickBooks import"""
|
||||
imported_count: int
|
||||
converted_transactions: List[TransactionRequest]
|
||||
errors: List[str] = []
|
||||
|
||||
class MatchResponse(BaseModel):
|
||||
receipt_id: str
|
||||
transaction_id: str
|
||||
confidence_score: float
|
||||
match_reason: str
|
||||
receipt_vendor: str
|
||||
receipt_amount: float
|
||||
transaction_vendor: str
|
||||
transaction_amount: float
|
||||
|
||||
class MatchingRequest(BaseModel):
|
||||
receipts: List[ReceiptRequest]
|
||||
transactions: List[TransactionRequest]
|
||||
|
||||
class MatchingResponse(BaseModel):
|
||||
matches: List[MatchResponse]
|
||||
stats: dict
|
||||
|
||||
class ApprovalRequest(BaseModel):
|
||||
match_id: str
|
||||
user_id: str
|
||||
action: str # "approve" or "reject"
|
||||
reason: Optional[str] = None
|
||||
|
||||
class RuleRequest(BaseModel):
|
||||
name: str
|
||||
condition: str
|
||||
action: str
|
||||
source: str = "user"
|
||||
|
||||
class DocumentUploadResponse(BaseModel):
|
||||
file_id: str
|
||||
filename: str
|
||||
file_type: str
|
||||
upload_date: datetime
|
||||
status: str
|
||||
|
||||
class DocumentProcessResponse(BaseModel):
|
||||
file_id: str
|
||||
extraction_success: bool
|
||||
vendor: Optional[str] = None
|
||||
total_amount: Optional[float] = None
|
||||
tax_amount: Optional[float] = None
|
||||
date: Optional[str] = None
|
||||
category: Optional[str] = None
|
||||
confidence: Optional[float] = None
|
||||
error: Optional[str] = None
|
||||
|
||||
class DriveSyncRequest(BaseModel):
|
||||
folder_id: Optional[str] = None
|
||||
auto_process: bool = True
|
||||
|
||||
class DriveSyncResponse(BaseModel):
|
||||
files_processed: int
|
||||
successful_extractions: int
|
||||
failed_extractions: int
|
||||
results: List[DocumentProcessResponse]
|
||||
Reference in New Issue
Block a user