feat(platform): close AI expense value loop

Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
This commit is contained in:
caoxiaozhu
2026-07-17 14:14:08 +08:00
parent 242d68c36f
commit 787bc3a481
507 changed files with 82072 additions and 6344 deletions

View File

@@ -421,6 +421,8 @@ def test_hermes_global_scan_builds_graphs_inside_each_tenant(
_claim_orm("claim-tenant-a", "BX-TENANT-A"),
_claim_orm("claim-tenant-b", "BX-TENANT-B"),
]
claims[0].tenant_id = "tenant-a"
claims[1].tenant_id = "tenant-b"
cases = [
ExpenseCase(
id=f"case-tenant-{suffix}",
@@ -459,21 +461,27 @@ def test_hermes_global_scan_builds_graphs_inside_each_tenant(
return []
scanner = HermesRiskScannerService(db)
monkeypatch.setattr(scanner, "_fetch_unscanned_claims", lambda: claims)
monkeypatch.setattr(
scanner,
"_fetch_unscanned_claims",
lambda *, tenant_id: [claim for claim in claims if claim.tenant_id == tenant_id],
)
monkeypatch.setattr(
"app.services.hermes_risk_scanner.evaluate_financial_risk_graph",
fake_evaluate,
)
monkeypatch.setattr(RiskObservationService, "build_history_stats", fake_history)
summary = scanner.scan_global_risks()
summary_a = scanner.scan_global_risks(tenant_id="tenant-a")
summary_b = scanner.scan_global_risks(tenant_id="tenant-b")
assert evaluated_claim_sets == [
{"claim-tenant-a"},
{"claim-tenant-b"},
]
assert history_tenants == ["tenant-a", "tenant-b"]
assert summary["scanned_claim_count"] == 2
assert summary_a["scanned_claim_count"] == 1
assert summary_b["scanned_claim_count"] == 1
def test_risk_scan_discards_snapshot_after_claim_changes_during_evaluation(
@@ -493,7 +501,11 @@ def test_risk_scan_discards_snapshot_after_claim_changes_during_evaluation(
return SimpleNamespace(observations=[], nodes=[], edges=[])
scanner = HermesRiskScannerService(db)
monkeypatch.setattr(scanner, "_fetch_unscanned_claims", lambda: [claim])
monkeypatch.setattr(
scanner,
"_fetch_unscanned_claims",
lambda *, tenant_id: [claim] if claim.tenant_id == tenant_id else [],
)
monkeypatch.setattr(
"app.services.hermes_risk_scanner.evaluate_financial_risk_graph",
fake_evaluate,