feat: restore source parity and harden agent runtime

This commit is contained in:
2026-06-22 11:17:26 +08:00
parent e33f08277b
commit 0793eb82d6
596 changed files with 168879 additions and 290 deletions
@@ -0,0 +1,212 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
合同管理 Schema 定义
"""
from datetime import datetime
from typing import Any, Dict, Optional
from pydantic import BaseModel, Field, ConfigDict
from app.base_schema import CSTDatetime
# ============ 合同模板 Schema ============
class ContractTemplateCreate(BaseModel):
"""创建合同模板"""
name: str = Field(..., max_length=100, description="模板名称")
code: str = Field(..., max_length=100, description="模板编码")
category: str = Field(default="", max_length=50, description="分类")
description: str = Field(default="", description="描述")
template_config: Dict[str, Any] = Field(default_factory=dict, description="模板配置")
class ContractTemplateUpdate(BaseModel):
"""更新合同模板"""
name: Optional[str] = Field(None, max_length=100, description="模板名称")
category: Optional[str] = Field(None, max_length=50, description="分类")
description: Optional[str] = Field(None, description="描述")
template_config: Optional[Dict[str, Any]] = Field(None, description="模板配置")
thumbnail: Optional[str] = Field(None, description="缩略图")
class ContractTemplateOut(BaseModel):
"""合同模板输出"""
id: str
name: str
code: str
category: str
description: str
status: str
version: int
template_config: Dict[str, Any]
thumbnail: str
sys_create_datetime: CSTDatetime
sys_update_datetime: CSTDatetime
model_config = ConfigDict(from_attributes=True)
class ContractTemplateListItem(BaseModel):
"""合同模板列表项"""
id: str
name: str
code: str
category: str
description: str
status: str
version: int
thumbnail: str
sys_create_datetime: CSTDatetime
sys_update_datetime: CSTDatetime
model_config = ConfigDict(from_attributes=True)
# ============ 合同实例 Schema ============
class ContractInstanceCreate(BaseModel):
"""创建合同实例"""
template_id: str = Field(..., description="模板ID")
title: str = Field(..., max_length=200, description="合同标题")
contract_no: Optional[str] = Field(None, max_length=50, description="合同编号(可选,不填则自动生成)")
variable_data: Dict[str, Any] = Field(default_factory=dict, description="变量数据")
class ContractInstanceUpdate(BaseModel):
"""更新合同实例"""
title: Optional[str] = Field(None, max_length=200, description="合同标题")
variable_data: Optional[Dict[str, Any]] = Field(None, description="变量数据")
signature_data: Optional[Dict[str, Any]] = Field(None, description="签署数据")
class ContractInstanceOut(BaseModel):
"""合同实例输出"""
id: str
contract_no: str
title: str
status: str
template_id: str
contract_config: Dict[str, Any]
variable_data: Dict[str, Any]
signature_data: Dict[str, Any]
created_at: Optional[CSTDatetime] = None
completed_at: Optional[CSTDatetime] = None
expired_at: Optional[CSTDatetime] = None
pdf_file: str
# 关联字段
template_name: str = ""
template_code: str = ""
creator_id: str = ""
creator_name: str = ""
model_config = ConfigDict(from_attributes=True)
class ContractInstanceListItem(BaseModel):
"""合同实例列表项"""
id: str
contract_no: str
title: str
status: str
created_at: Optional[CSTDatetime] = None
completed_at: Optional[CSTDatetime] = None
# 关联字段
template_name: str = ""
creator_name: str = ""
model_config = ConfigDict(from_attributes=True)
# ============ 签署记录 Schema ============
class ContractSignatureCreate(BaseModel):
"""创建签署记录"""
element_id: str = Field(..., description="元素ID")
signature_image: str = Field(..., description="签名图片(base64)")
signer_name: str = Field(default="", description="签署人姓名")
class ContractSignatureOut(BaseModel):
"""签署记录输出"""
id: str
element_id: str
party_type: str
party_label: str
sign_type: str
signer_id: Optional[str] = None
signer_name: str
signature_image: str
status: str
signed_at: Optional[CSTDatetime] = None
model_config = ConfigDict(from_attributes=True)
# ============ 操作日志 Schema ============
class ContractLogOut(BaseModel):
"""操作日志输出"""
id: str
action: str
operator_id: str
comment: str
sys_create_datetime: CSTDatetime
# 关联字段
operator_name: str = ""
model_config = ConfigDict(from_attributes=True)
# ============ 手机签署 Schema ============
class MobileSignTokenCreate(BaseModel):
"""创建手机签署令牌"""
party_type: str = Field(default="party_a", description="签署方类型")
signer_name: str = Field(default="", description="签署人姓名")
expire_minutes: int = Field(default=30, description="有效期(分钟)")
class MobileSignTokenOut(BaseModel):
"""手机签署令牌输出"""
token: str
sign_url: str
expired_at: CSTDatetime
qrcode_data: str # 二维码内容
class MobileContractInfo(BaseModel):
"""移动端合同信息(简化版)"""
id: str
contract_no: str
title: str
status: str
contract_config: Dict[str, Any]
variable_data: Dict[str, Any]
signature_data: Dict[str, Any]
party_type: str = ""
signer_name: str = ""
template_name: str = ""
class MobileSignRequest(BaseModel):
"""移动端签署请求"""
element_id: str = Field(..., description="元素ID")
signature_image: str = Field(..., description="签名图片(base64)")
signer_name: str = Field(default="", description="签署人姓名")
# ============ 通用响应 ============
class MessageResponse(BaseModel):
"""消息响应"""
message: str
class CountResponse(BaseModel):
"""计数响应"""
count: int