feat: 初始化项目,项目需求、方案文档
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
# 账户、门店管理与水印管理需求
|
||||
|
||||
> 状态:讨论中。本文只定义产品需求、页面与状态口径;不预设数据库表、接口路径或技术栈。
|
||||
|
||||
## 1. 本期范围与导航
|
||||
|
||||
用户登录后显示左侧一级菜单:在线商品、采集箱、店铺管理、水印管理、定价工具。
|
||||
|
||||
本轮细化账户、店铺管理和水印管理。在线商品、采集箱、定价工具只确定入口,功能在后续单独讨论。
|
||||
|
||||
默认产品形态是一个账户可管理多个店铺;店铺目前先接入 Ozon,但不能把页面或领域名称永久写死为 Ozon,以便后续增加其他平台。
|
||||
|
||||
## 2. 账户注册与登录
|
||||
|
||||
### 2.1 注册
|
||||
|
||||
注册页字段只有手机号和密码,均为必填:
|
||||
|
||||
| 字段 | 规则 |
|
||||
|---|---|
|
||||
| 手机号 | 使用国家区号 + 手机号的标准化格式保存;同一手机号只能注册一个账户。首期注册页默认中国区号,但数据模型和界面需支持后续扩展。 |
|
||||
| 密码 | 由后续安全设计确定最终长度与复杂度;页面需要二次输入密码并提示规则。密码只可安全散列存储,绝不回显。 |
|
||||
|
||||
首期注册成功即可登录使用。短信验证和风控验证不在首期流程执行,但要预留“手机号是否已验证”和“注册/登录风控结果”的状态,未来加功能时不改变账户主流程。
|
||||
|
||||
### 2.2 登录与会话
|
||||
|
||||
用户用手机号和密码登录。登录成功进入默认工作空间与首页;若后续一个账户拥有多个工作空间,再增加切换入口。首期需要提供退出登录;忘记密码、短信登录、第三方登录、设备管理和多因素认证均不在本轮范围。
|
||||
|
||||
### 2.3 全局平台与当前店铺上下文
|
||||
|
||||
平台和当前店铺是全站工作上下文,不在每个业务页面重复选择。页头在用户信息左侧放置“平台选择器”;用户切换平台后,菜单、类目、物流商、佣金规则和页面数据均切换到该平台范围。
|
||||
|
||||
在平台下有多个已授权店铺时,系统同时使用该平台的默认店铺作为“当前店铺”;后续可在同一页头区域增加店铺切换。新用户进入一个平台时优先选中该平台默认店铺。定价方案、商品和上架任务均从此全局上下文读取平台与店铺,避免表单中出现相互矛盾的平台选择。
|
||||
|
||||
## 3. 店铺管理
|
||||
|
||||
### 3.1 列表页面
|
||||
|
||||
入口为“店铺管理”。页面左上方有“添加店铺授权”按钮;列表按添加时间倒序,支持空状态。字段如下:
|
||||
|
||||
| 列 | 展示/来源 | 说明 |
|
||||
|---|---|---|
|
||||
| 序号 | 当前列表序号 | 仅是 UI 序号,不作为店铺标识。 |
|
||||
| 店铺名称 | 用户填写 | 允许编辑,不能为空。 |
|
||||
| 店铺 Client ID | 用户填写 | Ozon `Client-Id`;可完整显示,但不应把 API Key 放在列表或详情中。 |
|
||||
| 密钥过期时间 | 平台可提供时同步 | 现有 Ozon Seller API 资料仅说明 `Api-Key` 由卖家后台生成、只显示一次,未发现可读取密钥过期时间的接口。因此首期展示 `—`;同时建议在详情/编辑页显示“最近验证时间”和“凭据验证状态”。不能用本系统添加时间推算到期。 |
|
||||
| 商品限额 | 平台可提供时同步 | 指一家门店可铺货的商品数量上限。现有资料未确认 Ozon 可返回该配额;首期显示 `—`,不得把当前商品数量误作限额。 |
|
||||
| 货币类型 | 用户选择 | 首期提供人民币 `CNY` 和俄罗斯卢布 `RUB`;其他币种由后台配置后才显示。一个店铺只有一个默认结算/计价币种。 |
|
||||
| 默认店铺 | 系统状态 | 每个工作空间最多一个默认店铺;设为默认会自动取消原默认店铺。 |
|
||||
| 仓库数量 | 平台同步 | Ozon 可通过 `POST /v1/warehouse/list` 获取仓库数组,列表显示最近一次成功同步的数量;未同步、凭据失效或请求失败时显示 `—` 并保留最近同步时间。 |
|
||||
| Cookie 状态 | 预留字段 | Ozon 商品发布使用 `Client-Id + Api-Key` 的 Seller API 鉴权,不需要浏览器 Cookie。因此首期此列保持空白;只有未来接入网页自动化等 Seller API 覆盖不到的能力,才增加 Cookie 授权、加密保存、失效检测与更新入口。 |
|
||||
| 状态 | 系统状态 | `验证中`、`正常`、`凭据失效`、`同步异常`、`已停用`。添加/更新凭据后先验证再置为正常。 |
|
||||
| 绑定水印 | 关联状态 | 显示已绑定的水印模板名称,未绑定时显示“未绑定”。 |
|
||||
| 添加时间 | 系统时间 | 显示店铺创建时间。 |
|
||||
| 操作 | 用户操作 | `绑定水印`、`编辑`、`删除`。删除必须二次确认,首期建议软删除:不再出现在默认列表,但保留关联商品和操作审计。默认店铺删除前必须先指定另一店铺为默认,或在没有其他店铺时允许默认店铺为空。 |
|
||||
|
||||
“仓库数量”的来源已经在现有 Ozon 资料中确认。密钥过期时间和商品限额如果无法由平台获得,统一展示 `—`,不推算、不猜测;Cookie 不是商品发布所需的 Seller API 凭据,首期保持空白。
|
||||
|
||||
### 3.2 添加店铺授权
|
||||
|
||||
点击“添加店铺授权”弹出表单,字段顺序固定如下:
|
||||
|
||||
| 字段 | 必填 | 规则 |
|
||||
|---|---:|---|
|
||||
| 店铺名称 | 是 | 用户自定义名称。 |
|
||||
| Client ID | 是 | Ozon `Client-Id`。 |
|
||||
| API 密钥 | 是 | 仅提交一次给服务端验证和加密保存;保存后永不在 UI 或接口响应中返回明文。 |
|
||||
| 货币类型 | 是 | 首期仅 `CNY`、`RUB`;由可配置币种清单驱动,默认建议 `RUB`。 |
|
||||
| 是否默认店铺 | 否 | 新账户的首家店铺强制成为默认;其他店铺由勾选决定。 |
|
||||
| 备注 | 否 | 仅供账户内管理,不对平台发送。 |
|
||||
|
||||
提交后系统必须用该凭据调用一个低风险 Ozon API 进行校验,并拉取仓库列表;验证失败时不得把店铺标为正常,错误提示不能包含 API Key。首期先按 Ozon `Client-Id + Api-Key` 接入,未来其他平台在同一“添加店铺授权”入口内按平台显示各自表单。
|
||||
|
||||
### 3.3 绑定水印
|
||||
|
||||
点击列表操作“绑定水印”弹出对话框:
|
||||
|
||||
- 店铺名称:只读,不可修改。
|
||||
- 水印:下拉列表,包含当前账户可用的水印模板,也可以选择“暂不绑定”。
|
||||
- 确认后,该店铺后续上架商品时默认使用此模板处理商品图片;已有图片不会被自动重写。
|
||||
|
||||
一个店铺首期只可绑定一个默认水印;同一水印模板可以绑定给多个店铺。
|
||||
|
||||
### 3.4 编辑与删除
|
||||
|
||||
编辑复用添加表单,但 API Key 默认不显示;用户只有重新输入新 Key 时才更新凭据并触发验证。删除只处理本系统的店铺连接,不会删除 Ozon 平台店铺、商品或仓库。
|
||||
|
||||
## 4. 水印管理
|
||||
|
||||
### 4.1 列表页面
|
||||
|
||||
页面左上方有“添加水印模板”按钮。列表按创建时间倒序,列为:序号、水印名称、水印类型、水印内容、水印位置、创建时间、操作。
|
||||
|
||||
| 列 | 说明 |
|
||||
|---|---|
|
||||
| 水印名称 | 模板名称,在当前账户内唯一。 |
|
||||
| 水印类型 | `文字水印` 或 `图片水印`。 |
|
||||
| 水印内容 | 文字水印展示文字内容;图片水印展示缩略图/文件名,不显示原始存储路径。 |
|
||||
| 水印位置 | 九宫格位置,以清晰中文名展示,如“右下”。 |
|
||||
| 操作 | `查看效果`、`编辑`、`删除`。 |
|
||||
|
||||
删除已被店铺绑定的模板时,必须二次确认并说明影响;确认删除后应解除所有店铺绑定,而不是让任务继续引用一个已删除的模板。已生成的历史图片不受影响。
|
||||
|
||||
### 4.2 添加/编辑水印模板
|
||||
|
||||
点击“添加水印模板”打开弹窗。先选择水印类型,表单随类型切换;编辑时保留原类型和参数,并支持更换图片或文字。模板名称与水印类型始终必填。
|
||||
|
||||
共同字段:
|
||||
|
||||
| 字段 | 规则 |
|
||||
|---|---|
|
||||
| 模板名称 | 必填;当前账户内唯一。 |
|
||||
| 水印类型 | 必填,文字或图片。切换类型时需确认,因为原类型专属字段会被清空。 |
|
||||
| 不透明度 | 使用 Ant Design Slider;取值 0%–100%,预览同步更新。 |
|
||||
| 水印位置 | 九宫格单选:左上、上中、右上、左中、居中、右中、左下、下中、右下。 |
|
||||
| 预览效果 | 基于固定演示底图实时渲染位置、缩放和透明度;首期仅预览,不写入商品图。 |
|
||||
|
||||
图片水印专属字段:
|
||||
|
||||
| 字段 | 必填 | 规则 |
|
||||
|---|---:|---|
|
||||
| 上传图片 | 是 | 上传 PNG/JPG/WebP;透明底 PNG 是推荐格式。具体大小、像素与文件大小限制由媒体模块确定。 |
|
||||
| 图片缩放 | 是 | 使用 Ant Design Slider;首期建议取值 10%–200%,表示相对演示底图短边的比例。 |
|
||||
|
||||
文字水印专属字段:
|
||||
|
||||
| 字段 | 必填 | 规则 |
|
||||
|---|---:|---|
|
||||
| 文字内容 | 是 | 允许的最大长度与禁用字符由媒体模块确定。 |
|
||||
| 字体 | 是 | 由服务端返回的、已随渲染服务部署的字体清单驱动,不能直接读取浏览器或开发机字体。 |
|
||||
| 字体大小 | 是 | 12px–60px。 |
|
||||
|
||||
“查看效果”使用模板当前配置和固定演示底图打开预览。
|
||||
|
||||
### 4.3 上架时的默认加水印规则
|
||||
|
||||
当用户选择的目标店铺已经绑定水印模板时,点击“上架至 Ozon”后,系统在上传每张商品图片前生成一份带水印的派生图,并把派生图上传给 Ozon;未绑定模板则上传原选图。规则如下:
|
||||
|
||||
- 商品级图片与每个 SKU 已选图片都适用,最终以实际要提交给 Ozon 的图片集合为准。
|
||||
- 原始图片和编辑页已选图片不被改写;水印处理产物是一次独立的、可追溯的上传副本。
|
||||
- 上传任务固化水印模板版本、位置、缩放/字体和不透明度;模板后续编辑不影响已上架商品。
|
||||
- 用户在具体上架任务中应能查看“将应用的水印模板”;是否允许该次上架临时取消或更换模板,留待发布流程需求确认。
|
||||
|
||||
## 5. 本轮待确认事项
|
||||
|
||||
1. 商品限额的 Ozon 数据来源与刷新频率仍待平台接口/真实店铺联调确认;在此之前固定显示 `—`。
|
||||
2. 账户是否从首期就允许多人共享同一工作空间/协作店铺?如果不做,首期仍按“一个账户一个工作空间”使用,但架构会保留扩展空间。
|
||||
3. 上架任务是否允许临时取消或替换门店默认水印?
|
||||
|
||||
## 6. 非功能性约束
|
||||
|
||||
- API Key、Cookie、密码都属于高敏感信息:禁止日志记录、客户端缓存、列表返回和明文回显。
|
||||
- 所有店铺、水印、素材与后续商品数据必须按账户/工作空间隔离。
|
||||
- 凭据验证、仓库同步、图片上传和水印渲染可以失败或耗时,页面应展示最后一次状态与可重试入口,不能长时间阻塞表单提交。
|
||||
@@ -0,0 +1,122 @@
|
||||
# CEL Ozon-rFBS 资费规则(待审核)
|
||||
|
||||
> 状态:规则已完成首轮业务 Review,仍须用 CEL 实际账单复算后才能作为生产报价规则启用。
|
||||
>
|
||||
> 来源:`CEL最新资费试算表V6.17.xlsx` 的 `OZON-rFBS` 工作表;读取时间:2026-09-01。本文按工作表展示内容与单元格公式转写,并参考旧项目 `web/js/app.js` 的试算逻辑核对单位与计算表达。原 Excel 未被修改。
|
||||
|
||||
## 1. 范围和统一口径
|
||||
|
||||
- 首期服务商:`CEL`。
|
||||
- 首期模式:`Ozon-rFBS`。
|
||||
- 本文所有运费、商品货值阈值均为 **人民币 CNY**;重量为 **kg**;尺寸为 **cm**;体积重同样为 kg。
|
||||
- 工作表的 Q9 输入格标注为“填入销售价格/人民币(元)”,下文称“商品货值”。商品货值固定以人民币(CNY)计价:它不是采购成本,也不是包裹申报价值;它用于判断商品适用哪个 CEL 产品类型:例如 `≤135 CNY` 适用 Extra Small/Budget,`135 < 货值 ≤635 CNY` 适用 Small/Big,`635 < 货值 ≤22,525 CNY` 适用 Premium Small/Premium Big。系统报价时以最终建议销售价按本次汇率折算得到的人民币金额作为商品货值。
|
||||
- 商品货值会与佣金档、物流产品类型相互影响:不同 CEL 产品类型的固定费、每 kg 单价、尺寸限制和是否计抛不同;产品类型改变会改变物流费,进而改变建议售价和商品货值。因此必须在同一次报价中求得稳定结果,不能先固定一个物流产品类型。
|
||||
- 所有 CEL 费率均是“每票固定费 + 按计费重量的单价”。例如 `46.80 CNY/kg + 3.12 CNY/票` 等价于源表的 `0.0468 CNY/g + 3.12 CNY/票`。
|
||||
- “不计抛”表示只使用实际重量;“计抛”表示按规则计算体积重并与实际重量取大。源表不要求所有渠道用同一体积重公式。
|
||||
|
||||
## 2. 从源表得到的 CEL 产品类型
|
||||
|
||||
### 2.1 低货值:货值 ≤ 135 CNY
|
||||
|
||||
| 产品类型 | 运输方式 | 源表渠道名 | 时效 | 实际重量 | 尺寸/计抛 | 运费公式(CNY) |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Extra Small(超级轻小件) | 陆空特快 | Express Extra Small | 5–10 天 | `0 < W ≤ 0.5` | 三边和 `≤90`,最长边 `≤60`,不计抛 | `46.80 × W + 3.12` |
|
||||
| Extra Small(超级轻小件) | 陆空标准 | Standard Extra Small | 10–15 天 | `0 < W ≤ 0.5` | 同上 | `36.40 × W + 3.12` |
|
||||
| Extra Small(超级轻小件) | 陆运经济 | Economy Extra Small | 15–25 天 | `0 < W ≤ 0.5` | 同上 | `26.00 × W + 3.12` |
|
||||
| Budget(低客单标准件) | 陆空特快 | Express Budget | 5–10 天 | `0.5 < W ≤ 30` | 三边和 `≤150`,最长边 `≤60`,不计抛 | `34.32 × W + 23.92` |
|
||||
| Budget(低客单标准件) | 陆空标准 | Standard Budget | 10–15 天 | `0.5 < W ≤ 30` | 同上 | `26.00 × W + 23.92` |
|
||||
| Budget(低客单标准件) | 陆运经济 | Economy Budget | 15–25 天 | `0.5 < W ≤ 30` | 同上 | `17.68 × W + 23.92` |
|
||||
|
||||
源表在 Budget 行显示“密度 kg/m³”,公式为 `实际重量 ÷ (长×宽×高) × 1,000,000`,但**该密度没有参与任何可见的运价或有效性公式**;新系统只记录为参考指标,不能擅自增加密度限制。
|
||||
|
||||
### 2.2 中货值:135 < 货值 ≤ 635 CNY
|
||||
|
||||
| 产品类型 | 运输方式 | 源表渠道名 | 时效 | 实际重量 | 尺寸/计抛 | 运费公式(CNY) |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Small(轻小件) | 陆空特快 | Express Small | 5–10 天 | `0.001 ≤ W ≤ 2`;最小计费重 `0.001` | 三边和 `≤150`,最长边 `≤60`,不计抛 | `46.80 × W + 16.64` |
|
||||
| Small(轻小件) | 陆空标准 | Standard Small | 10–15 天 | `0.001 ≤ W ≤ 2`;最小计费重 `0.001` | 同上 | `36.40 × W + 16.64` |
|
||||
| Small(轻小件) | 陆运经济 | Economy Small | 15–25 天 | `0.001 ≤ W ≤ 2`;最小计费重 `0.001` | 同上 | `26.00 × W + 16.64` |
|
||||
| Big(大件) | 陆空标准 | Standard Big | 10–15 天 | `2 < W ≤ 30` | 三边和 `≤310`,最长边 `≤150`;计抛,体积重 `V=L×W×H÷12000`;`ceil(V) ≤31` | `26.00 × CW + 37.44` |
|
||||
| Big(大件) | 陆运经济 | Economy Big | 15–25 天 | `2 < W ≤ 30` | 同上 | `17.68 × CW + 37.44` |
|
||||
|
||||
其中 Big 的计费重 `CW = max(W, roundup(V, 3))`,即体积重先向上取到 3 位小数,再与实际重量取大;有效性判断使用 `ceil(V) ≤31`。注意此处最大限制是实际重量 30 kg、体积重向上取整后 31 kg,不是笼统的“计费重 ≤30 kg”。
|
||||
|
||||
### 2.3 高货值:635 < 货值 ≤ 22,525 CNY
|
||||
|
||||
| 产品类型 | 运输方式 | 源表渠道名 | 时效 | 实际重量 | 尺寸/计抛 | 运费公式(CNY) |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Premium Small(高客单小件) | 陆空特快 | Express Premium Small | 5–10 天 | `0.001 ≤ W ≤ 5`;最小计费重 `0.001` | 三边和 `≤250`,最长边 `≤150`,不计抛 | `46.80 × W + 22.88` |
|
||||
| Premium Small(高客单小件) | 陆空标准 | Standard Premium Small | 10–15 天 | `0.001 ≤ W ≤ 5`;最小计费重 `0.001` | 同上 | `36.40 × W + 22.88` |
|
||||
| Premium Small(高客单小件) | 陆运经济 | Economy Premium Small | 15–25 天 | `0.001 ≤ W ≤ 5`;最小计费重 `0.001` | 同上 | `26.00 × W + 22.88` |
|
||||
| Premium Big(高客单大件) | 陆空标准 | Standard Premium Big | 10–15 天 | `5 < W ≤30` | 三边和 `≤310`,最长边 `≤150`,次长边 `≤80`;计抛,`V=L×W×H÷12000`;`ceil(V) ≤80` | `29.12 × CW + 64.48` |
|
||||
| Premium Big(高客单大件) | 陆运经济 | Economy Premium Big | 15–25 天 | `5 < W ≤30` | 同上 | `23.92 × CW + 64.48` |
|
||||
|
||||
Premium Big 的计费重同样为 `CW = max(W, roundup(V, 3))`。源表允许计费重因体积重高于实际重量,但体积重向上取整后不得超过 80 kg。
|
||||
|
||||
### 2.4 香港空运:不纳入一期
|
||||
|
||||
源表 `OZON-rFBS` Tab 包含 `CEL Express HK`(香港空运)渠道,但已确认**不纳入一期,也不在首期定价工具中展示或参与报价**。此规则不录入首期 CEL 规则集;如未来启用,需重新审核其货值、体积重除数和 0.1 kg 进位方式。
|
||||
|
||||
### 2.5 源表默认样例复核
|
||||
|
||||
工作表默认输入为:货值 `100 CNY`、实际重量 `0.99 kg`、尺寸 `30×31×11 cm`。它符合 Budget 的货值、重量和尺寸限制,源表缓存结果为:
|
||||
|
||||
| 渠道 | 源表结果 | 复算 |
|
||||
|---|---:|---:|
|
||||
| Express Budget | `57.8968 CNY` | `0.99 × 34.32 + 23.92 = 57.8968` |
|
||||
| Standard Budget | `49.66 CNY` | `0.99 × 26 + 23.92 = 49.66` |
|
||||
| Economy Budget | `41.4232 CNY` | `0.99 × 17.68 + 23.92 = 41.4232` |
|
||||
|
||||
上述三项与单元格公式、缓存值一致。其余首期常规产品类型因货值或重量范围不符而为空;HK 虽有 `115 CNY` 的源表结果,但因不纳入一期而不进入新系统报价。
|
||||
|
||||
## 3. 返回服务与服务方式
|
||||
|
||||
所有源表渠道都标注支持“PUDO 到取货点 / Courier 到门”。工作表附注建议优先使用到取货点。
|
||||
|
||||
| 产品类型 | 源表退货服务 |
|
||||
|---|---|
|
||||
| Extra Small、Budget | 免费销毁;不支持改派;不支持退回。 |
|
||||
| Small、Big、Premium Small、Premium Big | 免费销毁;支持改派;支持退回,退回收费为正向运费 × 1.5。 |
|
||||
|
||||
上述退货信息暂作为物流服务元数据展示,不进入首期单件售价公式;若日后将预期退货成本计入“其他费”,必须建立单独、可配置的预期损失规则。
|
||||
|
||||
## 4. 系统报价时的计算顺序
|
||||
|
||||
1. 从全局当前平台/店铺读取 `Ozon-rFBS`、CEL 和默认定价方案;读取 SKU 的采购成本、有效包装重量及长宽高。
|
||||
2. 根据商品类目映射获取佣金类目,逐佣金档取候选佣金率。
|
||||
3. 对每个 CEL 产品类型/运输方式,按货值、重量、尺寸和计抛规则验证可用性,并以其运费公式计算跨境物流费。
|
||||
4. 因为销售价 CNY 等值同时决定**佣金档位**和**CEL 产品类型**,引擎必须枚举“佣金档 × CEL 渠道”的候选组合,依据完整定价公式求售价,再回验:
|
||||
- 销售价命中该佣金档;
|
||||
- 销售价折算的 CNY 货值命中该 CEL 产品类型;
|
||||
- 重量、尺寸、体积重与货值均合规。
|
||||
5. 只有全部回验通过的候选结果才展示。结果卡显示 CEL 产品类型、运输方式、计费重、是否计抛、物流费、佣金档位、各规则版本与完整成本拆分。
|
||||
6. 在多个有效候选中,按用户选定的默认运输方式优先;即时试算同时横向展示所有有效方式。可额外标记“物流费最低”,但不得将其默认等同于最推荐方式或自动替代用户方案。
|
||||
|
||||
## 5. 与旧项目 web 试算逻辑的关系
|
||||
|
||||
旧项目 `web/js/app.js` 的 `low/high/high2` 运费常量只覆盖了部分 CEL 数字:例如 Extra Small 的 `46.80/36.40/26.00 +3.12`、Budget 的 `34.32/26.00/17.68 +23.92`、Small 的 `46.80/36.40/26.00 +16.64`。但旧逻辑:
|
||||
|
||||
- 不区分 CEL 的货值产品类型;
|
||||
- 未实现 Big/Premium Big 的体积重除数和计费重;
|
||||
- 采用固定 12% / 18% 佣金及固定总抽成,不能用于新项目的类目阶梯佣金;
|
||||
- 将“贴单费”拼入物流费,新项目应按需求将“跨境物流费”与“国内运费 + 代贴单”分别显示和保存。
|
||||
|
||||
因此旧项目仅用来辅助理解源表单位和部分历史费率,不能直接复用为 Atlas 的 CEL 报价实现。
|
||||
|
||||
## 6. 需要你 Review 的源表疑点
|
||||
|
||||
以下均为源表“展示文字”和“单元格公式”不完全一致之处。本文保留来源差异,并在需要形成可读规则时采用了较保守的暂定表达;正式启用前必须由你确认:
|
||||
|
||||
1. **Premium Small 陆空特快单价**:已确认首期资费为 `0.0468 CNY/g + 22.88 CNY/票`,规范化记录为 `46.80 CNY/kg + 22.88 CNY/票`。源表资费文字为 `0.046.88 元/克 + 22.88 元/票`,其单元格公式则写作 `46.88 × W + 22.88`;两者均与已确认规则不一致,作为来源差异保留,导入时不得使用源表的 `46.88`。
|
||||
2. **Small / Premium Small 的最小重量**:已确认最小实际重量和最小计费重均严格为 `0.001 kg`。系统以 kg 存储并支持 3 位小数输入;不计抛渠道的计费重直接使用有效实际重量,不能低于 `0.001 kg`。HK 不在一期范围。
|
||||
3. **Big 和 Premium Big 的计费重精度**:已确认暂按源表规则执行:体积重按 `roundup(V, 3)` 向上取 3 位小数后,与实际重量取大;资格上限仍用 `ceil(V)` 判断。
|
||||
4. **香港空运**:已确认不纳入一期,不建立首期规则、不展示也不参与报价。
|
||||
|
||||
## 7. 启用前检查清单
|
||||
|
||||
- [x] 完成上述四个源表疑点的首轮业务确认。
|
||||
- [x] 已确认“商品货值”等于 Ozon 最终销售价按当次汇率折算后的人民币(CNY)金额,并用于匹配 CEL 产品类型。
|
||||
- [ ] 确认各产品类型的“商品货值”是否等于 Ozon 最终销售价的 CNY 折算值。
|
||||
- [ ] 为每条 CEL 规则补充生效日期、版本号和录入/审核人。
|
||||
- [ ] 与 CEL 用一组真实包裹数据(至少各覆盖 Extra Small、Budget、Small、Big、Premium Small、Premium Big)复算并对比报价。
|
||||
- [ ] 确认佣金档位与 CEL 货值类型同时跨档时的最终报价和边界行为。
|
||||
@@ -0,0 +1,192 @@
|
||||
# 定价工具需求
|
||||
|
||||
> 状态:讨论中。本文件定义产品交互、输入输出和规则边界;不在本阶段确定数据库、接口或具体费用数值。
|
||||
|
||||
## 1. 定位
|
||||
|
||||
“定价工具”是同一个定价引擎的两个入口,不应建设两套公式:
|
||||
|
||||
1. **即时试算**:不依赖已有商品,用户输入类目、成本和包裹数据,比较同一跨境物流商下不同运输方式的报价、成本与利润。
|
||||
2. **定价方案**:面向门店保存可复用的扣费与物流选择。商品编辑页的 SKU 引用方案后,只需补充采购成本、包裹重量和尺寸,即可计算销售价和划线价。
|
||||
|
||||
两种入口均调用同一版本的费用规则和计算引擎;每一次确认用于 SKU 的结果都必须保存完整输入、规则版本、汇率和费用拆分,不能只保存一个最终价格。
|
||||
|
||||
## 2. Ozon 类目佣金结论
|
||||
|
||||
现有项目中的 Ozon Seller API 文档包含类目树、类目属性、商品导入、商品查询和仓库接口;未包含“按类目获取佣金”的接口。商品导入也不返回可用于报价的类目佣金。
|
||||
|
||||
因此第一期在**当前平台内维护独立的佣金类目树与平台佣金规则表**:用户选择平台商品类目后,系统通过同平台映射找到对应的平台佣金类目,再按已维护且有生效日期的阶梯佣金规则取值。每条结果必须显示佣金来源和版本:
|
||||
|
||||
- `manual_rule`:运营维护的类目佣金规则,首期唯一可靠来源;
|
||||
- `competitor_capture`:从友商页面抓取的待审核规则来源;审核通过并发布版本后,才可作为正式报价规则;
|
||||
- `platform_sync`:未来若 Ozon 提供稳定接口后同步;
|
||||
- `product_observed`:未来从已上架商品的实际费用回填,仅作参考,不能覆盖正式规则。
|
||||
|
||||
没有覆盖该类目的规则时,系统不得自动套用相邻类目或旧比例:显示“缺少佣金规则”,允许在即时试算中临时填写佣金率并清楚标记为临时值;SKU 定价确认则需要人工补齐规则或明确使用一次性覆盖值。
|
||||
|
||||
### 2.1 已获得的佣金数据
|
||||
|
||||
已获得一份从友商页面抓取的 Ozon 佣金数据。其结构是“佣金一级类目 → 佣金二级类目 → 销售价区间/佣金比例”,例如:
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"label": "服装",
|
||||
"cate_id": 15621031,
|
||||
"children": [{
|
||||
"label": "配饰",
|
||||
"cate_id": 41777465,
|
||||
"children": [
|
||||
{ "label": "售价 ≤ 1500₽ (12.00%)", "value": "1,12.00" },
|
||||
{ "label": "1500₽ < 售价 ≤ 5000₽ (14.00%)", "value": "2,14.00" },
|
||||
{ "label": "售价 > 5000₽ (20.50%)", "value": "3,20.50" }
|
||||
]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
约定如下:
|
||||
|
||||
- `label` 是展示名称;`cate_id`、层级 `id` 和叶子 `value` 是抓取来源字段,保留为来源标识,不能假设它们等同于 Ozon 商品类目 API 的 ID。
|
||||
- 叶子 `value` 的格式目前为 `档位序号,佣金百分比`;实际价格下界/上界以 `label` 解析或人工录入为准,导入时要转换为结构化的最小值、最大值、边界包含方式和佣金率,不能长期依赖字符串解析计算。
|
||||
- 该数据源标记为 `competitor_capture`,不是 Ozon 官方实时接口。导入时必须记录抓取日期、适用市场/履约模式、审核状态和生效版本;未经业务确认的版本只能用于参考试算,不能默认为正式发布报价依据。
|
||||
|
||||
### 2.2 平台商品类目与平台佣金类目的映射
|
||||
|
||||
平台商品类目与平台佣金类目是同一平台内的两套独立体系;它们都必须归属一个平台,禁止以相同名称或 ID 自动等同,也不能跨平台复用。一个平台佣金类目可对应多个平台商品类目;一个平台商品类目也可能因履约模式、市场或规则变更而在不同时期映射到不同的平台佣金类目。
|
||||
|
||||
维护“商品类目 → 佣金类目”的显式映射,并为映射保存平台、履约模式、适用市场、生效区间、优先级、来源和审核状态。报价时只取当前平台、市场、履约模式和日期下唯一有效的映射;没有唯一映射就要求人工选择,不作猜测。
|
||||
|
||||
### 2.3 阶梯佣金与反算售价
|
||||
|
||||
佣金率会随最终销售价变化,而销售价又受佣金影响。因此不能先随意选一档佣金后只算一次。报价引擎必须逐档计算候选销售价,并验证候选价是否落入该档价格区间;满足区间的候选即为有效结果。例如先按“≤1500₽、12%”求价,若结果超过 1500₽,则该档无效,继续按下一档重算。
|
||||
|
||||
结果卡必须展示命中的佣金类目、价格档位、佣金率、规则版本和边界条件。若某一档的计算结果恰好在边界,按规则中保存的包含/排除定义处理,而不是使用前端浮点数比较。
|
||||
|
||||
## 3. 页面信息架构
|
||||
|
||||
点击左侧“定价工具”进入一个页面,顶部使用三个页签:
|
||||
|
||||
| 页签 | 用途 | 首期 |
|
||||
|---|---|---|
|
||||
| 即时试算 | 临时输入并横向比较运输方式 | 是 |
|
||||
| 定价方案 | 管理门店可复用的默认扣费和物流偏好 | 是 |
|
||||
| 试算记录 | 查看、复制和复算已保存的结果 | 后续,可先只保留 SKU 的计算快照 |
|
||||
|
||||
“物流服务商的价格表”和“类目佣金规则”属于后台可配置资料,不应让普通卖家在每次试算中编辑。第一期仅内置 `CEL`,但所有选择器、规则和结果都以“服务商 + 运输方式 + 规则版本”表达,后续可增加其他服务商而不用改商品或 SKU 结构。
|
||||
|
||||
## 4. 即时试算
|
||||
|
||||
### 4.1 输入区
|
||||
|
||||
页面采用左侧输入、右侧结果的布局。目标平台与当前店铺不在此重复选择:它们来自页头全局工作上下文。平台是必选上下文;不同平台拥有独立的类目、佣金规则、跨境物流商和运输方式。输入分为以下四组:
|
||||
|
||||
| 分组 | 字段 | 规则 |
|
||||
|---|---|---|
|
||||
| 目标市场 | 履约模式、当前平台商品类目 | 当前平台和当前店铺从页头读取;店铺自动带入币种和默认定价方案。平台商品类目和平台佣金类目均强绑定当前平台;履约模式首期预留 FBS/FBO,实际可用项由该平台的佣金规则决定。 |
|
||||
| 商品与包裹 | 采购成本、包裹实重、长/宽/高 | 采购成本首期以 CNY 输入;重量以 g、尺寸以 cm 或 mm 输入。体积由三边自动计算,不能只存一个孤立体积值。允许显示并在必要时人工确认体积重。 |
|
||||
| 定价目标 | 期望加价率、划线折扣率、广告费占比、其他占比 | 所有比例必须明确单位为 `%`。期望加价率与划线折扣率的计算口径见第 7 节。 |
|
||||
| 费用与物流 | 跨境物流商、运输方式、国内运费+代贴单、尾程(Ozon 代理费)、提现费、汇率 | 默认选择 CEL 并同时勾选其可用运输方式;用户可比较全部方式。国内运费+代贴单为固定金额;尾程、提现费为比例;汇率必须显示来源、值和更新时间,允许本次覆盖。 |
|
||||
|
||||
“其他”可先作为单一百分比输入,展示名称为“其他(提醒、货损等)”。规则模型必须支持将来拆成多项费用,例如货损、退款准备金、保险、税费,而不改变最终报价结构。
|
||||
|
||||
### 4.2 结果区
|
||||
|
||||
每种被选择的运输方式生成一张可比较的结果卡(桌面端可横向表格、移动端可纵向卡片)。默认按建议销售价升序,并突出推荐方式;推荐只依据完整成本、目标利润和规则有效性,不代表物流时效承诺。
|
||||
|
||||
每张结果必须同时展示:
|
||||
|
||||
- 建议销售价和划线价(目标币种);
|
||||
- 毛利金额、毛利率、目标利润达成情况;
|
||||
- 采购成本;
|
||||
- 平台佣金(比例、金额、规则来源和版本);
|
||||
- 跨境物流费(实重、不计抛)以及实际计费重、抛重差额和最终跨境物流费;
|
||||
- 国内运费 + 代贴单;
|
||||
- 广告费;
|
||||
- 尾程(Ozon 代理费);
|
||||
- 提现费;
|
||||
- 其他(货损等);
|
||||
- 总成本、扣费总额、汇率与生效规则版本。
|
||||
|
||||
利润和建议价格一律按**最终跨境物流费**计算;“不计抛物流费”只是透明的对照项,不能错误地当成成本。用户点击“展开计算过程”后看到每一步公式、阈值、取整方式和输入来源;点击“保存为定价方案”可把当前可复用参数带到方案编辑器,但商品成本、尺寸和单次临时佣金覆盖不应成为默认值。
|
||||
|
||||
### 4.3 缺失与异常
|
||||
|
||||
- 缺少类目佣金、有效运价、汇率、采购成本或有效包裹数据时,不输出建议售价,指出缺失项。
|
||||
- 包裹尺寸不适用于某个运输方式、超过重量/尺寸上限或无法得到计费重时,该方式单独标为不可报价,不影响其他方式。
|
||||
- 临时覆盖的佣金、汇率或运价必须以醒目标记,并且保存结果时固化为快照。
|
||||
|
||||
## 5. 定价方案
|
||||
|
||||
### 5.1 作用与范围
|
||||
|
||||
定价方案属于全局当前店铺;一个门店可以维护多个方案,例如“CEL 常规”“CEL 大件”“测试利润率”。门店可设置一个默认方案,商品编辑页的新 SKU 自动引用它。方案修改只影响后续试算;已有 SKU 的确认价格保留原快照,不能静默重算。
|
||||
|
||||
方案的可配置字段:
|
||||
|
||||
| 字段 | 说明 |
|
||||
|---|---|
|
||||
| 方案名称、备注、启用状态 | 用于识别和管理。 |
|
||||
| 目标店铺、币种、履约模式 | 与平台规则、汇率和发布上下文绑定。 |
|
||||
| 跨境物流商 | 首期 CEL;未来可扩展。 |
|
||||
| 默认运输方式 | 空运、陆空、陆运之一;只可选择该服务商当前可用的运输方式。 |
|
||||
| 参与比较的运输方式 | 即时试算默认勾选项;不等于 SKU 自动采用的方式。 |
|
||||
| 国内运费 + 代贴单 | 固定金额。 |
|
||||
| 广告费占比 | 销售价的百分比。 |
|
||||
| 尾程(Ozon 代理费) | 销售价的百分比。 |
|
||||
| 提现费 | 销售价的百分比。 |
|
||||
| 其他(货损等) | 销售价的百分比;后续可拆项。 |
|
||||
| 期望加价率 | 见第 7 节的统一口径。 |
|
||||
| 划线折扣率 | 见第 7 节的统一口径。 |
|
||||
| 汇率策略 | 使用系统汇率、固定汇率,或允许每次报价覆盖。 |
|
||||
|
||||
类目佣金不建议固定写死在方案中:它随商品类目选择;方案只允许设“无规则时的临时覆盖是否可用”。
|
||||
|
||||
### 5.2 商品编辑页的 SKU 定价
|
||||
|
||||
SKU 的“定价”按钮打开轻量报价抽屉/弹窗,而不是跳转到完整工具页。流程:
|
||||
|
||||
1. 自动读取当前商品的 Ozon 类目、目标店铺、SKU 采购成本和**有效包装物流规格**。
|
||||
2. 自动加载店铺默认方案;用户可临时切换至该店铺其他启用方案,也可临时改变运输方式。
|
||||
3. 显示默认运输方式的结果,并可展开比较该方案中允许的其他方式。
|
||||
4. 用户确认一项运输方式和结果后,回填 SKU 的销售价、划线价、采用的运输方式及不可变更的报价快照。
|
||||
|
||||
临时切换方案或运输方式只影响本次 SKU 报价和确认后的报价快照,不会修改门店默认方案。SKU 缺少采购成本、包装重量或包装长宽高时,不能使用父商品的实物规格替代;若存在父商品的包装默认规格,则按既有继承规则先解析为有效包装规格。缺失或口径待确认时只允许修正数据,不允许确认价格。
|
||||
|
||||
## 6. 物流服务商与运价规则的预留
|
||||
|
||||
第一期 UI 仅暴露 CEL,但规则层必须支持以下信息,以适配不同服务商和运输方式:
|
||||
|
||||
| 维度 | 需要预留的信息 |
|
||||
|---|---|
|
||||
| 服务商 | 名称、代码、状态、结算币种、适用目的地/仓、备注、生效时间。 |
|
||||
| 运输方式 | 名称、代码(如 air/land_air/land)、时效说明、状态、可承运类目或限制。 |
|
||||
| 计费重量 | 实重单位、体积重公式/除数、计费规则(实重、体积重、两者取大、阶梯等)、进位粒度和最小计费重。 |
|
||||
| 运价阶梯 | 起止计费重、固定费、每 kg/每续重单价、最低收费、币种、生效区间。 |
|
||||
| 附加费 | 偏远地区、燃油、超长超重、带电/敏感货、保险、清关等;支持固定额或比例、是否纳入利润计算。 |
|
||||
| 限制 | 重量/尺寸/体积上限、禁运类目、运输方式特有的校验与错误信息。 |
|
||||
| 版本与来源 | 规则来源、文件/人工录入、创建人、审核状态、生效时间;任何报价引用准确版本。 |
|
||||
|
||||
CEL 的 Ozon-rFBS 资费表已提取为待审核规则,见 [`cel-ozon-rfbs-rates-review.md`](./cel-ozon-rfbs-rates-review.md)。在其中的源表疑点、计费重粒度和实际账单复算完成前,首期不得把这些费率作为正式生产报价启用。
|
||||
|
||||
## 7. 已确认的两个公式口径
|
||||
|
||||
旧项目试算页的“净利率”是以采购成本为基数的加价率,且以固定 15.5%/21.5% 的平台抽成估算。新工具要拆开佣金、广告、物流和其他费用,不能继续沿用该固定比例。
|
||||
|
||||
| 字段 | 建议定义 | 建议公式 |
|
||||
|---|---|---|
|
||||
| 期望加价率 | 净利润相对采购成本的比例 | `目标净利润 = 采购成本 × 期望加价率`。建议销售价由“固定成本 + 目标净利润”除以 `1 − 平台佣金率 − 广告费率 − 尾程费率 − 提现费率 − 其他费率` 得到;采购成本按汇率转换到销售币种。 |
|
||||
| 划线折扣率 | 买家相对划线价实际享受的折扣率 | `划线价 = 销售价 ÷ (1 − 划线折扣率)`;折扣必须大于等于 0 且小于 100%。 |
|
||||
|
||||
其中固定成本为:采购成本(按汇率换算)+ 最终跨境物流费 + 国内运费/代贴单 + 所有固定附加费。平台佣金、广告费、尾程、提现和其他百分比费用均以销售价为基数。
|
||||
|
||||
新项目只使用“划线折扣率”,不保留、不兼容也不迁移旧试算页的“划线价倍数/售价加价率”计算方式。所有新报价均按 `划线价 = 销售价 ÷ (1 − 划线折扣率)` 计算并保存快照。
|
||||
|
||||
## 8. 与旧试算页的继承关系
|
||||
|
||||
旧项目的计价模块可以复用其“按 SKU 用包装规格计算、保存报价快照、单个 SKU 出错不阻断其他 SKU”的经验;但不复用以下业务常量:物流等级 `low/high/high2`、固定平台佣金 12%/18%、固定“提现费及其他”约 3.5%,以及将实物尺寸当物流尺寸的旧数据。
|
||||
|
||||
Atlas 的定价工具以服务商运输方式、类目佣金、包裹物流规格和版本化费率为唯一依据。
|
||||
|
||||
## 9. 待确认事项
|
||||
|
||||
1. 请提供首批 CEL 的空运、陆空、陆运价表和计费规则(计费重、体积重除数、阶梯、附加费、限制、生效日期);拿到后再将其整理为可录入的规则模板。
|
||||
Reference in New Issue
Block a user