File size: 1,255 Bytes
847392c 18afae5 847392c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
from enum import Enum
class ExpenseType(str, Enum):
INCOME = "income"
EXPENSE = "expense"
class Expense(BaseModel):
user_id: str
amount: float = Field(..., gt=0, description="Expense amount")
category: str = Field(..., description="Expense category (e.g., Groceries, Transport)")
description: Optional[str] = None
date: datetime
type: ExpenseType = ExpenseType.EXPENSE
class Budget(BaseModel):
user_id: str
category: str
amount: float = Field(..., gt=0, description="Budget amount")
period: str = Field(..., description="Budget period: daily, weekly, monthly, yearly")
start_date: datetime
end_date: Optional[datetime] = None
class BudgetRecommendation(BaseModel):
category: str
average_expense: float
recommended_budget: float
reason: str
confidence: float = Field(..., ge=0, le=1, description="Confidence score (0-1)")
action: Optional[str] = Field(
None,
description="AI suggestion: increase, decrease, or keep"
)
class CategoryExpense(BaseModel):
category: str
average_monthly_expense: float
total_expenses: int
months_analyzed: int
|