feat: 新增预算后端服务与差旅风险规则库

后端新增预算模型、端点和服务模块,支持预算 CRUD 和余额
查询,清理旧生成规则文件并替换为按严重等级分类的差旅风
险规则库,优化认证权限和报销单访问策略,新增财务规则目
录和演示数据构建脚本,前端预算中心增加对话框交互,完善
审计页面运行时模型和元数据展示,补充单元测试。
This commit is contained in:
caoxiaozhu
2026-05-26 17:29:35 +08:00
parent e1e515ecae
commit e7bef0883d
85 changed files with 6443 additions and 1497 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,173 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.high.city_mismatch",
"name": "差旅目的地与票据城市不一致高风险",
"description": "交通票、住宿票识别出的城市与申报目的地或明细地点不一致,且事由未说明绕行、多地拜访或改签原因。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-行程一致性",
"ontology_signal": "travel_city_mismatch",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.location",
"label": "申报地点",
"type": "text",
"source": "claim"
},
{
"key": "item.item_location",
"label": "明细发生地点",
"type": "text",
"source": "item"
},
{
"key": "employee.location",
"label": "员工常驻地",
"type": "text",
"source": "employee"
},
{
"key": "attachment.route_cities",
"label": "交通票行程城市",
"type": "list",
"source": "attachment"
},
{
"key": "attachment.hotel_city",
"label": "住宿城市",
"type": "text",
"source": "attachment"
},
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
}
]
},
"params": {
"template_key": "field_compare_v1",
"semantic_type": "travel_route_city_consistency",
"field_keys": [
"claim.location",
"item.item_location",
"employee.location",
"attachment.route_cities",
"attachment.hotel_city",
"claim.reason",
"item.item_reason"
],
"reference_city_fields": [
"claim.location",
"item.item_location"
],
"attachment_city_fields": [
"attachment.route_cities",
"attachment.hotel_city"
],
"home_city_fields": [
"employee.location"
],
"exception_fields": [
"claim.reason",
"item.item_reason"
],
"exception_keywords": [
"中转",
"改签",
"绕行",
"多地",
"临时变更",
"客户拜访",
"项目现场"
],
"condition_summary": "票据城市未覆盖申报目的地,或路线出现常驻地/目的地以外城市且无合理说明。",
"message_template": "差旅票据城市与申报目的地不一致,请补充多地出差、改签或异地住宿说明。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "high",
"action": "block",
"risk_score": 90
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 90,
"risk_level": "high",
"rule_title": "差旅目的地与票据城市不一致高风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "高风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 90,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "high",
"risk_score": 90,
"risk_level": "high",
"template_key": "field_compare_v1",
"risk_level_label": "高风险",
"risk_score_detail": {
"score": 90,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,161 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.high.date_outside_trip",
"name": "票据日期超出差旅行程高风险",
"description": "票据日期、住宿日期或明细发生日期超出申报出差起止日期,允许 1 天交通衔接容差。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-日期一致性",
"ontology_signal": "travel_date_outside_trip_window",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.trip_start_date",
"label": "出差开始日期",
"type": "date",
"source": "claim"
},
{
"key": "claim.trip_end_date",
"label": "出差结束日期",
"type": "date",
"source": "claim"
},
{
"key": "item.item_date",
"label": "明细发生日期",
"type": "date",
"source": "item"
},
{
"key": "attachment.issue_date",
"label": "票据日期",
"type": "date",
"source": "attachment"
},
{
"key": "attachment.stay_start_date",
"label": "住宿开始日期",
"type": "date",
"source": "attachment"
},
{
"key": "attachment.stay_end_date",
"label": "住宿结束日期",
"type": "date",
"source": "attachment"
}
]
},
"params": {
"template_key": "composite_rule_v1",
"field_keys": [
"claim.trip_start_date",
"claim.trip_end_date",
"item.item_date",
"attachment.issue_date",
"attachment.stay_start_date",
"attachment.stay_end_date"
],
"conditions": [
{
"id": "ticket_date_outside_trip",
"operator": "date_outside_range",
"date_fields": [
"item.item_date",
"attachment.issue_date",
"attachment.stay_start_date",
"attachment.stay_end_date"
],
"range_start_fields": [
"claim.trip_start_date"
],
"range_end_fields": [
"claim.trip_end_date"
],
"tolerance_days": 1
}
],
"hit_logic": "ticket_date_outside_trip",
"condition_summary": "任一票据/明细日期早于出差开始日前 1 天或晚于结束日后 1 天。",
"message_template": "票据日期超出申报差旅行程,请补充改签/延期说明或更正行程日期。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "high",
"action": "block",
"risk_score": 88
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 88,
"risk_level": "high",
"rule_title": "票据日期超出差旅行程高风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "高风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 88,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "high",
"risk_score": 88,
"risk_level": "high",
"template_key": "composite_rule_v1",
"risk_level_label": "高风险",
"risk_score_detail": {
"score": 88,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,135 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.high.personal_purpose",
"name": "个人旅游或非公务目的高风险",
"description": "差旅申请或报销文本中出现旅游、探亲、休假、私人行程等非公务目的表达。",
"enabled": true,
"requires_attachment": false,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-真实性",
"ontology_signal": "travel_personal_purpose",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"field_keys": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"search_fields": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"keywords": [
"旅游",
"探亲",
"休假",
"度假",
"私人",
"个人行程",
"家属",
"亲友"
],
"condition_summary": "差旅事由或票据文本命中个人旅游/私人目的关键词。",
"message_template": "识别到个人旅游或非公务目的表达,请确认是否属于公司差旅范围。",
"template_key": "keyword_match_v1"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "high",
"action": "block",
"risk_score": 86
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 86,
"risk_level": "high",
"rule_title": "个人旅游或非公务目的高风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "高风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 86,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "high",
"risk_score": 86,
"risk_level": "high",
"template_key": "keyword_match_v1",
"risk_level_label": "高风险",
"risk_score_detail": {
"score": 86,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,135 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.high.preapproval_absent",
"name": "差旅未申请或事后补申请高风险",
"description": "申请或报销事由出现未申请、未审批、先报销后补申请等表达时,判定为差旅事前审批缺失风险。",
"enabled": true,
"requires_attachment": false,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-申请审批",
"ontology_signal": "travel_preapproval_absent",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"field_keys": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"search_fields": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"keywords": [
"未申请",
"无申请",
"未审批",
"未批准",
"先报销",
"事后申请",
"补申请",
"补报"
],
"condition_summary": "差旅申请/报销文本命中未申请、未审批或事后补申请关键词。",
"message_template": "识别到差旅未事前申请或事后补申请迹象,请补齐已审批的差旅申请后再提交。",
"template_key": "keyword_match_v1"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "high",
"action": "block",
"risk_score": 92
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 92,
"risk_level": "high",
"rule_title": "差旅未申请或事后补申请高风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "高风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 92,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "high",
"risk_score": 92,
"risk_level": "high",
"template_key": "keyword_match_v1",
"risk_level_label": "高风险",
"risk_score_detail": {
"score": 92,
"level": "high",
"level_label": "高风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,138 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.low.application_fields_missing",
"name": "差旅申请基础信息不完整低风险",
"description": "费用申请环节缺少差旅地点、事由、起止时间或预计金额等基础信息时,提示经办人补充。",
"enabled": true,
"requires_attachment": false,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-申请信息",
"ontology_signal": "travel_application_fields_missing",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "claim.location",
"label": "申报地点",
"type": "text",
"source": "claim"
},
{
"key": "claim.trip_start_date",
"label": "出差开始日期",
"type": "date",
"source": "claim"
},
{
"key": "claim.trip_end_date",
"label": "出差结束日期",
"type": "date",
"source": "claim"
},
{
"key": "claim.amount",
"label": "申报金额",
"type": "number",
"source": "claim"
}
]
},
"params": {
"field_keys": [
"claim.reason",
"claim.location",
"claim.trip_start_date",
"claim.trip_end_date",
"claim.amount"
],
"required_fields": [
"claim.reason",
"claim.location",
"claim.trip_start_date",
"claim.trip_end_date",
"claim.amount"
],
"condition_summary": "差旅申请缺少事由、地点、起止时间或预计金额。",
"message_template": "差旅申请基础信息不完整,请补充地点、事由、起止时间和预计金额。",
"template_key": "field_required_v1"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "low",
"action": "warning",
"risk_score": 42
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 42,
"risk_level": "low",
"rule_title": "差旅申请基础信息不完整低风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "低风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 42,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "low",
"risk_score": 42,
"risk_level": "low",
"template_key": "field_required_v1",
"risk_level_label": "低风险",
"risk_score_detail": {
"score": 42,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,109 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.low.attachment_ocr_missing",
"name": "差旅附件无法识别低风险",
"description": "差旅报销已上传附件但没有可读取的 OCR 文本或关键票据信息,提醒人工补录或重新上传。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-附件质量",
"ontology_signal": "travel_attachment_ocr_missing",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"field_keys": [
"attachment.ocr_text"
],
"required_fields": [
"attachment.ocr_text"
],
"condition_summary": "差旅附件缺少可读取 OCR 文本。",
"message_template": "差旅附件暂未识别到有效票据信息,请重新上传清晰附件或人工补录。",
"template_key": "field_required_v1"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "low",
"action": "warning",
"risk_score": 38
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 38,
"risk_level": "low",
"rule_title": "差旅附件无法识别低风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "低风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 38,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "low",
"risk_score": 38,
"risk_level": "low",
"template_key": "field_required_v1",
"risk_level_label": "低风险",
"risk_score_detail": {
"score": 38,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,161 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.low.local_transport_detail_missing",
"name": "市内交通路线说明不足低风险",
"description": "差旅行程中出现打车、网约车、出租车等市内交通表达,但未说明起点、终点或路线。",
"enabled": true,
"requires_attachment": false,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-市内交通",
"ontology_signal": "travel_local_transport_detail_missing",
"evaluator": "template_rule",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"template_key": "composite_rule_v1",
"field_keys": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"conditions": [
{
"id": "has_local_transport",
"operator": "contains_any",
"fields": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"keywords": [
"打车",
"出租车",
"网约车",
"滴滴",
"市内交通"
]
},
{
"id": "missing_route_detail",
"operator": "not_contains_any",
"fields": [
"claim.reason",
"item.item_reason",
"attachment.ocr_text"
],
"keywords": [
"起点",
"终点",
"路线",
"从",
"到",
"往返"
]
}
],
"hit_logic": {
"all": [
"has_local_transport",
"missing_route_detail"
]
},
"condition_summary": "存在市内交通关键词,但文本中缺少起点、终点或路线说明。",
"message_template": "市内交通路线说明不足,请补充起点、终点或业务地点。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "low",
"action": "warning",
"risk_score": 36
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 36,
"risk_level": "low",
"rule_title": "市内交通路线说明不足低风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "低风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 36,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "low",
"risk_score": 36,
"risk_level": "low",
"template_key": "composite_rule_v1",
"risk_level_label": "低风险",
"risk_score_detail": {
"score": 36,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,107 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.low.vague_ticket_content",
"name": "差旅票据服务内容笼统低风险",
"description": "票据商品或服务名称过于笼统,例如仅写服务费、其他、详见清单等,提醒补充明细。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-票据明细",
"ontology_signal": "travel_vague_ticket_content",
"evaluator": "vague_goods_description",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "attachment.goods_name",
"label": "商品或服务名称",
"type": "text",
"source": "attachment"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"condition_summary": "票据商品或服务名称过于笼统,无法直接对应差旅事项。",
"message_template": "差旅票据服务内容较笼统,请补充明细清单或业务说明。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "low",
"action": "warning",
"risk_score": 34
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 34,
"risk_level": "low",
"rule_title": "差旅票据服务内容笼统低风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "低风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 34,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "low",
"risk_score": 34,
"risk_level": "low",
"risk_level_label": "低风险",
"risk_score_detail": {
"score": 34,
"level": "low",
"level_label": "低风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,107 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.medium.duplicate_ticket",
"name": "差旅票据重复中风险",
"description": "同一张交通票、住宿票或发票号码在当前单据内重复,或与历史报销附件重复。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-票据重复",
"ontology_signal": "travel_duplicate_ticket",
"evaluator": "duplicate_invoice",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "attachment.invoice_no",
"label": "票据号码",
"type": "text",
"source": "attachment"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"condition_summary": "票据号码在当前单据或历史报销中重复出现。",
"message_template": "发现疑似重复票据,请核对是否已经报销或重复上传。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "medium",
"action": "manual_review",
"risk_score": 75
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 75,
"risk_level": "medium",
"rule_title": "差旅票据重复中风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "中风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 75,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "medium",
"risk_score": 75,
"risk_level": "medium",
"risk_level_label": "中风险",
"risk_score_detail": {
"score": 75,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,125 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.medium.multi_city_no_reason",
"name": "多城市行程缺少说明中风险",
"description": "票据或明细识别到多个城市,但申请/报销事由未说明中转、多地拜访、改签或绕行原因。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-行程说明",
"ontology_signal": "travel_multi_city_without_reason",
"evaluator": "multi_city_reason_required",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
},
{
"key": "item.item_location",
"label": "明细发生地点",
"type": "text",
"source": "item"
},
{
"key": "attachment.route_cities",
"label": "交通票行程城市",
"type": "list",
"source": "attachment"
},
{
"key": "attachment.hotel_city",
"label": "住宿城市",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"condition_summary": "差旅行程涉及 3 个及以上城市,且事由未包含中转、多地、改签、绕行等说明。",
"message_template": "识别到多城市差旅行程,请补充中转、多地拜访或改签原因。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "medium",
"action": "manual_review",
"risk_score": 72
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 72,
"risk_level": "medium",
"rule_title": "多城市行程缺少说明中风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "中风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 72,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "medium",
"risk_score": 72,
"risk_level": "medium",
"risk_level_label": "中风险",
"risk_score_detail": {
"score": 72,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,108 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.medium.reason_too_brief",
"name": "差旅事由过短中风险",
"description": "差旅申请或报销事由有效描述不足,无法支撑目的、客户/项目、行程必要性的判断。",
"enabled": true,
"requires_attachment": false,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-事由完整性",
"ontology_signal": "travel_reason_too_brief",
"evaluator": "reason_too_brief",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.reason",
"label": "报销/申请事由",
"type": "text",
"source": "claim"
},
{
"key": "item.item_reason",
"label": "明细说明",
"type": "text",
"source": "item"
}
]
},
"params": {
"min_reason_length": 10,
"condition_summary": "合并申请/报销事由后有效字符少于 10 个。",
"message_template": "差旅事由描述过短,请补充项目、客户、地点和出差目的。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "medium",
"action": "manual_review",
"risk_score": 68
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 68,
"risk_level": "medium",
"rule_title": "差旅事由过短中风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "中风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 68,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "medium",
"risk_score": 68,
"risk_level": "medium",
"risk_level_label": "中风险",
"risk_score_detail": {
"score": 68,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}

View File

@@ -0,0 +1,118 @@
{
"schema_version": "2.0",
"rule_code": "risk.travel.medium.title_mismatch",
"name": "差旅票据抬头不一致中风险",
"description": "票据抬头、乘车人或购买方与报销人不一致,且不属于公司抬头或允许例外。",
"enabled": true,
"requires_attachment": true,
"risk_dimension": "travel_reimbursement_control",
"risk_category": "差旅费-票据主体",
"ontology_signal": "travel_invoice_title_mismatch",
"evaluator": "identity_consistency",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"applies_to": {
"domains": [
"expense",
"travel"
],
"expense_types": [
"travel"
],
"business_stages": [
"expense_application",
"reimbursement"
]
},
"inputs": {
"fields": [
{
"key": "claim.employee_name",
"label": "申请/报销人",
"type": "text",
"source": "claim"
},
{
"key": "attachment.buyer_name",
"label": "票据抬头/购买方",
"type": "text",
"source": "attachment"
},
{
"key": "attachment.ocr_text",
"label": "票据 OCR 全文",
"type": "text",
"source": "attachment"
}
]
},
"params": {
"allow_keywords": [
"公司",
"远光",
"远光软件"
],
"condition_summary": "票据抬头/购买方不包含报销人姓名,也不包含公司抬头关键词。",
"message_template": "票据抬头或乘车人与报销人不一致,请补充代订、同行或公司抬头说明。"
},
"outcomes": {
"pass": {
"severity": "none",
"action": "continue"
},
"fail": {
"severity": "medium",
"action": "manual_review",
"risk_score": 64
}
},
"metadata": {
"owner": "admin",
"stability": "admin_configured",
"source_ref": "差旅费报销风险规则库 / admin 手工配置",
"created_at": "2026-05-26T07:06:27.746703+00:00",
"created_by": "admin",
"risk_score": 64,
"risk_level": "medium",
"rule_title": "差旅票据抬头不一致中风险",
"finance_rule_code": "rule.expense.company_travel_expense_reimbursement",
"finance_rule_sheet": "公司差旅费报销规则",
"business_stage": [
"expense_application",
"reimbursement"
],
"expense_types": [
"travel"
],
"implementation_note": "使用当前规则中心 JSON 风险规则执行器可识别的字段与模板配置。",
"risk_level_label": "中风险",
"risk_score_model": "risk_score_v3",
"risk_score_detail": {
"score": 64,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
},
"severity": "medium",
"risk_score": 64,
"risk_level": "medium",
"risk_level_label": "中风险",
"risk_score_detail": {
"score": 64,
"level": "medium",
"level_label": "中风险",
"model": "risk_score_v3",
"source": "admin_manual_travel_risk_catalog",
"reason": "按差旅费报销高/中/低风险分层手工设定。"
}
}