171 lines
14 KiB
JSON
171 lines
14 KiB
JSON
|
|
{
|
|||
|
|
"schema_version": "2.0",
|
|||
|
|
"rule_code": "risk.expense.travel.generated_20260526071633392020",
|
|||
|
|
"name": "222",
|
|||
|
|
"description": "当差旅费业务满足“差旅报销时,先检查是否已上传交通票据、住宿票据或其他能识别城市的附件;再读取申报目的地、明细发生地点、交通票行程城市和住宿发票城市。若交通票或住宿票据中的城市均无法与申报目的地、明细地点形成一致关系,且报销事由中没有说明绕行、跨城办事或临时改签原因,则标记为高风险,要求补充行程说明或退回修改。”时,系统会按中风险进行提示,并要求经办人或审核人补充核对依据。",
|
|||
|
|
"enabled": true,
|
|||
|
|
"requires_attachment": false,
|
|||
|
|
"risk_dimension": "natural_language_rule",
|
|||
|
|
"risk_category": "差旅费",
|
|||
|
|
"ontology_signal": "natural_language_risk",
|
|||
|
|
"evaluator": "template_rule",
|
|||
|
|
"template_key": "field_compare_v1",
|
|||
|
|
"semantic_type": "travel_route_city_consistency",
|
|||
|
|
"applies_to": {
|
|||
|
|
"domains": [
|
|||
|
|
"expense"
|
|||
|
|
],
|
|||
|
|
"expense_categories": [
|
|||
|
|
"travel"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"inputs": {
|
|||
|
|
"fields": [
|
|||
|
|
{
|
|||
|
|
"key": "attachment.route_cities",
|
|||
|
|
"label": "行程城市",
|
|||
|
|
"type": "list",
|
|||
|
|
"source": "attachment"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"key": "attachment.hotel_city",
|
|||
|
|
"label": "住宿城市",
|
|||
|
|
"type": "text",
|
|||
|
|
"source": "attachment"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"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": "claim.reason",
|
|||
|
|
"label": "报销事由",
|
|||
|
|
"type": "text",
|
|||
|
|
"source": "claim"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"key": "item.item_reason",
|
|||
|
|
"label": "明细事由",
|
|||
|
|
"type": "text",
|
|||
|
|
"source": "item"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"params": {
|
|||
|
|
"template_key": "field_compare_v1",
|
|||
|
|
"field_keys": [
|
|||
|
|
"attachment.route_cities",
|
|||
|
|
"attachment.hotel_city",
|
|||
|
|
"claim.location",
|
|||
|
|
"item.item_location",
|
|||
|
|
"employee.location",
|
|||
|
|
"claim.reason",
|
|||
|
|
"item.item_reason"
|
|||
|
|
],
|
|||
|
|
"condition_summary": "判断公式:A=交通票行程城市∪住宿发票城市,B=申报目的地∪明细发生地点,C=员工常驻地/合理出发地。若A或B为空则要求补充识别;若A与B无交集且无合理说明,或票据路线中存在不属于B∪C的额外城市,则命中目的地不一致/中途周转异常风险。",
|
|||
|
|
"natural_language": "差旅报销时,先检查是否已上传交通票据、住宿票据或其他能识别城市的附件;再读取申报目的地、明细发生地点、交通票行程城市和住宿发票城市。若交通票或住宿票据中的城市均无法与申报目的地、明细地点形成一致关系,且报销事由中没有说明绕行、跨城办事或临时改签原因,则标记为高风险,要求补充行程说明或退回修改。",
|
|||
|
|
"semantic_type": "travel_route_city_consistency",
|
|||
|
|
"attachment_city_fields": [
|
|||
|
|
"attachment.route_cities",
|
|||
|
|
"attachment.hotel_city"
|
|||
|
|
],
|
|||
|
|
"reference_city_fields": [
|
|||
|
|
"claim.location",
|
|||
|
|
"item.item_location"
|
|||
|
|
],
|
|||
|
|
"home_city_fields": [
|
|||
|
|
"employee.location"
|
|||
|
|
],
|
|||
|
|
"exception_fields": [
|
|||
|
|
"claim.reason",
|
|||
|
|
"item.item_reason"
|
|||
|
|
],
|
|||
|
|
"exception_keywords": [
|
|||
|
|
"绕行",
|
|||
|
|
"跨城办事",
|
|||
|
|
"跨城",
|
|||
|
|
"临时改签",
|
|||
|
|
"改签",
|
|||
|
|
"变更"
|
|||
|
|
],
|
|||
|
|
"keywords": [],
|
|||
|
|
"route_anomaly_policy": "flag_unexpected_intermediate_cities",
|
|||
|
|
"exception_handling": "exception_text_is_evidence_not_auto_pass_for_route_anomaly",
|
|||
|
|
"formula": "A=UNION(attachment.route_cities, attachment.hotel_city); B=UNION(claim.location, item.item_location); C=UNION(employee.location); HIT WHEN (A∩B=∅ AND NOT CONTAINS_ANY(exception_fields, exception_keywords)) OR EXISTS(city IN A WHERE city NOT IN B∪C)",
|
|||
|
|
"conditions": [
|
|||
|
|
{
|
|||
|
|
"left_group": [
|
|||
|
|
"attachment.route_cities",
|
|||
|
|
"attachment.hotel_city"
|
|||
|
|
],
|
|||
|
|
"operator": "route_city_consistency",
|
|||
|
|
"right_group": [
|
|||
|
|
"claim.location",
|
|||
|
|
"item.item_location"
|
|||
|
|
],
|
|||
|
|
"home_group": [
|
|||
|
|
"employee.location"
|
|||
|
|
],
|
|||
|
|
"exception_fields": [
|
|||
|
|
"claim.reason",
|
|||
|
|
"item.item_reason"
|
|||
|
|
],
|
|||
|
|
"exception_keywords": [
|
|||
|
|
"绕行",
|
|||
|
|
"跨城办事",
|
|||
|
|
"跨城",
|
|||
|
|
"临时改签",
|
|||
|
|
"改签",
|
|||
|
|
"变更"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"outcomes": {
|
|||
|
|
"pass": {
|
|||
|
|
"severity": "none",
|
|||
|
|
"action": "continue"
|
|||
|
|
},
|
|||
|
|
"fail": {
|
|||
|
|
"severity": "medium",
|
|||
|
|
"action": "manual_review"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"metadata": {
|
|||
|
|
"owner": "admin",
|
|||
|
|
"stability": "generated_draft",
|
|||
|
|
"source_ref": "自然语言风险规则",
|
|||
|
|
"created_at": "2026-05-26T07:16:33.392020+08:00",
|
|||
|
|
"created_by": "admin",
|
|||
|
|
"requires_attachment": false,
|
|||
|
|
"rule_title": "222",
|
|||
|
|
"expense_category": "travel",
|
|||
|
|
"expense_category_label": "差旅费",
|
|||
|
|
"natural_language": "差旅报销时,先检查是否已上传交通票据、住宿票据或其他能识别城市的附件;再读取申报目的地、明细发生地点、交通票行程城市和住宿发票城市。若交通票或住宿票据中的城市均无法与申报目的地、明细地点形成一致关系,且报销事由中没有说明绕行、跨城办事或临时改签原因,则标记为高风险,要求补充行程说明或退回修改。",
|
|||
|
|
"business_explanation": "当差旅费业务满足“差旅报销时,先检查是否已上传交通票据、住宿票据或其他能识别城市的附件;再读取申报目的地、明细发生地点、交通票行程城市和住宿发票城市。若交通票或住宿票据中的城市均无法与申报目的地、明细地点形成一致关系,且报销事由中没有说明绕行、跨城办事或临时改签原因,则标记为高风险,要求补充行程说明或退回修改。”时,系统会按中风险进行提示,并要求经办人或审核人补充核对依据。",
|
|||
|
|
"condition_summary": "判断公式:A=交通票行程城市∪住宿发票城市,B=申报目的地∪明细发生地点,C=员工常驻地/合理出发地。若A或B为空则要求补充识别;若A与B无交集且无合理说明,或票据路线中存在不属于B∪C的额外城市,则命中目的地不一致/中途周转异常风险。",
|
|||
|
|
"flow": {
|
|||
|
|
"start": "差旅报销单据提交,并上传交通票据、住宿票据或其他可识别城市的附件",
|
|||
|
|
"evidence": "读取员工常驻地、申报目的地、明细发生地点、交通票行程城市、住宿发票城市和报销事由",
|
|||
|
|
"decision": "附件城市是否覆盖申报行程,且票据路线是否出现申报目的地和常驻地之外的中转城市",
|
|||
|
|
"pass": "票据城市覆盖申报行程,且未出现申报目的地和常驻地之外的额外城市",
|
|||
|
|
"fail": "票据路线存在目的地不一致或额外中转城市,命中中风险并要求补充说明或退回修改"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"flow_diagram_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"760\" height=\"280\" viewBox=\"0 0 760 280\" data-risk-flow-style=\"review-node-only\" role=\"img\" aria-labelledby=\"risk-flow-title risk-flow-desc\">\n <title id=\"risk-flow-title\">222流程说明</title>\n <desc id=\"risk-flow-desc\">风险规则只读流程图,展示从业务单据提交到风险复核的判断路径。</desc>\n <defs>\n <marker id=\"arrow-neutral\" markerWidth=\"10\" markerHeight=\"7\" refX=\"9\" refY=\"3.5\" orient=\"auto\">\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"#cbd5e1\"/>\n </marker>\n </defs>\n <rect width=\"760\" height=\"280\" fill=\"#ffffff\"/>\n <rect x=\"18\" y=\"18\" width=\"724\" height=\"244\" rx=\"8\" ry=\"8\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"1\" stroke-dasharray=\"4,3\"/>\n <text x=\"34\" y=\"43\" fill=\"#6e6e80\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"11\" font-weight=\"500\">RULE FLOW</text>\n <g>\n <rect x=\"48\" y=\"118\" width=\"124\" height=\"60\" rx=\"7\" ry=\"7\" fill=\"#ffffff\" stroke=\"#e2e8f0\" stroke-width=\"1.2\"/>\n <rect x=\"48\" y=\"118\" width=\"3.5\" height=\"60\" rx=\"1.75\" ry=\"1.75\" fill=\"#cbd5e1\"/>\n <text x=\"110\" y=\"142\" text-anchor=\"middle\" fill=\"#0d0d0d\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"13\" font-weight=\"600\">业务输入</text>\n <text x=\"110\" y=\"161\" text-anchor=\"middle\" fill=\"#6e6e80\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"11\" font-weight=\"400\">差旅报销单据提交,…</text>\n </g>\n <g>\n <rect x=\"214\" y=\"118\" width=\"132\" height=\"60\" rx=\"7\" ry=\"7\" fill=\"#ffffff\" stroke=\"#e2e8f0\" stroke-width=\"1.2\"/>\n <rect x=\"214\" y=\"118\" width=\"3.5\" height=\"60\" rx=\"1.75\" ry=\"1.75\" fill=\"#cbd5e1\"/>\n <text x=\"280\" y=\"142\" text-anchor=\"middle\" fill=\"#0d0d0d\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"13\" font-weight=\"600\">字段取数</text>\n <text x=\"280\" y=\"161\" text-anchor=\"middle\" fill=\"#6e6e80\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"11\" font-weight=\"400\">读取字段证据</text>\n </g>\n <g>\n <polygon points=\"448.0,92 504,148.0 448.0,204 392,148.0\" fill=\"#ffffff\" stroke=\"#e2e8f0\" stroke-width=\"1.25\"/>\n <text x=\"448\" y=\"138\" text-anchor=\"middle\" fill=\"#0d0d0d\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"12.5\" font-weight=\"600\">判断依据</text>\n <text x=\"448\" y=\"159\" text-anchor=\"middle\" fill=\"#6e6e80\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"10.2\" font-weight=\"400\">附件城市是否覆盖</text>\n <text x=\"448\" y=\"174\" text-anchor=\"middle\" fill=\"#6e6e80\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica Neue, 'PingFang SC', 'Microsoft YaHei', 'Microsoft JhengHei', 'SimHei', sans-serif\" font-size=\"10.2\" font-weight=\"400\">申报行程,且票…</text>\n </g>\n <g>\n <rect x=\"562\" y=\"74\" width=\"126\" height=\"60\" rx=\"7\" ry=\"7\" fill=\"#ffffff\" stroke=\"#e2e8f0\" stroke-width=\"1.2\"/>\n <rect x=\"562\" y=\"74\" width=\"3.5\" height=\"60\" rx=\"1.75\" ry=\"1.75\" fill=\"#cbd5e1\"/>\n <text x=\"6
|
|||
|
|
}
|