feat: 新增风险图谱算法与系统仪表盘及操作反馈体系

后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL
校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计,
优化 agent 运行和编排执行链路,清理旧开发文档,前端新增
系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈
对话框和工作台日期选择器,优化报销创建和审批详情交互,
补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-30 15:46:51 +08:00
parent 4c59941ec6
commit 7989f3a159
314 changed files with 30073 additions and 20626 deletions

View File

@@ -29,6 +29,9 @@ from app.services.agent_foundation_constants import (
COMPANY_TRAVEL_RULE_SCENARIO_JSON,
COMPANY_TRAVEL_RULE_VERSION,
DIGITAL_EMPLOYEE_FINANCE_POLICY_TASK_CODE,
DIGITAL_EMPLOYEE_PROFILE_SCAN_TASK_CODE,
DIGITAL_EMPLOYEE_RISK_GRAPH_SCAN_TASK_CODE,
DIGITAL_EMPLOYEE_RULE_DISCOVERY_TASK_CODE,
DIGITAL_EMPLOYEE_SKILL_CATEGORIES,
DIGITAL_EMPLOYEE_TASK_CATEGORY_MAP,
)
@@ -48,19 +51,27 @@ class AgentFoundationAssetSeedMixin:
"skill_category_options": list(DIGITAL_EMPLOYEE_SKILL_CATEGORIES),
}
def _finance_policy_knowledge_skill_markdown(self) -> str:
def _read_domain_skill_markdown(
self,
skill_name: str,
fallback_lines: list[str],
) -> str:
skill_path = (
SERVER_DIR
/ "src"
/ "app"
/ "skills"
/ "domain"
/ "finance-policy-knowledge-organizer"
/ skill_name
/ "SKILL.md"
)
if skill_path.exists():
return skill_path.read_text(encoding="utf-8").strip()
return "\n".join(
return "\n".join(fallback_lines)
def _finance_policy_knowledge_skill_markdown(self) -> str:
return self._read_domain_skill_markdown(
"finance-policy-knowledge-organizer",
[
"---",
"name: finance-policy-knowledge-organizer",
@@ -72,7 +83,58 @@ class AgentFoundationAssetSeedMixin:
"## 功能说明",
"",
"整理公司财务制度、报销口径、审批要求和知识库资料,输出可复核的结构化知识。",
]
],
)
def _financial_risk_graph_scan_skill_markdown(self) -> str:
return self._read_domain_skill_markdown(
"financial-risk-graph-scanner",
[
"---",
"name: financial-risk-graph-scanner",
"description: 用于巡检财务风险图谱,生成风险观察和可复核证据链。",
"---",
"",
"# 财务风险图谱巡检",
"",
"## 功能说明",
"",
"扫描新增报销单、票据、审批链、员工画像和规则命中结果,输出统一风险观察。",
],
)
def _employee_behavior_profile_scan_skill_markdown(self) -> str:
return self._read_domain_skill_markdown(
"employee-behavior-profile-scanner",
[
"---",
"name: employee-behavior-profile-scanner",
"description: 用于更新员工行为画像,沉淀费用、流程质量和协作治理基线。",
"---",
"",
"# 员工行为画像巡检",
"",
"## 功能说明",
"",
"汇总员工费用、审批、材料完整性和智能协作数据,生成可解释的画像快照。",
],
)
def _risk_rule_discovery_skill_markdown(self) -> str:
return self._read_domain_skill_markdown(
"risk-rule-discovery",
[
"---",
"name: risk-rule-discovery",
"description: 用于根据风险观察反馈生成候选规则,不直接上线。",
"---",
"",
"# 风险规则候选发现",
"",
"## 功能说明",
"",
"从风险观察、人工反馈和误报复盘中生成带证据、来源和置信度的候选规则。",
],
)
def _digital_employee_task_content(
@@ -311,6 +373,67 @@ class AgentFoundationAssetSeedMixin:
},
)
risk_graph_scan_task = AgentAsset(
asset_type=AgentAssetType.TASK.value,
code=DIGITAL_EMPLOYEE_RISK_GRAPH_SCAN_TASK_CODE,
name="财务风险图谱巡检",
description="按计划扫描报销单、票据、审批链、员工画像和规则命中结果,生成风险观察与可复核证据链。",
domain=AgentAssetDomain.SYSTEM.value,
scenario_json=["schedule", "expense", "risk_graph", "risk_observation"],
owner="风控与审计部",
reviewer="顾承宇",
status=AgentAssetStatus.ACTIVE.value,
current_version="v1.0.0",
published_version="v1.0.0",
working_version="v1.0.0",
config_json={
**self._digital_employee_task_config(
DIGITAL_EMPLOYEE_RISK_GRAPH_SCAN_TASK_CODE,
"0 9 * * *",
),
"skill_name": "financial-risk-graph-scanner",
"scan_scope": [
"expense_claims",
"invoices",
"approval_chain",
"employee_profiles",
"risk_rules",
],
"output_format": "risk_observation_report",
"writes_risk_observations": True,
},
)
employee_profile_scan_task = AgentAsset(
asset_type=AgentAssetType.TASK.value,
code=DIGITAL_EMPLOYEE_PROFILE_SCAN_TASK_CODE,
name="员工行为画像巡检",
description="按计划更新员工费用行为、材料完整性、审批效率和智能协作画像,为风险图谱提供画像基线。",
domain=AgentAssetDomain.SYSTEM.value,
scenario_json=["schedule", "employee_profile", "baseline", "risk_graph"],
owner="风控与审计部",
reviewer="顾承宇",
status=AgentAssetStatus.ACTIVE.value,
current_version="v1.0.0",
published_version="v1.0.0",
working_version="v1.0.0",
config_json={
**self._digital_employee_task_config(
DIGITAL_EMPLOYEE_PROFILE_SCAN_TASK_CODE,
"30 8 * * 1",
),
"skill_name": "employee-behavior-profile-scanner",
"profile_dimensions": [
"expense_intensity",
"material_completeness",
"approval_efficiency",
"ai_collaboration",
],
"output_format": "employee_behavior_profile_snapshot",
"writes_profile_snapshots": True,
},
)
self.db.add_all(
[
attachment_rule,
@@ -324,6 +447,8 @@ class AgentFoundationAssetSeedMixin:
invoice_mcp_asset,
ledger_mcp_asset,
finance_policy_knowledge_task,
risk_graph_scan_task,
employee_profile_scan_task,
]
)
@@ -490,6 +615,22 @@ class AgentFoundationAssetSeedMixin:
change_note="初始化整理公司财务知识制度能力。",
created_by="系统初始化",
),
AgentAssetVersion(
asset=risk_graph_scan_task,
version="v1.0.0",
content=self._financial_risk_graph_scan_skill_markdown(),
content_type=AgentAssetContentType.MARKDOWN.value,
change_note="初始化财务风险图谱巡检能力。",
created_by="系统初始化",
),
AgentAssetVersion(
asset=employee_profile_scan_task,
version="v1.0.0",
content=self._employee_behavior_profile_scan_skill_markdown(),
content_type=AgentAssetContentType.MARKDOWN.value,
change_note="初始化员工行为画像巡检能力。",
created_by="系统初始化",
),
]
)