feat: 完善差旅票据行程提取与费用明细回填逻辑

增强文档智能识别的票据场景关键词和字段提取能力,优化
会话关联草稿报销单的解析路径,修复费用明细合并和票据
去重边界问题,前端改进报销创建和审批详情交互,补充单
元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-21 14:24:51 +08:00
parent b183b0bd5e
commit f28d7e6d16
24 changed files with 1565 additions and 433 deletions

View File

@@ -212,15 +212,15 @@ export function buildAttachmentRiskCards({
const normalizedClaimRiskFlags = Array.isArray(claimRiskFlags) ? claimRiskFlags : []
const latestManualReturnCard = buildManualReturnRiskCard(resolveLatestManualReturnFlag(normalizedClaimRiskFlags))
const claimCards = normalizedClaimRiskFlags
.map((flag, index) => {
.flatMap((flag, index) => {
if (flag && typeof flag === 'object' && normalizeText(flag.source) === 'manual_return') {
return null
return []
}
if (!flag || typeof flag !== 'object') {
const risk = normalizeText(flag)
return risk
? {
? [{
id: `claim-risk-${index}`,
tone: 'medium',
label: '单据风险',
@@ -229,27 +229,38 @@ export function buildAttachmentRiskCards({
summary: '',
ruleBasis: ['系统预审规则命中该风险提示。'],
suggestion: '请结合业务背景补充说明或调整单据后再提交。'
}
: null
}]
: []
}
const tone = normalizeTone(flag.severity)
if (!['medium', 'high'].includes(tone)) {
return null
return []
}
return {
id: `claim-risk-${index}`,
const flagPoints = Array.isArray(flag.points)
? flag.points.map((point) => normalizeText(point)).filter(Boolean)
: []
const risks = flagPoints.length
? flagPoints
: [normalizeText(flag.message || flag.reason || flag.summary)].filter(Boolean)
const summary = normalizeText(flag.summary)
const ruleBasis = uniqueTexts([
...normalizeRuleBasis(flag.rule_basis || flag.ruleBasis),
summary ? `风险汇总:${summary}` : '',
'系统预审规则命中该风险提示。'
])
return risks.map((risk, pointIndex) => ({
id: `claim-risk-${index}-${pointIndex}`,
tone,
label: normalizeText(flag.label) || (tone === 'high' ? '高风险' : '中风险'),
title: normalizeText(flag.label) || '单据风险提示',
risk: normalizeText(flag.message || flag.reason || flag.summary),
summary: normalizeText(flag.summary),
ruleBasis: normalizeRuleBasis(flag.rule_basis || flag.ruleBasis).length
? normalizeRuleBasis(flag.rule_basis || flag.ruleBasis)
: ['系统预审规则命中该风险提示。'],
risk,
summary,
ruleBasis,
suggestion: normalizeText(flag.suggestion) || '请结合业务背景补充说明或调整单据后再提交。'
}
}))
})
.filter(Boolean)
if (latestManualReturnCard) {