feat: restore source parity and harden agent runtime
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user