MukeshKapoor25's picture
Initial commit
b143975
"""MongoDB document model for KPI cache snapshots."""
from datetime import datetime
from typing import Optional, Dict, Any
from pydantic import BaseModel, Field
class KPICacheDocument(BaseModel):
"""
Durable KPI snapshot stored in MongoDB.
One document per (merchant_id, widget_id, period_window, branch_id).
"""
cache_id: str = Field(..., description="UUID for this cache document")
merchant_id: str = Field(..., description="Tenant identifier")
widget_id: str = Field(..., description="KPI widget identifier")
period_window: str = Field(..., description="today | last_7_days | mtd | ytd | last_12_months")
branch_id: str = Field("all", description="Branch/warehouse filter; 'all' means no filter")
# KPI payload
value: float = Field(..., description="Primary KPI value")
unit: str = Field(..., description="count | INR | % | ratio")
delta: Optional[float] = Field(None)
delta_percentage: Optional[float] = Field(None)
trend: str = Field("neutral", description="up | down | neutral")
secondary_values: Optional[Dict[str, Any]] = Field(None)
drill_down_url: Optional[str] = Field(None)
# Metadata
computed_at: datetime = Field(default_factory=datetime.utcnow)
expires_at: Optional[datetime] = Field(None, description="When this snapshot should be rebuilt")
cached: bool = Field(False, description="Always False for freshly written docs")
error: Optional[str] = Field(None, description="Set when computation failed")