Files

44 lines
2.7 KiB
Python

"""LeAudit 文档主模型 —— leaudit_documents 表。
当前平台把它作为 LeAudit 自己的文档主表使用,不再依赖旧系统文档表。
``biz_document_id`` 字段仅保留为内部追踪号,避免直接改库。
"""
from __future__ import annotations
from sqlalchemy import BigInteger, Boolean, Integer, String
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class LeauditDocument(BaseModel):
"""LeAudit 平台内部文档主表。"""
__tablename__ = "leaudit_documents"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
bizDocumentId: Mapped[int] = mapped_column("biz_document_id", BigInteger, unique=True, comment="内部追踪号(兼容旧字段名)")
typeId: Mapped[int | None] = mapped_column("type_id", BigInteger, comment="文档类型ID")
groupId: Mapped[int | None] = mapped_column("group_id", BigInteger, comment="命中的二级分组ID")
processingStatus: Mapped[str | None] = mapped_column("processing_status", String(64), default="waiting", comment="waiting/processing/completed/failed")
currentRunId: Mapped[int | None] = mapped_column("current_run_id", BigInteger, comment="最新有效 run id")
region: Mapped[str] = mapped_column(String(32), default="default", comment="所属地区: mz/yf/jy/cz/default")
tenantCode: Mapped[str | None] = mapped_column("tenant_code", String(64), comment="所属租户编码")
versionGroupKey: Mapped[str | None] = mapped_column("version_group_key", String(64), comment="文档版本归档组键")
versionNo: Mapped[int] = mapped_column("version_no", Integer, default=1, comment="同一文档系列中的版本号")
previousVersionId: Mapped[int | None] = mapped_column("previous_version_id", BigInteger, comment="上一版本文档ID")
rootVersionId: Mapped[int | None] = mapped_column("root_version_id", BigInteger, comment="首版本文档ID")
isLatestVersion: Mapped[bool] = mapped_column("is_latest_version", Boolean, default=True, comment="是否当前最新版本")
normalizedName: Mapped[str | None] = mapped_column("normalized_name", String(512), comment="归一化文件名(不含扩展名)")
reviewScope: Mapped[str] = mapped_column("review_scope", String(32), default="standard", comment="评查范围: standard=个人评查 cross_review=交叉评查")
@classmethod
async def create_new(cls, session: AsyncSession, **fields) -> "LeauditDocument":
"""Create a new platform-side document row for every upload."""
doc = cls(**fields)
session.add(doc)
await session.flush()
return doc