"""报告域的请求/响应模型。 Wire 响应统一走 ok() 信封(架构文档 §9.2),这里的模型只描述 ``data`` 部分; 雪花 ID 一律以字符串返回,避免 JS 精度丢失(NFR-MAINT-01 契约先行)。 """ from __future__ import annotations from datetime import datetime from pydantic import BaseModel, Field class ReportCreateRequest(BaseModel): questionnaire: dict[str, object] = Field( default_factory=dict, description="问卷答案;字段结构由产品定稿后在路由层收紧" ) photo_object_key: str = Field( min_length=1, max_length=255, description="临时桶里已上传照片的对象键(report_photo 场景)" ) request_key: str | None = Field( default=None, max_length=128, description="幂等键;相同键返回同一任务且不重复扣配额" ) class ReportRegenerateRequest(BaseModel): request_key: str | None = Field( default=None, max_length=128, description="幂等键;相同键返回同一任务且不重复扣配额" ) class ReportSubmitResponse(BaseModel): task_id: str report_id: str status: str = Field(description="tk_task 状态;报告本体状态与其同步推进") version: int class ReportItem(BaseModel): report_id: str tier: str status: str version: int result: dict[str, object] = Field( description="按阶段键组织的产物;failed 报告只透错误摘要(中间态留给流水线复用)" ) created_at: datetime completed_at: datetime | None