| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- from datetime import datetime
- from typing import Optional
- from pydantic import BaseModel, ConfigDict, Field, model_validator
- class StandardConditionInfoSchema(BaseModel):
- """使用规则因子"""
- rule_factor: str = Field(description="条件类型")
- rule_value: str = Field(description="条件值")
- rule_operator: Optional[str] = Field(
- default=None, description="操作符: LT(<)/LE(<=)/EQ(=)/NE(!=)/GE(>=)/GT(>)"
- )
- rule_name: Optional[str] = Field(default=None, description="条件名称")
- class AssetShareSourceInfoSchema(BaseModel):
- """资产共享源信息"""
- share_mode: str = Field(description="共享模式")
- source_id_list: list[str] = Field(description="源ID列表")
- class ExpenseRuleCreateSchema(BaseModel):
- """创建费控使用规则请求 (alipay.ebpp.invoice.institution.expenserule.create)"""
- institution_id: str = Field(description="制度ID (必填)")
- standard_name: str = Field(max_length=20, description="费控规则名称 (必填)")
- standard_desc: Optional[str] = Field(default=None, description="规则描述")
- expense_type_sub_category: str = Field(
- description="费用类型子类 (必填): TAKE_AWAY(外卖)/REACH_SHOP(到店)/METRO(地铁)"
- )
- standard_condition_info_list: list[StandardConditionInfoSchema] = Field(
- description="使用规则因子列表 (必填)"
- )
- enterprise_id: Optional[str] = Field(default=None, description="企业码ID")
- account_id: Optional[str] = Field(default=None, description="企业共同账户ID (已废弃)")
- agreement_no: Optional[str] = Field(default=None, description="授权签约协议号 (已废弃)")
- outer_source_id: Optional[str] = Field(default=None, description="外部唯一标识(幂等)")
- open_rule_id: Optional[str] = Field(default=None, description="开票规则ID")
- payment_policy: Optional[str] = Field(
- default=None, description="支付策略: PERSONAL(全部个人账户)/COMBINATION(组合支付)"
- )
- consume_mode: Optional[str] = Field(
- default=None, description="消费模式: COUPON_ONLY/COUPON_AND_CAP/DEFAULT"
- )
- expense_cert_type: Optional[str] = Field(default=None, description="费用凭证类型")
- personal_qrcode_mode: Optional[int] = Field(default=None, description="个人二维码模式")
- asset_share_source_info: Optional[AssetShareSourceInfoSchema] = Field(default=None, description="资产共享源信息")
- class ExpenseRuleDeleteSchema(BaseModel):
- """删除费控使用规则请求"""
- institution_id: str = Field(description="制度ID")
- standard_id_list: list[str] = Field(description="使用规则ID列表")
- enterprise_id: str = Field(description="企业ID")
- class ExpenseRuleModifySchema(BaseModel):
- """编辑费控使用规则请求"""
- institution_id: str = Field(description="制度ID")
- standard_id: str = Field(description="使用规则ID")
- action: str = Field(description="操作类型")
- standard_name: Optional[str] = Field(default=None, description="规则名称")
- standard_desc: Optional[str] = Field(default=None, description="规则描述")
- expense_type_sub_category: Optional[str] = Field(default=None, description="费用类型子类")
- standard_condition_info_list: Optional[list[StandardConditionInfoSchema]] = Field(
- default=None, description="使用规则因子列表"
- )
- enterprise_id: Optional[str] = Field(default=None, description="企业ID")
- outer_source_id: Optional[str] = Field(default=None, description="外部唯一标识")
- open_rule_id: Optional[str] = Field(default=None, description="开票规则ID")
- payment_policy: Optional[str] = Field(default=None, description="支付策略")
- consume_mode: Optional[str] = Field(default=None, description="消费模式")
- expense_cert_type: Optional[str] = Field(default=None, description="凭证类型")
- class RuleCreateSchema(BaseModel):
- """创建使用规则请求"""
- institution_id: str = Field(description="制度ID")
- standard_name: str = Field(max_length=20, description="规则名称")
- standard_desc: Optional[str] = Field(default=None, description="规则描述")
- expense_type_sub_category: str = Field(description="费用类型子类")
- enterprise_id: Optional[str] = Field(default=None, description="企业ID")
- class RuleOperationOutSchema(BaseModel):
- """使用规则操作响应"""
- out_biz_no: str = Field(description="外部业务编号")
- rule_id: Optional[str] = Field(default=None, description="规则ID")
- result: Optional[str] = Field(default=None, description="操作结果")
- class RuleListOutSchema(BaseModel):
- """使用规则列表响应"""
- model_config = ConfigDict(from_attributes=True)
- id: int = Field(description="主键ID")
- out_biz_no: str = Field(description="外部业务编号")
- institution_id: str = Field(description="制度ID")
- rule_id: Optional[str] = Field(default=None, description="规则ID")
- standard_name: Optional[str] = Field(default=None, description="规则名称")
- expense_type_sub_category: Optional[str] = Field(default=None, description="费用类型子类")
- status: Optional[str] = Field(default=None, description="状态")
- enterprise_id: Optional[str] = Field(default=None, description="企业ID")
- single_limit: Optional[float] = Field(default=None, description="单笔限额")
- max_day_amount: Optional[float] = Field(default=None, description="日限额")
- max_month_amount: Optional[float] = Field(default=None, description="月限额")
- max_quarter_amount: Optional[float] = Field(default=None, description="季限额")
- max_year_amount: Optional[float] = Field(default=None, description="年限额")
- condition_info: Optional[list] = Field(default=None, description="规则条件列表")
- created_time: Optional[datetime] = Field(default=None, description="创建时间")
- updated_time: Optional[datetime] = Field(default=None, description="更新时间")
- @model_validator(mode="after")
- def extract_period_limits(self):
- """从 condition_info 中提取日/月/季/年限额"""
- if not self.condition_info:
- return self
- for cond in self.condition_info:
- factor = cond.get("rule_factor")
- try:
- value = float(cond.get("rule_value", 0))
- except (ValueError, TypeError):
- continue
- if factor == "QUOTA_DAY":
- self.max_day_amount = value
- elif factor == "QUOTA_MONTH":
- self.max_month_amount = value
- elif factor == "QUOTA_QUARTER":
- self.max_quarter_amount = value
- elif factor == "QUOTA_YEAR":
- self.max_year_amount = value
- return self
- class RuleOutSchema(BaseModel):
- """使用规则详情响应"""
- model_config = ConfigDict(from_attributes=True)
- out_biz_no: str = Field(description="外部业务编号")
- institution_id: str = Field(description="制度ID")
- rule_id: Optional[str] = Field(default=None, description="规则ID")
- standard_name: Optional[str] = Field(default=None, description="规则名称")
- standard_desc: Optional[str] = Field(default=None, description="规则描述")
- expense_type_sub_category: Optional[str] = Field(default=None, description="费用类型子类")
- enterprise_id: Optional[str] = Field(default=None, description="企业ID")
- status: Optional[str] = Field(default=None, description="状态")
- class RuleUpdateSchema(BaseModel):
- """更新使用规则请求"""
- institution_id: Optional[str] = Field(default=None, description="制度ID")
- standard_name: Optional[str] = Field(default=None, description="规则名称")
- standard_desc: Optional[str] = Field(default=None, description="规则描述")
- expense_type_sub_category: Optional[str] = Field(default=None, description="费用类型子类")
- status: Optional[str] = Field(default=None, description="状态")
- enterprise_id: Optional[str] = Field(default=None, description="企业ID")
|