跳转到主要内容

财务ERP - 进销存模块(采购与台账)开发纲要

文档说明

本文档为20260618进销存模块梳理后的开发纲要,简明列出业务目标、核心功能、数据库设计及开发优先级,便于开发团队快速把握全貌。

版本历史

版本 日期 修改内容 作者
v1.0 2026-06-25 初稿 架构组

1. 业务目标

打通采购业务与财务核算的闭环,实现:

  • 采购订单 → 付款 → 入库 → 发票 全流程自动记账
  • 多维度台账查询(采购账户、供应商、发票、库存)
  • 移动加权平均成本核算
  • 账期采购的批量结算与对账

2. 核心功能模块

2.1 功能模块总览

序号 模块 核心功能 优先级
1 基础配置 采购账户配置、供应商收款账户、进销存全局配置 P0
2 采购订单(会计版) 订单创建、付款、退款、入库、退货、状态管理 P0
3 采购账户台账 台账列表查询、台账付款、批量对账单上传、图表统计 P0
4 供应商台账 供应商汇总查询、未开票明细导出 P0
5 发票台账 发票同步(税局API)、发票入账、发票查询 P0
6 本地仓库台账 移动加权平均计算、汇总账、明细账、勾稽校验 P1

2.2 业务流程图

核心流程:采购 → 财务全链路

┌─────────────────────────────────────────────────────────────────────────────┐
│                           采购全流程业务图                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐                │
│  │ 创建订单 │────▶│ 确认订单 │───▶│ 采购付款 │────▶│ 采购入库 │                 │
│  └─────────┘     └─────────┘     └────┬────┘     └────┬────┘                │
│                                       │               │                    │
│                                       ▼               ▼                    │
│                                 ┌─────────────────────────────┐             │
│                                 │        自动生成凭证           │             │
│                                 │  付款凭证 / 在途库存凭证       │             │
│                                 └─────────────────────────────┘             │
│                                                  │                         │
│                                                  ▼                         │
│  ┌─────────┐     ┌─────────┐     ┌─────────────────────────────┐           │
│  │ 发票入账 │◀────│ 发票同步 │◀────│       发票台账               │           │
│  └────┬────┘     └─────────┘     └─────────────────────────────┘           │
│       │                                                                     │
│       ▼                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐            │
│  │                    台账管理                                  │            │
│  │  采购账户台账  │  供应商台账  │  本地仓库台账  │  FBA仓库台账│     │            │
│  └─────────────────────────────────────────────────────────────┘            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

账期付款流程:

采购订单(账期付款) ──▶ 生成凭证(应付账款) ──▶ 进入采购账户台账
                              │
                              ▼
                    台账付款(批量勾选)
                              │
                              ▼
              选择现金账户实际支付 ──▶ 生成凭证(还款)
                              │
                              ▼
                    更新订单付款状态

发票入账流程:

税局API ──▶ 发票同步 ──▶ 发票台账(未入账)
                              │
                              ▼
                    匹配采购订单(供应商)
                              │
                              ▼
                    发票入账(勾选确认)
                              │
                              ▼
                    生成凭证 ──▶ 更新订单开票状态

3. 状态机设计

3.1 采购订单状态(四维状态)

状态维度 编码 说明 流转条件
订单状态 1-草稿 初始状态 创建时
2-已确认 订单生效 用户确认
3-已完成 全部完成 付款+入库完成
4-已取消 订单取消 仅草稿可取消
付款状态 1-未付款 初始 创建时
2-部分付款 已付>0且<总额 付款操作
3-已付款 已付=总额 付款完成
4-退款中 已发起退款 退款操作
5-已退款 退款完成 退款完成
库存状态 1-未收货 初始 创建时
2-部分收货 已收>0且<数量 入库操作
3-已收货 已收=数量 入库完成
发票状态 1-未开票 初始 创建时
2-部分开票 已开>0且<总额 发票入账
3-已开票 已开=总额 开票完成

3.2 付款状态流转图

                    ┌──────────────────────────────────────┐
                    │                                      │
                    ▼                                      │
   ┌─────────┐     ┌─────────┐     ┌─────────┐             │
   │ 未付款  │────▶│ 部分付款 │────▶│ 已付款   │             │
   └─────────┘     └─────────┘     └────┬────┘             │
        │                                │                 │
        │                                ▼                 │
        │                         ┌──────────┐             │
        │                         │ 退款中    │             │
        │                         └────┬─────┘             │
        │                              │                   │
        │                              ▼                   │
        │                         ┌──────────┐             │
        └────────────────────────▶│ 已退款   │─────────────┘
                                  └──────────┘

4. 核心业务规则

4.1 凭证生成规则

业务场景 借方科目 贷方科目 辅助核算
现金付款 预付账款-ERP采购供应商 银行存款/其他货币资金 供应商
账期付款 预付账款-ERP采购供应商 应付账款-XXX(账期户) 供应商
在途库存确认 在途库存_XX仓库 预付账款-ERP在途发票 存货(SKU)
采购入库 库存商品_XX仓库 在途库存_XX仓库 存货(SKU)
发票入账 预付账款-ERP在途发票 预付账款-ERP采购供应商 供应商
账期还款 应付账款-XXX(账期户) 银行存款/其他货币资金 供应商
退款(反向) 对应贷方科目 对应借方科目 供应商/存货

4.2 成本核算规则

规则项 说明
核算方法 移动加权平均法
单价精度 保留4位小数
金额精度 保留2位小数
入库影响 每笔采购入库重新计算单价
出库影响 使用当前单价计算成本,不改变单价
余额计算 滚动加减,不反算
尾差处理 出库时先乘后减,差额归入最后一条
核算周期 按月汇总,逐笔明细

4.3 台账核算规则

规则项 说明
请款金额 仅统计"归属供应商款项"的费用类型
待付金额 请款金额 - 已付金额
待入库金额 库存价值 - 已入库价值
待开票金额 应开票金额 - 已开票金额
应开票金额 归属供应商的请款金额(即待开票订单总额)
分摊方式 按比例分摊,尾差归最后一条
退款处理 红字冲销,减少请款/已付/库存/开票金额

5. 数据库设计

5.1 ER图(核心表关系)

┌─────────────────────────┐
│  fin_purchase_account   │
│  (采购账户)              │
└───────────┬─────────────┘
            │ 1
            │
            │ N
┌───────────▼─────────────┐          ┌─────────────────────────┐
│   fin_purchase_order    │──────────│   t_erp_supplier        │
│   (采购订单-会计版)       │ N       1│   (供应商-ERP)           │
└───────────┬─────────────┘          └─────────────────────────┘
            │ 1                              │
            │                                │ 1
            │ N                              │
┌───────────▼─────────────┐          ┌───────▼─────────────────┐
│  fin_purchase_payment   │          │   fin_supplier_bank     │
│  (采购付款明细)           │          │   (供应商收款账户)        │
└───────────┬─────────────┘          └─────────────────────────┘
            │
            │ N:1
┌───────────▼─────────────┐          ┌─────────────────────────┐
│    fin_vouchers         │          │   fin_invoice           │
│    (凭证-现有表)         │◀─────────│   (发票台账)             │
└─────────────────────────┘          └─────────────────────────┘
                                                │
┌─────────────────────────┐          ┌───────────▼─────────────┐
│  fin_warehouse_stock    │          │ fin_inventory_transaction│
│  (库存余额)              │          │ (库存变动明细)            │
└───────────┬─────────────┘          └───────────┬─────────────┘
            │                                    │
            └───────────────────┬────────────────┘
                                │
                    ┌───────────▼─────────────┐
                    │      fin_vouchers        │
                    │      (凭证-关联)          │
                    └─────────────────────────┘

5.2 新增表清单

序号 表名 说明 关联模块
1 fin_purchase_account 采购账户配置表 基础配置
2 fin_supplier_bank 供应商收款账户表 基础配置
3 fin_purchase_order 采购订单表(会计版) 采购订单
4 fin_purchase_payment 采购付款明细表 采购订单/台账
5 fin_invoice 发票台账表 发票台账
6 fin_warehouse_stock 库存余额表 库存台账
7 fin_inventory_transaction 库存变动明细表 库存台账

5.3 表结构详情

5.3.1 采购账户表 fin_purchase_account

字段 类型 必填 说明
id bigint unsigned 主键,自增
groupid bigint unsigned 租户ID(账套),索引
account_name varchar(100) 账户名称,同租户唯一
account_type tinyint 1-现金,2-账期,默认1
related_subject_id bigint unsigned 对应会计科目ID
config_json json 完整配置JSON
is_enabled tinyint 是否启用,默认1
created_time datetime 创建时间,自动
updated_time datetime 更新时间,自动

config_json 结构:

{
  "feeTypes": [
    { "code": "GOODS", "name": "货款", "isSupplierRelated": true },
    { "code": "FREIGHT", "name": "运费", "isSupplierRelated": true },
    { "code": "SERVICE", "name": "跨境直采手续费", "isSupplierRelated": false }
  ],
  "paySubjectMapping": {
    "GOODS": { "debitSubjectId": 101, "creditSubjectId": 201 }
  },
  "refundMapping": {
    "GOODS": { "debitSubjectId": 201, "creditSubjectId": 101 }
  },
  "creditPayAccounts": [
    { "cashAccountId": 1, "subjectMapping": { "debit": 301, "credit": 201 } }
  ]
}

5.3.2 供应商收款账户表 fin_supplier_bank

字段 类型 必填 说明
id bigint unsigned 主键,自增
groupid bigint unsigned 租户ID
supplier_id bigint unsigned 供应商ID,索引
bank_name varchar(100) 开户银行
account_name varchar(100) 收款账户名称
account_no varchar(50) 收款账号
is_default tinyint 是否默认,默认0
is_enabled tinyint 是否启用,默认1
created_time datetime 创建时间,自动

5.3.3 采购订单表 fin_purchase_order

字段 类型 必填 说明
id bigint unsigned 主键,自增
groupid bigint unsigned 租户ID,索引
supplier_id bigint unsigned 供应商ID
purchase_account_id bigint unsigned 采购账户ID
sku varchar(50) SKU编码
warehouse_code varchar(50) 入库仓库编码
order_qty decimal(12,2) 订单数量,>0
unit_price decimal(18,4) 采购单价,≥0
total_amount decimal(18,2) 订单金额
paid_amount decimal(18,2) 累计已付,默认0
inventory_value decimal(18,2) 库存价值,默认0
invoiced_amount decimal(18,2) 已开票金额,默认0
status_order tinyint 1-草稿,2-已确认,3-已完成,4-已取消
status_pay tinyint 1-未付款,2-部分付款,3-已付款,4-退款中,5-已退款
status_inv tinyint 1-未开票,2-部分开票,3-已开票
status_stock tinyint 1-未收货,2-部分收货,3-已收货
created_time datetime 创建时间,自动
updated_time datetime 更新时间,自动

索引建议(groupid, supplier_id), (groupid, status_pay), (groupid, status_inv), (groupid, status_stock)

5.3.4 采购付款明细表 fin_purchase_payment

字段 类型 必填 说明
id bigint unsigned 主键,自增
purchase_order_id bigint unsigned 采购订单ID,索引
purchase_account_id bigint unsigned 采购账户ID
voucher_id bigint unsigned 关联凭证ID,索引
fee_type varchar(50) 费用类型
is_supplier_related tinyint 是否归属供应商,默认1
amount decimal(18,2) 支付金额
payment_date date 付款日期
is_refund tinyint 是否退款,默认0
refund_original_id bigint unsigned 退款对应的原付款明细ID
status tinyint 0-正常,1-已退款,默认0
created_time datetime 创建时间,自动

5.3.5 发票台账表 fin_invoice

字段 类型 必填 说明
id bigint unsigned 主键,自增
invoice_no varchar(100) 数电发票号码,唯一
invoice_type varchar(20) 数电专票/普票/传统
groupid bigint unsigned 入账账套ID,索引
supplier_id bigint unsigned 匹配的供应商ID
seller_name varchar(200) 销方名称
seller_tax_no varchar(50) 销方税号
invoice_date date 开票日期
amount_with_tax decimal(18,2) 价税合计
amount_without_tax decimal(18,2) 不含税金额
tax_amount decimal(18,2) 税额
status varchar(20) NORMAL/CANCELLED/RED_ALL/RED_PART/ABNORMAL
posting_status tinyint 0-未入账,1-已入账,默认0
voucher_id bigint unsigned 入账凭证ID
sync_time datetime 同步时间
created_time datetime 创建时间,自动

5.3.6 库存余额表 fin_warehouse_stock

字段 类型 必填 说明
id bigint unsigned 主键,自增
groupid bigint unsigned 租户ID
sku varchar(50) SKU编码
warehouse_code varchar(50) 仓库编码
warehouse_type tinyint 1-本地,2-FBA,默认1
current_qty decimal(12,2) 当前数量,默认0
current_amount decimal(18,2) 当前金额,默认0
unit_cost decimal(18,4) 移动平均单价,默认0
period varchar(6) 会计期间(YYYYMM)
updated_time datetime 更新时间,自动

唯一索引(groupid, sku, warehouse_code, warehouse_type, period)

5.3.7 库存变动明细表 fin_inventory_transaction

字段 类型 必填 说明
id bigint unsigned 主键,自增
groupid bigint unsigned 租户ID
sku varchar(50) SKU编码
warehouse_code varchar(50) 仓库编码
trans_date date 变动日期
trans_type varchar(50) PURCHASE_IN/SALE_OUT/TRANSFER_IN/ADJUST
source_doc_id varchar(100) 来源单据号
qty_change decimal(12,2) 正为入库,负为出库
amount_change decimal(18,2) 金额变动
unit_cost decimal(18,4) 发生时单价
voucher_id bigint unsigned 关联凭证ID,索引
created_time datetime 创建时间,自动

5.4 与现有表的关系

现有表 关联方式 说明
fin_accounting_subjects subject_id 采购账户关联科目,凭证分录使用
fin_vouchers voucher_id 付款、入库、发票入账生成的凭证
fin_voucher_entries voucher_id 凭证分录明细
fin_voucher_entries_auxiliary entry_id 供应商/存货辅助核算
t_erp_supplier supplier_id 供应商主数据(跨模块)
t_erp_sku sku SKU主数据(跨模块)
t_erp_warehouse warehouse_code 仓库主数据(跨模块)

5.5 索引清单

索引字段 类型 用途
fin_purchase_account groupid 普通 租户隔离
fin_supplier_bank supplier_id 普通 按供应商查询
fin_supplier_bank (groupid, supplier_id) 复合 租户+供应商查询
fin_purchase_order groupid 普通 租户隔离
fin_purchase_order (groupid, supplier_id) 复合 供应商台账查询
fin_purchase_order (groupid, status_pay) 复合 付款状态筛选
fin_purchase_order (groupid, status_inv) 复合 发票状态筛选
fin_purchase_order (groupid, status_stock) 复合 库存状态筛选
fin_purchase_payment purchase_order_id 普通 订单关联查询
fin_purchase_payment voucher_id 普通 凭证关联查询
fin_invoice invoice_no 唯一 发票去重
fin_invoice groupid 普通 租户隔离
fin_invoice (groupid, posting_status) 复合 入账状态筛选
fin_warehouse_stock (groupid, sku, warehouse_code, warehouse_type, period) 唯一 期间库存查询
fin_inventory_transaction (groupid, sku) 复合 SKU明细查询
fin_inventory_transaction voucher_id 普通 凭证关联查询

6. 接口清单

6.1 基础配置接口

方法 路径 说明
POST /api/finance/purchase/account/create 创建采购账户
PUT /api/finance/purchase/account/update 更新采购账户
GET /api/finance/purchase/account/list 查询采购账户列表
GET /api/finance/purchase/account/detail/{id} 查询采购账户详情
POST /api/finance/supplier/bank/save 保存供应商收款账户
GET /api/finance/supplier/bank/list 查询供应商收款账户列表

6.2 采购订单接口

方法 路径 说明
POST /api/finance/purchase/order/create 创建采购订单
POST /api/finance/purchase/order/confirm 确认订单
POST /api/finance/purchase/order/pay 采购付款
POST /api/finance/purchase/order/refund 采购退款
POST /api/finance/purchase/order/receive 采购入库
POST /api/finance/purchase/order/return 采购退货
GET /api/finance/purchase/order/page 订单列表查询
GET /api/finance/purchase/order/detail/{id} 订单详情查询

6.3 台账接口

方法 路径 说明
GET /api/finance/ledger/purchase/page 采购账户台账列表
POST /api/finance/ledger/purchase/ledger-pay 台账付款
POST /api/finance/ledger/purchase/upload-pay 上传对账单批量付款
GET /api/finance/ledger/purchase/statistics 台账图表统计
GET /api/finance/ledger/supplier/page 供应商台账列表
GET /api/finance/ledger/supplier/export-uninvoiced 导出未开票明细

6.4 发票接口

方法 路径 说明
POST /api/finance/ledger/invoice/sync 手动同步发票
GET /api/finance/ledger/invoice/page 发票台账列表
POST /api/finance/ledger/invoice/post 发票入账
GET /api/finance/ledger/invoice/statistics 发票统计

6.5 库存接口

方法 路径 说明
GET /api/finance/ledger/stock/summary 库存汇总账
GET /api/finance/ledger/stock/detail 库存明细账
GET /api/finance/ledger/stock/check 勾稽校验

7. 开发优先级与排期

7.1 优先级定义

等级 说明 必须完成时间
P0 核心功能,必须上线 第4周末
P1 重要功能,上线后尽快完成 第6周末
P2 增强功能,后续迭代 后续版本

7.2 排期总览

阶段 周期 模块 任务数 优先级
阶段一 第1周 基础配置 4 P0
阶段二 第2-3周 采购订单(会计版) 7 P0
阶段三 第3-4周 采购账户台账 5 P0
阶段四 第4-5周 发票台账与供应商台账 5 P0
阶段五 第5-6周 库存台账 6 P1
阶段六 第6周 联调与测试 - P0/P1

7.3 里程碑

里程碑 时间 交付物 验收标准
M1 第1周末 基础配置上线 采购账户CRUD、供应商收款账户管理可用
M2 第3周末 采购订单上线 订单创建、付款、退款、入库、凭证生成可用
M3 第4周末 台账模块上线 采购账户台账、台账付款、批量对账单可用
M4 第5周末 发票模块上线 发票同步、发票入账、供应商台账可用
M5 第6周中 库存模块上线 汇总账、明细账、勾稽校验可用
M6 第6周末 全量联调上线 端到端流程测试通过,数据迁移完成

7.4 任务依赖关系

基础配置 (P0)
    │
    ├── 采购订单 (P0)
    │       │
    │       ├── 采购账户台账 (P0)
    │       │       │
    │       │       └── 批量对账单上传 (P0)
    │       │
    │       ├── 发票台账 (P0)
    │       │       │
    │       │       └── 供应商台账 (P0)
    │       │
    │       └── 库存台账 (P1)
    │               │
    │               ├── 移动加权平均 (P1)
    │               │
    │               └── 勾稽校验 (P1)
    │
    └── 供应商收款账户 (P0) ──▶ 采购订单付款

8. 测试验收要点

8.1 核心流程测试

测试场景 验证点
现金采购完整流程 订单创建→付款→入库→发票入账,凭证正确,状态流转正确
账期采购完整流程 订单创建→账期付款→台账付款→入库→发票入账,凭证正确
部分付款+部分入库 状态正确(部分付款/部分收货),金额正确
退款(已付款未入库) 红字凭证,状态变为已退款
退款(已付款已入库) 退货凭证,库存回退,状态正确
批量对账单上传 Excel解析→预览→确认→批量生成凭证

8.2 台账查询测试

测试场景 验证点
采购账户台账列表 各金额字段正确,汇总行准确
供应商台账 按供应商汇总数据正确
发票台账 同步数据完整,入账状态正确
库存汇总账 期初/入库/出库/期末数据正确
库存明细账 逐笔变动可追溯,联查凭证

8.3 数据一致性测试

测试项 验证方法
订单金额 = 付款明细合计 查询统计对比
库存价值 = 入库明细合计 查询统计对比
已开票金额 = 发票入账金额合计 查询统计对比
库存余额 = 期初 + 入库 - 出库 滚动计算校验
库存余额 = 总账科目余额 勾稽校验接口

9. 风险与应对

风险 影响 应对措施
税局API不稳定 发票同步失败 支持手动导入Excel,保留重试机制
历史数据量大 迁移耗时长 分批迁移,错峰执行
科目配置复杂 凭证生成错误 提供配置校验工具,预置常用模板
移动加权精度 尾差累积 保留4位小数,定期勾稽校验
多账套权限 数据隔离混乱 所有查询强制带groupid,使用多租户拦截器
与现有代码冲突 系统不稳定 新表独立,Service独立,不修改现有代码

10. 附录

10.1 术语表

术语 说明
账期账户 采购时先挂账,后续通过台账付款实际支付的账户
现金账户 采购时直接扣款的账户
台账付款 账期账户的还款操作,在台账页面批量处理
归属供应商款项 计入供应商应付/已付的金额(货款、运费)
非供应商款项 不计入供应商应付的金额(手续费)
移动加权平均 每笔入库后重新计算库存单价的核算方法
在途库存 已付款但尚未入库的存货
P0/P1/P2 优先级:P0最高,P2最低

10.2 参考文档

  • 20260618 进销存模块梳理(采购模块、台账)需求文档
  • 财务ERP会计模块详细开发文档
  • 财务ERP - 进销存模块详细开发流程文档