Policy Settings
把"商业规则"从代码里搬出来,变成运营可以修改、有版本、有审计的数据。
职责
| 负责 | 不负责 |
|---|---|
| 赔付条款与比例 | 执行赔付(escrow) |
| 单笔赔付上限 | 争议受理(fulfillment) |
| 争议 SLA 与超时动作 | 真实资金划转 |
| 平台服务费率 | 法律合规判断 |
| 担保范围 | 定义争议分类法 |
| 版本与审计 | — |
可配置项
| 配置 | 含义 | 默认 |
|---|---|---|
guarantee.scope | 担保范围:process / quality | process |
compensation.schedule | 事由 → 赔付比例 | 缺件 30% / 质量不符 50% / 逾期 10% |
compensation.capAmount | 单笔赔付上限 | null(不限) |
dispute.slaHours | 争议处理时限 | 72 |
dispute.onTimeout | 超时动作:hold / release / refund | hold |
settlement.platformFeeBps | 平台服务费率(基点) | 0 |
默认值是假设基线,不是已批准的业务规则。
数据模型
| 集合 | 作用 |
|---|---|
policy_settings | 当前版本 |
policy_settings_changes | 变更审计(仅追加) |
字段:
| 字段 | 说明 |
|---|---|
version | 每次修改 +1 |
values | 配置内容 |
updatedBy | 操作人 |
updatedAt | 时间 |
接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/sys/policy-settings | 读取当前配置 |
| PUT | /api/sys/policy-settings | 更新(乐观并发) |
前端入口:/console/policies。
并发控制
更新时携带 version:
json
{
"version": 3,
"values": { "...": "..." }
}版本不匹配返回 409,避免覆盖他人修改。
认证
继承全局 JwtAuthGuard,且不在用户导航中,仅运营可见。
生效时机
| 配置 | 生效范围 |
|---|---|
| 赔付比例 / 上限 | 下一笔结算或新争议 |
| 争议 SLA | 新建争议时写入 slaDueAt |
| 超时动作 | 下一次扫描 |
| 平台费率 | 下一笔结算 |
| 担保范围 | 新争议 |
修改不需要重启或部署。
审计
每次修改:
version+1- 追加一条
policy_settings_changes - 记录操作人与时间
历史版本可追溯,但当前只提供当前版本的读取接口。
边界与限制
| 限制 | 说明 |
|---|---|
| 默认值未获批准 | 商务/法务确认前只是基线 |
| 无回滚接口 | 需要手动改回 |
| 争议分类法固定 | grounds 枚举仍需法务输入 |
| 费率是基点 | 100 = 1% |
| 不校验业务合理性 | 例如上限小于比例金额 |
源码位置
libs/modules/src/policy-settings/
├── schemas/policy-settings.schema.ts
└── services/policy-settings.service.ts
apps/hushwork/src/policy-settings/
└── policy-settings.controller.ts
frontend/src/pages/settings/policies.tsx