contract.py 1.3 KB

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