Files
leaudit-platform-backend/fastapi_modules/fastapi_leaudit/domian/vo/documentVo.py
T
2026-05-25 09:50:01 +08:00

245 lines
13 KiB
Python

"""文档 VO。"""
from pydantic import BaseModel, Field
from fastapi_modules.fastapi_leaudit.domian.vo.auditVo import AuditRunVO
from fastapi_modules.fastapi_leaudit.domian.vo.pageQualityVo import PageQualitySummaryVO
class DocumentUploadVO(BaseModel):
"""文档上传响应。"""
documentId: int = Field(..., description="LeAudit 文档ID")
internalDocumentNo: int = Field(..., description="平台内部追踪号(兼容旧字段)")
versionGroupKey: str = Field(..., description="文档版本归档组键")
versionNo: int = Field(..., description="当前文档版本号")
previousVersionId: int | None = Field(None, description="上一版本文档ID")
rootVersionId: int = Field(..., description="文档版本链根文档ID")
duplicateUpload: bool = Field(..., description="是否命中同名同内容的重复上传")
fileId: int = Field(..., description="文档文件ID")
typeId: int = Field(..., description="文档类型ID")
typeCode: str = Field(..., description="文档类型编码")
groupId: int | None = Field(None, description="命中的二级分组ID")
entryModuleId: int | None = Field(None, description="所属入口模块ID")
region: str = Field(..., description="所属地区")
tenantCode: str | None = Field(None, description="所属租户编码")
tenantName: str | None = Field(None, description="所属租户名称")
fileName: str = Field(..., description="文件名")
ossUrl: str = Field(..., description="OSS 对象路径")
speed: str = Field(..., description="执行速度档位:urgent/normal")
processingStatus: str = Field(..., description="文档处理状态")
autoRunTriggered: bool = Field(..., description="是否已自动触发评查")
pageQualityRunId: int | None = Field(None, description="页级模糊检测运行ID")
pageQualityRunStatus: str | None = Field(None, description="页级模糊检测运行状态")
pageQualitySummaryStatus: str | None = Field(None, description="页级模糊检测摘要状态")
run: AuditRunVO | None = Field(None, description="自动触发后的运行信息")
class ContractTemplateUploadVO(BaseModel):
"""合同模板上传响应。"""
documentId: int = Field(..., description="目标文档ID")
comparisonId: int = Field(..., description="合同结构对比记录ID")
templateName: str = Field(..., description="模板文件名")
templateContractPath: str = Field(..., description="模板文件 OSS 路径")
fileSize: int = Field(..., description="模板文件大小")
status: str = Field("uploaded", description="上传状态")
class DocumentStatusItemVO(BaseModel):
"""文档状态项。"""
documentId: int = Field(..., description="文档ID")
processingStatus: str | None = Field(None, description="处理状态")
runStatus: str | None = Field(None, description="当前运行状态")
phase: str | None = Field(None, description="当前运行阶段")
resultStatus: str | None = Field(None, description="当前结果状态")
pageQualityRunId: int | None = Field(None, description="页级模糊检测运行ID")
pageQualityRunStatus: str | None = Field(None, description="页级模糊检测运行状态")
pageQualitySummaryStatus: str | None = Field(None, description="页级模糊检测摘要状态")
pageQualityReviewPageCount: int = Field(0, description="疑似模糊页数")
pageQualityRejectPageCount: int = Field(0, description="建议重拍页数")
updatedAt: str | None = Field(None, description="更新时间")
class DocumentHistoryVersionVO(BaseModel):
"""历史版本摘要。"""
documentId: int = Field(..., description="文档ID")
fileId: int | None = Field(None, description="文件ID")
versionNo: int = Field(..., description="版本号")
fileName: str | None = Field(None, description="文件名")
fileExt: str | None = Field(None, description="文件扩展名")
fileSize: int | None = Field(None, description="文件大小")
ossUrl: str | None = Field(None, description="OSS 路径")
processingStatus: str | None = Field(None, description="处理状态")
runStatus: str | None = Field(None, description="最新运行状态")
resultStatus: str | None = Field(None, description="最新结果状态")
totalScore: int | None = Field(None, description="总评分")
passedCount: int | None = Field(None, description="通过数")
failedCount: int | None = Field(None, description="失败数")
skippedCount: int | None = Field(None, description="跳过数")
updatedAt: str | None = Field(None, description="更新时间")
class DocumentAttachmentVO(BaseModel):
"""文档附件项。"""
fileId: int = Field(..., description="附件文件ID")
fileName: str = Field(..., description="附件文件名")
fileExt: str | None = Field(None, description="附件扩展名")
mimeType: str | None = Field(None, description="附件 MIME 类型")
fileSize: int | None = Field(None, description="附件文件大小")
fileRole: str = Field(..., description="文件角色")
ossUrl: str | None = Field(None, description="附件 OSS 路径")
createdBy: int | None = Field(None, description="上传人")
createdAt: str | None = Field(None, description="上传时间")
class DocumentListItemVO(BaseModel):
"""文档列表项。"""
documentId: int = Field(..., description="文档ID")
internalDocumentNo: int = Field(..., description="平台内部追踪号")
versionGroupKey: str = Field(..., description="版本归档组键")
versionNo: int = Field(..., description="当前版本号")
rootVersionId: int = Field(..., description="根版本文档ID")
previousVersionId: int | None = Field(None, description="上一版本文档ID")
typeId: int | None = Field(None, description="文档类型ID")
typeCode: str | None = Field(None, description="文档类型编码")
typeName: str | None = Field(None, description="文档类型名称")
groupId: int | None = Field(None, description="命中的二级分组ID")
groupName: str | None = Field(None, description="二级分组名称")
entryModuleId: int | None = Field(None, description="所属入口模块ID")
region: str = Field(..., description="区域")
tenantCode: str | None = Field(None, description="所属租户编码")
tenantName: str | None = Field(None, description="所属租户名称")
normalizedName: str | None = Field(None, description="归一化名称")
fileId: int | None = Field(None, description="文件ID")
fileName: str | None = Field(None, description="文件名")
fileExt: str | None = Field(None, description="文件扩展名")
mimeType: str | None = Field(None, description="MIME类型")
fileSize: int | None = Field(None, description="文件大小")
ossUrl: str | None = Field(None, description="OSS路径")
processingStatus: str | None = Field(None, description="处理状态")
currentRunId: int | None = Field(None, description="当前运行ID")
runStatus: str | None = Field(None, description="当前运行状态")
resultStatus: str | None = Field(None, description="当前结果状态")
latestErrorCode: str | None = Field(None, description="最新失败错误码")
latestErrorMessage: str | None = Field(None, description="最新失败错误信息")
totalScore: float | None = Field(None, description="总分")
passedCount: int | None = Field(None, description="通过数")
failedCount: int | None = Field(None, description="失败数")
skippedCount: int | None = Field(None, description="跳过数")
documentNumber: str | None = Field(None, description="业务文号/案号")
auditStatus: int | None = Field(None, description="人工维护审核状态")
isTestDocument: bool = Field(False, description="是否测试文档")
pageQualityRunId: int | None = Field(None, description="页级模糊检测运行ID")
pageQualityRunStatus: str | None = Field(None, description="页级模糊检测运行状态")
pageQualitySummaryStatus: str | None = Field(None, description="页级模糊检测摘要状态")
pageQualityIssueCount: int = Field(0, description="页级问题页数")
pageQualityWarningText: str | None = Field(None, description="页级模糊预警文案")
updatedAt: str | None = Field(None, description="更新时间")
hasHistory: bool = Field(False, description="是否存在历史版本")
totalVersions: int = Field(1, description="总版本数")
historyVersions: list[DocumentHistoryVersionVO] = Field(default_factory=list, description="历史版本摘要")
class DocumentDetailVO(DocumentListItemVO):
"""文档详情。"""
remark: str | None = Field(None, description="备注")
pageCount: int | None = Field(None, description="页数,暂无精确值时可为空")
pageQualitySummary: PageQualitySummaryVO | None = Field(None, description="页级模糊检测摘要")
attachments: list[DocumentAttachmentVO] = Field(default_factory=list, description="附件列表")
class DocumentTypeItemVO(BaseModel):
"""文档类型列表项。"""
id: int = Field(..., description="类型ID")
name: str = Field(..., description="类型名称")
code: str = Field(..., description="类型编码")
description: str | None = Field(None, description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
isEnabled: bool = Field(True, description="是否启用")
ruleSetIds: list[int] = Field(default_factory=list, description="关联的规则集ID")
class DocumentTypeRootItemVO(BaseModel):
"""一级文档类型(业务大类)列表项。"""
id: int = Field(..., description="一级分组ID")
name: str = Field(..., description="一级分组名称")
code: str = Field(..., description="一级分组编码")
description: str | None = Field(None, description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
entryModuleName: str | None = Field(None, description="入口模块名称")
isEnabled: bool = Field(True, description="是否启用")
childGroupCount: int = Field(0, description="下属二级分组数量")
ruleSetCount: int = Field(0, description="汇总规则集数量")
ruleSetIds: list[int] = Field(default_factory=list, description="汇总规则集ID")
class DocumentTypeRootCreateDTO(BaseModel):
"""创建一级文档类型(业务大类)。"""
code: str = Field(..., description="一级分组编码")
name: str = Field(..., description="一级分组名称")
description: str = Field("", description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
isEnabled: bool = Field(True, description="是否启用")
sortOrder: int = Field(0, description="排序")
class DocumentTypeRootUpdateDTO(BaseModel):
"""更新一级文档类型(业务大类)。"""
name: str | None = Field(None, description="一级分组名称")
description: str | None = Field(None, description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
isEnabled: bool | None = Field(None, description="是否启用")
sortOrder: int | None = Field(None, description="排序")
class DocumentTypeCreateDTO(BaseModel):
"""文档类型创建请求。"""
code: str = Field(..., description="类型编码")
name: str = Field(..., description="类型名称")
description: str = Field("", description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
isEnabled: bool = Field(True, description="是否启用")
sortOrder: int = Field(0, description="排序")
ruleSetIds: list[int] = Field(default_factory=list, description="关联的规则集ID")
class DocumentTypeUpdateDTO(BaseModel):
"""文档类型更新请求。"""
name: str | None = Field(None, description="类型名称")
description: str | None = Field(None, description="描述")
entryModuleId: int | None = Field(None, description="入口模块ID")
isEnabled: bool | None = Field(None, description="是否启用")
sortOrder: int | None = Field(None, description="排序")
ruleSetIds: list[int] | None = Field(None, description="关联的规则集ID(传则全量替换)")
class DocumentListPageVO(BaseModel):
"""文档列表分页结果。"""
total: int = Field(..., description="总数")
page: int = Field(..., description="当前页")
pageSize: int = Field(..., description="每页数量")
totalPages: int = Field(..., description="总页数")
documents: list[DocumentListItemVO] = Field(default_factory=list, description="文档列表")
class DocumentUpdateDTO(BaseModel):
"""文档元数据更新请求。"""
documentNumber: str | None = Field(None, description="业务文号/案号")
auditStatus: int | None = Field(None, description="人工维护审核状态(若表结构支持则写入)")
isTestDocument: bool | None = Field(None, description="是否测试文档")
remark: str | None = Field(None, description="备注")