# 合同管理需求卡

## 目录

- [REQ-CONTR-001 菜单入口](#req-contr-001-菜单入口)
- [REQ-CONTR-002 列表与分页](#req-contr-002-列表与分页)
- [REQ-CONTR-003 条件查询与重置](#req-contr-003-条件查询与重置)
- [REQ-CONTR-004 到期快捷筛选](#req-contr-004-到期快捷筛选)
- [REQ-CONTR-005 合同阶段与审核状态](#req-contr-005-合同阶段与审核状态)
- [REQ-CONTR-006 列表操作](#req-contr-006-列表操作)
- [REQ-CONTR-007 新增合同](#req-contr-007-新增合同)
- [REQ-CONTR-008 合同基本信息](#req-contr-008-合同基本信息)
- [REQ-CONTR-009 合同文件与附件](#req-contr-009-合同文件与附件)
- [REQ-CONTR-010 保存草稿](#req-contr-010-保存草稿)
- [REQ-CONTR-011 转临时合同](#req-contr-011-转临时合同)
- [REQ-CONTR-012 临时合同转正式合同](#req-contr-012-临时合同转正式合同)
- [REQ-CONTR-013 正式合同审批通过](#req-contr-013-正式合同审批通过)
- [REQ-CONTR-014 编辑合同](#req-contr-014-编辑合同)
- [REQ-CONTR-015 删除草稿合同](#req-contr-015-删除草稿合同)
- [REQ-CONTR-016 查看合同与流程](#req-contr-016-查看合同与流程)
- [REQ-CONTR-017 复制合同](#req-contr-017-复制合同)
- [REQ-CONTR-018 附件上传](#req-contr-018-附件上传)
- [REQ-CONTR-019 计费信息开关](#req-contr-019-计费信息开关)
- [REQ-CONTR-020 计费方案](#req-contr-020-计费方案)
- [REQ-CONTR-021 计费规则明细](#req-contr-021-计费规则明细)
- [REQ-CONTR-022 计费要素组合](#req-contr-022-计费要素组合)
- [REQ-CONTR-023 计费规则匹配条件](#req-contr-023-计费规则匹配条件)
- [REQ-CONTR-024 结算生成规则](#req-contr-024-结算生成规则)
- [REQ-CONTR-025 对账配置](#req-contr-025-对账配置)
- [REQ-CONTR-026 标准结算流程](#req-contr-026-标准结算流程)
- [REQ-CONTR-027 发起合同变更](#req-contr-027-发起合同变更)
- [REQ-CONTR-028 合同内容变更](#req-contr-028-合同内容变更)
- [REQ-CONTR-029 终止合同](#req-contr-029-终止合同)
- [REQ-CONTR-030 变更审批与生效](#req-contr-030-变更审批与生效)
- [REQ-CONTR-031 变更记录](#req-contr-031-变更记录)
- [REQ-CONTR-032 导出合同列表](#req-contr-032-导出合同列表)
- [REQ-CONTR-033 权限与审计](#req-contr-033-权限与审计)
- [通用规则](#通用规则)

---

### REQ-CONTR-001 菜单入口

- 功能点：
  - 合同管理模块归属于“合同管理”主菜单。
  - 在“合同管理”菜单下提供“合同管理”入口。
  - 用户进入合同管理页面后，可进行查询、新增合同、复制、编辑、删除、转临时合同、转正式合同、变更、终止、附件上传、流程查看、导出等操作。

- 异常与边界：
  - 无菜单权限时不展示“合同管理”入口。
  - 有菜单权限但无按钮权限时，仅展示允许访问的页面和操作。
  - 菜单或页面加载失败时提示失败原因，不影响其他模块访问。

- 反例：
  - 不允许把合同管理挂到非合同管理主菜单下。
  - 不允许无权限用户通过 URL 直接进入合同管理页面。
  - 不允许菜单入口存在但页面无法访问。

---

### REQ-CONTR-002 列表与分页

- 功能点：
  - 默认展示当前用户权限范围内的合同数据。
  - 列表展示序号、合同编号、合同名称、所属项目、所属组织、合同类别、签约类型、甲方、乙方、开始日期、结束日期、临时效力起、临时效力止、经办人、创建时间、合同阶段、审核状态、当前节点、当前处理人、操作等字段。
  - 合同名称支持点击查看合同详情。
  - 合同阶段、审核状态和操作列固定在右侧，不随横向滚动条滑动。
  - 默认按创建时间降序展示。
  - 支持分页展示，默认10条/页，支持20/50/100条/页。

- 异常与边界：
  - 查询无数据时展示空状态。
  - 当前页数据因新增、编辑、提交、撤回、审批、变更、删除等操作变化后，应刷新列表并保持分页逻辑正确。
  - 列表加载失败时保留当前查询条件和分页条件，提示用户重新查询。

- 反例：
  - 不允许合同阶段、审核状态或操作列被横向滚动隐藏。
  - 不允许列表展示经办人、当前处理人的用户 ID。
  - 不允许分页后丢失当前查询条件。

---

### REQ-CONTR-003 条件查询与重置

- 功能点：
  - 支持按合同类别、所属项目、合同名称、合同编号、生效类型、审核状态、所属组织、合同阶段、签约类型等条件组合查询。
  - 合同类别、生效类型、审核状态、合同阶段、签约类型使用下拉单选或多选控件。
  - 所属项目使用搜索选择控件。
  - 合同名称、合同编号、所属组织使用输入框，支持模糊查询。
  - 点击查询后按当前条件刷新列表。
  - 点击重置后清空所有查询条件，恢复默认列表。

- 异常与边界：
  - 查询条件为空时点击查询，按默认规则展示全部权限范围内数据。
  - 查询结果为空时展示空状态，不清空用户已输入条件。
  - 重置后页码恢复第一页，并重新加载列表。

- 反例：
  - 不允许重置后仍保留隐藏查询条件。
  - 不允许只按单个条件查询而忽略其他已选择条件。
  - 不允许查询后改变列表字段或操作范围。

---

### REQ-CONTR-004 到期快捷筛选

- 功能点：
  - 列表支持按合同到期时间快捷筛选。
  - 快捷筛选项包含全部、30天内到期、90天内到期、90天以上、已到期。
  - 每个筛选项展示当前条件下的数量。
  - 点击快捷筛选项后，列表按对应到期范围刷新。

- 异常与边界：
  - 合同结束日期为空时不计入到期筛选统计。
  - 选择快捷筛选后再点击查询，应与其他查询条件组合生效。
  - 重置查询条件后快捷筛选恢复全部。

- 反例：
  - 不允许快捷筛选忽略用户已选择的其他查询条件。
  - 不允许已到期合同仍统计到30天内到期。
  - 不允许数量统计与列表结果不一致。

---

### REQ-CONTR-005 合同阶段与审核状态

- 功能点：
  - 合同阶段包含草稿、临时合同、正式合同、已终止。
  - 审核状态包含草稿、审批中、已驳回、审批通过、变更审批中、变更驳回、变更审批通过。
  - 草稿表示新增合同草稿，尚未转临时合同，无业务生效。
  - 临时合同表示草稿转临时成功，临时有效期内可执行短期结算。
  - 正式合同表示临时合同或合同草稿经审批通过后正式生效。
  - 已终止表示正式合同经终止变更审批通过后生命周期结束。

- 异常与边界：
  - 状态为空或未知时，列表应展示兜底文案，并限制高风险操作。
  - 状态变更后需刷新列表和详情，确保合同阶段、审核状态、操作按钮一致。
  - 审核状态与合同阶段不匹配时，应提示数据异常并限制提交、变更、结算等操作。

- 反例：
  - 不允许草稿合同执行业务结算。
  - 不允许临时合同永久有效。
  - 不允许已终止合同继续新建运单或结算单。

---

### REQ-CONTR-006 列表操作

- 功能点：
  - 草稿合同支持复制、编辑、删除。
  - 临时合同草稿状态支持复制、编辑。
  - 临时合同审批中支持复制、查看流程、撤回。
  - 临时合同已驳回支持复制、编辑、重新提交转正。
  - 正式合同审批通过支持复制、发起变更、附件上传、查看流程。
  - 正式合同变更审批中支持复制、查看流程、撤回变更。
  - 正式合同变更驳回支持复制、编辑变更内容、重新提交变更。
  - 正式合同变更审批通过支持复制、再次发起变更、附件上传、查看流程。
  - 已终止合同仅支持复制和查看流程。

- 异常与边界：
  - 操作执行前需重新校验合同最新阶段和审核状态。
  - 用户无按钮权限时不展示对应操作入口。
  - 状态变更成功后刷新列表，展示最新可操作按钮。

- 反例：
  - 不允许临时合同转正审批中继续编辑合同正文。
  - 不允许正式合同直接删除。
  - 不允许已终止合同发起新变更。

---

### REQ-CONTR-007 新增合同

- 功能点：
  - 点击“新增合同”后进入新建合同页面。
  - 新建合同页面包含基本信息、计费信息、结算生成规则、对账配置、其它附件、变更记录等区域。
  - 新建合同支持保存、提交临时合同、提交正式合同、关闭。
  - 合同编号不填写时由系统自动生成，生成后只读不可编辑。
  - 草稿保存不触发审批流程。

- 异常与边界：
  - 新建页面打开失败时提示失败原因，不改变列表数据。
  - 基础信息必填项为空时不允许保存为有效草稿。
  - 提交临时合同或正式合同时需按对应规则校验必填项和附件。
  - 重复点击保存或提交时应防止重复生成合同。

- 反例：
  - 不允许用户重复提交生成多个相同合同。
  - 不允许没有合同名称和合同类型的合同草稿保存成功。
  - 不允许合同编号由用户随意修改。

---

### REQ-CONTR-008 合同基本信息

- 功能点：
  - 基本信息包含签约类型、合同编号、合同名称、合同类型、甲方、乙方、所属项目、合同期限、所属组织、经办人、签订日期、结算方式、合同格式、是否需要加盖法人章、一式份数、回款账期、备注等字段。
  - 签约类型为必填字段，使用下拉单选控件，枚举包含新签、续签。
  - 合同编号为必填字段，可不填写，由系统自动生成。
  - 合同名称为必填字段，使用输入框。
  - 合同类型为必填字段，枚举包含客户合同、承运商合同等。
  - 甲方、乙方为必填字段，从客商或组织档案选择。
  - 所属项目从项目管理中选择。
  - 合同期限为必填日期范围字段。
  - 签订日期为必填日期字段。
  - 结算方式、合同格式、是否需要加盖法人章、一式份数、回款账期、备注按合同业务要求填写。
  - 备注最多2000字。

- 异常与边界：
  - 转临时合同时，签约人、签约日期、合同期限可不填。
  - 提交正式合同时，所有必填字段必须完整，包含签约人、签约日期、合同期限。
  - 合同期限开始日期晚于结束日期时阻止提交。
  - 备注超过2000字时阻止保存或提交。

- 反例：
  - 不允许正式合同缺少签订日期或合同期限。
  - 不允许合同期限结束日期早于开始日期。
  - 不允许甲方、乙方为空后提交正式合同。

---

### REQ-CONTR-009 合同文件与附件

- 功能点：
  - 合同文件区域用于上传合同主文件。
  - 其它附件区域用于上传银行承兑汇票、补充材料等合同相关附件。
  - 附件列表展示序号、文件名、附件描述、文件大小、上传人、上传时间、操作等字段。
  - 支持批量下载附件。
  - 支持 pdf、bmp、jpeg、png、jpg、doc、docx、ppt、pptx、xlsx、xls、eml、msg、zip 等格式文件。
  - 单个文件大小限制500M。

- 异常与边界：
  - 保存草稿或转临时合同时，附件可不上传。
  - 提交正式合同时，应校验所有必须附件已上传。
  - 文件格式不支持或大小超过500M时阻止上传并提示。
  - 删除附件前需二次确认。

- 反例：
  - 不允许正式合同缺少必须合同文件仍提交审批。
  - 不允许上传超过500M的文件。
  - 不允许附件上传成功后列表不展示文件信息。

---

### REQ-CONTR-010 保存草稿

- 功能点：
  - 新建或编辑页面点击保存后，临时保存当前填写内容。
  - 保存后合同阶段为草稿，审核状态为草稿。
  - 保存草稿只要求基础信息满足最小必填校验，附件可不上传。
  - 草稿合同无业务生效，不可创建运单和结算单。

- 异常与边界：
  - 基础信息缺失导致无法识别合同主体时阻止保存并提示。
  - 保存失败时保留用户已填写内容。
  - 草稿数据已删除或状态已变化时，不允许继续保存。

- 反例：
  - 不允许保存草稿触发审批流程。
  - 不允许草稿合同执行结算过程。
  - 不允许保存失败后清空用户输入。

---

### REQ-CONTR-011 转临时合同

- 功能点：
  - 草稿合同支持提交临时合同。
  - 转临时合同时，签约人、签约日期、合同期限可不填。
  - 转临时合同只校验基础信息必填项，附件可不上传。
  - 转临时成功后合同阶段变为临时合同，审核状态保持草稿。
  - 临时合同有效期为30天。
  - 临时合同可执行结算过程。
  - 转临时合同后不可删除。

- 异常与边界：
  - 基础信息缺失时不允许转临时合同。
  - 临时有效期计算失败时不允许转临时合同。
  - 转临时合同失败时保持草稿状态，并保留用户填写内容。

- 反例：
  - 不允许草稿合同未转临时就执行结算。
  - 不允许转临时合同后继续删除。
  - 不允许临时合同有效期超过30天。

---

### REQ-CONTR-012 临时合同转正式合同

- 功能点：
  - 临时合同支持补全信息后提交正式合同审批。
  - 转正式合同前需完成所有正式合同必填内容。
  - 转正式合同前需上传所有必须附件。
  - 转正式合同需走审批流程。
  - 提交成功后合同阶段保持临时合同，审核状态更新为审批中。
  - 审批通过后合同阶段转为正式合同。

- 异常与边界：
  - 正式合同必填字段缺失时阻止提交审批并提示。
  - 必须附件缺失时阻止提交审批并提示缺失附件。
  - 临时合同已超过30天有效期时，应提示临时效力已过期，并按业务规则限制继续结算。
  - 审批流程发起失败时保持原状态，并保留用户输入内容。

- 反例：
  - 不允许资料未补齐的临时合同转正式审批。
  - 不允许转正式合同绕过审批。
  - 不允许提交失败后仍把合同阶段改为正式合同。

---

### REQ-CONTR-013 正式合同审批通过

- 功能点：
  - 当前审批节点处理人可对审批中合同执行审批通过。
  - 全部审批通过后，合同阶段更新为正式合同，审核状态更新为审批通过。
  - 正式合同永久正式生效，完整开放运单、结算、回款权限。
  - 正式合同审批通过后，临时效力不再作为业务有效期判断依据。

- 异常与边界：
  - 非当前审批节点处理人不允许审批通过。
  - 审批通过时如合同已被终止或数据不存在，应阻止审批并提示。
  - 审批状态更新失败时需保持审批前状态。

- 反例：
  - 不允许未审批通过的合同成为正式合同。
  - 不允许非审批处理人执行审批通过。
  - 不允许正式合同仍按30天临时效力限制结算。

---

### REQ-CONTR-014 编辑合同

- 功能点：
  - 草稿合同支持编辑。
  - 临时合同草稿或已驳回状态支持编辑。
  - 正式合同仅可通过变更流程修改合同内容。
  - 编辑页面回显合同完整信息，合同编号只读不可编辑。
  - 编辑保存后按当前阶段和审核状态保持或更新。

- 异常与边界：
  - 编辑前需校验当前合同状态仍允许编辑。
  - 合同已进入审批中时不允许直接编辑。
  - 修改所属项目或合同类型时，应重新校验计费、结算、对账配置适用性。
  - 编辑失败时保留用户修改内容。

- 反例：
  - 不允许审批中合同直接编辑。
  - 不允许正式合同绕过变更流程直接修改。
  - 不允许编辑时修改系统生成的合同编号。

---

### REQ-CONTR-015 删除草稿合同

- 功能点：
  - 未转临时的草稿合同支持删除。
  - 点击删除后弹出二次确认弹窗。
  - 删除前需校验合同未生效且未被业务数据引用。
  - 删除成功后刷新列表。

- 异常与边界：
  - 临时合同、正式合同、已终止合同均不允许删除。
  - 存在运单、结算、应收应付、附件审批等业务引用时不允许删除。
  - 删除时状态已变化为临时合同或审批中时，应阻止删除并刷新列表。

- 反例：
  - 不允许删除转临时后的合同。
  - 不允许删除正式合同。
  - 不允许跳过二次确认直接删除。

---

### REQ-CONTR-016 查看合同与流程

- 功能点：
  - 支持点击合同名称或行操作查看合同详情。
  - 查看详情展示基本信息、计费信息、结算生成规则、对账配置、附件、变更记录等内容。
  - 查看状态下所有字段只读。
  - 支持查看审批流程节点、处理人、处理时间和审批意见。

- 异常与边界：
  - 合同不存在或无权限查看时提示无法查看。
  - 附件加载失败时不影响基础信息展示。
  - 流程加载失败时提示失败原因，不改变合同状态。

- 反例：
  - 不允许查看状态下保存修改。
  - 不允许流程查看展示其他合同的审批记录。
  - 不允许查看时自动切换为编辑状态。

---

### REQ-CONTR-017 复制合同

- 功能点：
  - 支持通过列表行操作复制合同。
  - 复制后生成一条新合同草稿。
  - 新合同编号重新生成，合同阶段为草稿，审核状态为草稿。
  - 复制时可带出原合同基本信息、计费规则、结算规则、对账配置和附件清单。

- 异常与边界：
  - 原合同已删除或无权限查看时不允许复制。
  - 复制后的合同名称应提示用户调整，避免与原合同混淆。
  - 复制失败时不影响原合同数据。

- 反例：
  - 不允许复制后沿用原合同编号。
  - 不允许复制操作修改原合同。
  - 不允许复制后直接生成临时合同或正式合同。

---

### REQ-CONTR-018 附件上传

- 功能点：
  - 正式合同审批通过后支持附件上传。
  - 合同变更过程中支持上传变更材料。
  - 附件上传成功后自动新增附件行，展示文件名、大小、上传人、上传时间。
  - 支持批量下载附件。
  - 附件删除按合同阶段、审核状态和权限控制。

- 异常与边界：
  - 审批中合同不允许随意删除已提交审批附件。
  - 附件上传失败时保留当前附件列表并提示失败原因。
  - 变更材料与普通附件需按业务场景区分归档。

- 反例：
  - 不允许附件上传后不归属任何合同或变更记录。
  - 不允许审批材料被无权限用户删除。
  - 不允许变更材料混入普通附件后无法追溯。

---

### REQ-CONTR-019 计费信息开关

- 功能点：
  - 合同基本信息支持配置是否自动生成费用明细。
  - 开启自动生成费用明细时，系统展示计价配置页面，并按合同计费规则自动核算单票运单总费用，生成应收或应付。
  - 关闭自动生成费用明细时，不展示计价配置页面。
  - 关闭后费用入账依据导入结算账单或手动生成账单。
  - 自动生成费用明细适用于先做运单，再按合同运价自动核算的业务场景。

- 异常与边界：
  - 开启自动生成费用明细但未配置计费方案时，提交正式合同需阻止并提示。
  - 关闭自动生成费用明细后，不得继续要求填写计费方案。
  - 合同已产生自动费用明细后，关闭开关需按变更流程处理。

- 反例：
  - 不允许开关关闭时仍展示计价配置并强制填写。
  - 不允许开关开启但没有任何计费规则就提交正式合同。
  - 不允许已生效合同绕过变更直接修改费用生成方式。

---

### REQ-CONTR-020 计费方案

- 功能点：
  - 计费信息区域支持新增、编辑、删除计费方案。
  - 计费方案包含方案名称、默认方案标识、备注和计费规则明细。
  - 方案名称为必填字段。
  - 同一合同内可维护多套计费方案。
  - 同一合同内只能设置一个默认方案。

- 异常与边界：
  - 方案名称为空时阻止提交并提示。
  - 删除默认方案前需提示用户重新指定默认方案。
  - 已被费用明细引用的计费方案不允许直接删除。

- 反例：
  - 不允许一个合同存在多个默认计费方案。
  - 不允许无方案名称的计费方案保存。
  - 不允许删除已被历史运单费用引用的计费方案。

---

### REQ-CONTR-021 计费规则明细

- 功能点：
  - 计费方案内支持添加多条计费规则。
  - 计费规则字段包含费用类型、费用项、计费要素、计费类型、计费单位、单价、计费要素下限、计费要素上限、保底计费量、备注和操作。
  - 费用类型包含运输费、其它费用等。
  - 费用项包含运费、装卸车费、提货费、送货费、保险费等。
  - 计费类型包含固定单价、区间单价、阶梯单价、区间阶梯一口价、固定一口价等。
  - 同一套计费方案内，同一条计费要素可配置多行区间。
  - 同一条计费要素的区间上下限必须连续、不重叠、无间隙。
  - 前端保存时需自动校验区间冲突。

- 异常与边界：
  - 费用类型、费用项、计费要素、计费类型、计费单位、单价等核心字段为空时阻止保存。
  - 计费要素上下限不连续、重叠或存在间隙时阻止保存并提示。
  - 单价或保底计费量为负数时阻止保存。
  - 已生效计费规则被历史费用引用时，修改需走合同变更流程。

- 反例：
  - 不允许同一计费要素区间重叠。
  - 不允许单价填写负数。
  - 不允许计费规则被引用后直接删除导致历史费用无法追溯。

---

### REQ-CONTR-022 计费要素组合

- 功能点：
  - 计费要素支持按重量、按体积、按车辆、按里程、按吨公里、固定金额整单一口价、按数量等类型。
  - 按重量支持固定单价、区间单价、阶梯单价、区间阶梯一口价，适用于整车散货按吨计价、分吨位阶梯调价、吨位区间一口价。
  - 按体积支持固定单价、区间单价、阶梯单价、区间阶梯一口价，适用于轻泡货按立方计费。
  - 按车辆支持固定单价，适用于包月固定车费、单次车辆包干费。
  - 按里程支持固定单价、区间单价、阶梯单价、区间阶梯一口价，适用于长途干线按公里计价。
  - 按吨公里支持固定单价、区间单价、阶梯单价、区间阶梯一口价，适用于水陆联运复合计量计费。
  - 固定金额整单一口价支持固定一口价，适用于同城配送、短途整车包干。
  - 按数量支持固定单价、区间单价、阶梯单价、区间阶梯一口价，适用于小件零担按件计费。

- 异常与边界：
  - 计费要素与计费类型不匹配时阻止保存并提示。
  - 计费单位需与计费要素匹配，例如重量对应元/吨，里程对应元/公里。
  - 复合计量场景需明确计费要素来源，避免同一运单重复计费。

- 反例：
  - 不允许按车辆计费配置阶梯单价。
  - 不允许按里程计费用元/吨作为计费单位。
  - 不允许一个费用项重复命中多个同优先级计费规则。

---

### REQ-CONTR-023 计费规则匹配条件

- 功能点：
  - 计费规则支持设置匹配条件。
  - 匹配条件包含起运地、目的地、运输方式、货物类型等字段。
  - 起运地和目的地支持按省、市、区县配置。
  - 运输方式和货物类型使用下拉选择。
  - 保存匹配条件后，系统在执行运单计费时按条件匹配对应计费规则。
  - 支持新增多组匹配条件。

- 异常与边界：
  - 匹配条件为空时视为通用规则或按业务默认规则处理。
  - 多组匹配条件冲突时，应提示用户调整。
  - 保存失败时保留用户已填写条件。

- 反例：
  - 不允许同一费用项存在无法区分优先级的重复匹配条件。
  - 不允许保存后匹配条件与计费规则脱离。
  - 不允许匹配条件冲突时静默覆盖旧规则。

---

### REQ-CONTR-024 结算生成规则

- 功能点：
  - 合同支持配置是否自动生成预结算单。
  - 开启自动生成预结算单时，到达预设账单日，系统汇总当期所有应收或应付，生成统一内部预结算单。
  - 关闭自动生成预结算单时，不自动生成预结算单，可手动选择应收应付转预结算单。
  - 账单起始日期、结算类型、账单周期类型、账单截单日、周期天数等字段按结算规则配置。
  - 结算时以合同截止时间产生的运单为有效单据，支持超合同有效期发起结算。

- 异常与边界：
  - 开启自动生成预结算单时，账单起始日期、结算类型、账单周期类型等必填字段缺失应阻止提交。
  - 周期天数不合法时阻止保存。
  - 自动预结算任务失败时，应保留补偿处理记录。

- 反例：
  - 不允许开启自动预结算但缺少账单周期配置。
  - 不允许合同截止前产生的有效运单因合同已过期而不能结算。
  - 不允许关闭自动预结算后仍自动生成预结算单。

---

### REQ-CONTR-025 对账配置

- 功能点：
  - 合同支持配置是否跳过对账。
  - 开启跳过对账后，预结算单手动确认后直接生成正式结算单。
  - 关闭跳过对账后，预结算单需按对账模式完成对账后生成正式结算单。
  - 对账模式包含明细逐行核对和仅核对总额。
  - 明细逐行核对要求外部账单明细与内部账单明细一一匹配，所有明细匹配后才可完成对账。
  - 仅核对总额要求外部账单总条数、总金额、总货量一致后即可完成对账，不按明细逐行核对。

- 异常与边界：
  - 未选择是否跳过对账时阻止提交正式合同。
  - 不跳过对账时，对账模式必填。
  - 明细逐行核对存在不匹配明细时，不允许完成对账。
  - 仅核对总额存在总条数、总金额或总货量不一致时，不允许完成对账。

- 反例：
  - 不允许开启跳过对账后仍强制进入对账流程。
  - 不允许未选择对账模式就保存正式合同配置。
  - 不允许明细不匹配或总额不一致时完成对账。

---

### REQ-CONTR-026 标准结算流程

- 功能点：
  - 合同标准结算流程为合同配置计费规则、执行运单、生成应收应付、账期自动生成预结算、对账、正式结算。
  - 自动生成费用明细开启时，运单执行后系统按合同计费规则生成应收应付。
  - 自动生成预结算单开启时，系统按账期汇总生成预结算。
  - 对账完成或配置跳过对账后，系统生成正式结算单。

- 异常与边界：
  - 合同未生效、计费规则不完整或费用明细开关关闭时，不按合同计费规则自动生成应收应付。
  - 运单未完成或不满足结算条件时，不进入预结算。
  - 合同已终止后，不允许新建运单或新结算单，但历史单据可正常对账回款。

- 反例：
  - 不允许草稿合同进入标准结算流程。
  - 不允许已终止合同新建业务单据。
  - 不允许跳过应收应付直接生成正式结算单，除非业务配置明确支持。

---

### REQ-CONTR-027 发起合同变更

- 功能点：
  - 审批通过的正式合同支持发起变更。
  - 变更类型包含合同信息变更、终止合同。
  - 发起变更后打开变更页面，自动带入原合同完整信息。
  - 变更页面支持修改允许变更的合同字段、计费规则、附件和变更说明。
  - 变更需要走审核流程。

- 异常与边界：
  - 非审批通过正式合同不允许发起变更。
  - 存在未完成变更审批时，不允许重复发起变更。
  - 已终止合同不允许发起变更。

- 反例：
  - 不允许临时合同发起合同内容变更。
  - 不允许变更页面为空白而不带入原合同数据。
  - 不允许同一合同同时存在多个审批中的变更单。

---

### REQ-CONTR-028 合同内容变更

- 功能点：
  - 合同内容变更用于调整正式合同的基础信息、计费规则、结算规则、对账配置和附件。
  - 变更内容需填写本次修改说明。
  - 变更原因需填写本次变更原因。
  - 变更内容和变更原因最多2000字。
  - 内容变更审批通过后更新合同计费和基础信息。

- 异常与边界：
  - 变更内容或变更原因为空时阻止提交审批。
  - 文本超过2000字时阻止提交。
  - 变更审批通过前，原合同条款保持正常履约，变更内容暂不生效。

- 反例：
  - 不允许变更说明为空后发起审批。
  - 不允许审批未通过的变更内容影响正式合同。
  - 不允许超过2000字的变更原因提交。

---

### REQ-CONTR-029 终止合同

- 功能点：
  - 终止合同属于合同变更类型。
  - 终止合同需填写变更原因和上传变更材料。
  - 终止申请提交后进入变更审批中。
  - 终止审批通过后合同阶段更新为已终止。
  - 已终止合同彻底停用，禁止新建任何运单、结算单据。
  - 历史单据可正常对账回款。

- 异常与边界：
  - 终止审批未通过前，合同仍按原状态处理。
  - 存在未完成变更审批时，不允许再次发起终止。
  - 终止失败时保持原合同状态，并提示失败原因。

- 反例：
  - 不允许未审批通过就终止合同。
  - 不允许已终止合同继续新建运单或结算单。
  - 不允许终止合同影响历史应收应付对账回款。

---

### REQ-CONTR-030 变更审批与生效

- 功能点：
  - 变更提交后审核状态更新为变更审批中。
  - 变更审批通过后审核状态更新为变更审批通过。
  - 合同内容变更审批通过后，新内容正式生效。
  - 终止合同审批通过后，合同阶段更新为已终止。
  - 变更驳回后审核状态更新为变更驳回，允许编辑后重新提交。

- 异常与边界：
  - 变更审批未通过前，不得覆盖原正式合同信息。
  - 审批过程中合同已终止或数据不存在时，不允许继续审批。
  - 变更审批失败时保持原合同数据不变，并提示失败原因。

- 反例：
  - 不允许变更草稿直接影响正式合同。
  - 不允许审批未通过却生成正式变更结果。
  - 不允许变更驳回后仍按变更内容计费。

---

### REQ-CONTR-031 变更记录

- 功能点：
  - 合同详情和编辑页面展示变更记录。
  - 变更记录展示序号、变更日期、经办人、变更类型、变更原因、状态、操作等字段。
  - 支持查看变更审批流程。
  - 变更记录在变更提交后生成，并在详情页可查看。
  - 变更记录需保留变更前后关键字段。

- 异常与边界：
  - 变更记录加载失败时提示失败原因，不影响合同基础信息查看。
  - 查看历史变更记录时全字段只读。
  - 变更记录与合同不匹配时不展示，并提示数据异常。

- 反例：
  - 不允许删除已审批通过的变更记录。
  - 不允许变更记录只保存变更原因而无变更内容。
  - 不允许跨合同展示变更记录。

---

### REQ-CONTR-032 导出合同列表

- 功能点：
  - 列表顶部支持导出合同列表。
  - 点击导出后，导出当前筛选条件下的合同基础信息、阶段状态、计费方案摘要、附件清单和变更记录到 Excel 文件。
  - 导出字段与列表和详情展示字段保持一致。
  - 数据量较大时页面展示导出中提示。

- 异常与边界：
  - 当前查询条件下无数据时允许导出空文件或提示无可导出数据。
  - 导出失败时提示失败原因，不改变当前列表状态。
  - 无导出权限时不展示导出按钮。

- 反例：
  - 不允许无权限用户导出合同数据。
  - 不允许导出时忽略当前查询条件。
  - 不允许导出文件展示用户 ID 代替姓名。

---

### REQ-CONTR-033 权限与审计

- 功能点：
  - 根据用户权限控制查询、新增、复制、编辑、删除、转临时、转正式、审批、变更、终止、附件上传、流程查看、导出等操作入口。
  - 列表、详情、导出、审批流中用户可见字段优先展示姓名，不直接展示用户 ID。
  - 新增、保存、提交临时合同、提交正式合同、审批、撤回、复制、删除、变更、终止、附件上传、导出等关键操作需记录操作日志。
  - 审计信息应包含操作人、操作时间、操作类型、合同编号、合同阶段、审核状态和关键变更内容。

- 异常与边界：
  - 无按钮权限时不展示对应按钮，通过 URL 或接口绕过时也应拒绝。
  - 操作日志记录失败时不得影响用户已成功的业务操作，但需保留可排查信息。
  - 数据权限限制下，用户只能查看和操作授权范围内合同。

- 反例：
  - 不允许无权限用户审批、变更、终止或导出合同。
  - 不允许列表展示经办人、审批人等用户 ID。
  - 不允许关键状态变更没有审计记录。

---

## 通用规则

- 合同管理用于维护客户合同、承运商合同等合同全生命周期，归属于“合同管理”主菜单。
- 合同阶段包含草稿、临时合同、正式合同、已终止；审核状态包含草稿、审批中、已驳回、审批通过、变更审批中、变更驳回、变更审批通过。
- 合同编号由系统自动生成，全局唯一，只读不可编辑。
- 暂存草稿无业务生效，不可执行结算流程。
- 草稿可提交为临时合同，签约人、签约日期、合同期限可不填；临时合同有效期30天，可执行结算流程，且不可删除。
- 临时合同转正式合同需补齐所有必填信息并上传所有必须附件，审批通过后转为正式合同。
- 正式合同可执行完整结算流程，并支持发起合同信息变更或终止合同变更。
- 标准结算流程为合同配置计费规则、执行运单、生成应收应付、账期自动生成预结算、对账、正式结算。
- 自动生成费用明细开启时，需维护计价配置；关闭时不展示计价配置，费用依据导入结算账单或手工生成账单入账。
- 自动生成预结算单开启时，系统按账期生成预结算；关闭时可手动选择应收应付转预结算。
- 是否跳过对账开启时，预结算单手动确认后直接生成正式结算单；关闭时需按明细逐行核对或仅核对总额完成对账。
- 同一套计费方案内，同一计费要素的多行区间必须连续、不重叠、无间隙。
- 变更审批通过前，原正式合同内容继续生效；变更审批通过后新内容生效或合同终止。
- 已终止合同禁止新建运单、结算单据，历史单据可正常对账回款。
- 列表、详情、导出、审批等用户可见场景优先展示姓名字段，不直接展示用户 ID。
- 新增、保存、提交、审批、撤回、复制、删除、变更、终止、附件上传、导出后均需刷新相关列表或详情状态。
