Add user location support for tax calculations in document processing

This commit is contained in:
bolade
2025-10-07 12:03:26 +01:00
parent d8315f13ac
commit 659ca4ff15
3 changed files with 95 additions and 27 deletions
+17 -9
View File
@@ -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))