feat: 增强差旅报销审核流程与票据智能推理

优化本体解析和编排器的差旅场景处理能力,完善报销单草稿
保存和费用明细同步逻辑,前端报销创建页面增加行程推理和
票据审核交互,新增助手会话快照工具函数,补充单元测试。
This commit is contained in:
caoxiaozhu
2026-05-21 16:09:47 +08:00
parent f28d7e6d16
commit e701fa01da
33 changed files with 3033 additions and 337 deletions

View File

@@ -5,6 +5,8 @@ import {
buildLocalExtractionProgressMessages,
buildLocalIntentPreview,
inferLocalFlowCandidates,
shouldRequestExpenseIntentConfirmation,
shouldRequestExpenseSceneSelection,
summarizeSemanticIntentDetail
} from '../src/utils/reimbursementTextInference.js'
@@ -40,3 +42,32 @@ test('semantic intent detail includes recognized expense type', () => {
'已识别为报销场景,当前目标是草稿生成,费用类型为交通费'
)
})
test('ambiguous expense prompt waits for scene selection before extraction preview', () => {
const ambiguousMessage = '业务发生时间:2026-02-20 至 2026-02-23去上海支持上海电力部署项目申请报销'
assert.equal(shouldRequestExpenseSceneSelection(ambiguousMessage), true)
assert.match(buildLocalIntentPreview(ambiguousMessage), /需要先由用户选择场景/)
assert.doesNotMatch(buildLocalIntentPreview(ambiguousMessage), /草稿生成/)
})
test('clear expense type does not request scene selection', () => {
const travelMessage = '业务发生时间:2026-02-20 至 2026-02-23去上海出差支持上海电力部署项目申请差旅报销'
assert.equal(shouldRequestExpenseSceneSelection(travelMessage), false)
assert.match(buildLocalIntentPreview(travelMessage), /差旅费/)
})
test('business activity without expense intent asks for reimbursement confirmation first', () => {
const businessMessage = '去上海电力支撑项目部署'
assert.equal(shouldRequestExpenseIntentConfirmation(businessMessage), true)
assert.match(buildLocalIntentPreview(businessMessage), /是否发起报销尚不明确/)
assert.equal(shouldRequestExpenseSceneSelection(businessMessage), false)
})
test('explicit technical operation does not ask for reimbursement confirmation', () => {
const operationMessage = '去上海电力支撑项目部署,帮我整理服务器部署步骤'
assert.equal(shouldRequestExpenseIntentConfirmation(operationMessage), false)
})