dingdanquanliucheng/backend/app/schemas/pricing.py
taiyi 46d56cb6d3 feat: 定价规则支持含税计算,审批详情展示税明细
定价规则新增 tax_rate(税率百分比)和 tax_inclusive(含税方式)字段,
报价引擎自动计算含税/不含税双价格,审批详情页利润计算过程展示税说明和明细行税额。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-30 11:15:55 +08:00

97 lines
2.6 KiB
Python

from pydantic import BaseModel, Field
# ---- 定价规则 ----
class CreatePricingRuleRequest(BaseModel):
product_id: int
product_name: str = ""
pricing_type: str = "area"
base_unit_price: float = Field(default=0, ge=0)
pricing_unit: str = ""
pricing_inputs: str | None = None # JSON string
formula_expr: str | None = None
formula_constants: str | None = None # JSON string
surcharge_json: str | None = None # JSON string
formula_note: str | None = None
tax_rate: float = Field(default=0, ge=0)
tax_inclusive: int = 0
status: int = 1
class UpdatePricingRuleRequest(BaseModel):
product_name: str | None = None
pricing_type: str | None = None
base_unit_price: float | None = None
pricing_unit: str | None = None
pricing_inputs: str | None = None
formula_expr: str | None = None
formula_constants: str | None = None
surcharge_json: str | None = None
formula_note: str | None = None
tax_rate: float | None = None
tax_inclusive: int | None = None
status: int | None = None
# ---- 供应商成本 ----
class CreateSupplierCostRequest(BaseModel):
product_id: int
supplier_id: int
supplier_model: str | None = None
our_model: str | None = None
thickness: str | None = None
weight_gsm: int | None = None
base_fabric_weight: int | None = None
cost_price: float = Field(ge=0)
cost_unit: str = ""
is_primary: int = 0
remark: str | None = None
status: int = 1
class UpdateSupplierCostRequest(BaseModel):
supplier_id: int | None = None
supplier_model: str | None = None
our_model: str | None = None
thickness: str | None = None
weight_gsm: int | None = None
base_fabric_weight: int | None = None
cost_price: float | None = None
cost_unit: str | None = None
is_primary: int | None = None
remark: str | None = None
status: int | None = None
# ---- 价格层级 ----
class CreatePriceTierRequest(BaseModel):
product_id: int
tier_code: str
tier_name: str
price: float = Field(ge=0)
price_unit: str = ""
remark: str | None = None
status: int = 1
class UpdatePriceTierRequest(BaseModel):
tier_name: str | None = None
price: float | None = None
price_unit: str | None = None
remark: str | None = None
status: int | None = None
# ---- 报价计算 ----
class QuotationCalculateRequest(BaseModel):
product_id: int
customer_id: int | None = None
user_inputs: dict = Field(default_factory=dict)
surcharge_selections: dict = Field(default_factory=dict)
surcharge_inputs: dict = Field(default_factory=dict)
include_tax: bool | None = None