7 天以前 e1797a873bf114329f4870062201d388155ef014
docs/purchase_invoice_payment_link.md
@@ -2,7 +2,7 @@
## 涉及页面
- 采购来票管理页(**新建页面**,参考采购申请/采购订单页面结构)
- 采购来票管理页(来票列表、新增/编辑/详情弹窗)
- 采购订单详情页(展示该订单下已关联的来票信息)
- 付款单管理页(新建/编辑弹窗、列表、详情)
- 付款单详情页(展示关联的来票信息)
@@ -10,15 +10,14 @@
## 业务流程与数据带入
1. 采购订单(审核通过)-> 创建来票:`purchaseOrderId` 必选,供应商自动带出(以采购订单的供应商为准,前端无需传 `supplierId`,由后端按采购订单查询设置)。
2. 来票创建后 -> 上传发票附件(走 system 模块 Storage API)。
3. 来票提交审批 -> 审批通过 -> 才可作为付款关联对象。
4. 新建付款单 -> 选择关联来票(`invoiceId` 必填):从 `GET /erp/purchase-invoice/simple-list?supplierId=&purchaseOrderId=` 选择,仅显示"审批通过 + 已上传附件 + 剩余可付金额 > 0"的来票;选择后 `remainingInvoicePrice` 可用于预填付款金额上限。
2. 来票创建后 -> 上传发票附件(走 system 模块 Storage API)。**来票创建即生效,无审核环节**。
3. 新建付款单 -> 选择关联来票(`invoiceId` 必填):从 `GET /erp/purchase-invoice/simple-list?supplierId=&purchaseOrderId=` 选择,仅显示"已上传附件 + 剩余可付金额 > 0"的来票;选择后 `remainingInvoicePrice` 可用于预填付款金额上限。
对应关系:**采购订单(1) -> 来票(N) -> 付款(M)**。
## API
### 1. 来票管理(新)
### 1. 来票管理
| 方法 | 路径 | 说明 |
|------|------|------|
@@ -28,9 +27,9 @@
| GET | /erp/purchase-invoice/get?id= | 获得来票详情 |
| GET | /erp/purchase-invoice/page | 来票分页 |
| GET | /erp/purchase-invoice/export-excel | 导出来票 Excel |
| PUT | /erp/purchase-invoice/submit?id= | 提交来票审批 |
| GET | /erp/purchase-invoice/audit-count | 待审核来票数量 |
| GET | /erp/purchase-invoice/simple-list?supplierId=&purchaseOrderId= | 精简列表(付款表单选来票) |
> 已移除接口:`/erp/purchase-invoice/update-status`(审核/反审核)、`/erp/purchase-invoice/audit-count`(待审核数量)。前端请同步删除对应按钮与接口调用。
**创建/更新来票请求参数:**
@@ -46,17 +45,18 @@
| remark | String | 否 | 备注 |
| blobIds | List\<Long\> | 否 | 发票附件 blobId 列表 |
**来票分页/详情响应新增字段:**
**来票分页/详情响应字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| no | String | 来票编号(后端生成,前缀 FPD) |
| supplierName | String | 供应商名称 |
| order | Object | 采购订单信息(嵌套) |
| auditStatus | Integer | 审批状态(0未提交/10审批中/20审核通过/30审核不通过/40已取消) |
| attachmentList | List | 发票附件列表 |
| hasAttachment | Boolean | 是否已上传发票附件 |
| remainingInvoicePrice | BigDecimal | 剩余可付金额 = 来票金额 - 该来票已付款金额 |
> 已移除响应字段:`auditStatus`(审批状态)、`processInstanceId`(工作流编号)。
**simple-list 响应:**
@@ -69,18 +69,17 @@
| price | BigDecimal | 来票金额 |
| supplierId | Long | 供应商编号 |
| purchaseOrderId | Long | 采购订单编号 |
| auditStatus | Integer | 审批状态 |
| hasAttachment | Boolean | 是否已上传附件(恒为 true) |
| remainingInvoicePrice | BigDecimal | 剩余可付金额 |
### 2. 付款单(接口变更)
### 2. 付款单
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /erp/finance-payment/create | 创建付款单,请求体新增 `invoiceId`(必填) |
| PUT | /erp/finance-payment/update | 更新付款单,请求体新增 `invoiceId`(必填) |
| GET | /erp/finance-payment/get | 响应新增 `invoiceId`、`invoice` 嵌套对象 |
| GET | /erp/finance-payment/page | 响应新增 `invoiceId`、`invoice` 嵌套对象 |
| POST | /erp/finance-payment/create | 创建付款单,请求体含 `invoiceId`(必填) |
| PUT | /erp/finance-payment/update | 更新付款单,请求体含 `invoiceId`(必填) |
| GET | /erp/finance-payment/get | 响应含 `invoiceId`、`invoice` 嵌套对象 |
| GET | /erp/finance-payment/page | 响应含 `invoiceId`、`invoice` 嵌套对象 |
**请求参数新增:**
@@ -93,7 +92,7 @@
| 字段 | 类型 | 说明 |
|------|------|------|
| invoiceId | Long | 关联的来票编号 |
| invoice | Object | 关联的来票信息(含 no、invoiceNo、invoiceTitle、price、auditStatus 等) |
| invoice | Object | 关联的来票信息(含 no、invoiceNo、invoiceTitle、price 等) |
**响应示例:**
@@ -109,8 +108,7 @@
      "no": "FPD20260810000001",
      "invoiceNo": "02564178",
      "invoiceTitle": "XX科技有限公司",
      "price": 9000.00,
      "auditStatus": 20
      "price": 9000.00
    },
    "paymentPrice": 5000.00
  }
@@ -127,20 +125,20 @@
| 发票号码/抬头 | 来票列表、详情 | 录入字段 |
| 来票金额 | 来票列表、详情、付款表单 | 元 |
| 来票日期 | 来票列表、详情 | |
| 审批状态 | 来票列表、详情 | 字典展示 |
| 发票附件 | 来票详情、来票列表 | 上传/预览/下载 |
| 发票附件 | 来票详情、来票列表 | 上传/预览/下载,有附件显示"已上传"Tag |
| 剩余可付金额 | 来票列表、付款表单 | 来票金额 - 已付款金额 |
| 关联来票 | 付款列表、付款详情 | 展示 invoice.no / invoice.invoiceNo / invoice.price |
> 已移除展示字段:来票列表的"审批状态"列、搜索条件"审核状态"、"审核/反审核"操作按钮。
## 业务规则说明
| 场景 | 规则 |
|------|------|
| 来票创建 | 采购订单必须审核通过;来票供应商与采购订单一致;来票金额不超过订单剩余可开票金额 |
| 来票编辑 | 仅"未提交"状态可编辑 |
| 来票删除 | 审批通过后不可删除 |
| 来票提交审批 | 仅"未提交"状态可提交,提交后进入审批中 |
| 付款选择来票 | 仅审批通过 + 已上传发票附件的来票可选 |
| 来票创建 | 采购订单必须审核通过;来票供应商与采购订单一致;来票金额不超过订单剩余可开票金额;**创建即生效,无需审核** |
| 来票编辑 | 任意状态可编辑,无审核状态限制 |
| 来票删除 | 已有有效付款单(未作废且付款金额 > 0)关联的来票不可删除,其余可删除 |
| 付款选择来票 | 已上传发票附件且剩余可付金额 > 0 的来票可选(**不再要求审核通过**) |
| 付款金额上限 | 付款金额 <= 该来票金额 - 该来票已付款金额(未审核+审批中+已审核付款,排除作废) |
| 供应商一致性 | 付款的供应商必须与关联来票的供应商一致 |
| 存量付款单 | invoiceId 为空的存量付款单,编辑时需重新选择合格来票 |
@@ -151,5 +149,4 @@
- 付款表单选择来票时,先按供应商过滤(`supplierId`),可选订单时传 `purchaseOrderId` 进一步过滤。
- `remainingInvoicePrice` 为负数或 0 的来票不会出现在 simple-list 中,前端可直接按返回列表渲染。
- 付款金额校验在后端,前端可将来票的 `remainingInvoicePrice` 作为付款金额输入上限提示。
- 来票审批状态变化通过 BPM 回调更新,前端无需处理,分页接口直接返回最新状态。
- 来票发票附件上传使用 system 模块 Storage API(upload -> bind),不要使用旧版 /infra/file 接口。