"""Govdoc 公文模块服务接口。""" from abc import ABC, abstractmethod from typing import Any from fastapi import UploadFile class IGovdocService(ABC): """公文处理与格式审查服务抽象接口。""" # ── 文档 ────────────────────────────────────────────── @abstractmethod async def UploadDocument( self, file: UploadFile, typeId: int | None = None, region: str = "default", autoRun: bool = False, speed: str = "normal", ruleVersionId: int | None = None, createdBy: int | None = None, ) -> dict[str, Any]: """上传公文文档,创建主档记录,可选自动触发审查。""" ... @abstractmethod async def ListDocuments( self, page: int = 1, pageSize: int = 20, keyword: str | None = None, region: str | None = None, status: str | None = None, resultStatus: str | None = None, createdBy: int | None = None, dateFrom: str | None = None, dateTo: str | None = None, userId: int | None = None, ) -> dict[str, Any]: """获取公文模块文档列表,自动限制 engine_type='govdoc'。""" ... @abstractmethod async def GetDocumentDetail(self, documentId: int, userId: int | None = None) -> dict[str, Any]: """获取公文详情:文档基础信息 + 最新 run 摘要 + 报告引用。""" ... @abstractmethod async def UpdateDocument(self, documentId: int, body: dict[str, Any], userId: int | None = None) -> dict[str, Any]: """修改公文标题、文号、备注等基础信息。""" ... @abstractmethod async def DeleteDocument(self, documentId: int, userId: int | None = None) -> dict[str, Any]: """软删除文档。""" ... # ── 审查运行 ────────────────────────────────────────── @abstractmethod async def CreateRun( self, documentId: int, ruleVersionId: int | None = None, speed: str = "normal", force: bool = False, triggerUserId: int | None = None, ) -> dict[str, Any]: """对已存在文档发起一次公文审查 run。""" ... @abstractmethod async def GetRunStatus(self, runId: int) -> dict[str, Any]: """查询 run 状态、阶段、耗时、错误摘要。""" ... # ── 结果与报告 ──────────────────────────────────────── @abstractmethod async def GetRunResult(self, runId: int) -> dict[str, Any]: """获取审查结果摘要:summary + checked rules + findings 统计 + entities 摘要。""" ... @abstractmethod async def GetRunFindings(self, runId: int) -> dict[str, Any]: """获取段落级 findings 明细列表。""" ... @abstractmethod async def GetRunEntities(self, runId: int) -> dict[str, Any]: """获取识别出的标题、文号、署名等实体。""" ... @abstractmethod async def GetRunParagraphs(self, runId: int) -> dict[str, Any]: """获取前端文档联动视图所需的段落 HTML。""" ... @abstractmethod async def GetRunStructure(self, runId: int) -> dict[str, Any]: """获取文档结构统计(结构面板数据)。""" ... @abstractmethod async def GetRunOutline(self, runId: int) -> dict[str, Any]: """获取文档大纲树(大纲面板数据)。""" ... @abstractmethod async def GetReportHtml(self, runId: int) -> dict[str, Any]: """获取 HTML 报告内容或下载地址。""" ... @abstractmethod async def GetReportDocx(self, runId: int) -> dict[str, Any]: """获取批注 DOCX 下载地址。""" ... @abstractmethod async def DownloadOriginal(self, documentId: int) -> dict[str, Any]: """获取原始上传文档下载地址。""" ... # ── 规则 ────────────────────────────────────────────── @abstractmethod async def ListRules(self) -> dict[str, Any]: """获取当前生效规则集摘要。""" ...