""" CRM 客户域 Pydantic V2 Schemas """ from __future__ import annotations import uuid from datetime import datetime from typing import Any from pydantic import BaseModel, Field # ── 开票信息子结构 ───────────────────────────────────────── class BillingInfoSchema(BaseModel): company_name: str | None = Field(default=None, max_length=200, description="开票公司全称") tax_id: str | None = Field(default=None, max_length=50, description="纳税人识别号") address: str | None = Field(default=None, max_length=300, description="地址") phone: str | None = Field(default=None, max_length=30, description="电话") bank_name: str | None = Field(default=None, max_length=200, description="开户行") bank_account: str | None = Field(default=None, max_length=50, description="银行账号") # ── 创建 ────────────────────────────────────────────────── class CustomerCreate(BaseModel): name: str = Field(..., min_length=1, max_length=200, examples=["中石化润滑油公司"]) level: str = Field(default="C", pattern=r"^[ABC]$") industry: str | None = Field(default=None, max_length=100) contact: str | None = Field(default=None, max_length=50) phone: str | None = Field(default=None, max_length=30) email: str | None = Field(default=None, max_length=100) address: str | None = None billing_info: BillingInfoSchema | None = None status: int = Field(default=1, ge=0, le=1) # ── 更新 ────────────────────────────────────────────────── class CustomerUpdate(BaseModel): name: str | None = Field(default=None, min_length=1, max_length=200) level: str | None = Field(default=None, pattern=r"^[ABC]$") industry: str | None = Field(default=None, max_length=100) contact: str | None = Field(default=None, max_length=50) phone: str | None = Field(default=None, max_length=30) email: str | None = Field(default=None, max_length=100) address: str | None = None billing_info: BillingInfoSchema | None = None status: int | None = Field(default=None, ge=0, le=1) # ── 响应 ────────────────────────────────────────────────── class CustomerResponse(BaseModel): id: uuid.UUID name: str level: str industry: str | None = None contact: str | None = None phone: str | None = None email: str | None = None address: str | None = None ai_score: float = 0 ai_persona: dict[str, Any] | None = None billing_info: dict[str, Any] | None = None owner_id: uuid.UUID | None = None owner_name: str | None = None status: int = 1 is_deleted: bool = False created_at: datetime updated_at: datetime model_config = {"from_attributes": True} # ── 分页列表 ───────────────────────────────────────────── class CustomerListResponse(BaseModel): total: int items: list[CustomerResponse] page: int size: int