流水管理页面 - 产品需求文档(PRD)
| 属性 | 内容 |
| 对应模块 | 流水管理页面 |
| 对应功能 | 流水导入、付款公司管理、流水匹配、统计分析 |
| 文档版本 | V1.0 |
| 产品负责人 | 产品经理 |
| 编写日期 | 2026-04-06 |
| 状态 | 评审中 |
目录
1. 需求概述
1.1 页面定位
流水管理页面是合同管理系统的重要组成部分,用于管理企业的银行流水数据。该页面支持财务人员导入银行流水、识别付款公司、匹配发票、处理异常流水,并提供按付款公司维度的统计分析功能。
流水管理页面是合同管理系统的重要组成部分,用于管理企业的银行流水数据。该页面支持财务人员导入银行流水、识别付款公司、匹配发票、处理异常流水,并提供按付款公司维度的统计分析功能。
1.1 核心功能
- 流水数据导入与管理
- 付款公司识别与管理
- 流水与发票匹配
- 异常流水处理
- 按付款公司统计分析
1.2 业务场景
场景一:每日流水导入
财务人员从对公账户导出每日流水Excel文件,导入系统后自动识别付款公司,系统自动匹配发票。
场景二:异常流水处理
超过1个月未匹配的流水自动标记为异常,财务人员手动匹配或标记为无票/其他。
场景三:付款公司统计
财务人员按付款公司筛选流水,查看该公司的总收入、总支出、匹配情况等统计数据。
2. 功能需求
2.1 筛选区域
付款公司筛选:下拉选择付款公司(全部、付款公司列表),默认为"全部"
其他筛选条件:
- 日期范围:选择流水交易时间范围
- 收支类型:全部、收入、支出
- 交易类型分类:2级下拉展示,通过optgroup分组显示
- 一级分类:收支基础类、银行业务类、对公企业高频类、第三方支付类、资金往来类、政务金融机构类、个人常用类
- 二级具体类型:每个分类下的具体交易类型,如税费缴纳、利息收入、工资代发等
- 匹配状态:全部、已匹配、未匹配、异常、已处理
- 关键词搜索:支持流水号、银行摘要、对手方名称搜索
2.1.1 交易类型自动识别机制
系统通过 transaction_type_code 字段实现交易类型的智能归类和筛选:
| 识别维度 | 识别规则 | 示例 |
| 关键词匹配 | 检查银行摘要(summary)中是否包含预设关键词 | 摘要包含"税"、"社保"、"公积金" → 识别为"税费缴纳" |
| 对手方匹配 | 检查对手方名称(counterparty_account_name)是否匹配预设模式 | 对手方包含"税务局"、"社保局"、"国库" → 识别为"税费缴纳" |
| 自动处理 | 部分交易类型可自动标记为已处理状态 | 利息收入、手续费支出等银行业务类流水自动标记为"已处理" |
2.1.2 交易类型分类说明
| 一级分类 | 二级具体类型 | 典型场景 |
| 收支基础类 | 收入 | 日常收支、账户间转账 |
| 支出 |
| 转账 |
| 提现 |
| 存款 |
| 银行业务类 | 利息收入 | 银行自动扣费、利息结算 |
| 利息支出 |
| 手续费支出 |
| 结息 |
| 对公企业高频类 | 税费缴纳 | 企业日常经营支出 |
| 工资代发 |
| 报销 |
| 货款收支 |
| 服务费收入 |
| 保证金 |
| 对公转账 |
| 代收代付 |
| 第三方支付类 | 微信支付入账 | 电商收款、平台结算 |
| 支付宝入账 |
| 平台结算款 |
| 资金往来类 | 汇兑 | 跨境结算、企业间借款 |
| 清算资金 |
| 往来款 |
| 政务金融机构类 | 国库扣款 | 政府扣款、银行贷款 |
| 财政拨款 |
| 公积金 |
| 贷款发放 |
| 贷款还款 |
| 个人常用类 | 消费 | 个人消费支出 |
| 信用卡还款 |
| 生活缴费 |
2.1.3 交易类型筛选逻辑
- 2级下拉展示:通过optgroup分组,一级分类作为optgroup的label,二级具体类型作为option
- 筛选方式:用户选择具体交易类型后,系统通过
transaction_type_code 字段精确筛选
- 组合筛选:支持与付款公司、日期范围、匹配状态等条件组合筛选
2.2 统计卡片
| 卡片名称 | 数据来源 | 显示格式 |
| 总流水笔数 | 当前筛选条件下的流水总数 | 数字,千分位分隔 |
| 未匹配流水 | 状态为"未匹配"的流水数 | 数字,千分位分隔,黄色背景 |
| 已匹配流水 | 状态为"已匹配"的流水数 | 数字,千分位分隔,绿色背景 |
| 异常流水 | 状态为"异常"的流水数 | 数字,千分位分隔,红色背景 |
| 总收入 | 当前筛选条件下的收入总额 | 金额,千分位分隔,绿色 |
| 总支出 | 当前筛选条件下的支出总额 | 金额,千分位分隔,红色 |
2.3 流水列表字段
| 字段名称 | 字段说明 | 排序 |
| 流水号 | 银行流水号,唯一标识 | 支持 |
| 交易时间 | 流水交易时间 | 支持 |
| 己方信息 | 己方银行户名、账号、开户行 | 不支持 |
| 对手方信息 | 对手方银行户名、账号、开户行 | 不支持 |
| 金额 | 交易金额(收入绿色,支出红色) | 支持 |
| 银行摘要 | 银行提供的原始交易描述 | 不支持 |
| 交易类型 | 收入/支出 | 支持 |
| 状态 | 已匹配/未匹配/异常/已处理 | 支持 |
| 对应发票号码 | 关联的发票号码,点击可预览发票图片 | 不支持 |
| 处理备注 | 流水处理说明 | 不支持 |
| 操作 | 操作按钮 | 不支持 |
2.4 状态定义
| 状态名称 | 状态说明 | 颜色标识 | 触发条件 |
| 已匹配 | 流水已关联到发票 | 绿色 | 自动匹配成功或手动匹配成功 |
| 未匹配 | 流水未关联发票,等待处理 | 黄色 | 新导入的流水或取消匹配后的流水 |
| 异常 | 超过1个月未匹配或未处理 | 红色 | 创建时间超过1个月且状态为"未匹配" |
| 已处理 | 流水已标记为无票/其他 | 灰色 | 手动标记为资产成本、分红、无票等 |
2.5 处理备注字段规则
| 状态 | 处理备注内容 |
| 已匹配 | 显示"自动识别" |
| 已处理 | 显示处理原因(如"银行利息"、"资产成本"、"分红"等) |
| 未匹配 | 显示为空(-) |
| 异常 | 显示为空(-) |
2.6 操作按钮
已匹配流水:查看详情、取消匹配、删除
未匹配流水:查看详情、手动匹配、删除
异常流水:查看详情、手动匹配、标记为无票/其他、删除
已处理流水:查看详情、编辑、删除
2.7 发票预览功能
触发条件:流水状态为"已匹配","对应发票"列显示发票号码
点击行为:
- 点击发票号码,打开发票预览弹窗
- 显示发票图片(支持多张发票轮播)
- 显示发票基本信息(发票号码、金额、开票日期等)
操作按钮:下载图片、打印、关闭
2.8 导入流水功能
2.8.1 导入流程
- 选择付款公司:下拉选择付款公司(默认为"自动识别"),选择"自动识别"时,系统根据银行账号自动匹配付款公司
- 上传文件:支持Excel (.xlsx, .xls) 和 CSV (.csv) 格式,文件大小限制:不超过10MB,单次导入限制:不超过1000条记录
- 数据预览:显示导入数据预览,自动识别付款公司结果,重复流水号标红显示
- 确认导入:显示导入统计,重复数据无法导入,需先删除原有流水记录
2.8.2 导入字段映射
| Excel字段 | 系统字段 | 必填 | 说明 |
| 流水号 | transaction_no | 是 | 银行流水号,唯一标识 |
| 交易时间 | transaction_time | 是 | 格式:YYYY-MM-DD HH:mm:ss |
| 己方银行户名 | self_account_name | 是 | 己方银行账户名称 |
| 己方银行账号 | self_account_number | 是 | 己方银行账号(用于识别付款公司) |
| 对手方银行户名 | counterparty_account_name | 否 | 对手方银行账户名称 |
| 对手方银行账号 | counterparty_account_number | 否 | 对手方银行账号 |
| 支出金额(元) | amount | 否 | 支出金额,转换为负数 |
| 收入金额(元) | amount | 否 | 收入金额,转换为正数 |
| 摘要 | summary | 否 | 银行摘要 |
| 附言(用途) | purpose | 否 | 交易用途 |
2.8.3 去重机制
唯一识别字段:银行流水号(flow_number)
导入时读取每行的"银行流水号",检查数据库中是否已存在该流水号。发现重复流水号时,在预览页面标红显示,提示"该流水号已存在,无法重复导入"。
2.8.4 己方公司自动识别
识别逻辑:
- 优先根据"己方银行账号"匹配己方公司
- 查询己方公司表中的银行账号
- 匹配成功则自动关联己方公司
- 匹配失败时,根据"摘要"或"对手方名称"智能匹配
- 查询己方公司名称是否包含在摘要或对手方名称中
- 匹配成功则自动关联己方公司
- 仍无法匹配的:
- 如果选择了特定己方公司,则关联该公司
- 如果选择"自动识别",则标记为"待人工处理",需要财务人员手动确认
2.8.5 交易类型自动识别
识别逻辑:
- 根据银行模板的交易类型分类识别规则进行匹配
- 优先级:
- 关键词匹配:检查银行摘要中是否包含预设关键词
- 对手方匹配:检查对手方名称是否匹配预设模式
- 自动处理:
- 部分交易类型可自动标记为已处理状态(如利息收入、手续费支出等)
- 无需匹配发票的流水直接标记为"已处理"
2.9 手动匹配功能
2.9.1 手动匹配入口
触发条件:流水状态为"未匹配"或"异常",操作列显示"手动匹配"按钮
点击"手动匹配"后:打开手动匹配弹窗,展示该付款公司的审批单列表
2.9.2 审批单列表说明
- 只显示涉及款项的审批单(财务管理类、行政管理类等)
- 不显示:请假、出差申请等不涉及款项的审批单
- 优先展示未匹配的审批单(置顶)
- 已匹配的审批单显示为灰色,不可选择
- 金额与流水金额完全相等的审批单高亮显示
2.9.3 标记为无票/其他
处理原因选项:
- 资产成本:固定资产购置、设备采购等
- 分红:股东分红、利润分配
- 无票:无法取得发票的支出
- 银行利息:银行存款利息收入、贷款利息支出
- 法人借款:法人个人借款、还款
- 挂账:暂时挂账,待后续处理
- 其他:其他特殊情况
2.10 付款公司管理
2.10.1 数据来源
- 审批同步:从审批数据自动提取,不可删除,可编辑
- 手动添加:手动维护,可编辑、可删除
2.10.2 添加/编辑付款公司表单字段
| 字段名称 | 字段类型 | 必填 | 说明 |
| 公司名称 | 文本 | 是 | 付款公司全称 |
| 银行账号 | 文本 | 是 | 银行账号(完整账号,用于匹配流水) |
| 开户行 | 文本 | 是 | 开户银行名称 |
| 公司编码 | 文本 | 否 | 公司内部编码 |
| 税号 | 文本 | 否 | 公司税号 |
| 联系人 | 文本 | 否 | 联系人姓名 |
| 联系电话 | 文本 | 否 | 联系电话 |
| 地址 | 文本 | 否 | 公司地址 |
| 备注 | 文本 | 否 | 备注信息 |
2.11 银行模板配置
2.11.1 功能说明
银行模板配置用于管理不同银行的流水文件导入格式,支持:
- 创建新的银行模板
- 编辑现有模板配置
- 配置字段映射规则
- 设置交易类型分类识别规则
2.11.2 模板配置字段
| 字段名称 | 字段类型 | 必填 | 说明 |
| 银行代码 | 文本 | 是 | 银行唯一标识代码 |
| 银行名称 | 文本 | 是 | 银行显示名称 |
| 模板名称 | 文本 | 是 | 模板显示名称 |
| 文件格式 | 文本 | 是 | 支持格式:xlsx/xls/csv |
| 表头行号 | 数字 | 是 | 表头所在行号 |
| 数据开始行号 | 数字 | 是 | 数据开始行号 |
| 日期格式 | 文本 | 否 | 日期字段格式 |
| 金额格式 | 文本 | 否 | 金额字段格式 |
| 文件编码 | 文本 | 否 | 文件编码格式 |
2.11.3 字段映射配置
| 配置项 | 说明 |
| 源字段名 | Excel文件中的字段名称 |
| 目标字段名 | 系统数据库字段名 |
| 字段类型 | 数据类型:string/number/date/amount |
| 转换规则 | 数据转换规则,如金额取负值 |
| 是否必填 | 该字段是否为必填项 |
| 默认值 | 字段为空时的默认值 |
2.11.4 杭州银行字段映射示例
| 杭州银行字段 | 系统字段 | 转换规则 | 必填 |
| 银行流水号 | flow_number | - | 是 |
| 己方别名 | self_alias | - | 否 |
| 己方银行户名 | self_account_name | - | 是 |
| 己方银行账号 | self_account_number | - | 是 |
| 对手方别名 | counterparty_alias | - | 否 |
| 对手方银行账号 | counterparty_account_number | - | 否 |
| 支出金额(元) | amount | 取负值 | 否 |
| 收入金额(元) | amount | 取正值 | 否 |
| 交易时间 | transaction_date | - | 是 |
| 摘要 | summary | - | 否 |
| 附言(用途) | purpose | - | 否 |
3. 数据字段定义
3.1 流水表字段(bank_flow)
| 字段名称 | 字段类型 | 必填 | 说明 |
| id | bigint | 是 | 主键ID,自增 |
| tenant_id | varchar(64) | 是 | 租户ID |
| flow_number | varchar(128) | 是 | 银行流水号(唯一标识) |
| transaction_type | varchar(32) | 是 | 交易类型:收入/支出 |
| transaction_type_code | varchar(64) | 否 | 标准化交易类型代码 |
| amount | decimal(18,2) | 是 | 交易金额 |
| transaction_date | datetime | 是 | 交易日期 |
| summary | varchar(512) | 否 | 银行摘要 |
| business_summary | varchar(512) | 否 | 业务摘要 |
| self_alias | varchar(128) | 否 | 己方别名 |
| self_account_name | varchar(255) | 是 | 己方银行户名 |
| self_account_number | varchar(128) | 是 | 己方银行账号 |
| self_bank_name | varchar(255) | 是 | 己方开户行 |
| counterparty_alias | varchar(128) | 否 | 对手方别名 |
| counterparty_account_name | varchar(255) | 是 | 对手方银行户名 |
| counterparty_account_number | varchar(128) | 否 | 对手方银行账号 |
| counterparty_bank_name | varchar(255) | 否 | 对手方开户行 |
| currency | varchar(16) | 否 | 币种,默认CNY |
| balance | decimal(18,2) | 否 | 账户余额 |
| purpose | varchar(512) | 否 | 附言/用途 |
| channel | varchar(64) | 否 | 交易渠道 |
| bank_specific_fields | json | 否 | 银行特有字段 |
| transaction_status | varchar(32) | 是 | 交易状态:成功/失败/处理中 |
| remark | varchar(1024) | 否 | 备注 |
| create_time | datetime | 是 | 创建时间 |
| update_time | datetime | 是 | 更新时间 |
3.2 流水财务状态表(bank_flow_status)
| 字段名称 | 字段类型 | 必填 | 说明 |
| id | bigint | 是 | 主键ID,自增 |
| bank_flow_id | bigint | 是 | 流水ID(唯一) |
| contract_id | bigint | 否 | 合同ID |
| approval_id | bigint | 否 | 审批ID |
| invoice_id | bigint | 否 | 发票ID |
| match_status | varchar(32) | 是 | 匹配状态:unmatched/matched/exception/processed |
| process_status | varchar(32) | 是 | 处理状态:unprocessed/processing/processed |
| relation_status | varchar(32) | 是 | 关联状态:unrelated/partial/related |
| match_time | datetime | 否 | 匹配时间 |
| process_time | datetime | 否 | 处理时间 |
| process_reason | varchar(128) | 否 | 处理原因 |
| process_by | varchar(64) | 否 | 处理人 |
3.3 流水历史记录表(bank_flow_history)
| 字段名称 | 字段类型 | 必填 | 说明 |
| id | bigint | 是 | 主键ID,自增 |
| bank_flow_id | bigint | 是 | 流水ID |
| operation_type | varchar(64) | 是 | 操作类型 |
| before_status | varchar(32) | 否 | 变更前状态 |
| after_status | varchar(32) | 否 | 变更后状态 |
| before_amount | decimal(18,2) | 否 | 变更前金额 |
| after_amount | decimal(18,2) | 否 | 变更后金额 |
| operation_by | varchar(64) | 是 | 操作人 |
| operation_time | datetime | 是 | 操作时间 |
| remark | varchar(1024) | 否 | 备注 |
3.4 交易类型定义表(bank_transaction_type)
| 字段名称 | 字段类型 | 必填 | 说明 |
| id | bigint | 是 | 主键ID,自增 |
| type_code | varchar(64) | 是 | 类型代码(唯一) |
| type_name | varchar(128) | 是 | 类型名称 |
| type_category | varchar(64) | 是 | 类型分类 |
| description | varchar(512) | 否 | 类型描述 |
| match_required | tinyint | 是 | 是否需要匹配发票:0-否,1-是 |
| auto_process | tinyint | 是 | 是否自动处理:0-否,1-是 |
| process_reason | varchar(128) | 否 | 自动处理原因 |
| keywords | json | 否 | 关键词列表 |
| counterparty_patterns | json | 否 | 对手方匹配模式 |
| status | tinyint | 是 | 状态:0-禁用,1-启用 |
| sort_order | int | 是 | 排序 |
| create_time | datetime | 是 | 创建时间 |
| update_time | datetime | 是 | 更新时间 |
3.2 付款公司表字段(payment_company)
| 字段名称 | 字段类型 | 必填 | 说明 |
| id | bigint | 是 | 主键ID,自增 |
| tenant_id | varchar(64) | 是 | 租户ID |
| company_code | varchar(64) | 否 | 公司编码 |
| company_name | varchar(128) | 是 | 公司名称 |
| bank_name | varchar(128) | 是 | 开户银行 |
| bank_account | varchar(64) | 是 | 银行账号 |
| tax_number | varchar(32) | 否 | 税号 |
| contact_person | varchar(64) | 否 | 联系人 |
| contact_phone | varchar(32) | 否 | 联系电话 |
| address | varchar(255) | 否 | 地址 |
| data_source | varchar(32) | 是 | 数据来源:approval_sync/manual_add |
| is_default | tinyint | 是 | 是否默认付款公司:0-否,1-是 |
| status | varchar(32) | 是 | 状态:active/inactive |
| is_deleted | tinyint | 是 | 是否删除:0-否,1-是 |
| created_at | datetime | 是 | 创建时间 |
| updated_at | datetime | 是 | 更新时间 |
4. 交互流程
4.1 导入流水流程
财务人员 → 点击"导入流水"按钮
页面 → 打开导入弹窗
财务人员 → 选择付款公司(默认自动识别)
财务人员 → 上传Excel/CSV文件
系统 → 读取文件内容
系统 → 校验数据格式
系统 → 检查重复流水号
系统 → 自动识别付款公司
页面 → 显示预览结果(标注重复和异常)
财务人员 → 确认导入
系统 → 保存流水记录
页面 → 显示导入成功提示
页面 → 刷新流水列表
4.2 手动匹配流程
财务人员 → 点击"手动匹配"按钮
系统 → 获取该付款公司的审批单列表
页面 → 显示手动匹配弹窗
财务人员 → 选择审批单并确认
系统 → 更新流水状态
系统 → 更新审批单匹配状态
页面 → 显示匹配成功提示
页面 → 刷新流水列表
4.3 标记为无票/其他流程
财务人员 → 点击"标记为无票/其他"按钮
页面 → 显示标记弹窗
财务人员 → 选择处理原因
财务人员 → 填写备注说明(选填)
财务人员 → 上传附件(选填)
财务人员 → 确认提交
系统 → 更新流水状态为"已处理"
页面 → 显示处理成功提示
页面 → 刷新流水列表
4.4 异常状态自动标记流程
系统 → 每日定时任务触发
系统 → 查询创建时间超过1个月且状态为"未匹配"的流水
数据库 → 返回流水列表
系统 → 批量更新状态为"异常"
系统 → 记录操作日志
4.5 状态流转图
flowchart TD
A[导入流水]
B[未匹配]
C[已匹配]
D[异常]
E[删除]
F[已处理]
A -->|新导入| B
B -->|自动匹配成功| C
B -->|手动匹配成功| C
B -->|超过1个月| D
B -->|删除| E
C -->|取消匹配| B
C -->|删除| E
D -->|手动匹配成功| C
D -->|标记为无票/其他| F
D -->|删除| E
F -->|编辑| F
F -->|删除| E
4.6 状态转换说明
| 状态转换 | 触发事件 | 条件 | 结果 |
| 导入 → 未匹配 | 导入流水文件 | 新导入的流水 | 状态变为"未匹配" |
| 未匹配 → 已匹配 | 自动匹配 | 系统自动匹配到发票 | 状态变为"已匹配" |
| 未匹配 → 已匹配 | 手动匹配 | 财务人员手动选择审批单匹配 | 状态变为"已匹配" |
| 未匹配 → 异常 | 系统定时任务 | 创建时间超过1个月且未匹配 | 状态变为"异常" |
| 未匹配 → 删除 | 手动删除 | 财务人员删除流水 | 流水被删除 |
| 已匹配 → 未匹配 | 取消匹配 | 财务人员取消匹配关系 | 状态变为"未匹配" |
| 已匹配 → 删除 | 手动删除 | 财务人员删除流水 | 流水被删除 |
| 异常 → 已匹配 | 手动匹配 | 财务人员手动选择审批单匹配 | 状态变为"已匹配" |
| 异常 → 已处理 | 标记为无票/其他 | 财务人员选择处理原因 | 状态变为"已处理" |
| 异常 → 删除 | 手动删除 | 财务人员删除流水 | 流水被删除 |
| 已处理 → 编辑 | 编辑处理原因 | 财务人员修改处理原因 | 状态保持"已处理" |
| 已处理 → 删除 | 手动删除 | 财务人员删除流水 | 流水被删除 |
5. 界面设计
5.1 页面整体布局
┌─────────────────────────────────────────────────────────────────┐
│ 流水管理 [导入流水] [导出] │
├─────────────────────────────────────────────────────────────────┤
│ 筛选: │
│ [付款公司▼] [管理付款公司] [日期范围] [交易类型▼] [状态▼] [搜索]│
├─────────────────────────────────────────────────────────────────┤
│ [总流水笔数] [未匹配流水] [已匹配流水] [异常流水] │
│ [总收入] [总支出] │
├─────────────────────────────────────────────────────────────────┤
│ 流水列表 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │交易时间│收付款方│付款公司│金额│摘要│类型│状态│对应发票│操作│ │
│ ├─────────────────────────────────────────────────────────────┤ │
│ │ ... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ [上一页] [1] [2] [3] ... [下一页] │
└─────────────────────────────────────────────────────────────────┘
5.2 导入流水弹窗布局
┌─────────────────────────────────────────────────────────┐
│ 导入流水 [关闭] │
├─────────────────────────────────────────────────────────┤
│ 付款公司:[自动识别▼] │
│ │
│ 上传文件:[选择文件] 支持.xlsx, .xls, .csv格式 │
│ │
│ 文件要求: │
│ • 文件大小不超过10MB │
│ • 单次导入不超过1000条记录 │
│ • 必须包含:流水号、交易时间、本方银行账号、金额 │
├─────────────────────────────────────────────────────────┤
│ 数据预览: │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 序号│流水号│交易时间│金额│付款公司│状态 │ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 1 │B001 │2026-04-01│¥5,000│北京科技│✓正常 │ │
│ │ 2 │B002 │2026-04-01│¥3,000│- │✗重复 │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ 统计:✓正常数据:15条 ✗重复数据:2条(无法导入) │
├─────────────────────────────────────────────────────────┤
│ [确认导入(15条)] [取消] │
└─────────────────────────────────────────────────────────┘
5.3 手动匹配弹窗布局
┌─────────────────────────────────────────────────────────┐
│ 手动匹配 - 北京科技有限公司 [关闭] │
├─────────────────────────────────────────────────────────┤
│ 流水信息: │
│ 交易时间:2026-04-01 10:00:00 │
│ 金额:¥150,000.00 摘要:服务费 收付款方:XX公司 │
│ 当前状态:未匹配 │
├─────────────────────────────────────────────────────────┤
│ 筛选:[审批状态▼] [匹配状态▼] [时间范围] [搜索] │
├─────────────────────────────────────────────────────────┤
│ 审批单列表: │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 审批标题 │类目│申请人│金额│审批状态│匹配状态│操作│ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 差旅报销 │财务│张三│¥5,000│已通过│未匹配│[选择]│ │
│ │ 办公采购 │行政│李四│¥2,500│已通过│未匹配│[选择]│ │
│ └───────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────┤
│ [标记为无票/其他] [取消] │
└─────────────────────────────────────────────────────────┘
5.4 付款公司管理弹窗布局
┌─────────────────────────────────────────────────────────┐
│ 付款公司管理 [关闭] │
├─────────────────────────────────────────────────────────┤
│ [添加付款公司] │
├─────────────────────────────────────────────────────────┤
│ 付款公司列表: │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 公司名称 │银行账号│开户行│数据来源│操作 │ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 北京科技 │6225***│招商银行│审批同步│[编辑] │ │
│ │ 上海贸易 │6228***│工商银行│手动添加│[编辑][删除] │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
6. 非功能需求
6.1 性能要求
| 性能指标 | 要求 |
| 页面加载时间 | ≤2秒 |
| 筛选响应时间 | ≤2秒 |
| 导入处理时间 | ≤5秒(1000条以内) |
| 导出时间 | ≤10秒 |
6.2 安全要求
- 权限控制:只有财务人员和管理员才能访问流水管理页面
- 数据隔离:多租户数据隔离,用户只能查看本企业的流水数据
- 操作日志:记录所有操作日志,包括导入、匹配、删除等操作
6.3 兼容性要求
- 浏览器兼容:支持Chrome、Firefox、Safari、Edge最新版本
- 响应式设计:支持桌面端(≥1280px)和平板端(≥768px)
5. 验收标准
5.1 功能验收标准
| 功能模块 | 验收标准 |
| 流水导入 | 能够成功导入Excel/CSV文件,自动识别付款公司,重复流水号无法导入 |
| 流水筛选 | 所有筛选条件能够正常工作,筛选结果准确 |
| 统计卡片 | 统计数据准确,按付款公司筛选时数据正确 |
| 手动匹配 | 能够成功匹配流水与发票,状态更新正确 |
| 标记无票/其他 | 能够成功标记流水,状态更新正确 |
| 异常标记 | 超过1个月未匹配的流水自动标记为异常 |
| 付款公司管理 | 能够添加/编辑/删除付款公司,数据来源标识正确 |
5.2 性能验收标准
| 性能指标 | 验收标准 |
| 页面加载时间 | ≤2秒 |
| 筛选响应时间 | ≤2秒 |
| 导入处理时间 | ≤5秒(1000条以内) |
| 导出时间 | ≤10秒 |
8. 附录
8.1 处理原因列表
| 处理原因 | 说明 |
| 资产成本 | 固定资产购置、设备采购等 |
| 分红 | 股东分红、利润分配 |
| 无票 | 无法取得发票的支出 |
| 银行利息 | 银行存款利息收入、贷款利息支出 |
| 法人借款 | 法人个人借款、还款 |
| 挂账 | 暂时挂账,待后续处理 |
| 其他 | 其他特殊情况 |
8.2 更新记录
| 版本 | 日期 | 变更内容 | 变更人 |
| V1.0 | 2026-04-06 | 初始版本 | 产品经理 |
| V1.1 | 2026-04-08 | 添加流水相关ER图 | 产品经理 |
8.3 流水相关ER图
8.3.1 流水相关表关系图
erDiagram
bank_flow ||--o{ approval_bank_flow_rel : "关联"
bank_flow ||--o{ invoice_bank_flow_rel : "关联"
bank_flow ||--o{ bank_flow_status : "财务状态"
bank_flow ||--o{ bank_flow_history : "流水历史"
bank_flow {
bigint id PK "主键ID"
varchar tenant_id "租户ID"
varchar flow_number UK "流水编号"
varchar transaction_type "交易类型"
decimal amount "交易金额"
datetime transaction_date "交易日期"
varchar summary "银行摘要"
varchar business_summary "业务摘要"
varchar self_alias "己方别名"
varchar self_account_name "己方银行户名"
varchar self_account_number "己方银行账号"
varchar self_bank_name "己方开户行"
varchar counterparty_alias "对手方别名"
varchar counterparty_account_name "对手方银行户名"
varchar counterparty_account_number "对手方银行账号"
varchar counterparty_bank_name "对手方开户行"
varchar currency "币种"
decimal balance "账户余额"
varchar purpose "附言/用途"
varchar channel "交易渠道"
varchar transaction_status "交易状态"
varchar remark "备注"
datetime create_time "创建时间"
datetime update_time "更新时间"
}
bank_flow_status {
bigint id PK "主键ID"
bigint bank_flow_id FK,UK "流水ID"
bigint contract_id FK "合同ID"
bigint approval_id FK "审批ID"
bigint invoice_id FK "发票ID"
varchar match_status "匹配状态"
varchar process_status "处理状态"
varchar relation_status "关联状态"
datetime match_time "匹配时间"
datetime process_time "处理时间"
varchar process_reason "处理原因"
varchar process_by "处理人"
}
bank_flow_history {
bigint id PK "主键ID"
bigint bank_flow_id FK "流水ID"
varchar operation_type "操作类型"
varchar before_status "变更前状态"
varchar after_status "变更后状态"
decimal before_amount "变更前金额"
decimal after_amount "变更后金额"
varchar operation_by "操作人"
datetime operation_time "操作时间"
varchar remark "备注"
}
approval_bank_flow_rel {
bigint id PK "主键ID"
bigint approval_id FK "审批ID"
bigint bank_flow_id FK "银行流水ID"
varchar relation_type "关联类型"
datetime create_time "创建时间"
}
invoice_bank_flow_rel {
bigint id PK "主键ID"
bigint invoice_id FK "发票ID"
bigint bank_flow_id FK "银行流水ID"
varchar relation_type "关联类型"
decimal amount "关联金额"
varchar relation_by "关联人"
datetime relation_time "关联时间"
tinyint auto_associated "是否自动关联"
decimal match_score "匹配分数"
text match_reason "匹配原因"
text remark "备注"
datetime create_time "创建时间"
}
8.3.2 流水与业务关联图
graph TB
subgraph "流水核心模块"
A[bank_flow
银行流水表]
A1[bank_flow_status
流水财务状态表]
A2[bank_flow_history
流水历史记录表]
end
subgraph "业务关联模块"
B[contract
合同表]
C[approval
审批表]
D[invoice
发票表]
end
subgraph "关联关系表"
E[approval_bank_flow_rel
审批-流水关联表]
F[invoice_bank_flow_rel
发票-流水关联表]
end
A --> A1
A --> A2
A1 -.-> B
A1 -.-> C
A1 -.-> D
A --> E
C --> E
A --> F
D --> F
style A fill:#e1f5ff
style A1 fill:#fff4e6
style E fill:#f3e5f5
style F fill:#e8f5e9
8.3.3 流水状态流转图
stateDiagram-v2
[*] --> 未匹配: 导入流水
[*] --> 未匹配: 手动录入
未匹配 --> 匹配中: 开始匹配
匹配中 --> 已匹配: 匹配成功
匹配中 --> 未匹配: 匹配失败
未匹配 --> 异常: 超过1个月未匹配
未匹配 --> 已删除: 删除流水
已匹配 --> 已匹配: 编辑流水
已匹配 --> 未匹配: 取消匹配
已匹配 --> 已删除: 删除流水
异常 --> 匹配中: 手动匹配
异常 --> 已处理: 标记为无票/其他
异常 --> 已删除: 删除流水
已处理 --> 已处理: 编辑处理原因
已处理 --> 已删除: 删除流水
note right of 未匹配
match_status: unmatched
等待系统自动匹配或手动匹配
end note
note right of 已匹配
match_status: matched
已关联审批或发票
end note
note right of 异常
match_status: exception
超过1个月未匹配
end note
note right of 已处理
match_status: processed
标记为无票或其他原因
end note
8.3.4 流水管理核心流程
flowchart TD
Start[导入流水] --> Source{来源类型}
Source -->|银行对账文件| A1[解析银行文件]
Source -->|手动录入| A2[填写流水信息]
Source -->|API同步| A3[从银行API同步]
A1 --> B[创建流水记录
bank_flow表]
A2 --> B
A3 --> B
B --> C{自动匹配}
C -->|匹配成功| D[创建关联记录
approval_bank_flow_rel/invoice_bank_flow_rel]
C -->|匹配失败| E[标记为未匹配]
D --> F[更新流水状态
bank_flow_status]
E --> G[等待手动处理]
G --> H{手动操作}
H -->|手动匹配| D
H -->|标记为异常| I[更新为异常状态]
H -->|标记为无票| J[更新为已处理状态]
F --> K[记录操作历史
bank_flow_history]
I --> K
J --> K
K --> End[流程结束]
style Start fill:#e8f5e9
style End fill:#e8f5e9
style B fill:#e1f5ff
style F fill:#fff4e6
style K fill:#f3e5f5