2026-06-01 17:07:14 +08:00
|
|
|
{
|
|
|
|
|
"schema_version": "2.0",
|
|
|
|
|
"rule_code": "risk.application.large_expense_without_preapproval",
|
2026-06-06 17:19:07 +08:00
|
|
|
"name": "?????????",
|
|
|
|
|
"description": "???????? 2000 ?????????????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"enabled": true,
|
|
|
|
|
"requires_attachment": false,
|
|
|
|
|
"risk_dimension": "expense_control_demo",
|
2026-06-06 17:19:07 +08:00
|
|
|
"risk_category": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"ontology_signal": "application_required",
|
|
|
|
|
"evaluator": "template_rule",
|
2026-06-06 17:19:07 +08:00
|
|
|
"template_key": "composite_rule_v1",
|
|
|
|
|
"finance_rule_code": "expense.preapproval.policy",
|
|
|
|
|
"finance_rule_sheet": "????????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"business_stage": [
|
|
|
|
|
"reimbursement"
|
|
|
|
|
],
|
|
|
|
|
"expense_types": [
|
|
|
|
|
"all"
|
|
|
|
|
],
|
|
|
|
|
"budget_required": true,
|
|
|
|
|
"applies_to": {
|
|
|
|
|
"domains": [
|
|
|
|
|
"expense"
|
|
|
|
|
],
|
|
|
|
|
"expense_types": [
|
|
|
|
|
"all"
|
|
|
|
|
],
|
|
|
|
|
"business_stages": [
|
|
|
|
|
"reimbursement"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"inputs": {
|
|
|
|
|
"fields": [
|
|
|
|
|
{
|
|
|
|
|
"key": "claim.amount",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "number",
|
|
|
|
|
"source": "claim"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "claim.expense_type",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "enum",
|
|
|
|
|
"source": "claim"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "claim.department_name",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "??",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "text",
|
|
|
|
|
"source": "claim"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "claim.reason",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "??",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "text",
|
|
|
|
|
"source": "claim"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "item.item_reason",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "text",
|
|
|
|
|
"source": "item"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.id",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "???ID",
|
|
|
|
|
"type": "text",
|
|
|
|
|
"source": "application"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.claim_no",
|
|
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "text",
|
|
|
|
|
"source": "application"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.status",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "enum",
|
|
|
|
|
"source": "application"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.approved_amount",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "??????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "number",
|
|
|
|
|
"source": "application"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.expense_type",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "??????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "enum",
|
|
|
|
|
"source": "application"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"key": "application.department_name",
|
2026-06-06 17:19:07 +08:00
|
|
|
"label": "????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"type": "text",
|
|
|
|
|
"source": "application"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"params": {
|
2026-06-06 17:19:07 +08:00
|
|
|
"template_key": "composite_rule_v1",
|
|
|
|
|
"semantic_type": "preapproval_required_amount_threshold",
|
2026-06-01 17:07:14 +08:00
|
|
|
"field_keys": [
|
|
|
|
|
"claim.amount",
|
|
|
|
|
"claim.expense_type",
|
|
|
|
|
"claim.department_name",
|
|
|
|
|
"claim.reason",
|
|
|
|
|
"item.item_reason",
|
|
|
|
|
"application.id",
|
2026-06-06 17:19:07 +08:00
|
|
|
"application.claim_no",
|
2026-06-01 17:07:14 +08:00
|
|
|
"application.status",
|
|
|
|
|
"application.approved_amount",
|
|
|
|
|
"application.expense_type",
|
|
|
|
|
"application.department_name"
|
|
|
|
|
],
|
2026-06-06 17:19:07 +08:00
|
|
|
"conditions": [
|
|
|
|
|
{
|
|
|
|
|
"id": "amount_exceeds_preapproval_threshold",
|
|
|
|
|
"operator": "numeric_compare",
|
|
|
|
|
"left_fields": [
|
|
|
|
|
"claim.amount"
|
|
|
|
|
],
|
|
|
|
|
"threshold": 2000,
|
|
|
|
|
"compare": "gt"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "application_present",
|
|
|
|
|
"operator": "exists_any",
|
|
|
|
|
"fields": [
|
|
|
|
|
"application.id",
|
|
|
|
|
"application.claim_no"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "not_specific_preapproval_type",
|
|
|
|
|
"operator": "not_contains_any",
|
|
|
|
|
"fields": [
|
|
|
|
|
"claim.expense_type"
|
|
|
|
|
],
|
|
|
|
|
"keywords": [
|
|
|
|
|
"meal",
|
|
|
|
|
"entertainment",
|
|
|
|
|
"office",
|
|
|
|
|
"????",
|
|
|
|
|
"??",
|
|
|
|
|
"????",
|
|
|
|
|
"??"
|
|
|
|
|
]
|
|
|
|
|
}
|
2026-06-01 17:07:14 +08:00
|
|
|
],
|
2026-06-06 17:19:07 +08:00
|
|
|
"hit_logic": {
|
|
|
|
|
"all": [
|
|
|
|
|
"amount_exceeds_preapproval_threshold",
|
|
|
|
|
{
|
|
|
|
|
"not": "application_present"
|
|
|
|
|
},
|
|
|
|
|
"not_specific_preapproval_type"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"formula": "amount > threshold AND NOT hasApplication",
|
|
|
|
|
"condition_summary": "?????????????????? 2000 ????????????????",
|
|
|
|
|
"message_template": "?????? 2000 ?????????????????????????",
|
|
|
|
|
"finance_rule_code": "expense.preapproval.policy",
|
|
|
|
|
"finance_rule_sheet": "????????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"business_stage": [
|
|
|
|
|
"reimbursement"
|
|
|
|
|
],
|
|
|
|
|
"expense_types": [
|
|
|
|
|
"all"
|
|
|
|
|
],
|
2026-06-06 17:19:07 +08:00
|
|
|
"budget_required": true,
|
|
|
|
|
"threshold_amount": 2000,
|
|
|
|
|
"rule_ir": {
|
|
|
|
|
"facts": [
|
|
|
|
|
{
|
|
|
|
|
"id": "A",
|
|
|
|
|
"label": "????",
|
|
|
|
|
"fields": [
|
|
|
|
|
"claim.amount"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "B",
|
|
|
|
|
"label": "???",
|
|
|
|
|
"fields": [
|
|
|
|
|
"application.id",
|
|
|
|
|
"application.claim_no"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"hit_logic": "A > threshold AND NOT EXISTS(B)"
|
|
|
|
|
}
|
2026-06-01 17:07:14 +08:00
|
|
|
},
|
|
|
|
|
"outcomes": {
|
|
|
|
|
"pass": {
|
|
|
|
|
"severity": "none",
|
|
|
|
|
"action": "continue"
|
|
|
|
|
},
|
|
|
|
|
"fail": {
|
|
|
|
|
"severity": "high",
|
|
|
|
|
"action": "manual_review",
|
|
|
|
|
"risk_score": 86
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"metadata": {
|
2026-06-06 17:19:07 +08:00
|
|
|
"owner": "??????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"stability": "platform",
|
2026-06-06 17:19:07 +08:00
|
|
|
"source_ref": "??????????",
|
|
|
|
|
"created_at": "2026-06-05T00:00:00+08:00",
|
2026-06-01 17:07:14 +08:00
|
|
|
"created_by": "system",
|
|
|
|
|
"risk_score": 86,
|
|
|
|
|
"risk_level": "high",
|
2026-06-06 17:19:07 +08:00
|
|
|
"rule_title": "?????????",
|
|
|
|
|
"finance_rule_code": "expense.preapproval.policy",
|
|
|
|
|
"finance_rule_sheet": "????????",
|
2026-06-01 17:07:14 +08:00
|
|
|
"business_stage": [
|
|
|
|
|
"reimbursement"
|
|
|
|
|
],
|
|
|
|
|
"expense_types": [
|
|
|
|
|
"all"
|
|
|
|
|
],
|
|
|
|
|
"budget_required": true
|
|
|
|
|
},
|
|
|
|
|
"severity": "high",
|
|
|
|
|
"risk_score": 86,
|
|
|
|
|
"risk_level": "high"
|
|
|
|
|
}
|