Files
2026-04-28 16:53:16 +08:00

126 lines
6.4 KiB
Python

"""评查 VO。"""
from datetime import datetime
from pydantic import BaseModel, Field
class AuditRunVO(BaseModel):
"""评查运行响应。"""
runId: int = Field(..., description="运行ID")
documentId: int = Field(..., description="文档ID")
runNo: int = Field(..., description="执行序号")
documentFileId: int | None = Field(None, description="本次执行锁定的文档文件ID")
status: str = Field(..., description="状态")
phase: str | None = Field(None, description="当前阶段")
resultStatus: str | None = Field(None, description="整体结果: pass/fail/partial/review/error")
ruleSetId: int | None = Field(None, description="规则集ID")
ruleVersionId: int | None = Field(None, description="规则版本ID")
ruleTypeId: str | None = Field(None, description="规则类型ID")
rescueApplied: bool = Field(False, description="是否触发 rescue")
totalScore: float | None = Field(None, description="总分")
passedCount: int | None = Field(None, description="通过数")
failedCount: int | None = Field(None, description="失败数")
skippedCount: int | None = Field(None, description="跳过数")
startedAt: datetime | None = Field(None, description="开始时间")
finishedAt: datetime | None = Field(None, description="结束时间")
class AuditFieldResultVO(BaseModel):
"""抽取字段结果。"""
fieldName: str = Field(..., description="字段名")
fieldType: str | None = Field(None, description="字段类型")
valueText: str | None = Field(None, description="字段值")
confidence: float | None = Field(None, description="综合置信度")
groundingMethod: str | None = Field(None, description="落地验证方法")
fallbackValue: str | None = Field(None, description="兜底值")
rawValueJson: dict | list | str | None = Field(None, description="原始抽取结果")
metaJson: dict | list | str | None = Field(None, description="扩展元数据")
class AuditRunErrorVO(BaseModel):
"""运行错误结果。"""
stage: str = Field(..., description="错误阶段")
level: str = Field(..., description="错误级别")
errorCode: str | None = Field(None, description="错误码")
message: str = Field(..., description="错误信息")
detailJson: dict | list | str | None = Field(None, description="错误详情")
createdAt: datetime | None = Field(None, description="创建时间")
class AuditRescueOutcomeVO(BaseModel):
"""补救结果。"""
ruleId: str = Field(..., description="规则ID")
status: str = Field(..., description="补救状态")
diagnosis: str | None = Field(None, description="诊断结果")
diagnosisConfidence: float | None = Field(None, description="诊断置信度")
finalStatus: str | None = Field(None, description="补救最终状态")
failureReason: str | None = Field(None, description="失败原因")
llmCalls: int | None = Field(None, description="LLM 调用次数")
vlmCalls: int | None = Field(None, description="VLM 调用次数")
durationMs: int | None = Field(None, description="耗时毫秒")
requiresHumanReview: bool = Field(False, description="是否需要人工复核")
payload: dict | list | str | None = Field(None, description="补救载荷")
class AuditMetricsVO(BaseModel):
"""运行指标。"""
ocrSeconds: float | None = Field(None, description="OCR耗时")
normalizeSeconds: float | None = Field(None, description="归一化耗时")
extractSeconds: float | None = Field(None, description="抽取耗时")
evaluateSeconds: float | None = Field(None, description="评查耗时")
rescueSeconds: float | None = Field(None, description="补救耗时")
totalSeconds: float | None = Field(None, description="总耗时")
pageCount: int | None = Field(None, description="页数")
subDocumentCount: int | None = Field(None, description="子文档数")
fieldCount: int | None = Field(None, description="字段数")
ruleCount: int | None = Field(None, description="规则数")
llmCallCount: int | None = Field(None, description="LLM 调用次数")
vlmCallCount: int | None = Field(None, description="VLM 调用次数")
rescueRuleCount: int | None = Field(None, description="补救规则数")
artifactCount: int | None = Field(None, description="产物数")
class AuditArtifactVO(BaseModel):
"""评查产物。"""
artifactType: str = Field(..., description="产物类型")
artifactRole: str | None = Field(None, description="产物角色")
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 路径")
isPersisted: bool | None = Field(None, description="是否已持久化")
class AuditResultVO(BaseModel):
"""评查结果响应。"""
runId: int = Field(..., description="运行ID")
documentId: int = Field(..., description="文档ID")
documentFileId: int | None = Field(None, description="本次执行锁定的文档文件ID")
status: str = Field(..., description="运行状态")
totalScore: float | None = Field(None, description="总分")
passedCount: int = Field(0, description="通过数")
failedCount: int = Field(0, description="失败数")
skippedCount: int = Field(0, description="跳过数")
phase: str | None = Field(None, description="当前阶段")
resultStatus: str | None = Field(None, description="整体结果")
rescueApplied: bool = Field(False, description="是否执行 rescue")
ruleSetId: int | None = Field(None, description="规则集ID")
ruleVersionId: int | None = Field(None, description="规则版本ID")
startedAt: datetime | None = Field(None, description="开始时间")
finishedAt: datetime | None = Field(None, description="结束时间")
rules: list[dict] = Field(default_factory=list, description="规则结果列表")
fields: list[AuditFieldResultVO] = Field(default_factory=list, description="抽取字段结果")
errors: list[AuditRunErrorVO] = Field(default_factory=list, description="运行错误列表")
rescueOutcomes: list[AuditRescueOutcomeVO] = Field(default_factory=list, description="补救结果列表")
metrics: AuditMetricsVO | None = Field(None, description="运行指标")
artifacts: list[AuditArtifactVO] = Field(default_factory=list, description="运行产物列表")