refactor: Add JobSummary and Transaction models, client to get currency exchange rate

This commit is contained in:
2026-06-29 20:57:06 +05:30
parent 2e556173d4
commit f3727af697
14 changed files with 518 additions and 150 deletions

View File

@@ -3,6 +3,8 @@ from app.schemas.job import (
JobResponse,
JobStatusResponse,
JobResultResponse,
TransactionResponse,
JobSummaryResponse,
)
__all__ = [
@@ -10,4 +12,6 @@ __all__ = [
"JobResponse",
"JobStatusResponse",
"JobResultResponse",
"TransactionResponse",
"JobSummaryResponse",
]

View File

@@ -1,8 +1,41 @@
from datetime import datetime
from typing import Any, Dict, Optional
from datetime import date, datetime
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, ConfigDict
class TransactionResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
job_id: str
txn_id: str
date: date
merchant: str
amount: float
currency: str
status: Optional[str] = None
category: Optional[str] = None
account_id: Optional[str] = None
is_anomaly: bool
anomaly_reason: Optional[str] = None
llm_category: Optional[str] = None
llm_raw_response: Optional[str] = None
llm_failed: Optional[bool] = False
class JobSummaryResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
job_id: str
total_spend_inr: float
total_spend_usd: float
top_merchants: Dict[str, Any]
anomaly_count: int
narrative: Optional[str] = None
risk_level: Optional[str] = None
class JobBase(BaseModel):
filename: str
@@ -16,9 +49,11 @@ class JobResponse(JobBase):
id: str
status: str
row_count: Optional[int] = None
row_count_raw: Optional[int] = None
row_count_clean: Optional[int] = None
created_at: datetime
updated_at: datetime
completed_at: Optional[datetime] = None
error_message: Optional[str] = None
class JobStatusResponse(BaseModel):
@@ -26,7 +61,7 @@ class JobStatusResponse(BaseModel):
id: str
status: str
summary: Optional[Dict[str, Any]] = None
summary: Optional[JobSummaryResponse] = None
class JobResultResponse(BaseModel):
@@ -34,4 +69,5 @@ class JobResultResponse(BaseModel):
id: str
status: str
results: Optional[Dict[str, Any]] = None
summary: Optional[JobSummaryResponse] = None
transactions: List[TransactionResponse] = []