"""审批流程 Pydantic Schemas。""" from typing import List, Optional from pydantic import BaseModel, ConfigDict from datetime import datetime class WorkflowStepCreate(BaseModel): step_number: int name: str step_type: str = "serial" # serial / parallel / any_one approver_role: Optional[str] = None approver_ids: Optional[str] = None # JSON list is_required: bool = True timeout_hours: int = 24 auto_approve_on_timeout: bool = False class WorkflowStepResponse(WorkflowStepCreate): id: int workflow_id: int model_config = ConfigDict(from_attributes=True) class WorkflowCreate(BaseModel): name: str description: Optional[str] = None is_default: bool = False steps: List[WorkflowStepCreate] class WorkflowUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None is_active: Optional[bool] = None steps: Optional[List[WorkflowStepCreate]] = None class WorkflowResponse(BaseModel): id: int name: str description: Optional[str] is_default: bool is_active: bool created_at: Optional[datetime] steps: List[WorkflowStepResponse] model_config = ConfigDict(from_attributes=True) class TicketApprovalResponse(BaseModel): id: int ticket_id: int step_number: int step_name: Optional[str] approver_id: Optional[int] approver_role: Optional[str] approver_name: Optional[str] = None action: str comment: Optional[str] created_at: Optional[datetime] updated_at: Optional[datetime] class ApprovalProgressResponse(BaseModel): ticket_id: int current_step: int total_steps: int status: str steps: List[dict] class ApprovalActionRequest(BaseModel): comment: Optional[str] = "" class TransferRequest(BaseModel): to_user_id: int comment: Optional[str] = ""