feat: 新增预算后端服务与差旅风险规则库
后端新增预算模型、端点和服务模块,支持预算 CRUD 和余额 查询,清理旧生成规则文件并替换为按严重等级分类的差旅风 险规则库,优化认证权限和报销单访问策略,新增财务规则目 录和演示数据构建脚本,前端预算中心增加对话框交互,完善 审计页面运行时模型和元数据展示,补充单元测试。
This commit is contained in:
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
173
server/rules/risk-rules/risk.travel.high.city_mismatch.json
Normal file
173
server/rules/risk-rules/risk.travel.high.city_mismatch.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
161
server/rules/risk-rules/risk.travel.high.date_outside_trip.json
Normal file
161
server/rules/risk-rules/risk.travel.high.date_outside_trip.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
135
server/rules/risk-rules/risk.travel.high.personal_purpose.json
Normal file
135
server/rules/risk-rules/risk.travel.high.personal_purpose.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
135
server/rules/risk-rules/risk.travel.high.preapproval_absent.json
Normal file
135
server/rules/risk-rules/risk.travel.high.preapproval_absent.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
@@ -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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
@@ -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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
@@ -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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
@@ -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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
107
server/rules/risk-rules/risk.travel.medium.duplicate_ticket.json
Normal file
107
server/rules/risk-rules/risk.travel.medium.duplicate_ticket.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
@@ -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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
108
server/rules/risk-rules/risk.travel.medium.reason_too_brief.json
Normal file
108
server/rules/risk-rules/risk.travel.medium.reason_too_brief.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
118
server/rules/risk-rules/risk.travel.medium.title_mismatch.json
Normal file
118
server/rules/risk-rules/risk.travel.medium.title_mismatch.json
Normal 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": "按差旅费报销高/中/低风险分层手工设定。"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user