4.3 KiB
4.3 KiB
Contract Settlement 领域重构指南
1. 范围
本文档对应 backend 的 contract_settlement 主表。
当前优先关注:
contract_settlement.contract_typecontract_settlement.statuscontract_settlement.payment_method
2. 字段盘点
2.1 contract_type
当前实现:
- 模型里是
String - 没有单独 enum 类型绑定到模型
项目侧取值范围:
- 当前主要跟随关联合同的
contract_type - 代码现状至少包含:
product、service、project
集团侧差异:
- 集团侧
enum_config.ContractSettlement.contract_type当前只有product、service - 项目侧如果继续沿用
project,会比集团侧多一个值 - 当前仓库里没有 standalone 的同步 schema 来收紧这个字段
结论:
- 先与合同主表
contract_type保持一致 - 再确认结算领域是否允许
project
2.2 status
当前实现:
- 模型里是
SmallInteger - 默认值
0
项目侧取值范围:
- 当前没有独立 enum 类
- 从集团侧和现有语义看,应至少覆盖
-1、0、1
集团侧差异:
- 集团侧
enum_config.ContractSettlement.status明确给出-1、0、1 - 项目侧模型没有沉成统一常量或 enum
结论:
- 应补统一状态定义源
2.3 payment_method
当前实现:
- 本地
PaymentMethodenum 有两个值:node_payment、progress_payment - 模型里仍是
String SettlePaymentMethodsSelect手动校验合法值
当前使用:
- 合同结算服务会按
payment_method分支校验和处理
项目侧取值范围:
node_paymentprogress_payment
集团侧差异:
- 当前没看到集团侧
enum_config为该字段给出正式候选项 - 当前仓库里也没有 standalone 的同步 schema 覆盖该字段
结论:
- 保留为本地代码 enum
- 需要把“手动 validator”提升为统一 schema / service 约束
3. 重点结论
contract_settlement里最稳定的枚举字段是payment_method,应继续保留为代码 enum。contract_type不能单独拍板,必须跟合同主表一起决定是否保留project。status当前只是模型整数,没有正式定义源,需要补齐。
4. 待修改项清单
- 明确
contract_settlement.contract_type是否允许project。 - 为
status补正式常量或 enum 定义。 - 将
payment_method的合法值校验统一沉到正式 schema/enum,而不是只在个别 schema 手动校验。 - 明确结算主表与合同主表在
contract_type上是否必须同源。
5. 按本轮要求的改造落点
contract_settlement 领域不属于项目初始化第一批重点,但它直接涉及“写死下拉改动态”这件事。
5.1 初始化
本领域当前没有独立的项目初始化候选项链路。
contract_type 主要跟随合同主表,payment_method 主要出现在结算业务选择和后续分支处理中。
5.2 Create / 业务校验
当前 payment_method 的合法值主要靠:
PaymentMethodenumSettlePaymentMethodsSelectschema 里的手动 validator
而 service payment_methods_select() 本身没有再做额外校验。
本轮目标是:
- 保留
payment_method的固定语义 enum 属性 - 但在业务层入口也要能通过统一 config 工具或统一 enum 工具做显式校验
- 不把校验只留在 schema 里
5.3 下拉列表
当前支付方式只有选择接口,没有正式的动态下拉接口。
因此这轮要补的不是“替换已有动态接口”,而是:
- 把现有写死支付方式候选项明确收口
- 如果前端需要单独下拉接口,应改成动态返回,而不是继续依赖前端或 schema 写死
同理,payment_type、advance_type 这类当前靠本地 enum 固定的候选项,也应按同样思路处理。
5.4 清理项
本轮 contract_settlement 领域完成后,应避免继续保留:
- 只存在于 schema validator、但没有统一出口的支付方式候选项定义
- 前端和后端各自写死一份支付方式列表
6. 测试关注点
contract_settlement 领域 service 层集成测试至少覆盖:
payment_method合法值更新成功,非法值明确报错。- 如果补了下拉接口,下拉返回是否与 service 校验同源。
contract_type跟随合同主表时,不出现与合同主表不一致的脏数据。