126 lines
6.4 KiB
Python
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="运行产物列表")
|