Merge pull request #4 from marcogll/feat-initial-project-structure-14463650289909895681

Complete Phase 2 with Explicit Expense States
This commit is contained in:
Marco Gallegos
2025-12-16 10:05:41 -06:00
committed by GitHub
2 changed files with 17 additions and 4 deletions

View File

@@ -1,6 +1,19 @@
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import Optional, List from typing import Optional, List
from datetime import datetime, date from datetime import datetime, date
from enum import Enum
class ExpenseStatus(str, Enum):
"""
Defines the explicit states an expense can be in throughout its lifecycle.
"""
RECEIVED = "RECEIVED"
ANALYZED = "ANALYZED"
AWAITING_CONFIRMATION = "AWAITING_CONFIRMATION"
CONFIRMED = "CONFIRMED"
CORRECTED = "CORRECTED"
STORED = "STORED"
class RawInput(BaseModel): class RawInput(BaseModel):
""" """
@@ -39,7 +52,7 @@ class ProvisionalExpense(BaseModel):
confidence_score: float confidence_score: float
processing_method: str = Field(..., description="How the expense was classified, e.g., 'provider_match', 'keyword_match', 'ai_inference'") processing_method: str = Field(..., description="How the expense was classified, e.g., 'provider_match', 'keyword_match', 'ai_inference'")
validation_notes: List[str] = [] validation_notes: List[str] = []
status: str = "AWAITING_CONFIRMATION" status: ExpenseStatus = ExpenseStatus.AWAITING_CONFIRMATION
timestamp: datetime = Field(default_factory=datetime.now) timestamp: datetime = Field(default_factory=datetime.now)
class FinalExpense(BaseModel): class FinalExpense(BaseModel):
@@ -64,4 +77,4 @@ class FinalExpense(BaseModel):
confirmed_at: datetime = Field(default_factory=datetime.now) confirmed_at: datetime = Field(default_factory=datetime.now)
audit_log: List[str] = [] audit_log: List[str] = []
status: str = "CONFIRMED" status: ExpenseStatus = ExpenseStatus.CONFIRMED

View File

@@ -36,8 +36,8 @@ Principio rector:
- [x] **2.1 Modelos Pydantic** - [x] **2.1 Modelos Pydantic**
- [x] Crear modelos: `RawInput`, `ExtractedExpense`, `ProvisionalExpense`, `FinalExpense`. - [x] Crear modelos: `RawInput`, `ExtractedExpense`, `ProvisionalExpense`, `FinalExpense`.
- [ ] **2.2 Estados del Gasto** - [x] **2.2 Estados del Gasto**
- [ ] Definir estados explícitos: `RECEIVED`, `ANALYZED`, `AWAITING_CONFIRMATION`, `CONFIRMED`, `CORRECTED`, `STORED`. - [x] Definir estados explícitos: `RECEIVED`, `ANALYZED`, `AWAITING_CONFIRMATION`, `CONFIRMED`, `CORRECTED`, `STORED`.
--- ---