feat(govdoc): 新增内部公文模块全链路(后端58+前端11文件)
This commit is contained in:
@@ -14,6 +14,9 @@ from fastapi_modules.fastapi_leaudit.models.leauditRagChatApp import LeauditRagC
|
||||
from fastapi_modules.fastapi_leaudit.models.leauditRagConversation import LeauditRagConversation
|
||||
from fastapi_modules.fastapi_leaudit.models.leauditRagMessage import LeauditRagMessage
|
||||
from fastapi_modules.fastapi_leaudit.models.usageLoginEvent import UsageLoginEvent
|
||||
from fastapi_modules.fastapi_leaudit.models.govdocRun import GovdocRun
|
||||
from fastapi_modules.fastapi_leaudit.models.govdocRuleResult import GovdocRuleResult
|
||||
from fastapi_modules.fastapi_leaudit.models.govdocReportArtifact import GovdocReportArtifact
|
||||
|
||||
__all__ = [
|
||||
"LeauditDocument",
|
||||
@@ -30,4 +33,7 @@ __all__ = [
|
||||
"LeauditRagConversation",
|
||||
"LeauditRagMessage",
|
||||
"UsageLoginEvent",
|
||||
"GovdocRun",
|
||||
"GovdocRuleResult",
|
||||
"GovdocReportArtifact",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
"""Govdoc 报告产物模型 —— govdoc_report_artifacts 表。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlalchemy import BigInteger, String
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from fastapi_common.fastapi_common_web.models import BaseModel
|
||||
|
||||
|
||||
class GovdocReportArtifact(BaseModel):
|
||||
"""公文审查报告产物索引表。"""
|
||||
|
||||
__tablename__ = "govdoc_report_artifacts"
|
||||
|
||||
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
|
||||
runId: Mapped[int] = mapped_column("run_id", BigInteger, comment="关联 govdoc_runs.id")
|
||||
|
||||
artifactType: Mapped[str] = mapped_column("artifact_type", String(64), comment="产物类型:html_report/annotated_docx/paragraph_html/json_report/original")
|
||||
fileName: Mapped[str] = mapped_column("file_name", String(512), comment="文件名")
|
||||
fileExt: Mapped[str | None] = mapped_column("file_ext", String(32), comment="扩展名")
|
||||
mimeType: Mapped[str | None] = mapped_column("mime_type", String(128), comment="MIME 类型")
|
||||
fileSize: Mapped[int | None] = mapped_column("file_size", BigInteger, comment="文件大小(字节)")
|
||||
sha256: Mapped[str | None] = mapped_column("sha256", String(64), comment="文件 SHA256")
|
||||
ossUrl: Mapped[str | None] = mapped_column("oss_url", String(2048), comment="OSS 访问地址")
|
||||
storageProvider: Mapped[str | None] = mapped_column("storage_provider", String(32), comment="存储提供商:oss/minio/local")
|
||||
description: Mapped[str | None] = mapped_column("description", String(512), comment="产物说明")
|
||||
@@ -0,0 +1,39 @@
|
||||
"""Govdoc 规则结果模型 —— govdoc_rule_results 表。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlalchemy import BigInteger, Integer, Numeric, String, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from fastapi_common.fastapi_common_web.models import BaseModel
|
||||
|
||||
|
||||
class GovdocRuleResult(BaseModel):
|
||||
"""公文规则执行结果明细表。"""
|
||||
|
||||
__tablename__ = "govdoc_rule_results"
|
||||
|
||||
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
|
||||
runId: Mapped[int] = mapped_column("run_id", BigInteger, comment="关联 govdoc_runs.id")
|
||||
|
||||
# 规则标识
|
||||
ruleId: Mapped[str] = mapped_column("rule_id", String(128), comment="规则标识")
|
||||
ruleName: Mapped[str | None] = mapped_column("rule_name", String(256), comment="规则名称")
|
||||
severity: Mapped[str | None] = mapped_column("severity", String(32), comment="严重等级:error/warning/info")
|
||||
category: Mapped[str | None] = mapped_column("category", String(128), comment="规则分类")
|
||||
|
||||
# 结果内容
|
||||
message: Mapped[str | None] = mapped_column("message", Text, comment="结果描述")
|
||||
suggestion: Mapped[str | None] = mapped_column("suggestion", Text, comment="修改建议")
|
||||
actual: Mapped[str | None] = mapped_column("actual", Text, comment="实际值")
|
||||
expected: Mapped[str | None] = mapped_column("expected", Text, comment="期望值")
|
||||
evidence: Mapped[str | None] = mapped_column("evidence", Text, comment="证据文本")
|
||||
|
||||
# 文档定位
|
||||
paragraphIndex: Mapped[int | None] = mapped_column("paragraph_index", Integer, comment="段落索引")
|
||||
paragraphText: Mapped[str | None] = mapped_column("paragraph_text", Text, comment="段落原文")
|
||||
locationPath: Mapped[str | None] = mapped_column("location_path", String(512), comment="文档结构位置路径")
|
||||
|
||||
# 判定
|
||||
result: Mapped[str] = mapped_column("result", String(32), default="pass", comment="执行结果:pass/fail/skipped/error")
|
||||
score: Mapped[float | None] = mapped_column("score", Numeric(10, 2), comment="本条得分")
|
||||
@@ -0,0 +1,46 @@
|
||||
"""Govdoc 审查运行模型 —— govdoc_runs 表。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import BigInteger, DateTime, Integer, Numeric, String, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from fastapi_common.fastapi_common_web.models import BaseModel
|
||||
|
||||
|
||||
class GovdocRun(BaseModel):
|
||||
"""公文审查运行主表。"""
|
||||
|
||||
__tablename__ = "govdoc_runs"
|
||||
|
||||
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
|
||||
documentId: Mapped[int] = mapped_column("document_id", BigInteger, comment="关联 leaudit_documents.id")
|
||||
documentFileId: Mapped[int | None] = mapped_column("document_file_id", BigInteger, comment="输入文件 ID,关联 leaudit_document_files.id")
|
||||
runNo: Mapped[int] = mapped_column("run_no", Integer, default=1, comment="同一文档第几次执行")
|
||||
triggerSource: Mapped[str] = mapped_column("trigger_source", String(64), default="upload", comment="触发来源:upload/manual/retry/migration")
|
||||
triggerUserId: Mapped[int | None] = mapped_column("trigger_user_id", BigInteger, comment="触发人 user_id")
|
||||
taskId: Mapped[str | None] = mapped_column("task_id", String(128), comment="Celery 任务 ID")
|
||||
|
||||
# 运行状态
|
||||
status: Mapped[str] = mapped_column("status", String(64), default="pending", comment="pending/processing/completed/failed/cancelled")
|
||||
phase: Mapped[str | None] = mapped_column("phase", String(32), comment="当前阶段:parsing/executing/reporting")
|
||||
|
||||
# 引擎快照
|
||||
engineVersion: Mapped[str | None] = mapped_column("engine_version", String(64), comment="引擎版本号")
|
||||
llmProvider: Mapped[str | None] = mapped_column("llm_provider", String(64), comment="LLM 提供商")
|
||||
llmModel: Mapped[str | None] = mapped_column("llm_model", String(128), comment="LLM 模型名")
|
||||
|
||||
# 结果汇总
|
||||
totalScore: Mapped[float | None] = mapped_column("total_score", Numeric(10, 2), comment="总分")
|
||||
passedCount: Mapped[int | None] = mapped_column("passed_count", Integer, comment="通过规则数")
|
||||
failedCount: Mapped[int | None] = mapped_column("failed_count", Integer, comment="未通过规则数")
|
||||
skippedCount: Mapped[int | None] = mapped_column("skipped_count", Integer, comment="跳过规则数")
|
||||
resultStatus: Mapped[str | None] = mapped_column("result_status", String(32), comment="综合结果:pass/fail/partial/error")
|
||||
resultSummaryJson: Mapped[str | None] = mapped_column("result_summary_json", Text, comment="结构化结果摘要 JSON")
|
||||
errorMessage: Mapped[str | None] = mapped_column("error_message", Text, comment="运行失败时错误描述")
|
||||
|
||||
# 时间
|
||||
startedAt: Mapped[datetime | None] = mapped_column("started_at", DateTime(timezone=True), comment="开始执行时间")
|
||||
finishedAt: Mapped[datetime | None] = mapped_column("finished_at", DateTime(timezone=True), comment="结束执行时间")
|
||||
Reference in New Issue
Block a user