feat: wire native leaudit upload flow

This commit is contained in:
wren
2026-04-28 16:53:16 +08:00
parent c776af598a
commit e738398eb6
26 changed files with 7364 additions and 5778 deletions
@@ -11,23 +11,115 @@ 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="draft/executed")
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="draft/executed")
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="运行产物列表")
@@ -0,0 +1,21 @@
"""文档 VO。"""
from pydantic import BaseModel, Field
from fastapi_modules.fastapi_leaudit.domian.vo.auditVo import AuditRunVO
class DocumentUploadVO(BaseModel):
"""文档上传响应。"""
documentId: int = Field(..., description="LeAudit 文档ID")
bizDocumentId: int = Field(..., description="业务文档ID")
fileId: int = Field(..., description="文档文件ID")
typeId: int = Field(..., description="文档类型ID")
typeCode: str = Field(..., description="文档类型编码")
region: str = Field(..., description="所属地区")
fileName: str = Field(..., description="文件名")
ossUrl: str = Field(..., description="OSS 对象路径")
processingStatus: str = Field(..., description="文档处理状态")
autoRunTriggered: bool = Field(..., description="是否已自动触发评查")
run: AuditRunVO | None = Field(None, description="自动触发后的运行信息")