"""Pydantic schemas for dashboard KPIs, weekly data points, and report metadata.""" from datetime import date, datetime from typing import Optional from pydantic import BaseModel class DashboardKPIs(BaseModel): """Top-level KPI summary for the dashboard.""" total_cases: int pending_icd: int pending_coding: int total_gutachten: int fallgruppen: dict[str, int] # e.g. {"onko": 123, "kardio": 45, ...} class WeeklyDataPoint(BaseModel): """A single calendar-week row for the dashboard chart / table.""" kw: int erstberatungen: int = 0 unterlagen: int = 0 ablehnungen: int = 0 keine_rm: int = 0 gutachten: int = 0 class DashboardResponse(BaseModel): """Combined dashboard payload: KPIs + weekly time-series.""" kpis: DashboardKPIs weekly: list[WeeklyDataPoint] class ReportMeta(BaseModel): """Metadata for a generated weekly report (no file content).""" id: int jahr: int kw: int report_type: str = "gesamt" report_date: date generated_at: datetime generated_by: Optional[int] = None model_config = {"from_attributes": True} class ReportListResponse(BaseModel): """Paginated list of report metadata.""" items: list[ReportMeta] total: int