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

View File

@@ -519,6 +519,8 @@ class RiskRuleTemplateExecutor:
)
if normalized.startswith("attachment."):
return self._resolve_attachment_values(normalized.removeprefix("attachment."), contexts)
if normalized.startswith("budget."):
return self._resolve_budget_values(normalized.removeprefix("budget."), contexts)
return []
@staticmethod
@@ -566,6 +568,19 @@ class RiskRuleTemplateExecutor:
values.extend(self._scan_document_values(document_info, field_key))
return self._normalize_values(values)
def _resolve_budget_values(self, field_key: str, contexts: list[dict[str, Any]]) -> list[str]:
values: list[Any] = []
for context in contexts:
if not isinstance(context, dict):
continue
budget_context = context.get("budget_context")
if not isinstance(budget_context, dict):
continue
for key in {field_key, field_key.replace("_", ""), field_key.replace("-", "_")}:
if key in budget_context:
values.append(budget_context.get(key))
return self._normalize_values(values)
def _scan_document_values(self, document_info: dict[str, Any], field_key: str) -> list[Any]:
values: list[Any] = []
for key in {field_key, field_key.replace("_", ""), field_key.replace("_", "-")}: