# 供应商结算管理 — 功能需求 ## 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) |