# 供应商结算管理 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 供应商结算管理（交易市场平台） |
| 目标 | 对**交易订单完成支付后自动生成的结算单**进行查询、**完成结算付款**（上传结算凭证）及凭证打印；**完成结算**为本模块及平台业务链的**终点**，与 **交易订单管理** 共同形成「交易 → 订单支付 → 结算付款」闭环 |
| 当前版本 | **1.1** |
| 依据 | 同目录 `供应商结算管理-草稿.md`、原型 `Snipaste_2026-05-22_13-55-35.jpg` |
| 关联 | `../交易订单管理/交易订单管理功能需求.md`（订单支付触发本模块数据；费用快照在订单侧生成） |
| 范围 | **仅功能与业务规则**；不含库表、接口、报文、技术栈 |

### 1.1 使用角色与入口

| 角色 | 场景 |
| --- | --- |
| 财务/结算人员 | 查询待结算单、完成结算、打印结算凭证 |
| 交易市场运营人员 | 查询结算进度、查看与订单的对照（**不在本模块创建结算单**） |
| 系统管理员 | 菜单与权限配置 |

默认进入 **供应商结算单列表**。

### 1.2 模块关系（业务视角）

```text
供应商管理 ──────► 收费方式/费率（订单完成支付时快照至结算单）
交易订单管理 ────► 完成支付 → 自动生成一条结算单（待结算）
       │
       ▼
供应商结算管理 ────► 待结算 → 完成结算（结算凭证）→ 已完成（**流程终点**，无后续必办）
```

| 关联模块 | 关系 | 约束 |
| --- | --- | --- |
| **交易订单管理** | **唯一数据来源** | 结算单仅由订单「完成支付」成功时自动产生；一对一 |
| **供应商管理** | 展示供应商名称；费用依据生成时快照 | 结算单生成后**不**随供应商主数据改费率而重算 |
| 承销商管理 | 不直接出现在结算单主信息 | 承销商信息在**关联订单**中查看 |
| 市场进栏登记 | 无直接操作 | 订单完成支付后释放进栏耳标，与本模块无界面交互 |

> **职责边界：** 订单侧负责「买方的支付凭证」；本模块负责「付给供应商的结算凭证」。两种凭证、两个业务阶段，不可混用。

---

## 2. 核心业务概念

### 2.1 一条供应商结算单

针对**一笔已完成支付的交易订单**，系统生成**一条**结算记录，用于向该订单供应商支付**扣除服务费后的金额**。

| 信息项 | 说明 |
| --- | --- |
| 结算单编号 | 系统生成，业务唯一；规则见 §3.1 |
| 关联订单编号 | 来源订单编号；用于业务追溯与列表筛选 |
| 供应商 | 与关联订单一致 |
| 交易总头数 | 生成时取自订单，单位「头」 |
| 交易总金额 | 生成时取自订单，单位「元」，保留 2 位小数展示 |
| 服务费金额 | 生成时按供应商收费规则计算并**固化**，单位「元」 |
| 实际应付结算金额 | 生成时计算并**固化**，单位「元」 |
| 结算状态 | 待结算 / 已完成 |
| 结算凭证 | 本模块「完成结算」时上传；此前为空 |
| 结算创建时间 | 结算单生成时刻（= 订单完成支付成功时刻） |
| 结算完成时间 | 「完成结算」成功时写入；此前为空 |

### 2.2 状态与流转

| 状态 | 含义 | 允许操作（见 §8.2） |
| --- | --- | --- |
| **待结算** | 订单已支付，尚未上传结算付款凭证 | 完成结算、查看 |
| **已完成** | 已上传结算凭证并完成付款登记 | 查看、打印凭证 |

- 流转：**仅** 待结算 → 已完成，**不可逆**。  
- **已完成**不可再次「完成结算」、不可修改金额类字段、**不可**删除结算单（本期无作废）。

```text
（无）──订单完成支付──► 待结算 ──完成结算+凭证──► 已完成
```

### 2.3 数据生命周期

| 阶段 | 说明 |
| --- | --- |
| 产生 | **仅**交易订单「完成支付」成功时自动插入一条，初始为**待结算** |
| 维护 | 用户在本模块完成结算、查询、打印 |
| 删除 | **本期不提供**用户删除；订单已完成后亦不可通过删订单消除结算单 |

---

## 3. 字段与展示规则

### 3.1 结算单编号

- 用户**不可录入**；生成时系统分配；全生命周期**不可改**。  
- 规则：`JSD` + `YYYYMMDD` + **3 位当日序号**（`001`～`999`，左补零），如 `JSD20260520001`。  
- 与**订单编号**相互独立；业务关联靠 **关联订单编号**。  
- 当日序号用尽（超过 999）时，订单侧完成支付若无法生成结算单应失败（由订单模块事务保证，本模块不出现无编号记录）。

### 3.2 关联订单编号

- **只读**；生成时写入，与订单主表编号一致。  
- 列表支持按该字段**模糊**筛选。  
- 详情中**仅展示**关联订单编号（只读）；**本期不提供**跳转、链接至交易订单详情或新开订单页（用户若需核对订单，自行至 **交易订单管理** 查询）。

### 3.3 供应商

- **只读**；与关联订单供应商一致。  
- 展示供应商名称（来自主数据）；生成时固化 `supplier` 业务主键，用户不可改。

### 3.4 交易总头数、交易总金额

- **只读**；生成时与订单 `交易总头数`、`交易总金额` **完全一致**。  
- 订单完成后即使主单展示值被误改（实施应禁止），结算单仍以**生成时刻快照**为准。

### 3.5 服务费金额（快照）

生成时按关联订单供应商在 **供应商管理** 中的收费配置计算，写入后**不再自动重算**。

| 收费方式（生成时） | 服务费金额（元） |
| --- | --- |
| **按户计费** | **0** |
| **按头计费** | 交易总头数 × **收费标准**（元/头） |
| **按额计费** | 交易总金额 ×（**交易费率** + **管理费率**）÷ 100 |

**精度**：保留 **2 位小数**；**四舍五入**至分。按额计费时先合计费率（%）再乘以交易总金额。

详情/列表须能展示当时采用的收费方式及费率快照（便于财务核对），展示形式与原型一致（可为只读标签或字段组）。

### 3.6 实际应付结算金额（快照）

- **只读**；生成时计算：**实际应付结算金额 = 交易总金额 − 服务费金额**。  
- 与 §3.5 同一时刻固化，保留 2 位小数、四舍五入。  
- 用户**不可**手工改价、不可改服务费后自动联动（无「改单」能力）。

### 3.7 结算凭证

| 阶段 | 规则 |
| --- | --- |
| 待结算 | 无 |
| 完成结算 | **必填**；**单张**图片；后缀 `jpg` / `jpeg` / `png`；**≤ 10MB**（与交易订单支付凭证 §3.6 一致） |
| 已完成 | 列表/详情可查看、打印凭证须能展示 |

> 结算凭证表示**向供应商付款**的凭据，**不是**订单的支付凭证。

### 3.8 时间字段

| 字段 | 写入时机 | 规则 |
| --- | --- | --- |
| 结算创建时间 | 结算单生成成功 | 系统当前时间；用户不可改 |
| 结算完成时间 | 完成结算成功 | 系统当前时间；此前为空 |

---

## 4. 结算单来源（本模块不可新建）

### 4.1 唯一来源

| 规则 | 说明 |
| --- | --- |
| 触发点 | **交易订单管理** → 待支付订单 → **完成支付**成功 |
| 数量 | 一笔订单 → **一条**结算单 |
| 禁止手工建单 | 本模块**无「新增结算单」** |
| 禁止合并 | **不可**选择多笔订单生成一张结算单 |
| 禁止选订单 | 用户**不能**在本模块挑选订单再生成结算 |

### 4.2 生成失败时的协同

若订单完成支付过程中结算单生成失败（含编号冲突、事务中断等），按 **交易订单管理 §6.3**：订单保持**待支付**，无结算单；用户修正后可重试完成支付。本模块列表**不出现**半成品记录。

### 4.3 生成成功后的可见性

- 生成后立即可在本模块列表查到，状态为**待结算**。  
- 列表默认按 **结算创建时间** 降序。

---

## 5. 列表查询

### 5.1 筛选项

| 筛选项 | 匹配方式 |
| --- | --- |
| 结算单编号 | **模糊** |
| 关联订单编号 | **模糊** |
| 组合 | 条件**同时**生效（AND） |

- 仅展示**有效**结算记录（与项目逻辑删除惯例一致；本期无回收站）。  
- 默认每页 **20** 条。  
- 工具栏：**搜索**、**重置**（无「新增」）。

### 5.2 列表列

| 列名 | 说明 |
| --- | --- |
| 结算单编号 | — |
| 结算创建时间 | — |
| 关联订单编号 | — |
| 供应商 | 名称展示 |
| 交易总头数 | 单位「头」 |
| 交易总金额 | 单位「元」 |
| 服务费金额 | 单位「元」 |
| 实际应付结算金额 | 单位「元」 |
| 结算状态 | 待结算 / 已完成 |
| 结算凭证 | 已完成可查看入口；待结算为空 |
| 结算完成时间 | 已完成有值；待结算为空 |
| 操作 | 见 §8.2 |

---

## 6. 完成结算（本模块业务闭环终点）

本模块业务闭环为：**待结算 → 上传结算凭证 → 已完成**。完成结算成功后，该结算单在本模块内**无后续必办步骤**（可查询、打印凭证）；**不**引导、**不**依赖跳转订单模块。

### 6.1 入口

仅 **待结算** 记录显示「完成结算」→ 弹窗 **「完成结算支付」**（与原型文案一致）。

### 6.2 弹窗

- **结算凭证**：必填，§3.7。  
- **确定** / **取消**（取消不改变结算单）。

### 6.3 确定后（须同一业务事务，全部成功或全部回滚）

| 序号 | 动作 |
| --- | --- |
| 1 | 结算状态 → **已完成** |
| 2 | 写入 **结算完成时间** |
| 3 | 保存 **结算凭证** |

任一步失败：结算单保持 **待结算**，提示原因；**不得**出现「已完成但无凭证」。

### 6.4 前置校验

除结算凭证外，须满足：

- 结算单仍为 **待结算**；  
- 关联订单仍为 **已完成** 且有效（未被逻辑删除）；  
- **不得**已存在结算完成时间或已完成状态（防重复提交）。

### 6.5 重试与幂等

| 情况 | 处理 |
| --- | --- |
| 待结算下再次点击「完成结算」 | **允许**重新上传凭证后确定 |
| 已完成 | **不显示**完成结算 |
| 并发重复提交 | 以首次成功为准；后续应提示已完成或操作无效 |

### 6.6 对关联订单的影响

- 完成结算**不回写**订单状态（订单保持**已完成**）。  
- **不可**因结算完成而撤销或修改订单支付凭证。  
- **不在本模块内**打开或跳转订单界面；闭环在结算单状态变为**已完成**时结束。

---

## 7. 查看

- **所有状态**均可「查看」。  
- 详情为**只读**：§3 全部展示项 + 收费快照明细 + 结算凭证预览 + 审计信息（创建人/时间等，与项目惯例一致）。  
- **不可**在详情页修改金额或状态（无编辑入口）。  
- 详情页**无**「查看订单」「跳转订单」等按钮或链接。

---

## 8. 功能清单

### 8.1 本期不提供

| 能力 | 说明 |
| --- | --- |
| 新增结算单 | 仅订单完成支付自动生成 |
| 修改结算单 | 金额、供应商、关联订单均不可改 |
| 删除 / 作废结算单 | — |
| 部分结算 / 分期付款 | — |
| 批量导入导出 | — |
| 在本模块完成订单支付 | 属交易订单管理 |
| 替换或上传订单支付凭证 | 属交易订单管理 |

### 8.2 按状态操作矩阵

| 状态 | 操作 |
| --- | --- |
| 待结算 | **完成结算**、**查看** |
| 已完成 | **打印凭证**、**查看** |

无权限则不显示对应按钮。

### 8.3 打印凭证

| 项 | 规则 |
| --- | --- |
| 范围 | **仅已完成** |
| 内容 | 结算单编号、关联订单编号、供应商、交易总头数、交易总金额、服务费、实际应付、结算状态、结算创建/完成时间、**结算凭证**图像 |
| 不含 | 订单支付凭证、采购明细耳标（若需耳标级明细，在订单模块打印订单凭证） |

> **待结算**不提供「打印凭证」；**已完成**不提供「完成结算」。

---

## 9. 业务流程图

### 9.1 结算主流程（本模块）

```mermaid
flowchart TD
    L[结算单列表] --> F{筛选?}
    F --> L
    L --> V[查看详情]
    L --> P{待结算?}
    P -->|是| Pay[完成结算+结算凭证]
    Pay --> OK{成功?}
    OK -->|否| L
    OK -->|是| Done[已完成]
    Done --> Pr[打印凭证]
    P -->|否| Pr2[打印凭证]
    Pr2 --> L
    Pr --> L
```

### 9.2 与交易订单端到端

```mermaid
sequenceDiagram
    participant ME as 市场进栏
    participant O as 交易订单
    participant S as 供应商结算
    participant SUP as 供应商管理
    ME->>O: 建单待支付
    O->>O: 完成支付(订单支付凭证)
    O->>SUP: 读取收费配置
    O->>S: 生成结算单(待结算,金额快照)
    O->>ME: 删除已成交进栏耳标
    S->>S: 完成结算(结算凭证)
    Note over O,S: 订单保持已完成
```

### 9.3 状态对照（订单 × 结算）

```mermaid
stateDiagram-v2
    [*] --> 订单待支付: 保存订单
    订单待支付 --> 订单已完成: 完成支付
    订单已完成 --> 结算待结算: 自动生成
    结算待结算 --> 结算已完成: 完成结算
    note right of 订单待支付: 无结算单
    note right of 结算已完成: 订单仍为已完成
```

---

## 10. 关联需求分析（交易订单管理）

> 详细规则以 `../交易订单管理/交易订单管理功能需求.md` 为准；本节保证两模块**可联调、无歧义**。

### 10.1 职责对照

| 能力 | 交易订单管理 | 供应商结算管理（本模块） |
| --- | --- | --- |
| 采购明细、耳标 | ✓ | — |
| 订单支付凭证 | ✓ | — |
| 触发创建结算单 | ✓（完成支付事务内） | 被动接收 |
| 服务费 / 实际应付计算 | ✓（生成时计算并快照） | 只读展示 |
| 结算凭证、结算完成 | — | ✓ |
| 按结算单号 / 订单号查询 | — | ✓ |
| 打印订单小票/凭证 | ✓ | — |
| 打印结算凭证 | — | ✓ |

### 10.2 关键字段一致性（生成时刻）

| 概念 | 订单侧 | 结算侧 | 一致性要求 |
| --- | --- | --- | --- |
| 业务关联键 | 订单编号 | 关联订单编号 | 相等 |
| 供应商 | 订单供应商 | 结算供应商 | 相等 |
| 交易总头数 | 头 | 头 | 相等 |
| 交易总金额 | 元 | 元 | 相等 |
| 服务费 | — | 元 | 按 §3.5 公式，生成时一次计算 |
| 实际应付 | — | 元 | 总金额 − 服务费 |
| 编号体系 | `YYYYMMDD`+3 位 | `JSD`+日期+3 位 | **独立编号**，勿混用 |

### 10.3 时间与状态协同

| 订单状态 | 结算单 | 说明 |
| --- | --- | --- |
| 待支付 | **不存在** | 完成支付前本模块无数据 |
| 已完成 | **必有**待结算或已完成 | 完成支付成功即生成待结算 |
| 已完成（不变） | 已完成 | 结算完成后订单不回退 |

| 时间字段 | 订单 | 结算 |
| --- | --- | --- |
| 业务起始 | 订单创建时间 | 结算创建时间（≈ 订单完成时间） |
| 业务结束 | 订单完成时间 | 结算完成时间 |

### 10.4 费用快照协同

- 订单「完成支付」时，若供应商**收费方式未配置**，订单应**拒绝**支付，**不生成**结算单（见订单 §6.5、§11）。  
- 结算单保存的费率、收费标准为**生成瞬间**供应商主数据快照；事后修改 **供应商管理** 中的费率，**已生成**结算单金额**不变**。  
- 财务以结算单金额为准进行付款，不以最新主数据重算。

### 10.5 凭证双轨

| 凭证 | 所属阶段 | 上传模块 | 用途 |
| --- | --- | --- | --- |
| **支付凭证** | 买方支付订单 | 交易订单管理 | 证明承销商/买方已付款 |
| **结算凭证** | 向供应商付款 | 供应商结算管理 | 证明平台已向供应商结算 |

两种凭证**不可互替**；打印、查看各自在对应模块完成。

### 10.6 异常与边界（联调清单）

| 场景 | 处理原则 |
| --- | --- |
| 订单完成支付失败 | 无结算单；本模块无记录 |
| 订单完成支付成功 | 必有且仅有 1 条待结算单 |
| 订单待支付被逻辑删除 | 不应存在对应结算单 |
| 订单已完成 | 不可删订单；结算单保持 |
| 结算待支付重复「完成结算」失败 | 保持待结算，可重试 |
| 结算已完成 | 不可再次完成结算；订单仍已完成 |
| 供应商主数据后续变更 | 不影响已生成结算单金额 |
| 进栏耳标在支付后删除 | 订单/结算历史数据不变；仅影响后续新订单耳标池 |

### 10.7 端到端业务链（平台视角）

```text
市场进栏登记 → 交易订单(待支付) → 完成支付(订单凭证+生成结算单+释放耳标)
    → 供应商结算(待结算) → 完成结算(结算凭证) → 闭环
```

---

## 11. 权限（业务层）

查询列表、查看详情、完成结算、打印凭证 — 由实施按角色配置，本文不列权限编码。

建议分工示例：

| 角色 | 建议能力 |
| --- | --- |
| 财务/结算 | 列表、查看、完成结算、打印凭证 |
| 运营 | 列表、查看（可选） |
| 管理员 | 全部 + 菜单配置 |

---

## 12. 提示语（示例）

| 情况 | 示例 |
| --- | --- |
| 缺结算凭证 | 请上传结算凭证 |
| 凭证格式/大小 | 文件格式或大小不符合要求 |
| 非待结算操作 | 仅待结算状态可完成结算 |
| 已完成重复操作 | 结算单已完成，无需重复操作 |
| 完成结算失败 | 完成结算失败：{原因} |
| 打印 | 仅已完成结算单可打印凭证 |

---

## 13. 非功能建议

| 项 | 建议 |
| --- | --- |
| 权限 | 完成结算与查询分权 |
| 审计 | 完成结算留痕 |
| 事务 | 完成结算与状态、凭证、时间同一事务 |
| 易用性 | 完成结算二次确认（宜展示结算单号、供应商、实际应付） |

---

## 14. 已确认业务决策（评审纪要）

| 序号 | 决策 |
| --- | --- |
| 1 | 结算单**仅**由交易订单完成支付自动生成，本模块不可新增 |
| 2 | 一笔订单对应**一条**结算单，不可合并多订单 |
| 3 | 服务费、实际应付以**生成时快照**为准，不随供应商主数据变更重算 |
| 4 | 金额 **2 位小数、四舍五入** |
| 5 | 结算凭证规则与订单支付凭证一致（图片、10MB、jpg/jpeg/png） |
| 6 | 结算完成后**不回写**订单状态 |
| 7 | 待结算可完成结算；已完成可打印凭证、查看 |
| 8 | 列表按结算单编号、关联订单编号**模糊**筛选 |
| 9 | **完成结算**即本模块业务闭环终点；详情/列表**不跳转**交易订单 |
| 10 | 关联订单编号仅作展示与筛选，跨模块查订单由用户自行进入订单模块 |

---

## 15. 草稿对照

| 草稿条目 | 章节 |
| --- | --- |
| 列表查询 1～2 | §5 |
| 服务费、实际应付 3～4 | §3.5、§3.6 |
| 编号 5 | §3.1 |
| 订单生成 6 | §4 |
| 状态 7 | §2.2 |
| 完成结算 8 | §6 |
| 查看 9 | §7 |
| 操作 10～11 | §8.2 |
| 异常格式、技术栈 12～13 | **不纳入**本文 |

---

## 16. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初稿：对齐交易订单 v1.2；结算来源/状态/完成结算/打印；关联分析 §10；不含库表接口 |
| 1.1 | 拍板：完成结算为模块闭环终点；不提供跳转/链接至交易订单（§3.2、§6、§7、§14） |
