contract.py 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. import re
  2. from typing import Literal
  3. from pydantic import BaseModel, Field, field_validator
  4. BundleType = Literal["STORE_STANDARD", "LAWYER_STANDARD"]
  5. class BundleCreateRequest(BaseModel):
  6. subject_type: Literal["store", "lawyer"] = Field(description="主体类型")
  7. subject_id: int = Field(gt=0, description="主体ID")
  8. subject_name: str = Field(description="主体名称")
  9. business_segment: str = Field(description="业务板块")
  10. contact_name: str = Field(description="联系人姓名")
  11. contact_phone: str = Field(description="联系电话")
  12. ord_id: str = Field(description="统一社会信用代码")
  13. bundle_type: BundleType | None = Field(default=None, description="合同包类型,支持 STORE_STANDARD 或 LAWYER_STANDARD")
  14. @field_validator("contact_phone")
  15. @classmethod
  16. def validate_contact_phone(cls, value: str) -> str:
  17. if not re.fullmatch(r"^1\d{10}$", value):
  18. raise ValueError("contact_phone 格式错误,应为11位手机号")
  19. return value
  20. @field_validator("ord_id")
  21. @classmethod
  22. def validate_ord_id(cls, value: str) -> str:
  23. if not re.fullmatch(r"^[0-9A-Z]{18}$", value):
  24. raise ValueError("ord_id 格式错误,应为18位大写字母或数字")
  25. return value