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

@@ -82,7 +82,9 @@ def _seed_budget_allocation(
db.flush()
def _seed_people(db: Session, *, suffix: str) -> tuple[OrganizationUnit, Employee, Employee, Employee]:
def _seed_people(
db: Session, *, suffix: str
) -> tuple[OrganizationUnit, Employee, Employee, Employee]:
budget_role = _seed_budget_monitor_role(db)
department = OrganizationUnit(
unit_code=f"ROUTE-{suffix}",
@@ -148,6 +150,7 @@ def test_low_risk_application_skips_budget_manager_and_generates_draft() -> None
approved = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -219,6 +222,7 @@ def test_budget_warning_application_still_skips_budget_manager_when_not_over_bud
approved = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -279,6 +283,7 @@ def test_application_routes_to_budget_manager_when_usage_reaches_90_percent() ->
routed = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -303,6 +308,7 @@ def test_application_routes_to_budget_manager_when_usage_reaches_90_percent() ->
ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=budget_manager.email,
name=budget_manager.name,
role_codes=["budget_monitor"],
@@ -355,6 +361,7 @@ def test_high_risk_application_under_90_percent_routes_to_budget_manager() -> No
approved = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -570,6 +577,7 @@ def test_application_route_ignores_reimbursement_stage_current_risks() -> None:
approved = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -633,6 +641,7 @@ def test_risky_reimbursement_routes_to_budget_then_finance() -> None:
routed = service.approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -656,6 +665,7 @@ def test_risky_reimbursement_routes_to_budget_then_finance() -> None:
budget_approved = service.approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=budget_manager.email,
name=budget_manager.name,
role_codes=["budget_monitor"],
@@ -722,6 +732,7 @@ def test_resolved_high_risk_application_does_not_route_to_budget_manager() -> No
routed = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=manager.email,
name=manager.name,
role_codes=["manager"],
@@ -769,6 +780,7 @@ def test_budget_manager_blank_opinion_defaults_to_agree_when_budget_under_warnin
approved = ExpenseClaimService(db).approve_claim(
claim.id,
CurrentUserContext(
tenant_id="default",
username=budget_manager.email,
name=budget_manager.name,
role_codes=["budget_monitor"],