import re from typing import Literal from pydantic import BaseModel, Field, field_validator class BundleCreateRequest(BaseModel): subject_type: Literal["store", "lawyer"] = Field(description="主体类型") subject_id: int = Field(gt=0, description="主体ID") subject_name: str = Field(description="主体名称") business_segment: str = Field(description="业务板块") contact_name: str = Field(description="联系人姓名") contact_phone: str = Field(description="联系电话") ord_id: str = Field(description="统一社会信用代码") @field_validator("contact_phone") @classmethod def validate_contact_phone(cls, value: str) -> str: if not re.fullmatch(r"^1\d{10}$", value): raise ValueError("contact_phone 格式错误,应为11位手机号") return value @field_validator("ord_id") @classmethod def validate_ord_id(cls, value: str) -> str: # 统一社会信用代码:18位,由数字与大写字母组成(不含 I/O/S/V/Z),e签宝按此核验企业主体 normalized = (value or "").strip().upper() if not re.fullmatch(r"[0-9A-HJ-NP-RT-UW-Y]{18}", normalized): raise ValueError("ord_id 格式错误,应为18位统一社会信用代码") return normalized