Files
2026-03-18 11:34:02 +08:00

4.3 KiB

Contract Settlement 领域重构指南

1. 范围

本文档对应 backend 的 contract_settlement 主表。

当前优先关注:

  • contract_settlement.contract_type
  • contract_settlement.status
  • contract_settlement.payment_method

2. 字段盘点

2.1 contract_type

当前实现:

  • 模型里是 String
  • 没有单独 enum 类型绑定到模型

项目侧取值范围:

  • 当前主要跟随关联合同的 contract_type
  • 代码现状至少包含:productserviceproject

集团侧差异:

  • 集团侧 enum_config.ContractSettlement.contract_type 当前只有 productservice
  • 项目侧如果继续沿用 project,会比集团侧多一个值
  • 当前仓库里没有 standalone 的同步 schema 来收紧这个字段

结论:

  • 先与合同主表 contract_type 保持一致
  • 再确认结算领域是否允许 project

2.2 status

当前实现:

  • 模型里是 SmallInteger
  • 默认值 0

项目侧取值范围:

  • 当前没有独立 enum 类
  • 从集团侧和现有语义看,应至少覆盖 -101

集团侧差异:

  • 集团侧 enum_config.ContractSettlement.status 明确给出 -101
  • 项目侧模型没有沉成统一常量或 enum

结论:

  • 应补统一状态定义源

2.3 payment_method

当前实现:

  • 本地 PaymentMethod enum 有两个值:node_paymentprogress_payment
  • 模型里仍是 String
  • SettlePaymentMethodsSelect 手动校验合法值

当前使用:

  • 合同结算服务会按 payment_method 分支校验和处理

项目侧取值范围:

  • node_payment
  • progress_payment

集团侧差异:

  • 当前没看到集团侧 enum_config 为该字段给出正式候选项
  • 当前仓库里也没有 standalone 的同步 schema 覆盖该字段

结论:

  • 保留为本地代码 enum
  • 需要把“手动 validator”提升为统一 schema / service 约束

3. 重点结论

  • contract_settlement 里最稳定的枚举字段是 payment_method,应继续保留为代码 enum。
  • contract_type 不能单独拍板,必须跟合同主表一起决定是否保留 project
  • status 当前只是模型整数,没有正式定义源,需要补齐。

4. 待修改项清单

  1. 明确 contract_settlement.contract_type 是否允许 project
  2. status 补正式常量或 enum 定义。
  3. payment_method 的合法值校验统一沉到正式 schema/enum,而不是只在个别 schema 手动校验。
  4. 明确结算主表与合同主表在 contract_type 上是否必须同源。

5. 按本轮要求的改造落点

contract_settlement 领域不属于项目初始化第一批重点,但它直接涉及“写死下拉改动态”这件事。

5.1 初始化

本领域当前没有独立的项目初始化候选项链路。

contract_type 主要跟随合同主表,payment_method 主要出现在结算业务选择和后续分支处理中。

5.2 Create / 业务校验

当前 payment_method 的合法值主要靠:

  • PaymentMethod enum
  • SettlePaymentMethodsSelect schema 里的手动 validator

而 service payment_methods_select() 本身没有再做额外校验。

本轮目标是:

  • 保留 payment_method 的固定语义 enum 属性
  • 但在业务层入口也要能通过统一 config 工具或统一 enum 工具做显式校验
  • 不把校验只留在 schema 里

5.3 下拉列表

当前支付方式只有选择接口,没有正式的动态下拉接口。

因此这轮要补的不是“替换已有动态接口”,而是:

  • 把现有写死支付方式候选项明确收口
  • 如果前端需要单独下拉接口,应改成动态返回,而不是继续依赖前端或 schema 写死

同理,payment_typeadvance_type 这类当前靠本地 enum 固定的候选项,也应按同样思路处理。

5.4 清理项

本轮 contract_settlement 领域完成后,应避免继续保留:

  • 只存在于 schema validator、但没有统一出口的支付方式候选项定义
  • 前端和后端各自写死一份支付方式列表

6. 测试关注点

contract_settlement 领域 service 层集成测试至少覆盖:

  1. payment_method 合法值更新成功,非法值明确报错。
  2. 如果补了下拉接口,下拉返回是否与 service 校验同源。
  3. contract_type 跟随合同主表时,不出现与合同主表不一致的脏数据。