交互图
与单配发票的区别
单配发票 |
发票配待对账明细 |
首先做准入性校验 |
不需要做准入性校验(发票采集已做) |
优先后端自动匹配 |
用户选择明细匹配,提交校验 |
发票:单据明细 = 1:1 |
发票:单据明细 = n:n |
整体设计
组件设计
对应的组件结构图
流程设计
与 发票匹配2.0技术设计 的流程中的手动匹配一致(去掉容差部分),区别在于容差非前端计算
数据结构设计
原数据结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| { invoiceItems: [{ sourceItems: [{ invoiceAmount: , invoicedQuantity: , totalAmountIncludedTax: , totalAmountExcludedTax: , totalTax: , ... }], ], status, errorCode, matchStatus, matchResult, matchOffset, leftCapacity: { alert, ... }, }]}
referenceType: 匹配模式 globalInvoice: 匹配的发票列表 globalSourceItems: 全局的单据 globalMatchedSourceItems: 全局匹配的单据 globalUnMatchedSourceItems: 全局未匹配的单据 globalMatchedSourceItemsMap: 全局匹配的单据code与对应金额数量映射表 globalConfirmList: 全局待确认的映射表
|
上一个版本发票明细:单据明细为多对多,但是发票明细只能存在于同一张发票中
这个版本需要修改数据结构,改成匹配关系更为明确的方式,要支持跨发票的发票明细多对多(即发票明细:单据明细 = n:n 并且 发票:单据明细 = n:n)
数据流设计与原发票基本一致,参考 发票匹配2.0技术设计 中的数据流设计,区别在于增加了全局的globalMatchGroupList
假如是发票与单据明细匹配, 那么groupId挂在发票对象上,如果是发票明细与单据明细匹配,那么groupId挂在发票明细对象上
一条发票明细只能存在于一个匹配组,对于未验真发票来说,一张发票也只能存在一个匹配组,并且对于未验真发票来说不能单独匹配
现有数据结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| { invoiceItems: [{ groupId, ], status, errorCode, matchStatus, matchResult, matchOffset, groupId, leftCapacity: { alert, ... }, }]}
{ matchGroupList: { 1: { invoiceItems: [], sourceItems: [], invoiceCode: 12121212 }, 2: { invoiceItems: [], sourceItems: [], invoiceCode: 12121212 } } }
referenceType: 匹配模式 globalInvoice: 匹配的发票列表 globalSourceItems: 全局的单据 globalMatchedSourceItems: 全局匹配的单据 globalUnMatchedSourceItems: 全局未匹配的单据 globalMatchedSourceItemsMap: 全局匹配的单据code与对应金额数量映射表 globalConfirmList: 全局待确认的映射表 globalMatchGroupList: 全局匹配的匹配组
|