feat: 增强规则资产管理与审计页面运行时调试
后端新增规则资产版本管理和规则文件 CRUD 接口,优化风险 规则生成模板执行和员工数据模型字段,知识库 RAG 增强本 地回退和文档提取能力,清理旧风险规则文件统一由生成引擎 管理,前端审计页面增加运行时调试面板和规则资产编辑交互, 补充单元测试覆盖。
This commit is contained in:
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import threading
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import inspect, select, text
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.config import get_settings
|
||||
@@ -75,6 +75,7 @@ class AgentFoundationService(
|
||||
try:
|
||||
Base.metadata.create_all(bind=self.db.get_bind())
|
||||
self._ensure_agent_asset_schema()
|
||||
self._ensure_financial_record_schema()
|
||||
self._seed_agent_assets()
|
||||
self._sync_demo_financial_records()
|
||||
self._seed_runs_and_logs()
|
||||
@@ -88,6 +89,36 @@ class AgentFoundationService(
|
||||
bind = self.db.get_bind()
|
||||
return str(getattr(bind, "url", "") or id(bind))
|
||||
|
||||
def _ensure_financial_record_schema(self) -> None:
|
||||
bind = self.db.get_bind()
|
||||
inspector = inspect(bind)
|
||||
if "expense_claims" not in inspector.get_table_names():
|
||||
return
|
||||
|
||||
column_names = {column["name"] for column in inspector.get_columns("expense_claims")}
|
||||
dialect_name = bind.dialect.name
|
||||
timestamp_type = "TIMESTAMP WITH TIME ZONE" if dialect_name == "postgresql" else "DATETIME"
|
||||
boolean_default = "FALSE" if dialect_name == "postgresql" else "0"
|
||||
|
||||
if "hermes_scanned_at" not in column_names:
|
||||
self.db.execute(
|
||||
text(f"ALTER TABLE expense_claims ADD COLUMN hermes_scanned_at {timestamp_type}")
|
||||
)
|
||||
if "hermes_risk_flag" not in column_names:
|
||||
self.db.execute(
|
||||
text(
|
||||
"ALTER TABLE expense_claims "
|
||||
f"ADD COLUMN hermes_risk_flag BOOLEAN DEFAULT {boolean_default} NOT NULL"
|
||||
)
|
||||
)
|
||||
self.db.execute(
|
||||
text(
|
||||
"CREATE INDEX IF NOT EXISTS ix_expense_claims_hermes_risk_flag "
|
||||
"ON expense_claims (hermes_risk_flag)"
|
||||
)
|
||||
)
|
||||
self.db.flush()
|
||||
|
||||
def _sync_demo_financial_records(self) -> None:
|
||||
if get_settings().seed_demo_financial_records:
|
||||
self._seed_financial_records()
|
||||
|
||||
Reference in New Issue
Block a user