优化
This commit is contained in:
@@ -54,8 +54,9 @@ export async function run(context) {
|
||||
gap(context, '取得本轮财务 Fixture', 'financeFullFixtures', '缺少匹配 marker 的 financeFullFixtures,禁止借历史单据')
|
||||
return
|
||||
}
|
||||
const statements = values(fixtures.statements)
|
||||
const receivables = values(fixtures.receivableSettlements)
|
||||
const statements = Array.isArray(fixtures.statements) ? fixtures.statements.filter(Boolean) : []
|
||||
const receivables = Array.isArray(fixtures.receivableSettlements) ? fixtures.receivableSettlements.filter(Boolean) : []
|
||||
const payables = Array.isArray(fixtures.payableSettlements) ? fixtures.payableSettlements.filter(Boolean) : []
|
||||
const customerId = id(fixtures.customerId)
|
||||
const voucherFileId = id(fixtures.voucherFileId ?? fixtures.voucher?.fileId ?? fixtures.voucher?.id)
|
||||
if (!customerId || !voucherFileId) {
|
||||
@@ -63,13 +64,26 @@ export async function run(context) {
|
||||
return
|
||||
}
|
||||
|
||||
const issuedStatementIds = new Set(statements.filter((item) => item.status === 'ISSUED').map(statementId).filter(Boolean))
|
||||
const validReceivables = receivables.filter((item) => item.direction === 'RECEIVABLE'
|
||||
&& settlementId(item) && statementId(item) && issuedStatementIds.has(statementId(item)))
|
||||
const validPayables = payables.filter((item) => item.direction === 'PAYABLE' && settlementId(item) && item.supplierId)
|
||||
const arSettlementIds = new Set(validReceivables.map(settlementId))
|
||||
const arStatementIds = new Set(validReceivables.map(statementId))
|
||||
if (validReceivables.length !== 3 || arSettlementIds.size !== 3 || arStatementIds.size !== 3 || validPayables.length !== 1) {
|
||||
gap(context, '取得完整收付结算 Fixture', 'three AR and one AP settlements',
|
||||
`需要 3 张关联本轮 ISSUED 对账单的独立 AR 和 1 张带 supplierId 的 AP;actual AR=${validReceivables.length}, AP=${validPayables.length}`,
|
||||
'incomplete-settlement-fixture')
|
||||
return
|
||||
}
|
||||
|
||||
const manualIds = values(fixtures.feeSources).filter((fee) => fee.sourceType === 'MANUAL').map((fee) => id(fee.feeSourceId))
|
||||
const usedIds = new Set(statements.flatMap((statement) => values(statement.feeSourceIds).map(id)))
|
||||
context.assert(MODULE, '手动上传费用出账后来源完结', null,
|
||||
manualIds.length > 0 && manualIds.every((feeId) => usedIds.has(feeId)),
|
||||
`manual=${manualIds.length}, settled=${manualIds.filter((feeId) => usedIds.has(feeId)).length}`, OPTIONS)
|
||||
|
||||
const multiTargets = receivables.filter((item) => settlementId(item) && statementId(item)).slice(0, 3)
|
||||
const multiTargets = validReceivables
|
||||
if (multiTargets.length < 3) gap(context, '取得三张应收结算单', 'multi receipt allocation', '本轮没有三张独占应收单,禁止借历史单据')
|
||||
else {
|
||||
const details = await Promise.all(multiTargets.map((item) => detail(context, settlementId(item))))
|
||||
@@ -81,7 +95,7 @@ export async function run(context) {
|
||||
fixtures.receipts = { ...(fixtures.receipts || {}), multi: data(response) }
|
||||
}
|
||||
|
||||
const primary = receivables.find((item) => settlementId(item) && statementId(item))
|
||||
const primary = validReceivables[0]
|
||||
if (!primary) gap(context, '取得应收结算单', 'receivable partial/full', 'receivableSettlements 未提供 settlementId 与 statementId')
|
||||
else {
|
||||
const initial = await detail(context, settlementId(primary))
|
||||
@@ -95,7 +109,7 @@ export async function run(context) {
|
||||
fixtures.settlementFinalStates = { ...(fixtures.settlementFinalStates || {}), receivable: final.settlement }
|
||||
}
|
||||
|
||||
const payable = values(fixtures.payableSettlements).find((item) => item.direction === 'PAYABLE' && settlementId(item))
|
||||
const payable = validPayables[0]
|
||||
const payableId = settlementId(payable)
|
||||
if (!payableId) gap(context, '取得应付结算单', 'payable partial/full/overpayment', '前置 Fixture 的 payableSettlements 数组为空或缺少 PAYABLE 结算单')
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user