"""首页入口 VO。""" from pydantic import BaseModel, Field class HomeEntryAreaVO(BaseModel): """入口模块地区配置。""" area: str = Field(..., description="地区名称") enabled: bool = Field(..., description="是否启用") sortOrder: int = Field(0, description="地区内排序") class HomeEntryTenantVO(BaseModel): """入口模块租户配置。""" tenantCode: str = Field(..., description="租户编码") tenantName: str | None = Field(None, description="租户名称") enabled: bool = Field(..., description="是否启用") sortOrder: int = Field(0, description="租户内排序") class HomeEntryDocumentTypeVO(BaseModel): """入口模块下的文档类型。""" id: int = Field(..., description="文档类型ID") name: str = Field(..., description="文档类型名称") code: str | None = Field(None, description="文档类型编码") class HomeEntryModuleVO(BaseModel): """首页入口模块。""" id: int = Field(..., description="入口模块ID") name: str = Field(..., description="模块名称") description: str | None = Field(None, description="模块描述") targetPath: str | None = Field(None, description="点击后跳转路径") routePath: str | None = Field(None, description="用于 RBAC 校验的页面路径") menuProfile: str = Field("document_review", description="菜单模板") features: list[str] = Field(default_factory=list, description="启用功能编码列表") tenantCode: str | None = Field(None, description="当前命中的租户编码") iconPath: str | None = Field(None, description="模块图标路径") sortOrder: int = Field(0, description="排序序号") requiresDocumentTypes: bool = Field(True, description="是否要求至少绑定一个文档类型") areas: list[HomeEntryAreaVO] = Field(default_factory=list, description="地区配置") tenants: list[HomeEntryTenantVO] = Field(default_factory=list, description="租户配置") documentTypes: list[HomeEntryDocumentTypeVO] = Field(default_factory=list, description="关联文档类型列表") class HomeDashboardGrowthVO(BaseModel): """首页统计环比数据。""" value: int = Field(0, description="环比百分比") isUp: bool = Field(True, description="是否上升") class HomeDashboardStatisticsVO(BaseModel): """首页统计卡片数据。""" todayPendingFiles: int = Field(0, description="今日待审文件数") monthlyReviewedFiles: int = Field(0, description="本月已审核文件数") monthlyReviewGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="本月审核数环比") monthlyPassRate: int = Field(0, description="本月审核通过率") passRateGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="通过率环比") issuesDetected: int = Field(0, description="本月问题检出数") issuesGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="问题检出数环比")