Files
shanxia2.0/docs/superpowers/specs/2026-08-16-contract-settlement-method-options-design.md
T
2026-08-16 14:58:19 +08:00

5.1 KiB
Raw Blame History

合同结算方式:新增选项与第五条条款规则

目标

合同管理「结算方式」下拉增加 按量结算 / 月结 / 季结 / 其他 四个选项,供业务录入与列表/详情展示。

  • 货到付款 / 款到发货:继续按现状驱动合同打印富文本「第五条、结算方式及期限」及 PDF 同源内容。
  • 新四项:不走货到/款到那套自动条款;首次需填第五条时使用带当前选项 label 的约定句式;用户改过并保存后按结算方式分 key 保留草稿,不再被自动覆盖。

采用方案:按结算方式分默认文案 + 现有占位符/草稿机制(不拆第二字段、不真留空占位符)。

字典

字典类型:crm_settlement_method(已有)。

dict_label dict_value order_num 说明
货到付款 arrive_payment 0 已有;条款驱动
款到发货 advance_payment 1 已有;条款驱动
按量结算 volume_settlement 2 新增
月结 monthly_settlement 3 新增
季结 quarterly_settlement 4 新增
其他 other_settlement 5 新增
  • 表单、列表 DictTag、详情展示继续读字典,无需改下拉组件结构。
  • 需提供可重复执行的 SQL 迁移(backend/scripts/),并同步基线快照约定(docs/sql/ 如有惯例则跟)。

第五条内容解析规则

仍使用:

  • 模板正文第五条位置:{{SETTLEMENT_METHOD_CONTENT}}
  • 分方式草稿字段:settlement_clause_drafts(JSON:{ [settlementMethod]: string })

解析:

content = drafts[settlementMethod]
       || defaultClause(settlementMethod)

defaultClause

settlementMethod 默认正文
advance_payment 款到发货。需方付款后安排发货,需方收到货物后,供方开具13%增值税专用发票。
arrive_payment 货到付款,需方收到供方货物后,供方开具13%增值税专用发票,无异议后,以现汇方式月结。
volume_settlement / monthly_settlement / quarterly_settlement / other_settlement 请根据双方约定填写结算方式:{label}。供方开具13%增值税专用发票,无异议后,以现汇方式月结。
其它未知值 回退 arrive_payment 默认文案(兼容脏数据)

其中 {label} 为字典 label(按量结算 / 月结 / 季结 / 其他)。示例:

  • 月结 → 请根据双方约定填写结算方式:月结。供方开具13%增值税专用发票,无异议后,以现汇方式月结。
  • 按量结算 → 请根据双方约定填写结算方式:按量结算。供方开具13%增值税专用发票,无异议后,以现汇方式月结。

「占位不变」在本方案中的含义

  1. 存库模板第五条仍保存为占位符(与现网一致),打开打印/生成 PDF 时再解析。
  2. 新四项不得误用货到付款/款到发货整段默认句(这是相对现状的关键修复点)。
  3. 用户在打印弹窗编辑第五条并保存后,写入 settlement_clause_drafts[当前 settlementMethod];再次打开同方式优先用草稿,不自动覆盖。
  4. 在货到/款到与新四项之间切换时,各用各的草稿或默认,互不踩踏。

前后端一致性

前端(打印弹窗打开、replacePlaceholders、PDF 再替换)与后端 save_template 在空草稿兜底时,必须使用同一套 defaultClause 规则。

建议:

  • 前端抽出共享函数(如 settlementClause.ts),ContractDetailDialog.vue 与仍在用的 detail.vue 共用。
  • 后端抽出纯函数(如 CRUD 旁或 services 小模块),save_template 调用;并补单测覆盖六种方式 + 未知值。

前端取 label:字典 crm_settlement_method;后端兜底可用固定 value→label 映射(与上表一致),避免依赖运行时字典表。

不变范围

  • 不改合同其它条款(如第三条送货方式)的生成逻辑。
  • 不新增独立「条款结算方式」字段。
  • 不改变审批/执行等状态机。
  • 不要求历史合同批量回填 settlement_clause_drafts(打开时按新规则即时解析即可)。

改动落点(实现时)

区域 内容
SQL 向 sys_dict_data 插入四条(幂等)
前端 第五条 default / 解析逻辑;打印与 PDF 路径
后端 save_template 空草稿默认文案与前端对齐
测试 后端 defaultClause / save 兜底单测

验收要点

  1. 新增/编辑结算方式下拉可见 6 项;新四项可保存,列表/详情 Tag 显示正确。
  2. 选「款到发货 / 货到付款」→ 第五条仍为原默认(或各自已有草稿)。
  3. 选「月结」且无草稿、首次打开打印 → 第五条为带「月结」的约定句;手改保存后再打开仍为改后内容。
  4. 「按量结算 / 季结 / 其他」同理,label 随选项变化。
  5. PDF 与打印弹窗第五条一致。
  6. 从「货到付款」改为「月结」再打开打印 → 显示月结约定句(或月结草稿),不再误显示货到付款默认句(除非用户曾把相同文案存进月结草稿)。