from datetime import datetime from typing import Optional, List, Any from pydantic import BaseModel, Field class ContractItemResponse(BaseModel): contract_url: str = Field(description="合同模板链接") file_name: str = Field(description="文件名称") file_id: str = Field(description="文件ID") status: int = Field(description="签署状态") sign_flow_id: str = Field(description="签署流程ID") sign_url: str = Field(default="", description="签署页面") signing_time: str = Field(default="", description="签署时间") effective_time: str = Field(default="", description="生效时间") expiry_time: str = Field(default="", description="到期时间") contract_download_url: str = Field(default="", description="已签下载链接") is_master: int = Field(description="主合同标识") contract_type: Optional[str] = Field(default=None, description="合同类型") contract_name: Optional[str] = Field(default=None, description="合同名称") class LawyerContractResponse(BaseModel): id: int = Field(description="主键") lawyer_id: int = Field(description="律所ID") law_firm_name: str = Field(description="律所名称") business_segment: str = Field(description="业务板块") contact_name: str = Field(description="联系人姓名") contact_phone: str = Field(description="联系电话") signing_status: str = Field(description="签署状态") contract_url: str = Field(description="合同URL(JSON字符串)") ord_id: str = Field(description="统一社会信用代码") signing_time: Optional[datetime] = Field(default=None, description="签署时间") effective_time: Optional[datetime] = Field(default=None, description="生效时间") expiry_time: Optional[datetime] = Field(default=None, description="到期时间") created_time: Optional[datetime] = Field(default=None, description="创建时间") updated_time: Optional[datetime] = Field(default=None, description="更新时间") class Config: from_attributes = True class TemplatesCreateResponse(BaseModel): success: bool = Field(description="是否成功") message: str = Field(description="响应消息") sign_flow_id: Optional[str] = Field(default=None, description="签署流程ID") file_id: Optional[str] = Field(default=None, description="文件ID") contract_url: Optional[str] = Field(default=None, description="合同URL") created_contracts: Optional[List[dict]] = Field(default=None, description="本次创建的合同列表") class ErrorResponse(BaseModel): success: bool = Field(default=False, description="是否成功") message: str = Field(description="错误消息") raw: Optional[Any] = Field(default=None, description="原始错误数据") class SuccessResponse(BaseModel): code: str = Field(description="响应代码") msg: str = Field(description="响应消息") class PaginatedResponse(BaseModel): items: List[dict] = Field(description="数据列表") total: int = Field(description="总记录数") page: int = Field(description="当前页码") page_size: int = Field(description="每页条数") total_pages: int = Field(description="总页数") class ModuleStatusResponse(BaseModel): module: str = Field(description="模块名称") status: str = Field(description="状态")