feat: 重构报销单AI预审流程并添加平台风险规则引擎

- 将AI验审改为AI预审,高风险不再拦截而是随单流转给审批人复核
- 新增平台风险规则评估引擎,支持事由过短、票据异常、重复发票等多种评估器
- 用户上下文增加部门信息(department_name),认证流程同步关联组织架构
- 规则scenario_json改为中文标签(差旅/费用科目),统一场景分类
- 新增orchestrator审核流程测试用例
- 前端更新审计视图、差旅报销等相关页面
This commit is contained in:
caoxiaozhu
2026-05-20 09:36:01 +08:00
parent 2574bc81d1
commit 57957d11a0
23 changed files with 2109 additions and 553 deletions

View File

@@ -44,9 +44,6 @@ const DOCUMENT_TYPE_LABELS = {
const LOCATION_REQUIRED_EXPENSE_TYPES = new Set([
'travel',
'hotel',
'transport',
'meal',
'meeting',
'entertainment'
])
@@ -100,7 +97,7 @@ function buildFallbackProgressSteps() {
return [
{ index: 1, label: '保存草稿', time: '已完成', done: true, active: true },
{ index: 2, label: '待提交', time: '进行中', active: true, current: true },
{ index: 3, label: 'AI审', time: '待处理' },
{ index: 3, label: 'AI审', time: '待处理' },
{ index: 4, label: '直属领导审批', time: '待处理' },
{ index: 5, label: '财务审批', time: '待处理' },
{ index: 6, label: '归档入账', time: '待处理' }
@@ -281,9 +278,6 @@ function buildDraftBlockingIssues(request, expenseItems) {
if (isPlaceholderValue(request.profileName)) {
issues.push('申请人未完善')
}
if (isPlaceholderValue(request.profileDepartment)) {
issues.push('所属部门未完善')
}
if (isPlaceholderValue(request.typeLabel)) {
issues.push('报销类型未完善')
}
@@ -1097,9 +1091,9 @@ export default {
const claimStatus = String(payload?.status || '').trim().toLowerCase()
const approvalStage = String(payload?.approval_stage || payload?.approvalStage || '').trim()
if (claimStatus === 'submitted') {
toast(`${request.value.id} 已完成 AI${approvalStage ? `,当前节点:${approvalStage}` : ',并已提交审批'}`)
toast(`${request.value.id} 已完成 AI${approvalStage ? `,当前节点:${approvalStage}` : ',并已提交审批'}`)
} else if (claimStatus === 'supplement') {
toast(`${request.value.id} AI审未通过,已转待补充。`)
toast(`${request.value.id} AI审未通过,已转待补充。`)
} else {
toast(`${request.value.id} 提交结果已更新。`)
}