Add user location support for tax calculations in document processing
This commit is contained in:
+17
-9
@@ -15,6 +15,7 @@ from database import (
|
||||
from fastapi import FastAPI, File, Form, HTTPException, UploadFile
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from schemas import (
|
||||
DocumentProcessRequest,
|
||||
DocumentProcessResponse,
|
||||
DocumentUploadResponse,
|
||||
MatchingResponse,
|
||||
@@ -364,26 +365,33 @@ async def upload_multiple_documents(
|
||||
|
||||
|
||||
@app.post(
|
||||
"/process/{file_id}",
|
||||
"/process",
|
||||
response_model=DocumentProcessResponse,
|
||||
tags=["Document Processing"],
|
||||
)
|
||||
async def process_document(file_id: str, db: db_dependency):
|
||||
async def process_document(request: DocumentProcessRequest, db: db_dependency):
|
||||
"""
|
||||
Process a previously uploaded document to extract receipt information.
|
||||
|
||||
This endpoint uses AI to extract structured data from receipt images,
|
||||
including vendor, amount, date, and category information.
|
||||
|
||||
Optionally accepts user_location to guide tax calculations and depreciation
|
||||
based on the user's location (format: "State/Province, Country" e.g., "Ontario, Canada").
|
||||
"""
|
||||
try:
|
||||
# Get file info from database
|
||||
db_uploaded_file = get_uploaded_file_from_db(db, file_id)
|
||||
db_uploaded_file = get_uploaded_file_from_db(db, request.file_id)
|
||||
if not db_uploaded_file:
|
||||
raise HTTPException(status_code=404, detail=f"File {file_id} not found")
|
||||
raise HTTPException(
|
||||
status_code=404, detail=f"File {request.file_id} not found"
|
||||
)
|
||||
|
||||
# Process the file using the stored file path
|
||||
receipt_data = await document_processor.process_file(
|
||||
db_uploaded_file.file_path, db_uploaded_file.file_type
|
||||
db_uploaded_file.file_path,
|
||||
db_uploaded_file.file_type,
|
||||
user_location=request.user_location,
|
||||
)
|
||||
|
||||
# Parse date for database storage
|
||||
@@ -398,8 +406,8 @@ async def process_document(file_id: str, db: db_dependency):
|
||||
|
||||
# Create database receipt object
|
||||
db_receipt = DBReceipt(
|
||||
receipt_id=f"receipt_{file_id}",
|
||||
file_id=file_id,
|
||||
receipt_id=f"receipt_{request.file_id}",
|
||||
file_id=request.file_id,
|
||||
amount=receipt_data.get("total_amount", 0.0),
|
||||
date=receipt_date,
|
||||
vendor=receipt_data.get("vendor", ""),
|
||||
@@ -425,7 +433,7 @@ async def process_document(file_id: str, db: db_dependency):
|
||||
db.commit()
|
||||
|
||||
return DocumentProcessResponse(
|
||||
file_id=file_id,
|
||||
file_id=request.file_id,
|
||||
receipt_id=db_receipt.receipt_id,
|
||||
extraction_success=receipt_data.get("extraction_success", False),
|
||||
vendor=receipt_data.get("vendor", ""),
|
||||
@@ -446,7 +454,7 @@ async def process_document(file_id: str, db: db_dependency):
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing document {file_id}: {str(e)}")
|
||||
logger.error(f"Error processing document {request.file_id}: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user