| | |
| | | |
| | | ## 涉及页面 |
| | | |
| | | - 采购来票管理页(**新建页面**,参考采购申请/采购订单页面结构) |
| | | - 采购来票管理页(来票列表、新增/编辑/详情弹窗) |
| | | - 采购订单详情页(展示该订单下已关联的来票信息) |
| | | - 付款单管理页(新建/编辑弹窗、列表、详情) |
| | | - 付款单详情页(展示关联的来票信息) |
| | |
| | | ## 业务流程与数据带入 |
| | | |
| | | 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. 来票管理 |
| | | |
| | | | 方法 | 路径 | 说明 | |
| | | |------|------|------| |
| | |
| | | | 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`(待审核数量)。前端请同步删除对应按钮与接口调用。 |
| | | |
| | | **创建/更新来票请求参数:** |
| | | |
| | |
| | | | 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 响应:** |
| | | |
| | |
| | | | 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` 嵌套对象 | |
| | | |
| | | **请求参数新增:** |
| | | |
| | |
| | | | 字段 | 类型 | 说明 | |
| | | |------|------|------| |
| | | | invoiceId | Long | 关联的来票编号 | |
| | | | invoice | Object | 关联的来票信息(含 no、invoiceNo、invoiceTitle、price、auditStatus 等) | |
| | | | invoice | Object | 关联的来票信息(含 no、invoiceNo、invoiceTitle、price 等) | |
| | | |
| | | **响应示例:** |
| | | |
| | |
| | | "no": "FPD20260810000001", |
| | | "invoiceNo": "02564178", |
| | | "invoiceTitle": "XX科技有限公司", |
| | | "price": 9000.00, |
| | | "auditStatus": 20 |
| | | "price": 9000.00 |
| | | }, |
| | | "paymentPrice": 5000.00 |
| | | } |
| | |
| | | | 发票号码/抬头 | 来票列表、详情 | 录入字段 | |
| | | | 来票金额 | 来票列表、详情、付款表单 | 元 | |
| | | | 来票日期 | 来票列表、详情 | | |
| | | | 审批状态 | 来票列表、详情 | 字典展示 | |
| | | | 发票附件 | 来票详情、来票列表 | 上传/预览/下载 | |
| | | | 发票附件 | 来票详情、来票列表 | 上传/预览/下载,有附件显示"已上传"Tag | |
| | | | 剩余可付金额 | 来票列表、付款表单 | 来票金额 - 已付款金额 | |
| | | | 关联来票 | 付款列表、付款详情 | 展示 invoice.no / invoice.invoiceNo / invoice.price | |
| | | |
| | | > 已移除展示字段:来票列表的"审批状态"列、搜索条件"审核状态"、"审核/反审核"操作按钮。 |
| | | |
| | | ## 业务规则说明 |
| | | |
| | | | 场景 | 规则 | |
| | | |------|------| |
| | | | 来票创建 | 采购订单必须审核通过;来票供应商与采购订单一致;来票金额不超过订单剩余可开票金额 | |
| | | | 来票编辑 | 仅"未提交"状态可编辑 | |
| | | | 来票删除 | 审批通过后不可删除 | |
| | | | 来票提交审批 | 仅"未提交"状态可提交,提交后进入审批中 | |
| | | | 付款选择来票 | 仅审批通过 + 已上传发票附件的来票可选 | |
| | | | 来票创建 | 采购订单必须审核通过;来票供应商与采购订单一致;来票金额不超过订单剩余可开票金额;**创建即生效,无需审核** | |
| | | | 来票编辑 | 任意状态可编辑,无审核状态限制 | |
| | | | 来票删除 | 已有有效付款单(未作废且付款金额 > 0)关联的来票不可删除,其余可删除 | |
| | | | 付款选择来票 | 已上传发票附件且剩余可付金额 > 0 的来票可选(**不再要求审核通过**) | |
| | | | 付款金额上限 | 付款金额 <= 该来票金额 - 该来票已付款金额(未审核+审批中+已审核付款,排除作废) | |
| | | | 供应商一致性 | 付款的供应商必须与关联来票的供应商一致 | |
| | | | 存量付款单 | invoiceId 为空的存量付款单,编辑时需重新选择合格来票 | |
| | |
| | | - 付款表单选择来票时,先按供应商过滤(`supplierId`),可选订单时传 `purchaseOrderId` 进一步过滤。 |
| | | - `remainingInvoicePrice` 为负数或 0 的来票不会出现在 simple-list 中,前端可直接按返回列表渲染。 |
| | | - 付款金额校验在后端,前端可将来票的 `remainingInvoicePrice` 作为付款金额输入上限提示。 |
| | | - 来票审批状态变化通过 BPM 回调更新,前端无需处理,分页接口直接返回最新状态。 |
| | | - 来票发票附件上传使用 system 模块 Storage API(upload -> bind),不要使用旧版 /infra/file 接口。 |