Files
alemno-payments/app/schemas/job.py

74 lines
1.7 KiB
Python

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
class JobCreate(JobBase):
pass
class JobResponse(JobBase):
model_config = ConfigDict(from_attributes=True)
id: str
status: str
row_count_raw: Optional[int] = None
row_count_clean: Optional[int] = None
created_at: datetime
completed_at: Optional[datetime] = None
error_message: Optional[str] = None
class JobStatusResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
status: str
summary: Optional[JobSummaryResponse] = None
class JobResultResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
status: str
summary: Optional[JobSummaryResponse] = None
transactions: List[TransactionResponse] = []